78 Commits

Author SHA1 Message Date
b5a297e10c Şifremi sıfırla sayfası 2025-10-06 11:09:28 +03:00
5d49f96c98 router yekili olduğu kurum link 2025-10-03 16:48:47 +03:00
3355085a1d - Dosya Kapama ikramiye ekleme validasyon hatası
- Piyango bilgi yükleniyor uyarısı
- Piyango bilgileri üye kontrol butonu
2025-10-03 16:47:54 +03:00
095f877224 - Piyango bilgilerine yükleniyor uyarısı
- Muhasebeleştir buton hatası
2025-10-03 13:56:44 +03:00
2b3b09c88b signalr 2025-10-03 10:00:04 +03:00
0e3c6e658f listelere ve tablar ileri-geri gidildiğinde kaldığı yere dönüyor. 2025-10-02 21:18:49 +03:00
cab06c51a2 Yardım amaçlı piyangolar için ikramiye teslim tarihi min hatası 2025-10-02 12:52:29 +03:00
5e83a11ecc - breadcrum geri butonu için manuel atamalar eklendi
- Tablar için route linklemesi eklendi
- piyango detay tabları için routelar düzenlendi
2025-10-02 12:43:05 +03:00
07c73d39db - localdev run ile çalıştırma hatası
- Dosya kapama ikramiye seçim listesi hatası
2025-10-02 11:15:36 +03:00
6e2f77f576 - izin bedeli toplam bedel toplam düzenleme
- Onay Durumları edit özelliği eklendi
2025-10-01 10:44:34 +03:00
060cfab843 - Dosya kapama her zaman post ile gönderme sorunu
- Piyango bilgileri formuna izin tarihi, izin sayısı eklendi
2025-09-29 14:38:04 +03:00
8cae0be757 Merge remote-tracking branch 'origin/main' 2025-09-27 05:36:08 +03:00
4024d539d7 excel pdf 2025-09-27 05:35:13 +03:00
1ba8b9b269 - muhasebeleştir Başvuru bedeli kdv hesaplama
- Muhasebe bilgileri izin bedeli popup izinsayisi, izin tarihi alanları eklendi
2025-09-26 18:09:48 +03:00
da432261ba - Piyango önizleme tarih o günün tarihi olrak alındı
- Piyango önizleme aralıklar kısaltıldı
- Dosya kapama cekilisId ler eklendi
- perPage = 25
- Piyango teslim tarihi min = yedektalihli başvuru
2025-09-26 14:57:07 +03:00
58cd065977 formmuhasebeayarları 2025-09-26 14:20:23 +03:00
4f6b14b43c Muhasebe ayarları başvuru bedeli kdv oranı 20 yapıldı 2025-09-25 14:41:03 +03:00
51264f9e72 Muhasebe ayarları başvuru bedeli kdv oranı eklendi 2025-09-25 14:34:03 +03:00
674c0b2e1e Muhasebeleştirme tarafında toplamdeger yazılarak hesaplanmış veri gösterildi 2025-09-25 14:13:51 +03:00
e07a867023 Muhasebeleştirme toplam ikramiye bedeli Number yapılmamıştı 2025-09-22 18:12:18 +03:00
b31b075e1f - Başvuru bedeli muhasebeleştir, izin bedeli muhasebeleştir popuplar bedel, kdv, toplam değerlr eklendi
- Dialog komponentine html içerik için ek alan
- Dosya kapama datasına evrak:cekilisId eklendi
2025-09-22 18:07:46 +03:00
76523182da Piyango resimleri şablonları indir admin için de eklendi 2025-09-19 12:19:10 +03:00
fe132ec672 Dosya kapama ikramiye listesi validasyon kontrolleri düzenleme 2025-09-19 10:19:35 +03:00
206eb2ab44 - Dosya kapama formu sadece rakam alanları için kontrol
- Dosya kapama ikramiye teslim ikramiyenin adet bilgisi ve toplam ikramiye alanları
2025-09-18 13:32:54 +03:00
f7d47af153 Dosya kapama talihli listesi asil, yedek adet alanları eklendi 2025-09-15 17:21:29 +03:00
fb99deeaeb - Piyango Onay Durum izinAdedi -> izinSayisi 2025-09-15 13:39:16 +03:00
c34d64d505 Merge pull request 'Dosya-Kapama-İkramiye-Listesi' (#13) from Dosya-Kapama-İkramiye-Listesi into main
Reviewed-on: #13
2025-09-11 08:18:12 +00:00
457cb58256 Merge pull request '- İzin verildi onay durumu için ek alanlar eklendi. Validasyon, kayıt ayarları yapıldı' (#12) from Onay-durumu-ek-alanlar into main
Reviewed-on: #12
2025-09-11 08:17:31 +00:00
eff6b4e27e - Gerçek kişi vergi No 10 hane olacak şekilde düzenleme yapıldı 2025-09-11 09:53:57 +03:00
bb2765c0ac - İzin verildi onay durumu için ek alanlar eklendi. Validasyon, kayıt ayarları yapıldı 2025-09-05 20:52:05 +03:00
db77c305ce - Piyango resimleri başlığına şablonların indirilmesi için link elendi. 2025-09-05 20:09:15 +03:00
fdc2372288 - Dosya Kapama İkramiye Listesi komponentleri eklendi
- Formlar için service, store, validasyon fonksiyonları/değişkenleri eklendi
2025-09-05 17:20:29 +03:00
216cf1fb73 - Dosya kapama formu oluşturuldu
- Dosya kapama get/put/post servisleri bağlandı
2025-09-05 15:09:10 +03:00
97f60c8df9 List table content ITableHead style key 2025-09-05 09:52:06 +03:00
95da9eb689 dokuman silme 2025-09-02 14:22:50 +03:00
7379f4ae5e build hataları 2025-09-02 09:44:55 +03:00
847b1c1b37 Merge pull request '- İade tarihi alan key leri değiştirildi' (#11) from Teminat-İade-Seçeneği-Geliştirmesi into main
Reviewed-on: #11
2025-08-25 10:01:27 +00:00
62dbaef278 Merge pull request 'Sayfa-Resim-Silme-Özelliği' (#10) from Sayfa-Resim-Silme-Özelliği into main
Reviewed-on: #10
2025-08-25 10:00:39 +00:00
aae7512498 Merge pull request 'Üye-Doküman-Silme-Özelliği' (#9) from Üye-Doküman-Silme-Özelliği into main
Reviewed-on: #9
2025-08-25 10:00:22 +00:00
75ff9823fe Merge pull request 'Piyango-Resim-Silme-Özelliği' (#8) from Piyango-Resim-Silme-Özelliği into main
Reviewed-on: #8
2025-08-25 09:59:45 +00:00
3b9173b881 Merge pull request 'İzin-Bedel-Orani-CRUD' (#7) from İzin-Bedel-Orani-CRUD into main
Reviewed-on: #7
2025-08-25 09:57:08 +00:00
fb1ddf085a Yardım amaçlı piyangolarda 2. ilan tarihinde min değer max değerden küçük olma durumu için uyarı eklendi 2025-08-18 18:18:37 +03:00
b1274cf3ab Teminar durumu kaydet butonu görünme durumları güncellendi 2025-08-18 18:01:18 +03:00
9650194cb9 development env SOCKET_URL https -> http 2025-08-18 15:21:46 +03:00
9e6c1f3840 izin bedel hatalar düzeltildi ve onay durum logları eklendi 2025-08-15 19:02:15 +03:00
343e93c168 izin bedel oranı crud işlemleri eklendi. 2025-08-15 13:25:29 +03:00
b1c23985ff url fixed 2025-08-15 12:19:08 +03:00
a4358afa11 url fixed 2025-08-14 15:14:20 +03:00
9869edf4a6 url fixed 2025-08-14 15:06:22 +03:00
624b8fae56 url fixed 2025-08-14 15:02:20 +03:00
6c44487489 Merge pull request 'Üye/Profil-Resim-Silme-Özelliği' (#6) from Üye/Profil-Resim-Silme-Özelliği into main
Reviewed-on: #6
2025-08-14 07:10:36 +00:00
7353d957c1 url fixed 2025-08-14 10:08:17 +03:00
915aa1757e Üye dökümanları için silme butonu eklendi 2025-08-13 18:09:25 +03:00
10d95b6763 Üye/Kullanıcı profil resmi silme butonu eklendi 2025-08-13 17:29:10 +03:00
97a77a2a37 Sayfa resmi silme butonu eklendş 2025-08-13 17:17:35 +03:00
2338cf04d8 Piyango Resimleri için silme butonu eklendi. 2025-08-13 16:55:41 +03:00
de3a1f549a buil sonrası html comment taglerinin kaldırılması için config. 2025-08-13 15:51:30 +03:00
b521ad0278 FileListItem sadece resim görünümü birden fazla buton ekleme için düzenleme 2025-08-13 15:24:04 +03:00
7872259102 - İade tarihi alan key leri değiştirildi
- Save ederken sayı kaydedilmiyordu, eklendi
2025-07-30 09:52:26 +03:00
7cff75e82c Socket urlsi env dosyasında tanımlandı 2025-07-30 09:44:00 +03:00
92d0a0dde7 env test, TabPiyangoKatilimciListesi.vue 2025-07-29 16:43:26 +03:00
a4e2a922d3 Merge pull request '- Trash ikonu eklendi' (#5) from Piyango-Doküman-Silme into main
Reviewed-on: #5
2025-07-29 06:53:20 +00:00
190815193a Merge pull request '- Kapsam dışı piyango detayında bazı tablar kaldırıldı' (#4) from Kapsam-Dışı-Piyango-Tab into main
Reviewed-on: #4
2025-07-29 06:51:45 +00:00
26f843416d Merge pull request 'Teminat-İade-Seçeneği-Geliştirmesi' (#3) from Teminat-İade-Seçeneği-Geliştirmesi into main
Reviewed-on: #3
2025-07-29 06:50:48 +00:00
7adabf5abd İzin sonrası iptal durumunda cezai işlem durumu yanlışlıkla aık kalmış 2025-07-28 19:09:24 +03:00
ed8b6fd3eb - Kapsam dışı piyango detayında bazı tablar kaldırıldı
- piyango liste kapsam dışı ise çekiliş tarihi olmayacak
2025-07-28 19:07:55 +03:00
7776e24ddd - Teminat durumu zaman aşımı iade için de ek alanlar açıldı
- iadeSayı alanı eklendi
2025-07-28 18:52:04 +03:00
408724cf67 - dev ve prod için env ayarları yapıldı.
- test sunucusu iin build script eklendi
2025-07-28 17:32:25 +03:00
f4c0511afb - dev ve prod için env ayarları yapıldı.
- test sunucusu iin build script eklendi
2025-07-28 17:14:07 +03:00
7998b7bd6c Merge pull request 'Piyango Teminat iade seçeneği için alanlar eklendi.' (#2) from Teminat-İade-Seçeneği-Geliştirmesi into main
Reviewed-on: #2
2025-07-28 13:51:32 +00:00
6ff319cb1d Merge pull request '- FormDisplay size props eklendi' (#1) from piyango-Id-geliştirmesi into main
Reviewed-on: #1
2025-07-28 13:50:43 +00:00
10011eacd6 site yönetimi sadece süperadmin 2025-07-28 10:15:48 +03:00
36d646e0bf piyangoid 2025-07-25 17:51:18 +03:00
908e63b896 popup liste slider liste 2025-07-25 17:10:36 +03:00
0e130eafff piyango liste piyango id 2025-07-25 16:29:29 +03:00
f6850853b2 - FormDisplay size props eklendi
- PiyangoId alanları eklendi
2025-07-25 06:24:35 +03:00
ff0304b4d9 Piyango Teminat iade seçeneği için alanlar eklendi. 2025-07-25 05:50:27 +03:00
0d58b0ad10 Dosya Kapam tabı işçin komponent ve store dosyaları eklendi 2025-07-24 22:36:47 +03:00
131 changed files with 4152 additions and 1131 deletions

2
.env.development Normal file
View File

@ -0,0 +1,2 @@
VITE_API_URL=http://panelapi.cekilisevitest.gov.tr/
VITE_SOCKET_URL=http://panelapi.cekilisevitest.gov.tr/uploadHub

2
.env.localdev Normal file
View File

@ -0,0 +1,2 @@
VITE_API_URL=https://localhost:7241/
VITE_SOCKET_URL=https://localhost:7241/uploadHub

2
.env.production Normal file
View File

@ -0,0 +1,2 @@
VITE_API_URL=https://panelapi.cekilisevi.gov.tr/
VITE_SOCKET_URL=https://panelapi.cekilisevi.gov.tr/uploadHub

7
env.d.ts vendored
View File

@ -1,2 +1,9 @@
/// <reference types="vite/client" />
interface ImportMetaEnv {
readonly VITE_API_URL: string;
}
interface ImportMeta {
readonly env: ImportMetaEnv;
}

588
package-lock.json generated
View File

@ -54,13 +54,15 @@
}
},
"node_modules/@babel/code-frame": {
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz",
"integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==",
"version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz",
"integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/highlight": "^7.24.7",
"picocolors": "^1.0.0"
"@babel/helper-validator-identifier": "^7.27.1",
"js-tokens": "^4.0.0",
"picocolors": "^1.1.1"
},
"engines": {
"node": ">=6.9.0"
@ -278,17 +280,19 @@
}
},
"node_modules/@babel/helper-string-parser": {
"version": "7.25.9",
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz",
"integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==",
"version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
"integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-identifier": {
"version": "7.25.9",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
"integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
"version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz",
"integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==",
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
@ -303,39 +307,26 @@
}
},
"node_modules/@babel/helpers": {
"version": "7.25.0",
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz",
"integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==",
"version": "7.28.3",
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.3.tgz",
"integrity": "sha512-PTNtvUQihsAsDHMOP5pfobP8C6CM4JWXmP8DrEIt46c3r2bf87Ua1zoqevsMo9g+tWDwgWrFP5EIxuBx5RudAw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/template": "^7.25.0",
"@babel/types": "^7.25.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/highlight": {
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz",
"integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==",
"dev": true,
"dependencies": {
"@babel/helper-validator-identifier": "^7.24.7",
"chalk": "^2.4.2",
"js-tokens": "^4.0.0",
"picocolors": "^1.0.0"
"@babel/template": "^7.27.2",
"@babel/types": "^7.28.2"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/parser": {
"version": "7.26.9",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.9.tgz",
"integrity": "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==",
"version": "7.28.3",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.3.tgz",
"integrity": "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==",
"license": "MIT",
"dependencies": {
"@babel/types": "^7.26.9"
"@babel/types": "^7.28.2"
},
"bin": {
"parser": "bin/babel-parser.js"
@ -394,14 +385,15 @@
}
},
"node_modules/@babel/template": {
"version": "7.25.0",
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz",
"integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==",
"version": "7.27.2",
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz",
"integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.24.7",
"@babel/parser": "^7.25.0",
"@babel/types": "^7.25.0"
"@babel/code-frame": "^7.27.1",
"@babel/parser": "^7.27.2",
"@babel/types": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@ -426,12 +418,13 @@
}
},
"node_modules/@babel/types": {
"version": "7.26.9",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.9.tgz",
"integrity": "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==",
"version": "7.28.2",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.2.tgz",
"integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==",
"license": "MIT",
"dependencies": {
"@babel/helper-string-parser": "^7.25.9",
"@babel/helper-validator-identifier": "^7.25.9"
"@babel/helper-string-parser": "^7.27.1",
"@babel/helper-validator-identifier": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@ -913,208 +906,294 @@
}
},
"node_modules/@rollup/rollup-android-arm-eabi": {
"version": "4.19.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.19.1.tgz",
"integrity": "sha512-XzqSg714++M+FXhHfXpS1tDnNZNpgxxuGZWlRG/jSj+VEPmZ0yg6jV4E0AL3uyBKxO8mO3xtOsP5mQ+XLfrlww==",
"version": "4.50.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.50.0.tgz",
"integrity": "sha512-lVgpeQyy4fWN5QYebtW4buT/4kn4p4IJ+kDNB4uYNT5b8c8DLJDg6titg20NIg7E8RWwdWZORW6vUFfrLyG3KQ==",
"cpu": [
"arm"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"android"
]
},
"node_modules/@rollup/rollup-android-arm64": {
"version": "4.19.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.19.1.tgz",
"integrity": "sha512-thFUbkHteM20BGShD6P08aungq4irbIZKUNbG70LN8RkO7YztcGPiKTTGZS7Kw+x5h8hOXs0i4OaHwFxlpQN6A==",
"version": "4.50.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.50.0.tgz",
"integrity": "sha512-2O73dR4Dc9bp+wSYhviP6sDziurB5/HCym7xILKifWdE9UsOe2FtNcM+I4xZjKrfLJnq5UR8k9riB87gauiQtw==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"android"
]
},
"node_modules/@rollup/rollup-darwin-arm64": {
"version": "4.19.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.19.1.tgz",
"integrity": "sha512-8o6eqeFZzVLia2hKPUZk4jdE3zW7LCcZr+MD18tXkgBBid3lssGVAYuox8x6YHoEPDdDa9ixTaStcmx88lio5Q==",
"version": "4.50.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.50.0.tgz",
"integrity": "sha512-vwSXQN8T4sKf1RHr1F0s98Pf8UPz7pS6P3LG9NSmuw0TVh7EmaE+5Ny7hJOZ0M2yuTctEsHHRTMi2wuHkdS6Hg==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"darwin"
]
},
"node_modules/@rollup/rollup-darwin-x64": {
"version": "4.19.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.19.1.tgz",
"integrity": "sha512-4T42heKsnbjkn7ovYiAdDVRRWZLU9Kmhdt6HafZxFcUdpjlBlxj4wDrt1yFWLk7G4+E+8p2C9tcmSu0KA6auGA==",
"version": "4.50.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.50.0.tgz",
"integrity": "sha512-cQp/WG8HE7BCGyFVuzUg0FNmupxC+EPZEwWu2FCGGw5WDT1o2/YlENbm5e9SMvfDFR6FRhVCBePLqj0o8MN7Vw==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"darwin"
]
},
"node_modules/@rollup/rollup-freebsd-arm64": {
"version": "4.50.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.50.0.tgz",
"integrity": "sha512-UR1uTJFU/p801DvvBbtDD7z9mQL8J80xB0bR7DqW7UGQHRm/OaKzp4is7sQSdbt2pjjSS72eAtRh43hNduTnnQ==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"freebsd"
]
},
"node_modules/@rollup/rollup-freebsd-x64": {
"version": "4.50.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.50.0.tgz",
"integrity": "sha512-G/DKyS6PK0dD0+VEzH/6n/hWDNPDZSMBmqsElWnCRGrYOb2jC0VSupp7UAHHQ4+QILwkxSMaYIbQ72dktp8pKA==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"freebsd"
]
},
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
"version": "4.19.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.19.1.tgz",
"integrity": "sha512-MXg1xp+e5GhZ3Vit1gGEyoC+dyQUBy2JgVQ+3hUrD9wZMkUw/ywgkpK7oZgnB6kPpGrxJ41clkPPnsknuD6M2Q==",
"version": "4.50.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.50.0.tgz",
"integrity": "sha512-u72Mzc6jyJwKjJbZZcIYmd9bumJu7KNmHYdue43vT1rXPm2rITwmPWF0mmPzLm9/vJWxIRbao/jrQmxTO0Sm9w==",
"cpu": [
"arm"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
"version": "4.19.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.19.1.tgz",
"integrity": "sha512-DZNLwIY4ftPSRVkJEaxYkq7u2zel7aah57HESuNkUnz+3bZHxwkCUkrfS2IWC1sxK6F2QNIR0Qr/YXw7nkF3Pw==",
"version": "4.50.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.50.0.tgz",
"integrity": "sha512-S4UefYdV0tnynDJV1mdkNawp0E5Qm2MtSs330IyHgaccOFrwqsvgigUD29uT+B/70PDY1eQ3t40+xf6wIvXJyg==",
"cpu": [
"arm"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-arm64-gnu": {
"version": "4.19.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.19.1.tgz",
"integrity": "sha512-C7evongnjyxdngSDRRSQv5GvyfISizgtk9RM+z2biV5kY6S/NF/wta7K+DanmktC5DkuaJQgoKGf7KUDmA7RUw==",
"version": "4.50.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.50.0.tgz",
"integrity": "sha512-1EhkSvUQXJsIhk4msxP5nNAUWoB4MFDHhtc4gAYvnqoHlaL9V3F37pNHabndawsfy/Tp7BPiy/aSa6XBYbaD1g==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-arm64-musl": {
"version": "4.19.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.19.1.tgz",
"integrity": "sha512-89tFWqxfxLLHkAthAcrTs9etAoBFRduNfWdl2xUs/yLV+7XDrJ5yuXMHptNqf1Zw0UCA3cAutkAiAokYCkaPtw==",
"version": "4.50.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.50.0.tgz",
"integrity": "sha512-EtBDIZuDtVg75xIPIK1l5vCXNNCIRM0OBPUG+tbApDuJAy9mKago6QxX+tfMzbCI6tXEhMuZuN1+CU8iDW+0UQ==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
"version": "4.19.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.19.1.tgz",
"integrity": "sha512-PromGeV50sq+YfaisG8W3fd+Cl6mnOOiNv2qKKqKCpiiEke2KiKVyDqG/Mb9GWKbYMHj5a01fq/qlUR28PFhCQ==",
"node_modules/@rollup/rollup-linux-loongarch64-gnu": {
"version": "4.50.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.50.0.tgz",
"integrity": "sha512-BGYSwJdMP0hT5CCmljuSNx7+k+0upweM2M4YGfFBjnFSZMHOLYR0gEEj/dxyYJ6Zc6AiSeaBY8dWOa11GF/ppQ==",
"cpu": [
"loong64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-ppc64-gnu": {
"version": "4.50.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.50.0.tgz",
"integrity": "sha512-I1gSMzkVe1KzAxKAroCJL30hA4DqSi+wGc5gviD0y3IL/VkvcnAqwBf4RHXHyvH66YVHxpKO8ojrgc4SrWAnLg==",
"cpu": [
"ppc64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
"version": "4.19.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.19.1.tgz",
"integrity": "sha512-/1BmHYh+iz0cNCP0oHCuF8CSiNj0JOGf0jRlSo3L/FAyZyG2rGBuKpkZVH9YF+x58r1jgWxvm1aRg3DHrLDt6A==",
"version": "4.50.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.50.0.tgz",
"integrity": "sha512-bSbWlY3jZo7molh4tc5dKfeSxkqnf48UsLqYbUhnkdnfgZjgufLS/NTA8PcP/dnvct5CCdNkABJ56CbclMRYCA==",
"cpu": [
"riscv64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-riscv64-musl": {
"version": "4.50.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.50.0.tgz",
"integrity": "sha512-LSXSGumSURzEQLT2e4sFqFOv3LWZsEF8FK7AAv9zHZNDdMnUPYH3t8ZlaeYYZyTXnsob3htwTKeWtBIkPV27iQ==",
"cpu": [
"riscv64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-s390x-gnu": {
"version": "4.19.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.19.1.tgz",
"integrity": "sha512-0cYP5rGkQWRZKy9/HtsWVStLXzCF3cCBTRI+qRL8Z+wkYlqN7zrSYm6FuY5Kd5ysS5aH0q5lVgb/WbG4jqXN1Q==",
"version": "4.50.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.50.0.tgz",
"integrity": "sha512-CxRKyakfDrsLXiCyucVfVWVoaPA4oFSpPpDwlMcDFQvrv3XY6KEzMtMZrA+e/goC8xxp2WSOxHQubP8fPmmjOQ==",
"cpu": [
"s390x"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-x64-gnu": {
"version": "4.19.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.19.1.tgz",
"integrity": "sha512-XUXeI9eM8rMP8aGvii/aOOiMvTs7xlCosq9xCjcqI9+5hBxtjDpD+7Abm1ZhVIFE1J2h2VIg0t2DX/gjespC2Q==",
"version": "4.50.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.50.0.tgz",
"integrity": "sha512-8PrJJA7/VU8ToHVEPu14FzuSAqVKyo5gg/J8xUerMbyNkWkO9j2ExBho/68RnJsMGNJq4zH114iAttgm7BZVkA==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-x64-musl": {
"version": "4.19.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.19.1.tgz",
"integrity": "sha512-V7cBw/cKXMfEVhpSvVZhC+iGifD6U1zJ4tbibjjN+Xi3blSXaj/rJynAkCFFQfoG6VZrAiP7uGVzL440Q6Me2Q==",
"version": "4.50.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.50.0.tgz",
"integrity": "sha512-SkE6YQp+CzpyOrbw7Oc4MgXFvTw2UIBElvAvLCo230pyxOLmYwRPwZ/L5lBe/VW/qT1ZgND9wJfOsdy0XptRvw==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-win32-arm64-msvc": {
"version": "4.19.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.19.1.tgz",
"integrity": "sha512-88brja2vldW/76jWATlBqHEoGjJLRnP0WOEKAUbMcXaAZnemNhlAHSyj4jIwMoP2T750LE9lblvD4e2jXleZsA==",
"node_modules/@rollup/rollup-openharmony-arm64": {
"version": "4.50.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.50.0.tgz",
"integrity": "sha512-PZkNLPfvXeIOgJWA804zjSFH7fARBBCpCXxgkGDRjjAhRLOR8o0IGS01ykh5GYfod4c2yiiREuDM8iZ+pVsT+Q==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"openharmony"
]
},
"node_modules/@rollup/rollup-win32-arm64-msvc": {
"version": "4.50.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.50.0.tgz",
"integrity": "sha512-q7cIIdFvWQoaCbLDUyUc8YfR3Jh2xx3unO8Dn6/TTogKjfwrax9SyfmGGK6cQhKtjePI7jRfd7iRYcxYs93esg==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"win32"
]
},
"node_modules/@rollup/rollup-win32-ia32-msvc": {
"version": "4.19.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.19.1.tgz",
"integrity": "sha512-LdxxcqRVSXi6k6JUrTah1rHuaupoeuiv38du8Mt4r4IPer3kwlTo+RuvfE8KzZ/tL6BhaPlzJ3835i6CxrFIRQ==",
"version": "4.50.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.50.0.tgz",
"integrity": "sha512-XzNOVg/YnDOmFdDKcxxK410PrcbcqZkBmz+0FicpW5jtjKQxcW1BZJEQOF0NJa6JO7CZhett8GEtRN/wYLYJuw==",
"cpu": [
"ia32"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"win32"
]
},
"node_modules/@rollup/rollup-win32-x64-msvc": {
"version": "4.19.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.19.1.tgz",
"integrity": "sha512-2bIrL28PcK3YCqD9anGxDxamxdiJAxA+l7fWIwM5o8UqNy1t3d1NdAweO2XhA0KTDJ5aH1FsuiT5+7VhtHliXg==",
"version": "4.50.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.50.0.tgz",
"integrity": "sha512-xMmiWRR8sp72Zqwjgtf3QbZfF1wdh8X2ABu3EaozvZcyHJeU0r+XAnXdKgs4cCAp6ORoYoCygipYP1mjmbjrsg==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"win32"
@ -1127,10 +1206,11 @@
"dev": true
},
"node_modules/@types/estree": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
"integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
"dev": true
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
"integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
"dev": true,
"license": "MIT"
},
"node_modules/@types/html-to-pdfmake": {
"version": "2.4.4",
@ -1489,30 +1569,20 @@
"node": ">=6.5"
}
},
"node_modules/ansi-styles": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
"dependencies": {
"color-convert": "^1.9.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
"license": "MIT"
},
"node_modules/axios": {
"version": "1.7.2",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz",
"integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==",
"version": "1.11.0",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz",
"integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==",
"license": "MIT",
"dependencies": {
"follow-redirects": "^1.15.6",
"form-data": "^4.0.0",
"form-data": "^4.0.4",
"proxy-from-env": "^1.1.0"
}
},
@ -1536,10 +1606,11 @@
"integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g=="
},
"node_modules/brace-expansion": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
"integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0"
}
@ -1602,6 +1673,19 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/call-bind-apply-helpers": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
"integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0",
"function-bind": "^1.1.2"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/camelcase": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
@ -1634,20 +1718,6 @@
}
]
},
"node_modules/chalk": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
"dependencies": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
"supports-color": "^5.3.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/clone": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
@ -1656,25 +1726,11 @@
"node": ">=0.8"
}
},
"node_modules/color-convert": {
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
"dev": true,
"dependencies": {
"color-name": "1.1.3"
}
},
"node_modules/color-name": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
"integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
"dev": true
},
"node_modules/combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
"license": "MIT",
"dependencies": {
"delayed-stream": "~1.0.0"
},
@ -1695,10 +1751,11 @@
"dev": true
},
"node_modules/cross-spawn": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
"integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
"version": "7.0.6",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
"integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
"dev": true,
"license": "MIT",
"dependencies": {
"path-key": "^3.1.0",
"shebang-command": "^2.0.0",
@ -1804,6 +1861,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
"license": "MIT",
"engines": {
"node": ">=0.4.0"
}
@ -1813,6 +1871,20 @@
"resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz",
"integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q=="
},
"node_modules/dunder-proto": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
"integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
"license": "MIT",
"dependencies": {
"call-bind-apply-helpers": "^1.0.1",
"es-errors": "^1.3.0",
"gopd": "^1.2.0"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/electron-to-chromium": {
"version": "1.5.3",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.3.tgz",
@ -1831,12 +1903,10 @@
}
},
"node_modules/es-define-property": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
"integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
"dependencies": {
"get-intrinsic": "^1.2.4"
},
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
"integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
"license": "MIT",
"engines": {
"node": ">= 0.4"
}
@ -1849,6 +1919,33 @@
"node": ">= 0.4"
}
},
"node_modules/es-object-atoms": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
"integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/es-set-tostringtag": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
"integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0",
"get-intrinsic": "^1.2.6",
"has-tostringtag": "^1.0.2",
"hasown": "^2.0.2"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/esbuild": {
"version": "0.21.5",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
@ -1896,15 +1993,6 @@
"node": ">=6"
}
},
"node_modules/escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
"integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
"dev": true,
"engines": {
"node": ">=0.8.0"
}
},
"node_modules/estree-walker": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
@ -1965,12 +2053,15 @@
}
},
"node_modules/form-data": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
"integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz",
"integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==",
"license": "MIT",
"dependencies": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
"es-set-tostringtag": "^2.1.0",
"hasown": "^2.0.2",
"mime-types": "^2.1.12"
},
"engines": {
@ -1983,6 +2074,7 @@
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
"dev": true,
"hasInstallScript": true,
"license": "MIT",
"optional": true,
"os": [
"darwin"
@ -2017,15 +2109,21 @@
}
},
"node_modules/get-intrinsic": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
"integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
"integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
"license": "MIT",
"dependencies": {
"call-bind-apply-helpers": "^1.0.2",
"es-define-property": "^1.0.1",
"es-errors": "^1.3.0",
"es-object-atoms": "^1.1.1",
"function-bind": "^1.1.2",
"has-proto": "^1.0.1",
"has-symbols": "^1.0.3",
"hasown": "^2.0.0"
"get-proto": "^1.0.1",
"gopd": "^1.2.0",
"has-symbols": "^1.1.0",
"hasown": "^2.0.2",
"math-intrinsics": "^1.1.0"
},
"engines": {
"node": ">= 0.4"
@ -2034,6 +2132,19 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/get-proto": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
"integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
"license": "MIT",
"dependencies": {
"dunder-proto": "^1.0.1",
"es-object-atoms": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/globals": {
"version": "11.12.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
@ -2044,25 +2155,17 @@
}
},
"node_modules/gopd": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
"integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
"dependencies": {
"get-intrinsic": "^1.1.3"
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
"integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
"license": "MIT",
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/has-property-descriptors": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
@ -2074,21 +2177,11 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/has-proto": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
"integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/has-symbols": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
"integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
"integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
"license": "MIT",
"engines": {
"node": ">= 0.4"
},
@ -2230,7 +2323,8 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
"dev": true
"dev": true,
"license": "MIT"
},
"node_modules/jsesc": {
"version": "2.5.2",
@ -2302,6 +2396,15 @@
"@jridgewell/sourcemap-codec": "^1.5.0"
}
},
"node_modules/math-intrinsics": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
"integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
"license": "MIT",
"engines": {
"node": ">= 0.4"
}
},
"node_modules/memorystream": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz",
@ -2315,6 +2418,7 @@
"version": "1.52.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
"license": "MIT",
"engines": {
"node": ">= 0.6"
}
@ -2323,6 +2427,7 @@
"version": "2.1.35",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
"license": "MIT",
"dependencies": {
"mime-db": "1.52.0"
},
@ -2771,12 +2876,13 @@
"integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ=="
},
"node_modules/rollup": {
"version": "4.19.1",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.19.1.tgz",
"integrity": "sha512-K5vziVlg7hTpYfFBI+91zHBEMo6jafYXpkMlqZjg7/zhIG9iHqazBf4xz9AVdjS9BruRn280ROqLI7G3OFRIlw==",
"version": "4.50.0",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.50.0.tgz",
"integrity": "sha512-/Zl4D8zPifNmyGzJS+3kVoyXeDeT/GrsJM94sACNg9RtUE0hrHa1bNPtRSrfHTMH5HjRzce6K7rlTh3Khiw+pw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/estree": "1.0.5"
"@types/estree": "1.0.8"
},
"bin": {
"rollup": "dist/bin/rollup"
@ -2786,22 +2892,27 @@
"npm": ">=8.0.0"
},
"optionalDependencies": {
"@rollup/rollup-android-arm-eabi": "4.19.1",
"@rollup/rollup-android-arm64": "4.19.1",
"@rollup/rollup-darwin-arm64": "4.19.1",
"@rollup/rollup-darwin-x64": "4.19.1",
"@rollup/rollup-linux-arm-gnueabihf": "4.19.1",
"@rollup/rollup-linux-arm-musleabihf": "4.19.1",
"@rollup/rollup-linux-arm64-gnu": "4.19.1",
"@rollup/rollup-linux-arm64-musl": "4.19.1",
"@rollup/rollup-linux-powerpc64le-gnu": "4.19.1",
"@rollup/rollup-linux-riscv64-gnu": "4.19.1",
"@rollup/rollup-linux-s390x-gnu": "4.19.1",
"@rollup/rollup-linux-x64-gnu": "4.19.1",
"@rollup/rollup-linux-x64-musl": "4.19.1",
"@rollup/rollup-win32-arm64-msvc": "4.19.1",
"@rollup/rollup-win32-ia32-msvc": "4.19.1",
"@rollup/rollup-win32-x64-msvc": "4.19.1",
"@rollup/rollup-android-arm-eabi": "4.50.0",
"@rollup/rollup-android-arm64": "4.50.0",
"@rollup/rollup-darwin-arm64": "4.50.0",
"@rollup/rollup-darwin-x64": "4.50.0",
"@rollup/rollup-freebsd-arm64": "4.50.0",
"@rollup/rollup-freebsd-x64": "4.50.0",
"@rollup/rollup-linux-arm-gnueabihf": "4.50.0",
"@rollup/rollup-linux-arm-musleabihf": "4.50.0",
"@rollup/rollup-linux-arm64-gnu": "4.50.0",
"@rollup/rollup-linux-arm64-musl": "4.50.0",
"@rollup/rollup-linux-loongarch64-gnu": "4.50.0",
"@rollup/rollup-linux-ppc64-gnu": "4.50.0",
"@rollup/rollup-linux-riscv64-gnu": "4.50.0",
"@rollup/rollup-linux-riscv64-musl": "4.50.0",
"@rollup/rollup-linux-s390x-gnu": "4.50.0",
"@rollup/rollup-linux-x64-gnu": "4.50.0",
"@rollup/rollup-linux-x64-musl": "4.50.0",
"@rollup/rollup-openharmony-arm64": "4.50.0",
"@rollup/rollup-win32-arm64-msvc": "4.50.0",
"@rollup/rollup-win32-ia32-msvc": "4.50.0",
"@rollup/rollup-win32-x64-msvc": "4.50.0",
"fsevents": "~2.3.2"
}
},
@ -2911,18 +3022,6 @@
"node": ">=17.0.0"
}
},
"node_modules/supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true,
"dependencies": {
"has-flag": "^3.0.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/svg-tags": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz",
@ -3066,14 +3165,15 @@
}
},
"node_modules/vite": {
"version": "5.3.5",
"resolved": "https://registry.npmjs.org/vite/-/vite-5.3.5.tgz",
"integrity": "sha512-MdjglKR6AQXQb9JGiS7Rc2wC6uMjcm7Go/NHNO63EwiJXfuk9PgqiP/n5IDJCziMkfw9n4Ubp7lttNwz+8ZVKA==",
"version": "5.4.19",
"resolved": "https://registry.npmjs.org/vite/-/vite-5.4.19.tgz",
"integrity": "sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==",
"dev": true,
"license": "MIT",
"dependencies": {
"esbuild": "^0.21.3",
"postcss": "^8.4.39",
"rollup": "^4.13.0"
"postcss": "^8.4.43",
"rollup": "^4.20.0"
},
"bin": {
"vite": "bin/vite.js"
@ -3092,6 +3192,7 @@
"less": "*",
"lightningcss": "^1.21.0",
"sass": "*",
"sass-embedded": "*",
"stylus": "*",
"sugarss": "*",
"terser": "^5.4.0"
@ -3109,6 +3210,9 @@
"sass": {
"optional": true
},
"sass-embedded": {
"optional": true
},
"stylus": {
"optional": true
},

View File

@ -5,9 +5,12 @@
"type": "module",
"scripts": {
"dev": "vite",
"localdev": "vite --mode localdev",
"build": "run-p type-check \"build-only {@}\" --",
"buildtest": "run-p type-check \"build-only-test {@}\" --",
"preview": "vite preview",
"build-only": "vite build",
"build-only-test": "vite build --mode development",
"type-check": "vue-tsc --build --force"
},
"dependencies": {

BIN
public/data/mpi-sablon.zip Normal file

Binary file not shown.

View File

@ -659,7 +659,9 @@ svg {
max-width: 24px;
max-height: 24px;
}
.ico-c.ico-btn:hover{
background-color: navy;
}
/* colors */
.back-grad {
padding: 6px 8px;
@ -715,7 +717,11 @@ svg {
color: #000;
padding: 12px;
}
.back-grad-dgrey {
background-image: linear-gradient(24deg, #797979, #a1a1a1);
color: #000;
padding: 12px;
}
.back-grey {
background-color: #f1f1f1;
}

View File

@ -10,7 +10,7 @@
</h1>
<div class="section-header-buttons-c">
<icon-button
toRoute="/piyangolar/piyango-listesi"
@click="goToListWithFilter"
icon="list"
iconClass="ico-section ico-section-header-btn" />
</div>
@ -60,9 +60,11 @@
<script setup lang="ts">
import { ref } from 'vue'
import { useDateStore } from '@/stores/dateStore'
import { useRouter } from 'vue-router'
import icourl from '@/assets/images/icons.svg'
const dateStore = useDateStore()
const router = useRouter()
const props = defineProps<{
tableData: Record<string, any>
@ -76,6 +78,7 @@
dateKey: string
iconBack: string
total: number
filterParams?: Record<string, any>
}>()
const totalData = ref<number>(props.total)
@ -92,4 +95,18 @@
const OnClick = (e: Event, row: object) => {
emit('click', row)
}
const goToListWithFilter = () => {
const query: Record<string, any> = {}
// Filtre parametrelerini query'ye ekle
if (props.filterParams) {
Object.assign(query, props.filterParams)
}
router.push({
path: '/piyangolar/piyango-listesi',
query: query
})
}
</script>

View File

@ -1,7 +1,7 @@
<template>
<div class="breadcrumb-wrapper">
<icon-button
@click="$router.go(-1)"
@click="props.go ? $router.push(go!) : $router.go(-1)"
icon="arrow"
classList="breadcrumbs-back breadcrumb-link" />
<div class="breadcrumbs-list">
@ -13,5 +13,6 @@
<script setup lang="ts">
const props = defineProps<{
currentPageText: string
go?: string
}>()
</script>

View File

@ -138,7 +138,8 @@
</div>
<data-table-pagination
v-if="pagination !== undefined && showPagination && !isPreview"
v-model:pagination="localPagination" />
v-model:pagination="localPagination"
:isUseRoute="isUseRoute" />
</template>
<script setup lang="ts">
import { ref, reactive, computed, watch } from 'vue'
@ -146,6 +147,9 @@
import { useGlobalStore } from '@/stores/globalStore'
import icourl from '@/assets/images/icons.svg'
const globalStore = useGlobalStore()
import { useRouter, useRoute } from 'vue-router'
const router = useRouter()
const route = useRoute()
interface ITableHead {
[key: string]: any
@ -178,12 +182,14 @@
rowActions?: Record<string, any>[]
actionFixed?: boolean
rowActionStyle?: string
isUseRoute?: boolean
}
const props = withDefaults(defineProps<Props>(), {
tableData: () => [],
rowNumber: false,
isPreview: false,
actionFixed: false
actionFixed: false,
isUseRoute: false
})
const emit = defineEmits(['update:sortData', 'update:pagination'])
@ -254,9 +260,19 @@
localSort.value.sortColumn = d.name
localSort.value.sortOrder = 'desc'
}
if (props.isUseRoute) {
router.push({
query: {
...route.query,
sortColumn: localSort.value.sortColumn,
sortOrder: localSort.value.sortOrder
}
})
}
emit('update:sortData', localSort.value)
}
}
const CellData = (d: Record<string, any>, key: string): any => {
if (d[key] === null) return d
else return d[key]

View File

@ -29,10 +29,13 @@
</div>
</template>
<script setup lang="ts">
import { ref, computed } from 'vue'
import { ref, onBeforeMount, watch } from 'vue'
import type { Ref } from 'vue'
import { useGlobalStore } from '@/stores/globalStore'
import { useValidationStore } from '@/stores/validationStore'
import { useRouter, useRoute } from 'vue-router'
const router = useRouter()
const route = useRoute()
const globalStore = useGlobalStore()
const validationStore = useValidationStore()
@ -45,9 +48,11 @@
export interface Props {
pagination: IPagination
isUseRoute?: boolean
}
const props = withDefaults(defineProps<Props>(), {
isUseRoute: false
})
const emit = defineEmits(['update:pagination'])
@ -66,6 +71,14 @@
if (Number(pageNumber.value) < totalPage()) pageNumber.value++
}
localPagination.value.pageNumber = pageNumber.value
if (props.isUseRoute) {
router.push({
query: {
...route.query,
pageNumber: pageNumber.value
}
})
}
emit('update:pagination', localPagination.value)
}
@ -76,7 +89,7 @@
(e.target as HTMLInputElement).value = String(totalPage())
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) => {
;(e.target as HTMLInputElement).select()
@ -85,4 +98,22 @@
localPagination.value.pageNumber = pageNumber.value
emit('update:pagination', localPagination.value)
}
const SetPageNumber = () => {
if (props.isUseRoute) {
if (route.query.pageNumber !== undefined && route.query.pageNumber !== '') {
localPagination.value.pageNumber = pageNumber.value = Number(
route.query.pageNumber
)
}
}
}
onBeforeMount(() => {
SetPageNumber()
})
watch(
() => route.query.pageNumber,
() => {
SetPageNumber()
}
)
</script>

View File

@ -13,6 +13,10 @@
v-if="localData.content !== undefined && localData.content !== ''">
{{ localData.content }}
</div>
<div
class="dialog-content"
v-if="localData.contentHtml !== undefined && localData.contentHtml !== ''"
v-html="localData.contentHtml"></div>
<div class="dialog-footer">
<template
v-if="localData.buttons !== undefined && localData.buttons.length > 0"
@ -49,6 +53,7 @@
const localData = reactive({
title: '',
content: '',
contentHtml: '',
showClose: true,
closeText: 'Kapat',
closeFunction: () => {

View File

@ -21,7 +21,7 @@
<div class="actions-c" v-if="editable || $slots.actionButtons">
<slot name="actionButtons"></slot>
<i
class="ico-c ico-section ico-section-header-btn ico-replace"
class="ico-c ico-section ico-btn back-grad-dgrey"
@click="OnClick"
v-if="editable">
<svg><use href="/src/assets/images/icons.svg#replace"></use></svg>
@ -38,12 +38,15 @@
</div>
<div v-else>{{ fileType.toLocaleUpperCase() }}</div>
</a>
<i
class="ico-c ico-section ico-section-header-btn ico-replace"
@click="OnClick"
v-if="editable">
<svg><use href="/src/assets/images/icons.svg#replace"></use></svg>
</i>
<div class="actions-c actions-top" v-if="editable || $slots.actionButtons">
<slot name="actionButtons"></slot>
<i
class="ico-c ico-section ico-btn back-grad-dgrey"
@click="OnClick"
v-if="editable">
<svg><use href="/src/assets/images/icons.svg#replace"></use></svg>
</i>
</div>
</div>
</template>
</template>
@ -114,4 +117,14 @@
align-items: center;
pointer-events: fill;
}
.actions-c.actions-top{
align-items: flex-start;
}
.form-item-picture.only-image{
width: 140px;
height: 140px;
}
.actions-c .ico-btn:last-child {
margin-right: 0;
}
</style>

View File

@ -91,9 +91,9 @@
const emit = defineEmits(['update:modelValue', 'change', 'click'])
const localValue = ref<(string | number)[] | boolean | null | string | number|undefined>(
props.modelValue
)
const localValue = ref<
(string | number)[] | boolean | null | string | number | undefined
>(props.modelValue)
const InvalidMessageText = reactive<Record<string, any>>({})
const InvalidMessages = computed<string>(() => {

View File

@ -14,7 +14,9 @@
</span>
<template v-if="modelText !== undefined && modelText !== ''">
<template v-if="typeof modelText === 'string'">
<span>{{ price ? globalStore.toTrLocale(modelText) : modelText }}</span>
<span :class="[size ? 'form-item-size form-item-size-' + size : '']">
{{ price ? globalStore.toTrLocale(modelText) : modelText }}
</span>
</template>
<template v-if="typeof modelText === 'object'">
<ul>
@ -25,7 +27,9 @@
</template>
</template>
<template v-else>
<span>{{ price ? globalStore.toTrLocale(localValue) : localValue }}</span>
<span :class="[size ? 'form-item-size form-item-size-' + size : '']">
{{ price ? globalStore.toTrLocale(localValue) : localValue }}
</span>
</template>
<span
class="form-item-alert"
@ -64,6 +68,7 @@
modelText?: any
invalidText?: string
price?: boolean
size?: number | string
}
const props = withDefaults(defineProps<Props>(), {
half: false,
@ -71,13 +76,23 @@
})
const localValue = ref<any>(props.modelValue)
if (props.type === 'date' && props.modelValue !== null && props.modelValue !== undefined && props.modelValue !== '')
if (
props.type === 'date' &&
props.modelValue !== null &&
props.modelValue !== undefined &&
props.modelValue !== ''
)
localValue.value = dateStore.dateFormat({
date: props.modelValue as Date,
pattern: 'dd-mm-yy'
})
if (props.type === 'datetime' && props.modelValue !== null && props.modelValue !== undefined && props.modelValue !== '')
if (
props.type === 'datetime' &&
props.modelValue !== null &&
props.modelValue !== undefined &&
props.modelValue !== ''
)
localValue.value = dateStore.dateFormat({
date: props.modelValue as Date,
pattern: 'dd-mm-yy-t'
@ -108,3 +123,14 @@
}
)
</script>
<style scoped>
.form-item-size {
font-weight: 600;
}
.form-item-size-1 {
font-size: 1.2em;
}
.form-item-size-2 {
font-size: 1.5em;
}
</style>

View File

@ -142,7 +142,7 @@
multipleText: 'Tümü'
})
const emit = defineEmits(['update:modelValue', 'change','clear'])
const emit = defineEmits(['update:modelValue', 'change', 'clear'])
const activated = ref<Boolean>(false)
const multipleAllSelected = ref<boolean>(false)
@ -214,9 +214,8 @@
} else {
let text = props.listData.filter((v: Record<string, any>) => {
let val = props.listVal !== undefined ? v[props.listVal] : v
return localValue.value === val
return String(localValue.value) === String(val)
})[0]
return text !== undefined
? props.listText !== undefined
? text[props.listText]
@ -357,7 +356,7 @@
const SetSelectedOption = () => {
selectedOption.value = props.listData.filter((v: Record<string, any>) => {
return v[props.listVal as string] === props.modelValue
return String(v[props.listVal as string]) === String(props.modelValue)
})[0]
}

View File

@ -120,13 +120,17 @@
:isPreview="isPreview"
:rowActions="rowActions"
:actionFixed="actionFixed"
:rowActionStyle="rowActionStyle" />
:rowActionStyle="rowActionStyle"
:isUseRoute="isUseRoute" />
</slot>
</div>
<panel-wrapper v-if="filterPanel" v-model="filterPanel" :panel-title="'Filtreleme'">
<template #panelContent>
<panel-filter :filterHead="tableHeader" v-model:filterParams="localFilterParams" />
<panel-filter
:filterHead="tableHeader"
v-model:filterParams="localFilterParams"
:isUseRoute="isUseRoute" />
</template>
<template #footerButton>
<div class="button-c button-save" @click="FilterData">Filtrele</div>
@ -140,8 +144,11 @@
</template>
<script setup lang="ts">
import { ref, reactive, onBeforeMount, watch, computed } from 'vue'
import { ref, reactive, onBeforeMount, watch, computed, nextTick } from 'vue'
import axios from 'axios'
import { useRouter, useRoute } from 'vue-router'
const router = useRouter()
const route = useRoute()
import { useGlobalStore } from '@/stores/globalStore'
const globalStore = useGlobalStore()
@ -161,6 +168,7 @@
computeHtml?: Function
sort?: boolean
filter?: Record<string, any>
style?: Record<string, any>
}
interface IPagination {
[key: string]: any
@ -199,7 +207,8 @@
isPreview?: boolean
rowActions?: Record<string, any>[]
actionFixed?: boolean
rowActionStyle?:string
rowActionStyle?: string
isUseRoute?: boolean
}
const props = withDefaults(defineProps<Props>(), {
@ -212,7 +221,8 @@
search: true,
rowNumber: false,
isPreview: false,
actionFixed:false
actionFixed: false,
isUseRoute: false
})
const emit = defineEmits([
@ -237,6 +247,7 @@
const localPagination = ref<IPagination>({} as IPagination)
const localTotalValues = reactive<Record<string, any>>({})
const searchFieldPos = ref<string>('')
const localLoaded = ref<boolean>(false)
if (props.totalValues !== undefined) Object.assign(localTotalValues, props.totalValues)
@ -264,8 +275,26 @@
}
const FilterData = async () => {
Object.keys(filterParams).forEach((k) => {
delete filterParams[k]
})
Object.assign(filterParams, localFilterParams.value)
EqualObjects(filterParams, localFilterParams.value)
if (props.isUseRoute) {
Object.keys(route.query).forEach((k) => {
if (k.includes('Filters[')) delete route.query[k]
})
const q = {
query: {
...route.query
}
}
Object.keys(filterParams).forEach((f, k) => {
q.query['Filters[' + f + ']'] = filterParams[f].op + filterParams[f].val
})
router.push(q)
}
setTimeout(async () => {
await GetLocalData()
filterPanel.value = false
@ -288,6 +317,11 @@
const RemoveFilterKey = (k: string) => {
delete localFilterParams.value[k]
delete filterParams[k]
const query: Record<string, any> = { ...route.query }
Object.keys(query).forEach((q) => {
if (q.includes(k)) delete query[q]
})
router.push({ query: query })
GetLocalData()
}
const RemoveSearch = () => {
@ -295,19 +329,165 @@
searched.value = false
GetLocalData()
}
const GetLocalData = async () => {
if (selectedExport.value !== null) {
const exportUrl =
axios.defaults.baseURL + dataStore.apiBase + props.apiList + '?isPdf=true'
const pageNumberChanging = ref<boolean>(false)
const sortChanging = ref<boolean>(false)
const searchChanging = ref<boolean>(false)
const filterChanging = ref<boolean>(false)
const link = document.createElement('a')
link.href = exportUrl
document.body.appendChild(link)
link.dispatchEvent(
new MouseEvent('click', { bubbles: true, cancelable: true, view: window })
)
link.remove()
window.URL.revokeObjectURL(link.href)
const RoutePageControl = () => {
if (props.isUseRoute) {
const q = { ...route.query }
pageNumberChanging.value = true
if (q.pageNumber !== undefined && q.pageNumber !== '') {
localPagination.value.pageNumber = Number(q.pageNumber)
} else {
q.pageNumber = String(1)
localPagination.value.pageNumber = localPagination.value.pageNumber || 1
}
router.push({ query: q })
nextTick(() => {
pageNumberChanging.value = false
})
}
}
const RouteSortControl = () => {
if (props.isUseRoute) {
const q = { ...route.query }
sortChanging.value = true
if (q.sortOrder !== undefined && q.sortOrder !== null && q.sortOrder !== '') {
localSort.value.sortColumn = q.sortColumn as string
localSort.value.sortOrder = q.sortOrder as string
} else {
delete q.sortOrder
delete q.sortColumn
delete localSort.value.sortColumn
delete localSort.value.sortOrder
}
router.push({ query: q })
nextTick(() => {
sortChanging.value = false
})
}
}
const RouteSearchControl = () => {
if (props.isUseRoute) {
const q = { ...route.query }
searchChanging.value = true
if (
q.searchString !== undefined &&
q.searchString !== null &&
q.searchString !== ''
) {
localQuery.value = q.searchString as string
} else {
localQuery.value = ''
delete q.searchString
}
router.push({ query: q })
nextTick(() => {
searchChanging.value = false
})
}
}
const RouteFilterControl = () => {
if (props.isUseRoute) {
const q = { ...route.query }
localFilterParams.value = {}
Object.keys(filterParams).forEach((k) => {
delete filterParams[k]
})
filterChanging.value = true
if (Object.keys(route.query).length > 0) {
Object.keys(route.query).forEach((key) => {
if (key.includes('Filters[')) {
const newKey = key.match(/(?<=\[)[^\]]+(?=\])/)![0]
filterParams[newKey] = {}
localFilterParams.value[newKey] = {}
filterParams[newKey].op = (route.query[key]! as string).charAt(0)
localFilterParams.value[newKey].op = (route.query[key]! as string).charAt(0)
filterParams[newKey].val = (route.query[key]! as string).slice(1)
localFilterParams.value[newKey].val = (route.query[key]! as string).slice(1)
}
})
}
props.tableHeader.forEach((head: Record<string, any>) => {
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(() => {
filterChanging.value = false
})
}
}
const GetLocalData = async () => {
localLoaded.value = false
if (selectedExport.value !== null) {
let exportUrl = ''
let fileType = ''
let fileName = ''
// Export tipine göre URL ve dosya ayarları
if (selectedExport.value === 1) {
// PDF
exportUrl = axios.defaults.baseURL + dataStore.apiBase + props.apiList + '/Pdf'
fileType = 'application/pdf'
fileName = 'export.pdf'
} else if (selectedExport.value === 2) {
// Excel
exportUrl = axios.defaults.baseURL + dataStore.apiBase + props.apiList + '/Excel'
fileType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
fileName = 'export.xlsx'
}
// Axios ile dosya indirme - interceptor otomatik olarak token ekleyecek
try {
const response = await axios.get(exportUrl, {
responseType: 'blob'
})
const blob = new Blob([response.data], { type: fileType })
const url = window.URL.createObjectURL(blob)
const link = document.createElement('a')
link.href = url
link.download = fileName
document.body.appendChild(link)
link.dispatchEvent(
new MouseEvent('click', { bubbles: true, cancelable: true, view: window })
)
link.remove()
window.URL.revokeObjectURL(url)
} catch (error) {
console.error('Export error:', error)
}
selectedExport.value = null
exportPanel.value = false
@ -362,6 +542,9 @@
}
emit('update:refresh', false)
}
nextTick(() => {
localLoaded.value = true
})
}
const OpenMobileButtons = () => {
searchForm.value = false
@ -392,6 +575,14 @@
const SearchQuery = () => {
if (props.apiList !== undefined) GetLocalData()
else emit('update:query', localQuery.value)
if (props.isUseRoute) {
router.push({
query: {
...route.query,
searchString: localQuery.value
}
})
}
searchForm.value = false
searched.value = true
}
@ -399,9 +590,39 @@
searchForm.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(() => {
if (globalStore.screenWidth >= globalStore.breakPoints.tabletp)
mobileButtons.value = true
RoutePageControl()
RouteSortControl()
RouteSearchControl()
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()
@ -409,17 +630,37 @@
})
watch(
() => localSort.value,
() => [localSort.value],
() => {
if (!sortChanging.value) GetLocalData()
},
{ deep: true }
)
watch(
() => [route],
() => {
RoutePageControl()
RouteSortControl()
RouteSearchControl()
RouteFilterControl()
GetLocalData()
},
{ deep: true }
)
watch(
() => localPagination.value.pageNumber,
() => {
GetLocalData()
if (!pageNumberChanging.value) {
GetLocalData()
}
}
)
watch(
() => localPagination.value.pageNumber,
() => {
if (!pageNumberChanging.value) {
GetLocalData()
}
}
)
watch(
@ -431,8 +672,9 @@
watch(
() => localQuery.value,
() => {
if (props.apiList !== undefined && localQuery.value.length === 0) GetLocalData()
else if (localQuery.value.length === 0) emit('update:query', localQuery.value)
if (props.apiList !== undefined && localQuery.value.length === 0) {
if (!searchChanging.value) GetLocalData()
} else if (localQuery.value.length === 0) emit('update:query', localQuery.value)
}
)
watch(

View File

@ -22,7 +22,7 @@
</div>
</div>
<div class="panel-content-item" v-if="showExport">
<!-- <div class="panel-content-item" v-if="showExport">
<div class="button-c button-icon button-export" @click="SelectExport(3)">
<i class="ico-c">
<svg>
@ -31,7 +31,7 @@
</i>
<span class="panel-date">CSV</span>
</div>
</div>
</div> -->
</div>
</template>
<script setup lang="ts">
@ -45,7 +45,7 @@
const emit = defineEmits(['update:selectedExport'])
const selected = ref<number>(0)
const showExport = ref<boolean>(false)
const showExport = ref<boolean>(true)
const SelectExport = (exp: number) => {
selected.value = exp

View File

@ -49,7 +49,7 @@
:listVal="filter.filter.listVal"
:extraData="filter"
:label="filter.title"
v-model="localFilterData[filter.filter.filterId || filter.name]"
v-model="localFilterData[filter.filter.filterId || filter.name] as number"
@change="UpdateFilterSelect"
clearable />
</div>
@ -58,11 +58,15 @@
</template>
</template>
<script setup lang="ts">
import { ref, reactive, onBeforeMount } from 'vue'
import { ref, reactive, onBeforeMount, nextTick } from 'vue'
import { useRouter, useRoute } from 'vue-router'
const router = useRouter()
const route = useRoute()
const props = defineProps<{
filterHead: Record<string, any>
filterParams: Record<string, any>
isUseRoute?: boolean
}>()
const emit = defineEmits(['update:filterParams'])
@ -117,6 +121,7 @@
}
emit('update:filterParams', localFilterParams)
}
onBeforeMount(() => {
createFilterData()
})

View File

@ -32,19 +32,24 @@
</div>
</template>
<script setup lang="ts">
import { ref, computed, onMounted, watch } from 'vue'
import { ref, computed, onMounted, onBeforeMount, watch } from 'vue'
import { useGlobalStore } from '@/stores/globalStore'
const globalStore = useGlobalStore()
import { useRouter, useRoute } from 'vue-router'
const router = useRouter()
const route = useRoute()
interface TabObj {
[key: string]: any
text: string
id: string
}
const props = defineProps<{
export interface Props {
tabList: TabObj[]
}>()
isUseRoute?: boolean
}
const props = withDefaults(defineProps<Props>(), { isUseRoute: false })
const currentTab = ref<number>(0)
const rnd = ref<number>(Math.ceil(Number(Math.random() * 1000000000)))
@ -79,6 +84,11 @@
} else {
currentTab.value = Number(d)
}
if (props.isUseRoute) {
router.push({
params: { ...route.params, tabid: props.tabList[currentTab.value].id }
})
}
CalculateNavPosition()
}
const TabWidth = () => {
@ -96,14 +106,31 @@
TabWidth()
CalculateNavPosition()
}
const RouteTabControl = () => {
if (props.isUseRoute) {
if (route.params.tabid !== undefined && route.params.tabid !== '') {
currentTab.value = props.tabList.findIndex((t) => t.id === route.params.tabid)
}
}
}
onMounted(() => {
TabWidth()
window.addEventListener('resize', Resize)
})
onBeforeMount(() => {
RouteTabControl()
})
watch(
() => globalStore.sideMenu,
() => {
TabWidth()
}
)
watch(
() => route.params.tabid,
(t) => {
RouteTabControl()
},
{ immediate: true }
)
</script>

View File

@ -2,7 +2,7 @@ import axios from 'axios'
import { useUsersStore } from '@/stores/usersStore'
import router from '@/router'
axios.defaults.baseURL = 'https://panelapi.cekilisevi.gov.tr/'
axios.defaults.baseURL = import.meta.env.VITE_API_URL
//axios.defaults.timeout = 2000;
axios.defaults.headers['Content-Type'] = 'application/json; charset=utf-8'
import { useDataStore } from '@/stores/dataStore'
@ -48,7 +48,7 @@ axios.interceptors.response.use(
const token = sessionStorage.getItem(usersStore.userStorageKeys.TOKEN)
if (token !== undefined) {
usersStore.ResetUserData()
router.push('/login')
router.push('/giris')
}
}
return Promise.reject(error)

View File

@ -71,7 +71,7 @@
let dt = await dataStore.dataPost('Auth/logout')
}
usersStore.ResetUserData()
router.push('/login')
router.push('/giris')
}
const closeProfileMenu = (e: Event) => {

View File

@ -109,7 +109,7 @@
{
title: 'Site Yönetimi',
ico: 'sitemanagement',
show: usersStore.isPanelUser && !usersStore.isAccounting,
show: usersStore.isSuperAdmin,
sub: [
{
title: 'Yeni Sayfa',
@ -142,6 +142,10 @@
title: 'Piyango Listesi',
to: '/muhasebe/piyango-listesi'
},
{
title: 'İzin Bedel Oranı',
to: '/muhasebe/izin-bedel-orani'
},
{
title: 'Ayarlar',
to: '/muhasebe/ayarlar'

View File

@ -1,7 +1,7 @@
import ForgotPassword from '@/module/auth/views/ForgotPassword.vue'
export default {
path: '/forgot-password',
path: '/sifremi-unuttum',
name: 'ForgotPassword',
component: ForgotPassword,
meta: {

View File

@ -1,11 +1,6 @@
import Login from "@/module/auth/routes/login";
import Register from "@/module/auth/routes/register";
import ForgotPassword from "@/module/auth/routes/forgot-password";
export default [
Login,
Register,
ForgotPassword
]
import Login from '@/module/auth/routes/login'
import Register from '@/module/auth/routes/register'
import ForgotPassword from '@/module/auth/routes/forgot-password'
import ResetPassword from '@/module/auth/routes/reset-password'
export default [Login, Register, ForgotPassword, ResetPassword]

View File

@ -1,7 +1,7 @@
import Login from '@/module/auth/views/Login.vue'
export default {
path: '/login',
path: '/giris',
name: 'Login',
component: Login,
meta: {

View File

@ -1,7 +1,7 @@
import Register from '@/module/auth/views/Register.vue'
export default {
path: '/register',
path: '/kayit-ol',
name: 'Register',
component: Register,
meta: {

View File

@ -0,0 +1,10 @@
import ResetPassword from '@/module/auth/views/ResetPassword.vue'
export default {
path: '/sifreyi-sifirla',
name: 'ResetPassword',
component: ResetPassword,
meta: {
authpage: true
}
}

View File

@ -1,17 +1,59 @@
import { defineStore } from 'pinia'
import { useDataStore } from '@/stores/dataStore'
import { useAuthStore } from '../stores/authStore'
import { useAuthValidationStore } from '../validation/authValidationStore'
import { useUsersStore } from '@/stores/usersStore'
import router from '@/router'
export const useAppService = defineStore('appService', () => {
export const useAuthService = defineStore('authService', () => {
const dataStore = useDataStore()
const authStore = useAuthStore()
const authValidationStore = useAuthValidationStore()
const usersStore = useUsersStore()
const GetAAuthRoleList = async () => {
if (authStore.rolesList.length === 0) {
let data = await dataStore.dataGet('Auth/rolelistesi')
authStore.rolesList = data
const Login = async () => {
if (authValidationStore.LoginFormCheck()) {
let login = await dataStore.dataPost('Auth/login', {
data: authStore.loginData
})
Object.assign(authStore.loginData, authStore.safeLoginData)
if (login !== 'errorfalse') {
await usersStore.SetUserSessionData(login)
await usersStore.SetUserData()
if (usersStore.isPanelUser) {
router.push('/')
} else {
if (usersStore.userStatus === 0 || usersStore.userStatus === null) {
router.push('/profil')
} else {
router.push('/')
}
}
} else {
authValidationStore.loginMessageType = 'alert'
authValidationStore.loginMessage =
'Kullanıcı adı veya şifrenizi yanlış girdiniz. Lütfen kontrol edip tekrar deneyiniz.'
authValidationStore.isLoginMessage = true
}
} else {
authValidationStore.isLoginFormValid = true
}
}
return {GetAAuthRoleList}
const ResetPassword = async () => {
if (authValidationStore.ResetPasswordFormCheck()) {
let dt: any
dt = await dataStore.dataPost('ResetPassword', {
data: authStore.resetPasswordForm
})
if (dt !== 'errorfalse') {
}
} else {
authValidationStore.isResetPasswordFormValid = true
}
}
return { Login, ResetPassword }
})

View File

@ -1,12 +1,19 @@
import { defineStore } from 'pinia'
import { ref,reactive } from 'vue'
import { ref, reactive } from 'vue'
export const useAuthStore = defineStore('authStore', () => {
const loginData = reactive<Record<string, any>>({ username: '', password: '' })
const safeLoginData = reactive<Record<string, any>>({})
const rolesList = ref<Record<string, any>[]>([])
const resetCheckData = ref<string>('')
const resetPasswordForm = reactive<Record<string, any>>({
newPassword: '',
newPasswordRepeat: '',
check: ''
})
Object.assign(safeLoginData, loginData)
return { loginData, safeLoginData, rolesList }
return { loginData, safeLoginData, rolesList, resetPasswordForm, resetCheckData }
})

View File

@ -1,46 +0,0 @@
import { defineStore } from 'pinia'
import { ref, reactive } from 'vue'
import { useAuthStore } from './authStore'
import { useValidationStore } from '@/stores/validationStore'
export const useAuthValidationStore = defineStore('authValidationStore', () => {
const authStore = useAuthStore()
const validationStore = useValidationStore()
const isFormValid = ref<boolean>(true)
const isLoginMessage = ref<boolean>(false)
const loginMessageType = ref<string>('success')
const loginMessage = ref<string>('')
const registerMessage = ref<string>('')
const invalidTexts = reactive<Record<string, any>>({})
const FormCheck = (): boolean => {
Object.assign(invalidTexts, {})
validationStore.IsFieldEmpty(
authStore.loginData,
invalidTexts,
'username',
'Kullanıcı adı alanını doldurmalısınız. Örn: isim@alanadi.td'
)
validationStore.IsFieldEmpty(
authStore.loginData,
invalidTexts,
'password',
'Lütfen şifrenizi giriniz.'
)
isFormValid.value = Object.keys(invalidTexts).length === 0
return isFormValid.value
}
return {
isFormValid,
invalidTexts,
isLoginMessage,
loginMessageType,
loginMessage,
registerMessage,
FormCheck
}
})

View File

@ -0,0 +1,89 @@
import { defineStore } from 'pinia'
import { ref, reactive } from 'vue'
import { useValidationStore } from '@/stores/validationStore'
import { useAuthStore } from '../stores/authStore'
export const useAuthValidationStore = defineStore('authValidationStore', () => {
const validationStore = useValidationStore()
const authStore = useAuthStore()
const isLoginMessage = ref<boolean>(false)
const loginMessageType = ref<string>('success')
const loginMessage = ref<string>('')
const registerMessage = ref<string>('')
const loginInvalidTexts = reactive<Record<string, any>>({})
const isLoginFormValid = ref<boolean>(true)
const resetPasswordFormChanged = ref<boolean>(false)
const isResetPasswordFormValid = ref<boolean>(true)
const resetPasswordInvalidTexts = reactive<Record<string, any>>({})
const LoginFormCheck = (): boolean => {
Object.assign(loginInvalidTexts, {})
validationStore.IsFieldEmpty(
authStore.loginData,
loginInvalidTexts,
'username',
'Kullanıcı adı alanını doldurmalısınız. Örn: isim@alanadi.td'
)
validationStore.IsFieldEmpty(
authStore.loginData,
loginInvalidTexts,
'password',
'Lütfen şifrenizi giriniz.'
)
isLoginFormValid.value = Object.keys(loginInvalidTexts).length === 0
return isLoginFormValid.value
}
const ResetPasswordFormCheck = (): boolean => {
Object.assign(resetPasswordInvalidTexts, {})
validationStore.IsFieldEmpty(
authStore.resetPasswordForm,
resetPasswordInvalidTexts,
'newPassword',
'Lütfen yeni şifrenizi giriniz.'
)
validationStore.IsFieldEmpty(
authStore.resetPasswordForm,
resetPasswordInvalidTexts,
'newPasswordRepeat',
'Lütfen yeni şifrenizi tekrar giriniz.'
)
if (
!validationStore.checkEmpty(authStore.resetPasswordForm.newPassword) &&
!validationStore.checkEmpty(authStore.resetPasswordForm.newPasswordRepeat)
) {
if (
authStore.resetPasswordForm.newPassword !==
authStore.resetPasswordForm.newPasswordRepeat
) {
isResetPasswordFormValid.value = false
resetPasswordInvalidTexts.newPasswordRepeat =
'Şifrenizi tekrar doğru girdiğinizden emin olunuz.'
}
}
isResetPasswordFormValid.value = Object.keys(resetPasswordInvalidTexts).length === 0
return isResetPasswordFormValid.value
}
return {
isLoginMessage,
loginMessageType,
loginMessage,
loginInvalidTexts,
registerMessage,
isLoginFormValid,
resetPasswordFormChanged,
isResetPasswordFormValid,
resetPasswordInvalidTexts,
LoginFormCheck,
ResetPasswordFormCheck
}
})

View File

@ -24,7 +24,7 @@
</button>
</form>
<div class="login-nav login-nav-back">
<RouterLink to="/login">&lt; Geri</RouterLink>
<RouterLink to="/giris">&lt; Geri</RouterLink>
</div>
</div>
</section>

View File

@ -3,14 +3,12 @@
<section class="section-login">
<div class="login-header">
<div class="logo-header">
<img
src="@/assets/images/cekilisevi-logo-n.png"
alt="MPI Çekiliş Evi"/>
<img src="@/assets/images/cekilisevi-logo-n.png" alt="MPI Çekiliş Evi" />
</div>
<h1>Giriş Yap</h1>
</div>
<div class="section-content">
<form action="#" id="login-form" @submit.prevent="Login">
<form action="#" id="login-form" @submit.prevent="authService.Login">
<form-input
type="email"
modelKey="username"
@ -18,12 +16,11 @@
required
label="Kullanıcı Adı (e-posta adresi)"
placeholder="eposta@alanadi.com"
:invalidText="authValidationStore.invalidTexts.username" />
:invalidText="authValidationStore.loginInvalidTexts.username" />
<form-input
type="password"
label="Şifre"
v-model="authStore.loginData.password"
required />
@ -32,64 +29,38 @@
v-if="authValidationStore.isLoginMessage">
<span>{{ authValidationStore.loginMessage }}</span>
</div>
<button class="button-c button-second button-login" type="submit">
<button
class="button-c button-second button-login"
type="submit"
@submit="authService.Login"
@click="authService.Login">
Giriş Yap
</button>
</form>
<div class="login-nav">
<RouterLink to="/forgot-password">Şifremi Unuttum</RouterLink>
<RouterLink to="/register">Kaydol</RouterLink>
<RouterLink to="/sifremi-unuttum">Şifremi Unuttum</RouterLink>
<RouterLink to="/kayit-ol">Kayıt Ol</RouterLink>
</div>
</div>
</section>
</GuestLayout>
</template>
<script setup lang="ts">
import { onBeforeMount, reactive, ref } from 'vue'
import { onBeforeMount } from 'vue'
import { useUsersStore } from '@/stores/usersStore'
const usersStore = useUsersStore()
import { useDataStore } from '@/stores/dataStore'
const dataStore = useDataStore()
import { useAuthStore } from '../stores/authStore'
const authStore = useAuthStore()
import { useAuthValidationStore } from '../stores/authValidationStore'
import { useAuthValidationStore } from '../validation/authValidationStore'
const authValidationStore = useAuthValidationStore()
import { useAuthService } from '../services/authService'
const authService = useAuthService()
import router from '@/router'
import GuestLayout from '@/layouts/GuestLayout.vue'
const Login = async () => {
if (authValidationStore.FormCheck()) {
let login = await dataStore.dataPost('Auth/login', {
data: authStore.loginData
})
Object.assign(authStore.loginData, authStore.safeLoginData)
if (login !== 'errorfalse') {
await usersStore.SetUserSessionData(login)
await usersStore.SetUserData()
if (usersStore.isPanelUser) {
router.push('/')
} else {
if (usersStore.userStatus === 0 || usersStore.userStatus === null) {
router.push('/profil')
} else {
router.push('/')
}
}
} else {
authValidationStore.loginMessageType = 'alert'
authValidationStore.loginMessage =
'Kullanıcı adı veya şifrenizi yanlış girdiniz. Lütfen kontrol edip tekrar deneyiniz.'
authValidationStore.isLoginMessage = true
}
} else {
authValidationStore.isFormValid = true
}
}
onBeforeMount(() => {
if(usersStore.userIsAuth) router.push('/')
if (usersStore.userIsAuth) router.push('/')
})
</script>

View File

@ -80,8 +80,8 @@
v-model="uyeBilgileriStore.formData.gercekVergiNo"
required
label="Vergi No"
maxlength="11"
minlength="11"
maxlength="10"
minlength="10"
:invalidText="uyeBilgileriStore.invalidTexts.gercekVergiNo"
@keydown="validationStore.allowNumbersWithKeys" />
@ -339,7 +339,7 @@
</button>
</form>
<div class="login-nav login-nav-back">
<RouterLink to="/login">&lt; Geri</RouterLink>
<RouterLink to="/giris">&lt; Geri</RouterLink>
</div>
</div>
</section>
@ -355,9 +355,7 @@
const globalDataStore = useGlobalDataStore()
import { useValidationStore } from '@/stores/validationStore'
const validationStore = useValidationStore()
import { useUsersStore } from '@/stores/usersStore'
const usersStore = useUsersStore()
import { useAuthValidationStore } from '../stores/authValidationStore'
import { useAuthValidationStore } from '../validation/authValidationStore'
const authValidationStore = useAuthValidationStore()
import router from '@/router'
@ -365,12 +363,6 @@
const uyeBilgileriStore = useUyeBilgileriStore()
uyeBilgileriStore.ResetStore()
interface IIl {
[key: string]: any
ad: string
id: number
}
const kvkkCheck = ref([
{
label: '',
@ -421,7 +413,7 @@
'Başarıyla kayıt oldunuz. Kullanıcı adı ve şifreniz ile giriş yapabilirsiniz.'
authValidationStore.isLoginMessage = true
router.push('/login')
router.push('/giris')
}
} else {
uyeBilgileriStore.isFormValid = true

View File

@ -0,0 +1,62 @@
<template>
<GuestLayout>
<section class="section-login">
<div class="login-header">
<div class="logo-header">
<img src="@/assets/images/cekilisevi-logo-n.png" alt="MPI Çekiliş Evi" />
</div>
<h1>Şifremi Sıfırla</h1>
</div>
<div class="section-content">
<form id="sifremi-unuttum" @submit.prevent="authService.ResetPassword">
<form-input
type="password"
modelKey="newPassword"
v-model="authStore.resetPasswordForm.newPassword"
required
label="Yeni Şifre"
placeholder="Yeni Şifre"
:invalidText="authValidationStore.resetPasswordInvalidTexts.newPassword" />
<form-input
type="password"
modelKey="newPasswordRepeat"
v-model="authStore.resetPasswordForm.newPasswordRepeat"
required
label="Yeni Şifre Tekrar"
placeholder="Yeni Şifre Tekrar"
:invalidText="
authValidationStore.resetPasswordInvalidTexts.newPasswordRepeat
" />
<button
class="button-c button-second button-login"
type="submit"
@submit="authService.ResetPassword"
@click="authService.ResetPassword">
Şifremi Sıfırla
</button>
</form>
<div class="login-nav login-nav-back">
<RouterLink to="/giris">&lt; Geri</RouterLink>
</div>
</div>
</section>
</GuestLayout>
</template>
<script setup lang="ts">
import { onMounted } from 'vue'
import GuestLayout from '@/layouts/GuestLayout.vue'
import { useAuthStore } from '../stores/authStore'
const authStore = useAuthStore()
import { useAuthService } from '../services/authService'
const authService = useAuthService()
import { useAuthValidationStore } from '../validation/authValidationStore'
const authValidationStore = useAuthValidationStore()
import { useRoute, useRouter } from 'vue-router'
const route = useRoute()
const router = useRouter()
onMounted(() => {
if (route.query && route.query.check !== undefined)
authStore.resetCheckData = route.query.check as string
else router.push('/giris')
})
</script>

View File

@ -0,0 +1,14 @@
<template>
<div class="form-content">
<div class="form-inner-content form-inner-content-left">
<form-piyango-dosya-kapama />
</div>
<div class="form-inner-content form-inner-content-left">
<form-piyango-dosya-kapama-ikramiye-listesi />
</div>
</div>
</template>
<script setup lang="ts">
import FormPiyangoDosyaKapama from './form/FormPiyangoDosyaKapama.vue'
import FormPiyangoDosyaKapamaIkramiyeListesi from './form/FormPiyangoDosyaKapamaIkramiyeListesi.vue'
</script>

View File

@ -8,7 +8,8 @@
:rowAction="OpenUser"
:apiList="'Katilimci/ByCekilisId/' + piyangoStore.selectedLottery"
v-model:pagination="paginationData"
v-model:refresh="piyangoKatilimciStore.refreshPiyangoKatilimciList">
v-model:refresh="piyangoKatilimciStore.refreshPiyangoKatilimciList"
isUseRoute>
<template #extraButtons>
<button
class="button-c"
@ -57,7 +58,12 @@
<panel-katilimci-document />
</template>
<template #footerButton>
<button class="button-c button-save" @click="FileUpload">Yükle</button>
<button
class="button-c button-save"
@click="FileUpload"
:disabled="uploadProgressPanel">
Yükle
</button>
</template>
</panel-wrapper>
<panel-wrapper
@ -112,14 +118,9 @@
import PanelKatilimciDocument from '@/module/cekilisler/components/panel/PanelKatilimciDocument.vue'
import PanelPiyangoKatilimci from '@/module/cekilisler/components/panel/PanelPiyangoKatilimci.vue'
import { useDateStore } from '@/stores/dateStore'
const dateStore = useDateStore()
import { useUsersStore } from '@/stores/usersStore'
const usersStore = useUsersStore()
import { useDataStore } from '@/stores/dataStore'
const dataStore = useDataStore()
import { usePiyangoStore } from '../stores/piyangoStore'
@ -142,18 +143,12 @@
import { usePiyangoOnayService } from '../service/piyangoOnayService'
const piyangoOnayService = usePiyangoOnayService()
import {
connectToHub,
onProgress,
onInsertProgress,
onCompleted,
onError
} from '../service/signalrService'
import { connectToHub, onProgress, onCompleted } from '../service/signalrService'
const uploadProgressValue = ref(0)
const uploadProgressPanel = ref(false)
const today = ref<Date>(new Date())
const ilanTarihi = ref<Date>(new Date(piyangoStore.lotteryIlanTarihi!))
const connectionId = ref('')
const tableHeader = ref<Record<string, any>[]>([
{
@ -259,7 +254,8 @@
else return ''
})
const AddNewDocument = () => {
const AddNewDocument = async () => {
connectionId.value = await connectToHub()
dataStore.panelData = {
title: '',
file: ''
@ -284,7 +280,7 @@
piyangoKatilimciStore.katilimciUserPanel = true
}
const FileUpload = async () => {
const connectionId = await connectToHub()
// Mevcut bağlantıyı kullan (AddNewDocument'te açıldı)
// Progress modal'ı
uploadProgressValue.value = 0
@ -309,39 +305,20 @@
)
console.log(dataStore.panelData)
const response = await dataStore.dataPost(
`Katilimci/ExcelleYukle/${piyangoStore.selectedLottery}?connectionId=${connectionId}`,
`Katilimci/ExcelleYukle/${piyangoStore.selectedLottery}?connectionId=${connectionId.value}`,
{
data: formData,
headers: { 'Content-Type': 'multipart/form-data' }
}
)
if (response.data !== 'errorfalse') {
console.log('excel response', response)
if (response !== 'errorfalse') {
// Başarı işlemi zaten onCompleted içinde yapıldı
} else {
// Hata olursa paneli kapat
uploadProgressPanel.value = false
}
}
// const FileUpload = async () => {
// if (true) {
// const formData = new FormData()
// formData.append('excelFile', dataStore.panelData.file)
// let dt: any
//
// dt = await dataStore.dataPost(
// `Katilimci/ExcelleYukle/${piyangoStore.selectedLottery}?connectionId=${connectionId}`,
// {
// data: formData,
// headers: { 'Content-Type': 'multipart/form-data' }
// }
// )
// if (dt !== 'errorfalse') {
// piyangoKatilimciStore.refreshPiyangoKatilimciList = true
// piyangoKatilimciStore.katilimciFilePanel = false
// }
// }
// }
const DeleteAllButton = () => {
dialogStore.CreateDialog({
title: 'Tüm Katılımcıları Sil',
@ -353,7 +330,7 @@
{
label: 'Tüm katılımcıları Sil',
type: 'alert',
function: () => DeleteAll
function: () => DeleteAll()
}
]
})

View File

@ -8,6 +8,11 @@
<form-piyango-onay-kisiler />
</div>
</!--div-->
<div class="form-inner-content">
<div class="form-part">
<form-piyango-onay-durum />
</div>
</div>
<div class="form-inner-content">
<div class="form-part">
<form-piyango-onay-log />
@ -16,6 +21,7 @@
</div>
</template>
<script setup lang="ts">
import FormPiyangoOnayDurum from './form/FormPiyangoOnayDurum.vue'
import FormPiyangoOnayLog from './form/FormPiyangoOnayLog.vue'
import FormPiyangoOnay from './form/FormPiyangoOnay.vue'
import FormPiyangoOnayKisiler from './form/FormPiyangoOnayKisiler.vue'

View File

@ -10,7 +10,7 @@
</div>
<div class="form-inner-content">
<div class="form-part">
<form-piyango-onay-log />
<form-piyango-onay-durum />
</div>
</div>
</div>
@ -19,6 +19,6 @@
import { usePiyangoStore } from '../stores/piyangoStore'
const piyangoStore = usePiyangoStore()
import FormPiyangoOnayLog from './form/FormPiyangoOnayLog.vue'
import FormPiyangoOnayDurum from './form/FormPiyangoOnayDurum.vue'
import FormPiyangoUserOnayaGonder from './form/FormPiyangoUserOnayaGonder.vue'
</script>

View File

@ -7,6 +7,7 @@
listText="Talihli"
:apiList="'Katilimci/AsilYedek/' + piyangoStore.selectedLottery"
v-model:refresh='refreshList'
isUseRoute
>
<template #extraButtons>
<a href='/data/ornek-talihli-listesi.xlsx' target='_blank' class='button-c' v-if='piyangoStore.lotteryData.cekilisYontemi =="Fiziksel"'>

View File

@ -10,7 +10,8 @@
:apiList="
'TeminantStates/GetTeminantStateCekilisList/' + piyangoStore.selectedLottery
"
v-model:refresh="piyangoTeminatStore.refreshList" />
v-model:refresh="piyangoTeminatStore.refreshList"
isUseRoute/>
</section>
<panel-wrapper
wide
@ -22,13 +23,20 @@
v-if="
usersStore.isPanelUser ||
(!usersStore.isPanelUser &&
piyangoStore.lotteryApprove !== 0 &&
piyangoStore.lotteryApprove !== 1 &&
piyangoStore.lotteryApprove !== 2 &&
piyangoStore.lotteryApprove !== 3 &&
!piyangoTeminatStore.isNew)
" />
<panel-piyango-teminat-durumu
v-if="
!usersStore.isPanelUser &&
(piyangoStore.lotteryApprove === 3 || piyangoTeminatStore.isNew)
(piyangoStore.lotteryApprove === 0 ||
piyangoStore.lotteryApprove === 1 ||
piyangoStore.lotteryApprove === 2 ||
piyangoStore.lotteryApprove === 3 ||
piyangoTeminatStore.isNew)
" />
</template>
<template #footerButton>
@ -36,14 +44,22 @@
class="button-c button-save"
:disabled="!piyangoTeminatValidationStore.formChanged"
@click="piyangoTeminatService.SaveTeminatDurum"
v-if="piyangoTeminatStore.isNew || usersStore.isPanelUser">
v-if="
usersStore.isPanelUser ||
(!usersStore.isPanelUser &&
(piyangoStore.lotteryApprove === 0 ||
piyangoStore.lotteryApprove === 1 ||
piyangoStore.lotteryApprove === 2 ||
piyangoStore.lotteryApprove === 3)) ||
piyangoTeminatStore.isNew
">
Kaydet
</button>
</template>
</panel-wrapper>
</template>
<script setup lang="ts">
import { ref, computed,onBeforeMount } from 'vue'
import { ref, computed, onBeforeMount } from 'vue'
import PanelWrapper from '@/components/PanelWrapper.vue'
import PanelPiyangoTeminatDurumu from './panel/PanelPiyangoTeminatDurumu.vue'
@ -143,10 +159,7 @@
])
const teminatAddAction = computed(() => {
if (
!usersStore.isPanelUser
)
return NewTeminatDurum
if (!usersStore.isPanelUser) return NewTeminatDurum
else return ''
})

View File

@ -50,7 +50,7 @@
</template>
<div class="form-inner-comment success-d" v-if="piyangoStore.lotteryApprove === 4">
Başvuru onaylanmıştır.
Başvuruya izin verildi.
</div>
<div class="form-inner-comment alert-d" v-if="piyangoStore.lotteryApprove === 5">
Başvuru uygun görülmemiştir.
@ -84,7 +84,7 @@
Başvuru admin tarafından kapsam dışı olarak işaretlenmiştir.
</template>
</div>
<div class="form-inner-comment alert-d" v-if="piyangoStore.lotteryApprove === 11">
<div class="form-inner-comment alert-d" v-if="piyangoStore.lotteryApprove === 13">
Kampanya için cezai işlem uygulanmıştır.
</div>
</template>

View File

@ -3,6 +3,10 @@
<lottery-states
:piyangoAmac="piyangoStore.lotteryData.amacpiyangoId"
v-if="!isPreview" />
<form-display
v-model="piyangoStore.lotteryData.piyangoId"
label="Piyango ID"
size="1" />
<template
v-if="
usersStore.isPanelUser &&
@ -20,6 +24,19 @@
v-model="piyangoStore.lotteryData.izinBedelNo"
label="İzin Bedel No" />
</template>
<form-display
type="date"
v-if="piyangoStore.lotteryData.izinTarihi !== undefined"
v-model="piyangoStore.lotteryData.izinTarihi"
half
label="İzin Tarihi" />
<form-display
v-if="piyangoStore.lotteryData.izinSayisi !== undefined"
v-model="piyangoStore.lotteryData.izinSayisi"
half
label="İzin Sayısı" />
<form-display
v-model="piyangoStore.lotteryData.baslik"
label="Piyango Başlığı"

View File

@ -19,6 +19,7 @@
</button>
</div>
</div>
<div class="form-inner-comment waiting-d" v-if="!loaded">Yükleniyor, lütfen bekleyiniz...</div>
<piyango-bilgileri-display-content v-if="loaded" :isPreview="isPreview" />
</div>
<panel-wrapper
@ -39,7 +40,7 @@
</panel-wrapper>
</template>
<script setup lang="ts">
import { ref, reactive, computed, onBeforeMount } from 'vue'
import { ref, onBeforeMount } from 'vue'
import { usePDF } from 'vue3-pdfmake'
import { useUsersStore } from '@/stores/usersStore'
const usersStore = useUsersStore()

View File

@ -63,7 +63,7 @@
}
const DeleteDocument = async (id: number | string) => {
var dt = await dataStore.dataDelete('Popup/' + id)
var dt = await dataStore.dataDelete('Dokuman/' + id)
if (dt !== 'errorfalse') {
dialogStore.CloseDialog('deletedoc')

View File

@ -26,7 +26,7 @@
</template>
</template>
<script setup lang="ts">
import { ref, reactive, onBeforeMount, watch } from 'vue'
import { ref, onBeforeMount, watch } from 'vue'
import { useGlobalStore } from '@/stores/globalStore'
const globalStore = useGlobalStore()
import { usePiyangoStore } from '../../stores/piyangoStore'
@ -36,8 +36,6 @@
import { usePiyangoIkramiyeStore } from '../../stores/piyangoIkramiyeStore'
const piyangoIkramiyeStore = usePiyangoIkramiyeStore()
import { usePiyangoIkramiyeService } from '../../service/piyangoIkramiyeService'
const piyangoIkramiyeService = usePiyangoIkramiyeService()
export interface Props {
isPreview?: boolean
@ -45,8 +43,6 @@
const props = withDefaults(defineProps<Props>(), { isPreview: false })
const loaded = ref<boolean>(false)
const ikramiyeTableHeader = ref<Record<string, any>>([
{
name: 'cinsi',

View File

@ -2,6 +2,9 @@
<div class="form-part">
<div class="form-part-title">
<h4>Piyango Resimleri</h4>
<a href="/data/mpi-sablon.zip" class="button-c" target="_blank">
Örnek Resim Şablonları
</a>
</div>
<div class="form-part-content">
<template v-for="(file, i) in fileList">
@ -9,9 +12,19 @@
:data="file"
onlyPreview
:editable="false"
:filePath="file.resimYolu" />
:filePath="file.resimYolu">
<template #actionButtons v-if="usersStore.isPanelUser">
<i
class="ico-c ico-btn ico-section back-grad-alert"
@click="DeleteImagePop(file)">
<svg><use href="/src/assets/images/icons.svg#trash"></use></svg>
</i>
</template>
</file-list-item>
</template>
<div v-if="usersStore.isPanelUser && fileList.length === 0" class="form-inner-comment">
<div
v-if="usersStore.isPanelUser && fileList.length === 0"
class="form-inner-comment">
Eklenmiş resim bulunamadı.
</div>
</div>
@ -26,13 +39,43 @@
const usersStore = useUsersStore()
import { usePiyangoStore } from '../../stores/piyangoStore'
const piyangoStore = usePiyangoStore()
import { useDialogStore } from '@/components/global/dialogStore'
const dialogStore = useDialogStore()
const fileList = ref<Record<string,any>[]>([])
const fileList = ref<Record<string, any>[]>([])
const GetData = async () => {
let dt = await dataStore.dataGet('CekilisResim/Cekilis/' + piyangoStore.selectedLottery)
let dt = await dataStore.dataGet(
'CekilisResim/Cekilis/' + piyangoStore.selectedLottery
)
if (dt !== 'errorfalse') fileList.value.splice(0, fileList.value.length, ...dt.data)
}
const DeleteImagePop = (data: Record<string, any>) => {
dialogStore.CreateDialog({
title: 'Resim Sil',
id: 'deleteimage',
content: 'Resimi silmek istediğinize emin misiniz? Bu işlem geri alınamaz.',
closeText: 'Vazgeç',
buttons: [
{
label: 'Resmi Sil',
type: 'alert',
function: () => DeleteImage(data.id)
}
]
})
}
const DeleteImage = async (id: number | string) => {
var dt = await dataStore.dataDelete('CekilisResim/' + id)
if (dt !== 'errorfalse') {
dialogStore.CloseDialog('deleteimage')
await GetData()
}
}
onBeforeMount(async () => {
await GetData()
})

View File

@ -1,102 +0,0 @@
<template>
<div class="form-part form-title" v-if="usersStore.isPanelUser">
<div class="form-title-buttons">
<button
class="button-c button-save"
@click="piyangoTeminatService.SaveTeminatDurum"
:disabled="!piyangoTeminatValidationStore.formChanged">
Kaydet
</button>
<button
v-if="piyangoTeminatValidationStore.formChanged"
class="button-c button-cancel panel-close"
@click="piyangoTeminatStore.ResetFormData">
Vazgeç
</button>
</div>
</div>
<div :class="['form-part', piyangoTeminatValidationStore.formChanged ? 'changed' : '']"> <div
class="form-part-content"
v-if="piyangoTeminatStore.loaded">
<form-select
v-if="usersStore.isPanelUser"
label="İşlem"
:listData="piyangoDataStore.piyangoTeminatDurumlari"
listText="value"
listVal="id"
v-model="piyangoTeminatStore.piyangoTeminatFormData.state"
required
:invalidText="piyangoTeminatValidationStore.invalidTexts.state"
@change="OnKeyup" />
<form-display
v-model="piyangoTeminatStore.piyangoTeminatFormData.amount"
half
label="Tutarı" />
<form-display
v-model="piyangoTeminatStore.piyangoTeminatFormData.teminatParentTypeText"
half
label="Para Birimi" />
<form-display
label="Teminat Türü"
half
v-model="piyangoTeminatStore.piyangoTeminatFormData.teminantChildTypeText" />
<form-display
type="date"
half
v-model="piyangoTeminatStore.piyangoTeminatFormData.teminantDate"
label="Tarih" />
<form-display
v-model="piyangoTeminatStore.piyangoTeminatFormData.teminantNo"
half
label="No" />
<div class="form-item form-item-half"></div>
<form-display
v-model="piyangoTeminatStore.piyangoTeminatFormData.bankName"
half
label="Banka Adı" />
<form-display
v-model="piyangoTeminatStore.piyangoTeminatFormData.bankBranch"
half
label="Banka Şubesi" />
<!--form-display
label="İşlem"
v-model="piyangoTeminatStore.piyangoTeminatFormData.stateText" /-->
<file-list-item
title="Dosya"
:data="piyangoTeminatStore.piyangoTeminatFormData"
:editable="false"
:filePath="piyangoTeminatStore.piyangoTeminatFormData.teminantDocumentUrl"
:usePath="true"
:onlyPreview="true" />
<form-display
v-model="piyangoTeminatStore.piyangoTeminatFormData.description"
label="Açıklama" />
</div></div>
</template>
<script setup lang="ts">
import { usePiyangoTeminatStore } from '../../stores/piyangoTeminatStore'
const piyangoTeminatStore = usePiyangoTeminatStore()
import { useUsersStore } from '@/stores/usersStore'
const usersStore = useUsersStore()
import { usePiyangoDataStore } from '../../stores/piyangoDataStore'
const piyangoDataStore = usePiyangoDataStore()
import { usePiyangoTeminatValidationStore } from '../../validation/piyangoTeminatValidationStore'
const piyangoTeminatValidationStore = usePiyangoTeminatValidationStore()
import { usePiyangoTeminatService } from '../../service/piyangoTeminatService'
const piyangoTeminatService = usePiyangoTeminatService()
const OnKeyup = () => {
piyangoTeminatValidationStore.formChanged = true
}
</script>

View File

@ -3,8 +3,8 @@
style="
display: inline-block;
width: 100%;
font-size: 13pt;
margin-bottom: 12px;
font-size: 10pt;
margin-bottom: 10px;
text-align: center;
">
MİLLİ PİYANGO İDARESİ GENEL MÜDÜRLÜĞÜ
@ -18,11 +18,15 @@
düzenlemek üzere, aşağıda belirtilen koşullarda piyango düzenlemek üzere gerekli iznin
verilmesi hususunda bilgilerinizi ve gereğini arz ederiz.
<br />
<br />
</div>
<strong style="font-size: 10pt; margin-bottom: 12px">
<strong style="font-size: 10pt; margin-bottom: 10px">
PİYANGO İLE İLGİLİ BİLGİLER
</strong>
<br />
<strong style="font-size: 10pt; margin-bottom: 10px">
PİYANGO ID: {{ piyangoStore.lotteryData.piyangoId }}
</strong>
<br />
<table
cellspacing="0"
class="table-no-line"
@ -30,7 +34,7 @@
<tbody>
<tr>
<td colspan="2">
<strong style="font-size: 10pt; margin-bottom: 12px">
<strong style="font-size: 10pt; margin-bottom: 10px">
1- Piyangoyu Düzenleyenin
</strong>
</td>
@ -41,7 +45,7 @@
<table
cellspacing="0"
data-pdfmake="{'widths': [ '50%', '50%'],'layout':'pdfTableLayout'}"
style="margin-bottom: 12px; font-size: 10pt">
style="margin-bottom: 10px; font-size: 10pt">
<tbody>
<template v-if="piyangoStore.duzenleyenData.basvuruTipId === 18">
<tr>
@ -201,7 +205,7 @@
<tbody>
<tr>
<td colspan="2">
<strong class="title" style="font-size: 10pt; margin-bottom: 12px">
<strong class="title" style="font-size: 10pt; margin-bottom: 10px">
Piyangoyu Yürütenin:
</strong>
</td>
@ -250,7 +254,7 @@
<tbody>
<tr>
<td colspan="2">
<strong class="title" style="font-size: 10pt; margin-bottom: 12px">
<strong class="title" style="font-size: 10pt; margin-bottom: 10px">
2- Kampanyanın:
</strong>
</td>
@ -260,7 +264,7 @@
<table
cellspacing="0"
data-pdfmake="{'widths': [ '50%', '50%'],'layout':'pdfTableLayout'}"
style="margin-bottom: 12px; font-size: 10pt">
style="margin-bottom: 10px; font-size: 10pt">
<tbody>
<tr>
<td>
@ -306,7 +310,7 @@
<tbody>
<tr>
<td colspan="2">
<strong class="title" style="font-size: 10pt; margin-bottom: 12px">
<strong class="title" style="font-size: 10pt; margin-bottom: 10px">
3-Çekilişe katılma şekil ve şartları:
</strong>
</td>
@ -317,7 +321,7 @@
<table
cellspacing="0"
data-pdfmake="{'widths': [ '50%', '50%'],'layout':'pdfTableLayout'}"
style="margin-bottom: 12px; font-size: 10pt">
style="margin-bottom: 10px; font-size: 10pt">
<tbody>
<tr>
<td colspan="2">
@ -341,7 +345,7 @@
<tbody>
<tr>
<td colspan="2">
<strong class="title" style="font-size: 10pt; margin-bottom: 12px">
<strong class="title" style="font-size: 10pt; margin-bottom: 10px">
4-Çekilişin;
</strong>
</td>
@ -352,7 +356,7 @@
<table
cellspacing="0"
data-pdfmake="{'widths': [ '50%', '50%'],'layout':'pdfTableLayout'}"
style="margin-bottom: 12px; font-size: 10pt">
style="margin-bottom: 10px; font-size: 10pt">
<tbody>
<tr>
<td colspan="2">
@ -402,7 +406,7 @@
<tbody>
<tr>
<td colspan="2">
<strong class="title" style="font-size: 10pt; margin-bottom: 12px">
<strong class="title" style="font-size: 10pt; margin-bottom: 10px">
5-Çekiliş sonuçlarının ilan edileceği gazetenin:
</strong>
</td>
@ -413,7 +417,7 @@
<table
cellspacing="0"
data-pdfmake="{'widths': [ '50%', '50%'],'layout':'pdfTableLayout'}"
style="margin-bottom: 12px; font-size: 10pt">
style="margin-bottom: 10px; font-size: 10pt">
<tbody>
<tr>
<td colspan="2">
@ -462,7 +466,7 @@
<table
cellspacing="0"
data-pdfmake="{'widths': [ '50%', '50%'],'layout':'pdfTableLayout'}"
style="margin-bottom: 12px; font-size: 10pt">
style="margin-bottom: 10px; font-size: 10pt">
<tbody>
<tr>
<td colspan="2">
@ -508,7 +512,7 @@
<tbody>
<tr>
<td colspan="2">
<strong class="title" style="font-size: 10pt; margin-bottom: 12px">
<strong class="title" style="font-size: 10pt; margin-bottom: 10px">
7-Diğer hususlar:
</strong>
</td>
@ -519,7 +523,7 @@
<table
cellspacing="0"
data-pdfmake="{'widths': [ '50%', '50%'],'layout':'pdfTableLayout'}"
style="margin-bottom: 12px; font-size: 10pt">
style="margin-bottom: 10px; font-size: 10pt">
<tbody>
<tr>
<td colspan="2">
@ -548,7 +552,7 @@
<tbody>
<tr>
<td colspan="2">
<strong class="title" style="font-size: 10pt; margin-bottom: 12px">
<strong class="title" style="font-size: 10pt; margin-bottom: 10px">
8-Piyangoya konu ikramiyeler:
</strong>
</td>
@ -559,7 +563,7 @@
<table
cellspacing="0"
data-pdfmake="{'widths': ['10%', '30%', '15%', '15%', '15%', '15%'],'layout': 'pdfTableLayout'}"
style="margin-bottom: 12px; font-size: 10pt"
style="margin-bottom: 10px; font-size: 10pt"
v-if="piyangoIkramiyeStore.piyangoAllIkramiyeData.length > 0">
<tbody>
<tr>
@ -619,7 +623,7 @@
cellspacing="0"
class="table-no-line"
data-pdfmake="{'widths': [ '50%', '30%','20%'],'layout':'pdfTableLayoutNoLine'}"
style="margin-bottom: 12px; font-size: 10pt">
style="margin-bottom: 10px; font-size: 10pt">
<tbody>
<tr>
<td>
@ -628,7 +632,13 @@
</td>
<td></td>
<td>
Tarih:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/
Tarih:{{
dateStore.dateFormat({
date: new Date(),
pattern: 'dd-mm-yy',
splitDate: '/'
})
}}
</td>
</tr>
<tr>

View File

@ -3,8 +3,8 @@
style="
display: inline-block;
width: 100%;
font-size: 14pt;
margin-bottom: 12px;
font-size: 10pt;
margin-bottom: 10px;
text-align: center;
">
MİLLİ PİYANGO İDARESİ GENEL MÜDÜRLÜĞÜ
@ -12,6 +12,10 @@
Bahisler ve Oyunlar Dairesi Başkanlığına
</strong>
<br />
<strong style="font-size: 10pt; margin-bottom: 10px">
PİYANGO ID: {{ piyangoStore.lotteryData.piyangoId }}
</strong>
<br />
<table
cellspacing="0"
class="table-no-line"
@ -19,7 +23,7 @@
<tbody>
<tr>
<td colspan="2">
<strong style="font-size: 10pt; margin-bottom: 12px">
<strong style="font-size: 10pt; margin-bottom: 10px">
1- Piyangoyu Düzenleyenin:
</strong>
</td>
@ -30,7 +34,7 @@
<table
cellspacing="0"
data-pdfmake="{'widths': [ '50%', '50%'],'layout':'pdfTableLayout'}"
style="margin-bottom: 12px; font-size: 10pt">
style="margin-bottom: 10px; font-size: 10pt">
<tbody>
<template v-if="piyangoStore.duzenleyenData.basvuruTipId === 18">
<tr>
@ -160,7 +164,7 @@
<tbody>
<tr>
<td colspan="2">
<strong class="title" style="font-size: 10pt; margin-bottom: 12px">
<strong class="title" style="font-size: 10pt; margin-bottom: 10px">
2- Piyangonun Geçerli Olduğu Yerler:
</strong>
</td>
@ -170,7 +174,7 @@
<table
cellspacing="0"
data-pdfmake="{'widths': [ '50%', '50%'],'layout':'pdfTableLayout'}"
style="margin-bottom: 12px; font-size: 10pt">
style="margin-bottom: 10px; font-size: 10pt">
<tbody>
<tr>
<td colspan="2">
@ -193,7 +197,7 @@
<tbody>
<tr>
<td colspan="2">
<strong class="title" style="font-size: 10pt; margin-bottom: 12px">
<strong class="title" style="font-size: 10pt; margin-bottom: 10px">
3- Basılacak Biletlerin:
</strong>
</td>
@ -203,7 +207,7 @@
<table
data-pdfmake="{'widths': [ '31%', '23%' , '23%' , '23%' ],'layout':'pdfTableLayout'}"
style="margin-bottom: 12px; font-size: 10pt">
style="margin-bottom: 10px; font-size: 10pt">
<thead>
<tr>
<th></th>
@ -279,7 +283,7 @@
<tbody>
<tr>
<td colspan="2">
<strong class="title" style="font-size: 10pt; margin-bottom: 12px">
<strong class="title" style="font-size: 10pt; margin-bottom: 10px">
4- Biletlerin Basımı
</strong>
</td>
@ -289,7 +293,7 @@
<table
data-pdfmake="{'widths': [ '50%', '50%' ],'layout':'pdfTableLayout'}"
style="margin-bottom: 12px; font-size: 10pt">
style="margin-bottom: 10px; font-size: 10pt">
<tbody>
<tr>
<td colspan="2">
@ -314,7 +318,7 @@
<tbody>
<tr>
<td colspan="2">
<strong class="title" style="font-size: 10pt; margin-bottom: 12px">
<strong class="title" style="font-size: 10pt; margin-bottom: 10px">
5- Çekiliş Tarih, Saati ve Adresi:
</strong>
</td>
@ -325,7 +329,7 @@
<table
cellspacing="0"
data-pdfmake="{'widths': [ '50%', '50%'],'layout':'pdfTableLayout'}"
style="margin-bottom: 12px; font-size: 10pt">
style="margin-bottom: 10px; font-size: 10pt">
<tbody>
<tr>
<td colspan="2">
@ -375,7 +379,7 @@
<tbody>
<tr>
<td colspan="2">
<strong class="title" style="font-size: 10pt; margin-bottom: 12px">
<strong class="title" style="font-size: 10pt; margin-bottom: 10px">
6- İkramiye Kazananların İlanı:
</strong>
</td>
@ -386,7 +390,7 @@
<table
cellspacing="0"
data-pdfmake="{'widths': [ '50%', '50%'],'layout':'pdfTableLayout'}"
style="margin-bottom: 12px; font-size: 10pt">
style="margin-bottom: 10px; font-size: 10pt">
<tbody>
<tr>
<td colspan="2">
@ -442,7 +446,7 @@
<tbody>
<tr>
<td colspan="2">
<strong class="title" style="font-size: 10pt; margin-bottom: 12px">
<strong class="title" style="font-size: 10pt; margin-bottom: 10px">
7- Talihlilerin Başvuru Tarihi:
</strong>
</td>
@ -453,7 +457,7 @@
<table
cellspacing="0"
data-pdfmake="{'widths': [ '50%', '50%'],'layout':'pdfTableLayout'}"
style="margin-bottom: 12px; font-size: 10pt">
style="margin-bottom: 10px; font-size: 10pt">
<tbody>
<tr>
<td colspan="2">
@ -488,7 +492,7 @@
<tbody>
<tr>
<td colspan="2">
<strong class="title" style="font-size: 10pt; margin-bottom: 12px">
<strong class="title" style="font-size: 10pt; margin-bottom: 10px">
8- Diğer Hususlar:
</strong>
</td>
@ -499,7 +503,7 @@
<table
cellspacing="0"
data-pdfmake="{'widths': [ '50%', '50%'],'layout':'pdfTableLayout'}"
style="margin-bottom: 12px; font-size: 10pt">
style="margin-bottom: 10px; font-size: 10pt">
<tbody>
<tr>
<td colspan="2">
@ -528,7 +532,7 @@
<tbody>
<tr>
<td colspan="2">
<strong class="title" style="font-size: 10pt; margin-bottom: 12px">
<strong class="title" style="font-size: 10pt; margin-bottom: 10px">
9-Piyangoya Konu İkramiyeler:
</strong>
</td>
@ -539,7 +543,7 @@
<table
cellspacing="0"
data-pdfmake="{'widths': ['10%', '45%', '15%', '15%', '15%'],'layout': 'pdfTableLayout'}"
style="margin-bottom: 12px; font-size: 10pt"
style="margin-bottom: 10px; font-size: 10pt"
v-if="piyangoIkramiyeStore.piyangoAllIkramiyeData.length > 0">
<thead>
<tr>
@ -605,8 +609,6 @@
const dateStore = useDateStore()
import { usePiyangoStore } from '../../stores/piyangoStore'
const piyangoStore = usePiyangoStore()
import { usePiyangoContactStore } from '../../stores/piyangoContactStore'
const piyangoContactStore = usePiyangoContactStore()
import { usePiyangoMecraStore } from '../../stores/piyangoMecraStore'
const piyangoMecraStore = usePiyangoMecraStore()
import { usePiyangoMecraService } from '../../service/piyangoMecraService'
@ -615,8 +617,6 @@
const piyangoIkramiyeStore = usePiyangoIkramiyeStore()
import { usePiyangoIkramiyeService } from '../../service/piyangoIkramiyeService'
const piyangoIkramiyeService = usePiyangoIkramiyeService()
import { useCustomerIrtibatStore } from '@/module/uyeler/stores/customerIrtibatStore'
const customerIrtibatStore = useCustomerIrtibatStore()
import { useCustomerIrtibatService } from '@/module/uyeler/service/customerIrtibatService'
const customerIrtibatService = useCustomerIrtibatService()
import { usePiyangoDataStore } from '../../stores/piyangoDataStore'

View File

@ -29,9 +29,38 @@
</button>
</div>
</div>
<div class="form-inner-comment waiting-d" v-if="!loaded">
Yükleniyor, lütfen bekleyiniz...
</div>
<div class="form-part-content" v-if="loaded">
<lottery-states :piyangoAmac="piyangoStore.lotteryData.amacpiyangoId" />
<template v-if="!piyangoStore.isNew">
<form-display
v-if="
piyangoStore.lotteryData.piyangoId !== undefined &&
piyangoStore.lotteryData.piyangoId !== null
"
v-model="piyangoStore.lotteryData.piyangoId"
label="Piyango ID"
size="1" />
<form-display
type="date"
v-if="
piyangoStore.lotteryData.izinTarihi !== undefined &&
piyangoStore.lotteryData.izinTarihi !== null
"
v-model="piyangoStore.lotteryData.izinTarihi"
half
label="İzin Tarihi" />
<form-display
v-if="
piyangoStore.lotteryData.izinSayisi !== undefined &&
piyangoStore.lotteryData.izinSayisi !== null
"
v-model="piyangoStore.lotteryData.izinSayisi"
half
label="İzin Sayısı" />
</template>
<form-input
modelKey="cekilisBaslik"
v-model="piyangoStore.lotteryData.baslik"
@ -80,7 +109,7 @@
'/uyeler/detay/' +
piyangoStore.lotteryData.baglisirketId +
'/yetkili-uye/detay/' +
piyangoStore.lotteryData.duzenleyenId
piyangoStore.lotteryData.duzenleyenId+'/kisi-kurum-bilgileri'
"
class="button-c">
Üyeyi Kontrol Et
@ -515,7 +544,7 @@
piyangoStore.lotteryApprove = 0
piyangoStore.isNew = false
piyangoStore.ResetLotteryData()
router.push('/piyangolar/detay/' + form.id)
router.push('/piyangolar/detay/' + form.id + '/piyango-bilgileri')
} else {
GetData()
}
@ -602,7 +631,7 @@
let list = await dataStore.dataGet('Auth/userbyuserChildList/' + id)
childUsers.value = list.data.filter((p:Record<string,any>) => {
childUsers.value = list.data.filter((p: Record<string, any>) => {
return p.islemTipId === 4 || p.islemTipi === 'Üyelik Onaylandı'
})

View File

@ -0,0 +1,252 @@
<template>
<div class="form-part form-title" v-if="piyangoDosyaKapamaStore.isNew">
<div class="form-title-buttons">
<div
class="button-c button-save"
@click="piyangoDosyaKapamaService.SaveDosyaKapama()">
Kaydet
</div>
</div>
</div>
<div
:class="[
'form-part',
piyangoDosyaKapamaStore.formChanged && !piyangoDosyaKapamaStore.isNew
? 'changed'
: ''
]">
<div class="form-part-title">
<h4>Teminat İade Evrak Kontrol</h4>
</div>
<div class="form-part-content" v-if="piyangoDosyaKapamaStore.loaded">
<form-input
modelKey="katilimSekli"
v-model="piyangoDosyaKapamaStore.dosyaKapamaData.katilimSekli"
label="1. Katılım Şekli"
placeholder="Katılım Şekli"
@keyup="OnKeyup" />
<form-checkbox
label="2. CD"
v-model="piyangoDosyaKapamaStore.dosyaKapamaData.cD"
@change="OnKeyup" />
<form-checkbox
label="3. Kutu Mühürleme Tutanağı"
v-model="piyangoDosyaKapamaStore.dosyaKapamaData.kutuMuhurlemeTutanagi"
@change="OnKeyup" />
<form-checkbox
label="4. Kutu Açma Tutanağı"
v-model="piyangoDosyaKapamaStore.dosyaKapamaData.kutuAcmaTutanagi"
@change="OnKeyup" />
<div class="form-part-title">
<h4>5. Çekiliş Tutanağı</h4>
</div>
<form-checkbox
label="Çekiliş Tutanağı"
v-model="piyangoDosyaKapamaStore.dosyaKapamaData.cekilisTutanagi"
@change="OnKeyup" />
<form-checkbox
label="Çekiliş izin alınan tarih, saat, adreste yapılmış"
v-model="piyangoDosyaKapamaStore.dosyaKapamaData.cekilisIzinAlinanTarihSaatAdres"
@change="OnKeyup" />
<form-checkbox
label="Çekilişte önceden belirlenen ikramiyeler çekiliş"
v-model="
piyangoDosyaKapamaStore.dosyaKapamaData.cekilisOncedenBelirlenenIkramiyeler
"
@change="OnKeyup" />
<form-checkbox
label="Çekilişte önceden belirlenen ikramiyeler çekiliş"
v-model="
piyangoDosyaKapamaStore.dosyaKapamaData.cekilisOncedenBelirlenenIkramiyeler
"
@change="OnKeyup" />
<form-checkbox
label="Çekiliş numara üzerinden/isimden"
v-model="piyangoDosyaKapamaStore.dosyaKapamaData.cekilisNumaraUzerindenCekilis"
@change="OnKeyup" />
<form-checkbox
label="Dağıtılmayan kupon tespiti"
v-model="piyangoDosyaKapamaStore.dosyaKapamaData.dagitilmayanKuponTespiti"
@change="OnKeyup" />
<div class="form-part-title">
<h4>6. Çekiliş Sonucu İlan</h4>
</div>
<form-checkbox
label="Çekiliş Sonucu İlan"
v-model="piyangoDosyaKapamaStore.dosyaKapamaData.cekilisSonucuIlani"
@change="OnKeyup" />
<form-checkbox
label="Taahhüt edilen tarih ve gazetede ilan"
v-model="piyangoDosyaKapamaStore.dosyaKapamaData.ilandaTarihGazete"
@change="OnKeyup" />
<form-checkbox
label="İlanda toplam katılımcı sayısı"
v-model="piyangoDosyaKapamaStore.dosyaKapamaData.ilandaToplamKatilimci"
@change="OnKeyup" />
<form-checkbox
label="Çekiliş tutanağı ile uyumlu kazanan numara/isim"
v-model="
piyangoDosyaKapamaStore.dosyaKapamaData.cekilisTutanagiIleUyumluKazananlar
"
@change="OnKeyup" />
<form-checkbox
label="İlanda ikramiyeler son teslim süresi"
v-model="piyangoDosyaKapamaStore.dosyaKapamaData.ilanSonBasvuruTeslimSuresi"
@change="OnKeyup" />
<form-input
modelKey="taahhutEdilenIkramiyeAdedi"
v-model="piyangoDosyaKapamaStore.dosyaKapamaData.taahhutEdilenIkramiyeAdedi"
label="7. Taahhüt Edilen İkramiye Adedi"
placeholder="Taahhüt Edilen İkramiye Adedi"
@keydown="validationStore.allowNumbersWithKeys"
@keyup="OnKeyup" />
<div class="form-part-title">
<h4>8. Teslim Edilen İkramiye</h4>
</div>
<form-input
modelKey="teslimEdilenIkramiyeAdedi"
v-model="piyangoDosyaKapamaStore.dosyaKapamaData.teslimEdilenIkramiyeAdedi"
label="Teslim Edilen İkramiye Adedi"
placeholder="Teslim Edilen İkramiye Adedi"
@keydown="validationStore.allowNumbersWithKeys"
@keyup="OnKeyup" />
<form-input
modelKey="asilIkramiyeSayisi"
v-model="piyangoDosyaKapamaStore.dosyaKapamaData.asilIkramiyeSayisi"
label="Teslim Edilen Asıl İkramiye Adedi"
placeholder="Teslim Edilen Asıl İkramiye Adedi"
@keydown="validationStore.allowNumbersWithKeys"
@keyup="OnKeyup" />
<form-input
modelKey="yedekIkramiyeSayisi"
v-model="piyangoDosyaKapamaStore.dosyaKapamaData.yedekIkramiyeSayisi"
label="Teslim Edilen Yedek İkramiye Adedi"
placeholder="Teslim Edilen Yedek İkramiye Adedi"
@keydown="validationStore.allowNumbersWithKeys"
@keyup="OnKeyup" />
<form-checkbox
label="Nüfus Cüzdanları"
v-model="piyangoDosyaKapamaStore.dosyaKapamaData.nufusCuzdani"
@change="OnKeyup" />
<form-checkbox
label="Kazanan numaralı noter onaylı ibraname"
v-model="piyangoDosyaKapamaStore.dosyaKapamaData.noterOnayliIbraname"
@change="OnKeyup" />
<form-checkbox
label="Teslim Belgesi"
v-model="piyangoDosyaKapamaStore.dosyaKapamaData.teslimBelgesi"
@change="OnKeyup" />
<form-checkbox
label="Fatura fotokopileri"
v-model="piyangoDosyaKapamaStore.dosyaKapamaData.faturaFotokopileri"
@change="OnKeyup" />
<form-checkbox
label="Tescile ait belgeler"
v-model="piyangoDosyaKapamaStore.dosyaKapamaData.tescileAitBelgeler"
@change="OnKeyup" />
<div class="form-part-title">
<h4>9. Süresi İçinde Alınmayan İkramiye</h4>
</div>
<form-input
modelKey="sureIcindesAlinmayanIkramiyeAdedi"
v-model="
piyangoDosyaKapamaStore.dosyaKapamaData.sureIcindesAlinmayanIkramiyeAdedi
"
label="Süresi İçinde Alınmayan İkramiye Adedi"
placeholder="Süresi İçinde Alınmayan İkramiye Adedi"
@keydown="validationStore.allowNumbersWithKeys"
@keyup="OnKeyup" />
<form-checkbox
label="Tebligat"
v-model="piyangoDosyaKapamaStore.dosyaKapamaData.tebligat"
@change="OnKeyup" />
<form-checkbox
label="Feragat"
v-model="piyangoDosyaKapamaStore.dosyaKapamaData.feragat"
@change="OnKeyup" />
<form-checkbox
label="Bağış"
v-model="piyangoDosyaKapamaStore.dosyaKapamaData.bagis"
@change="OnKeyup" />
<div class="form-part-title">
<h4>10. Kupon (Aslı) ve Duyuru Örneği</h4>
</div>
<form-checkbox
label="Kupon Aslı"
v-model="piyangoDosyaKapamaStore.dosyaKapamaData.kuponAsli"
@change="OnKeyup" />
<form-checkbox
label="Duyuru Örneği"
v-model="piyangoDosyaKapamaStore.dosyaKapamaData.duyuruMateryali"
@change="OnKeyup" />
<form-date
type="date"
modelKey="ikramiyelerinSonTeslimTarihi"
v-model="piyangoDosyaKapamaStore.dosyaKapamaData.ikramiyelerinSonTeslimTarihi"
label="11. İkramiyelerin Son Teslim Tarihi"
@change="OnKeyup" />
<form-date
type="date"
modelKey="teminatIadeTarihi"
v-model="piyangoDosyaKapamaStore.dosyaKapamaData.teminatIadeTarihi"
label="12. Teminat İade Tarihi"
@change="OnKeyup" />
<div
class="form-item"
v-if="piyangoDosyaKapamaStore.formChanged && !piyangoDosyaKapamaStore.isNew">
<button
class="button-c button-save"
@click="piyangoDosyaKapamaService.SaveDosyaKapama()">
Kaydet
</button>
<button class="button-c button-cancel" @click="CancelSave">Vazgeç</button>
</div>
</div>
</div>
<div class="form-part form-title" v-if="piyangoDosyaKapamaStore.isNew">
<div class="form-title-buttons">
<div
class="button-c button-save"
@click="piyangoDosyaKapamaService.SaveDosyaKapama()">
Kaydet
</div>
</div>
</div>
</template>
<script setup lang="ts">
import { onBeforeMount } from 'vue'
import { usePiyangoDosyaKapamaStore } from '../../stores/piyangoDosyaKapamaStore'
const piyangoDosyaKapamaStore = usePiyangoDosyaKapamaStore()
import { usePiyangoDosyaKapamaService } from '../../service/piyangoDosyaKapamaService'
const piyangoDosyaKapamaService = usePiyangoDosyaKapamaService()
import { useValidationStore } from '@/stores/validationStore'
const validationStore = useValidationStore()
const OnKeyup = () => {
piyangoDosyaKapamaStore.formChanged = true
}
const CancelSave = () => {
piyangoDosyaKapamaStore.RestoreFormData()
piyangoDosyaKapamaStore.formChanged = false
}
onBeforeMount(async () => {
piyangoDosyaKapamaStore.formChanged = false
await piyangoDosyaKapamaService.GetDosyaKapama()
if (piyangoDosyaKapamaStore.isNew) {
piyangoDosyaKapamaStore.ResetFormData()
piyangoDosyaKapamaStore.loaded = true
}
})
</script>

View File

@ -0,0 +1,112 @@
<template>
<div class="form-part section-list" v-if="piyangoDosyaKapamaStore.loaded">
<list-table-content
title="Dosya Kapama İkramiye Listesi"
icon="draws"
:tableHeader="ikramiyeTableHeader"
:rowAction="EditIkramiye"
listText="İkramiye"
:addAction="NewIkramiye"
:apiList="'TeminatIadeEvrak/ByPiyangoId/' + piyangoStore.selectedLottery"
apiText="Dosya Kapama İkramiye Listesi"
v-model:refresh="piyangoDosyaKapamaStore.dosyaKapamaIkramiyeListesiRefresh"
rowNumber />
</div>
<panel-wrapper
wide
v-if="piyangoDosyaKapamaStore.dosyaKapamaIkramiyePanel"
v-model="piyangoDosyaKapamaStore.dosyaKapamaIkramiyePanel"
:panel-title="
piyangoDosyaKapamaStore.isDosyaKapamaIkramiyeUpdate
? 'İkramiye Düzenle'
: 'İkramiye Ekle'
">
<template #panelContent>
<panel-piyango-dosya-kapama-ikramiye />
</template>
<template #footerButton>
<div
class="button-c button-save"
@click="piyangoDosyaKapamaService.SaveDosyaKapamaIkramiye">
{{ piyangoDosyaKapamaStore.isDosyaKapamaIkramiyeUpdate ? 'Kaydet' : 'Ekle' }}
</div>
</template>
</panel-wrapper>
</template>
<script setup lang="ts">
import { ref } from 'vue'
import { usePiyangoStore } from '../../stores/piyangoStore'
const piyangoStore = usePiyangoStore()
import { usePiyangoDosyaKapamaStore } from '../../stores/piyangoDosyaKapamaStore'
const piyangoDosyaKapamaStore = usePiyangoDosyaKapamaStore()
import { usePiyangoDosyaKapamaService } from '../../service/piyangoDosyaKapamaService'
const piyangoDosyaKapamaService = usePiyangoDosyaKapamaService()
import PanelPiyangoDosyaKapamaIkramiye from '../panel/PanelPiyangoDosyaKapamaIkramiye.vue'
import PanelWrapper from '@/components/PanelWrapper.vue'
const ikramiyeTableHeader = ref<Record<string, any>[]>([
{
name: 'tahhutEdilenIkramiye',
title: 'Taahhüt Edilen İkramiye',
style: { width: '20%' },
computeHtml: (v: Record<string, any>) => {
return `<span>${v.tahhutEdilenIkramiyeAdet} ${v.tahhutEdilenIkramiye}</span>`
}
},
{
name: 'teslimEdilenIkramiye',
title: 'Teslim Edilen İkramiye',
style: { width: '20%' },
computeHtml: (v: Record<string, any>) => {
let asil: string = ''
let yedek: string = ''
if (
v.teslimEdilenIkramiyeAsil &&
v.teslimEdilenIkramiyeAsil !== null &&
v.teslimEdilenIkramiyeAsil !== 0 &&
v.teslimEdilenIkramiyeAsil !== ''
) {
asil = `<span >${v.teslimEdilenIkramiyeAsil} ASIL</span>`
}
if (
v.teslimEdilenIkramiyeYedek &&
v.teslimEdilenIkramiyeYedek !== null &&
v.teslimEdilenIkramiyeYedek !== 0 &&
v.teslimEdilenIkramiyeYedek !== ''
) {
yedek = `<span >${v.teslimEdilenIkramiyeYedek} YEDEK</span>`
}
return asil !== ''
? yedek !== ''
? asil + '<br/>' + yedek
: asil
: yedek !== ''
? yedek
: ''
}
},
{
name: 'alinmayanIkramiye',
title: 'Alınmayan İkramiye',
style: { width: '20%' }
},
{
name: 'aciklama',
title: 'Açıklama'
}
])
const NewIkramiye = () => {
piyangoDosyaKapamaStore.ResetIkramiyeFormData()
piyangoDosyaKapamaStore.isDosyaKapamaIkramiyeUpdate = false
piyangoDosyaKapamaStore.dosyaKapamaIkramiyePanel = true
}
const EditIkramiye = (d: Record<string, any>) => {
Object.assign(piyangoDosyaKapamaStore.dosyaKapamaIkramiyeData, d)
piyangoDosyaKapamaStore.dosyaKapamaIkramiyePanel = true
piyangoDosyaKapamaStore.isDosyaKapamaIkramiyeUpdate = true
}
</script>

View File

@ -29,15 +29,9 @@
</panel-wrapper>
</template>
<script setup lang="ts">
import { ref, reactive, onBeforeMount, watch } from 'vue'
import { useDateStore } from '@/stores/dateStore'
const dateStore = useDateStore()
import { ref, onBeforeMount, watch } from 'vue'
import { useGlobalStore } from '@/stores/globalStore'
const globalStore = useGlobalStore()
import { useDataStore } from '@/stores/dataStore'
const dataStore = useDataStore()
import { useValidationStore } from '@/stores/validationStore'
const validationStore = useValidationStore()
import { useUsersStore } from '@/stores/usersStore'
const usersStore = useUsersStore()
import { usePiyangoStore } from '../../stores/piyangoStore'

View File

@ -19,6 +19,29 @@
v-model="piyangoOnayStore.piyangoOnayForm.onayDurumuIslemTipiId"
required
:invalidText="piyangoOnayValidationStore.invalidTexts.onayDurumuIslemTipiId" />
<template v-if="piyangoOnayStore.piyangoOnayForm.onayDurumuIslemTipiId === 4">
<form-input
modelKey="izinSayisi"
v-model="piyangoOnayStore.piyangoOnayForm.izinSayisi"
required
label="İzin Sayı No"
placeholder="İzin Sayı No"
:invalidText="piyangoOnayValidationStore.invalidTexts.izinSayisi"
@keyup="OnKeyup" />
<form-date
type="date"
required
modelKey="izinTarihi"
v-model="piyangoOnayStore.piyangoOnayForm.izinTarihi"
label="İzin Tarihi"
:invalidText="piyangoOnayValidationStore.invalidTexts.izinTarihi"
@change="OnKeyup" />
<form-textarea
v-model="piyangoOnayStore.piyangoOnayForm.izinAciklamasi"
:invalidText="piyangoOnayValidationStore.invalidTexts.izinAciklamasi"
label="İzin Açıklaması"
@keyup="OnKeyup" />
</template>
<form-file
v-model="piyangoOnayStore.piyangoOnayForm.file"
elclass="panel-documents-item"
@ -32,16 +55,7 @@
</div>
</template>
<script setup lang="ts">
import { ref, reactive, onBeforeMount } from 'vue'
import { useDataStore } from '@/stores/dataStore'
const dataStore = useDataStore()
import { useUsersStore } from '@/stores/usersStore'
const usersStore = useUsersStore()
import { useValidationStore } from '@/stores/validationStore'
const validationStore = useValidationStore()
import { usePiyangoStore } from '../../stores/piyangoStore'
const piyangoStore = usePiyangoStore()
import { onBeforeMount } from 'vue'
import { usePiyangoOnayStore } from '../../stores/piyangoOnayStore'
const piyangoOnayStore = usePiyangoOnayStore()
import { usePiyangoOnayValidationStore } from '../../validation/piyangoOnayValidationStore'

View File

@ -0,0 +1,119 @@
<template>
<list-table-content
v-if="loaded"
:tableHeader="tableHeader"
:rowAction="EditOnay"
formTitle="Piyango Onay Durumları"
listText="Kayıt"
:apiList="'OnayDurumu/GetSonOnayDurumlariList/' + piyangoStore.selectedLottery"
apiText="Piyango Onay Log Listesi"
page="form"
:refresh="piyangoOnayStore.refreshList" />
<panel-wrapper
v-if="piyangoOnayStore.onayFormPanel"
v-model="piyangoOnayStore.onayFormPanel"
panel-title="Onay Durumunu Düzenle">
<template #panelContent>
<panel-piyango-onay />
</template>
<template #footerButton>
<div class="button-c button-save" @click="piyangoOnayService.SaveOnayDurumPanel">
Kaydet
</div>
</template>
</panel-wrapper>
</template>
<script setup lang="ts">
import { ref, onBeforeMount, computed } from 'vue'
import PanelPiyangoOnay from '../panel/PanelPiyangoOnay.vue'
import PanelWrapper from '@/components/PanelWrapper.vue'
import { useDateStore } from '@/stores/dateStore'
const dateStore = useDateStore()
import { useGlobalStore } from '@/stores/globalStore'
const globalStore = useGlobalStore()
import { usePiyangoOnayStore } from '../../stores/piyangoOnayStore'
const piyangoOnayStore = usePiyangoOnayStore()
import { usePiyangoOnayService } from '../../service/piyangoOnayService'
const piyangoOnayService = usePiyangoOnayService()
import { usePiyangoStore } from '../../stores/piyangoStore'
const piyangoStore = usePiyangoStore()
import { usePiyangoDataStore } from '../../stores/piyangoDataStore'
const piyangoDataStore = usePiyangoDataStore()
const loaded = ref<boolean>(false)
const piyangoOnayDurumlari = computed<Record<string, any>[]>(() => {
return piyangoDataStore.piyangoOnayDurumlari
})
const tableHeader = ref<Record<string, any>[]>([
{
name: 'tarih',
title: 'Tarih',
compute: (v: Record<string, any>): string => {
return v.tarih === null
? ''
: dateStore.dateFormat({ pattern: 'dd-mm-yy', date: v.tarih })
},
sort: true,
filter: {
type: 'date',
range: true
}
},
{
name: 'kisiAdi',
title: 'Kişi',
sort: true,
style: { width: '20%' }
},
{
name: 'onayDurumuIslemTipiAdi',
title: 'İşlem',
sort: true,
filter: {
type: 'select',
data: piyangoOnayDurumlari,
listVal: 'id',
listText: 'tipAdi',
filterId: 'onayDurumuIslemTipiId'
}
},
{
name: 'aciklama',
title: 'Açıklama'
},
{
dosyaUrl: 'aciklama',
title: 'Dosya',
computeHtml: (v: Record<string, any>) => {
if (v.dosyaUrl !== null && v.dosyaUrl !== undefined) {
return globalStore.TableCellDocument(v.dosyaUrl)
}
},
style: { width: '20%' }
},
{
name: 'izinSayisi',
title: 'İzin Sayısı'
},
{
name: 'izinTarihi',
title: 'İzin Tarihi'
},
{
name: 'izinAciklamasi',
title: 'İzin Açıklaması'
},
])
const EditOnay = (d: Record<string, any>) => {
Object.assign(piyangoOnayStore.piyangoPanelOnayForm, d)
piyangoOnayStore.onayFormPanel = true
}
onBeforeMount(async () => {
loaded.value = true
})
</script>

View File

@ -1,36 +1,25 @@
<template>
<list-table-content
v-if="loaded"
v-if="loaded"
:tableHeader="tableHeader"
formTitle="Piyango Onay Logları"
listText="Kayıt"
:apiList="'OnayDurumu/GetSonOnayDurumlariList/' + piyangoStore.selectedLottery"
:apiList="'OnayDurumLog/Cekilis/' + piyangoStore.selectedLottery"
apiText="Piyango Onay Log Listesi"
page="form"
:refresh="piyangoOnayStore.refreshList" />
</template>
<script setup lang="ts">
import { ref,onBeforeMount,computed } from 'vue'
import axios from 'axios'
import { ref, onBeforeMount, computed } from 'vue'
import { useDateStore } from '@/stores/dateStore'
const dateStore = useDateStore()
import { useGlobalStore } from '@/stores/globalStore'
const globalStore = useGlobalStore()
import { usePiyangoOnayStore } from '../../stores/piyangoOnayStore'
const piyangoOnayStore = usePiyangoOnayStore()
import { usePiyangoStore } from '../../stores/piyangoStore'
const piyangoStore = usePiyangoStore()
import { usePiyangoDataStore } from '../../stores/piyangoDataStore'
const piyangoDataStore = usePiyangoDataStore()
import { usePiyangoServices } from '../../service/piyangoServices'
const piyangoServices = usePiyangoServices()
const loaded = ref<boolean>(false)
const piyangoOnayDurumlari = computed<Record<string, any>[]>(() => {
return piyangoDataStore.piyangoOnayDurumlari
})
const tableHeader = ref<Record<string, any>[]>([
{
name: 'tarih',
@ -41,44 +30,30 @@
: dateStore.dateFormat({ pattern: 'dd-mm-yy', date: v.tarih })
},
sort: true,
filter: {
type: 'date',
range: true
}
filter: {
type: 'date',
range: true
}
},
{
name: 'kisiAdi',
name: 'islemYapanKullanici.email',
title: 'Kişi',
sort: true,
style: { width: '20%' }
},
{
name: 'onayDurumuIslemTipiAdi',
title: 'İşlem',
sort: true,
filter: {
type: 'select',
data: piyangoOnayDurumlari,
listVal: 'id',
listText: 'tipAdi',
filterId: 'onayDurumuIslemTipiId'
}
name: 'eskiDurum',
title: 'Eski Durum'
},
{
name: 'yeniDurum',
title: 'Yeni Durum'
},
{
name: 'aciklama',
title: 'Açıklama',
sort: true,
style: { width: '30%' }
},
{
dosyaUrl: 'aciklama',
title: 'Dosya',
computeHtml: (v: Record<string, any>) => {
if (v.dosyaUrl !== null && v.dosyaUrl !== undefined) {
return globalStore.TableCellDocument(v.dosyaUrl)
}
},
style: { width: '20%' }
}
])

View File

@ -2,6 +2,9 @@
<div class="form-part">
<div class="form-part-title">
<h4>Piyango Resimleri</h4>
<a href="/data/mpi-sablon.zip" class="button-c" target="_blank">
Örnek Resim Şablonları
</a>
</div>
<div class="form-part-content">
<template v-for="(file, i) in fileList">
@ -9,7 +12,17 @@
:data="file"
@click="EditImage"
onlyPreview
:filePath="file.resimYolu" />
:filePath="file.resimYolu">
<template
#actionButtons
v-if="piyangoStore.lotteryApprove === 0 || piyangoStore.lotteryApprove === 3">
<i
class="ico-c ico-btn ico-section back-grad-alert"
@click="DeleteImagePop(file)">
<svg><use href="/src/assets/images/icons.svg#trash"></use></svg>
</i>
</template>
</file-list-item>
</template>
<div
class="form-item form-item-picture clickable"
@ -23,7 +36,9 @@
</i>
</div>
</div>
<div v-if="usersStore.isPanelUser && fileList.length === 0" class="form-inner-comment">
<div
v-if="usersStore.isPanelUser && fileList.length === 0"
class="form-inner-comment">
Eklenmiş resim bulunamadı.
</div>
</div>
@ -57,16 +72,14 @@
const usersStore = useUsersStore()
import { usePiyangoStore } from '../../stores/piyangoStore'
const piyangoStore = usePiyangoStore()
import { useDialogStore } from '@/components/global/dialogStore'
const dialogStore = useDialogStore()
const picturePanel = ref<boolean>(false)
const isUpdate = ref<boolean>(false)
const isFormValid = ref<boolean>(true)
interface IFileList {
[key: string]: any
}
const fileList = ref<IFileList[]>([] as IFileList[])
const fileList = ref<Record<string, any>[]>([])
const AddNewImage = () => {
dataStore.panelData = {
@ -82,7 +95,9 @@
}
const GetData = async () => {
let dt = await dataStore.dataGet('CekilisResim/Cekilis/' + piyangoStore.selectedLottery)
let dt = await dataStore.dataGet(
'CekilisResim/Cekilis/' + piyangoStore.selectedLottery
)
if (dt !== 'errorfalse') fileList.value.splice(0, fileList.value.length, ...dt.data)
}
@ -129,6 +144,30 @@
}
}
}
const DeleteImagePop = (data: Record<string, any>) => {
dialogStore.CreateDialog({
title: 'Resim Sil',
id: 'deleteimage',
content: 'Resimi silmek istediğinize emin misiniz? Bu işlem geri alınamaz.',
closeText: 'Vazgeç',
buttons: [
{
label: 'Resmi Sil',
type: 'alert',
function: () => DeleteImage(data.id)
}
]
})
}
const DeleteImage = async (id: number | string) => {
var dt = await dataStore.dataDelete('CekilisResim/' + id)
if (dt !== 'errorfalse') {
dialogStore.CloseDialog('deleteimage')
await GetData()
}
}
onBeforeMount(async () => {
await GetData()
})

View File

@ -1,135 +0,0 @@
<template>
<div class="form-part form-title">
<div class="form-title-buttons">
<button
class="button-c button-save"
@click="piyangoTeminatService.SaveTeminatDurum"
:disabled="!piyangoTeminatValidationStore.formChanged">
Kaydet
</button>
<button
v-if="piyangoTeminatValidationStore.formChanged"
class="button-c button-cancel panel-close"
@click="piyangoTeminatStore.ResetFormData">
Vazgeç
</button>
</div>
</div>
<div :class="['form-part', piyangoTeminatValidationStore.formChanged ? 'changed' : '']">
<div class="form-part-title">
<h4>Teminat Durumu</h4>
</div>
<div class="form-part-content" v-if="piyangoTeminatStore.loaded">
<form-input
modelKey="amount"
v-model="piyangoTeminatStore.piyangoTeminatFormData.amount"
required
half
label="Tutarı"
minlength="2"
@keyup="OnKeyup"
@keydown="validationStore.allowPrice"
:invalidText="piyangoTeminatValidationStore.invalidTexts.amount" />
<form-select
modelKey="teminatParentType"
v-model="piyangoTeminatStore.piyangoTeminatFormData.teminatParentType"
required
half
label="Para Birimi"
:invalidText="piyangoTeminatValidationStore.invalidTexts.teminatParentType"
:listData="piyangoDataStore.piyangoTeminatParaBirimleri"
listVal="id"
listText="value"
@change="OnKeyup" />
<form-select
label="Teminat Türü"
:listData="piyangoDataStore.piyangoTeminatTurleri"
listText="value"
listVal="id"
half
v-model="piyangoTeminatStore.piyangoTeminatFormData.teminantChildType"
required
:invalidText="piyangoTeminatValidationStore.invalidTexts.teminantChildType"
@change="OnKeyup" />
<form-date
type="date"
half
required
modelKey="teminantDate"
v-model="piyangoTeminatStore.piyangoTeminatFormData.teminantDate"
label="Tarih"
:invalidText="piyangoTeminatValidationStore.invalidTexts.teminantDate"
@change="OnKeyup" />
<form-input
modelKey="teminantNo"
v-model="piyangoTeminatStore.piyangoTeminatFormData.teminantNo"
required
half
label="No"
minlength="2"
:invalidText="piyangoTeminatValidationStore.invalidTexts.teminantNo"
@keyup="OnKeyup" />
<div class="form-item form-item-half"></div>
<form-input
modelKey="bankName"
v-model="piyangoTeminatStore.piyangoTeminatFormData.bankName"
required
half
label="Banka Adı"
minlength="2"
:invalidText="piyangoTeminatValidationStore.invalidTexts.bankName"
@keyup="OnKeyup" />
<form-input
modelKey="bankBranch"
v-model="piyangoTeminatStore.piyangoTeminatFormData.bankBranch"
required
half
label="Banka Şubesi"
minlength="2"
:invalidText="piyangoTeminatValidationStore.invalidTexts.bankBranch"
@keyup="OnKeyup" />
<form-display :disabled="!usersStore.isPanelUser"
label="İşlem Durumu"
v-model="piyangoTeminatStore.piyangoTeminatFormData.stateText" />
<form-file
v-model="piyangoTeminatStore.piyangoTeminatFormData.file"
elclass="panel-documents-item"
:invalidText="piyangoTeminatValidationStore.invalidTexts.file"
@change="OnKeyup" />
<form-textarea
v-model="piyangoTeminatStore.piyangoTeminatFormData.description"
:invalidText="piyangoTeminatValidationStore.invalidTexts.description"
label="Açıklama"
@keyup="OnKeyup" />
</div>
</div>
</template>
<script setup lang="ts">
import { usePiyangoDataStore } from '../../stores/piyangoDataStore'
const piyangoDataStore = usePiyangoDataStore()
import { usePiyangoServices } from '../../service/piyangoServices'
const piyangoServices = usePiyangoServices()
import { useValidationStore } from '@/stores/validationStore'
const validationStore = useValidationStore()
import { usePiyangoTeminatStore } from '../../stores/piyangoTeminatStore'
const piyangoTeminatStore = usePiyangoTeminatStore()
import { usePiyangoTeminatValidationStore } from '../../validation/piyangoTeminatValidationStore'
const piyangoTeminatValidationStore = usePiyangoTeminatValidationStore()
import { usePiyangoTeminatService } from '../../service/piyangoTeminatService'
const piyangoTeminatService = usePiyangoTeminatService()
import { useUsersStore } from '@/stores/usersStore'
const usersStore = useUsersStore()
const OnKeyup = () => {
piyangoTeminatValidationStore.formChanged = true
}
</script>

View File

@ -0,0 +1,136 @@
<template>
<form-select
@change="OnIkramiyeChanged"
modelKey="ikramiyeId"
clearable
label="Kazandığı İkramiye"
:listData="piyangoIkramiyeStore.piyangoAllIkramiyeData"
listText="cinsi"
listVal="id"
v-model="selectedIkramiye"
:invalidText="
piyangoDosyaKapamaValidationStore.ikramiyeInvalidTexts.tahhutEdilenIkramiye
">
<template #activator="data">
{{
data.activatorData !== undefined &&
Object.keys(data.activatorData).length > 0 &&
selectedIkramiye !== null
? data.activatorData.cinsi +
', ' +
data.activatorData.marka +
', ' +
data.activatorData.model +
' (' +
data.activatorData.asilTalihliAdedi +
' adet)'
: 'Lütfen Seçim Yapınız'
}}
</template>
<template #option="data">
{{
data.optionData.cinsi +
', ' +
data.optionData.marka +
', ' +
data.optionData.model +
' (' +
data.optionData.asilTalihliAdedi +
' adet)'
}}
</template>
</form-select>
<div class="form-item">Toplam İkramiye: {{ totalIkramiye }}</div>
<form-input
v-model="piyangoDosyaKapamaStore.dosyaKapamaIkramiyeData.teslimEdilenIkramiyeAsil"
label="Teslim Edilen İkramiye Asil Adet"
modelKey="teslimEdilenIkramiyeAsil"
:invalidText="
piyangoDosyaKapamaValidationStore.ikramiyeInvalidTexts.teslimEdilenIkramiyeAsil
"
@keydown="validationStore.allowNumbersWithKeys"
@keyup="CalculateAlinmayanIkramiye" />
<form-input
v-model="piyangoDosyaKapamaStore.dosyaKapamaIkramiyeData.teslimEdilenIkramiyeYedek"
label="Teslim Edilen İkramiye Yedek Adet"
modelKey="teslimEdilenIkramiyeYedek"
:invalidText="
piyangoDosyaKapamaValidationStore.ikramiyeInvalidTexts.teslimEdilenIkramiyeYedek
"
@keydown="validationStore.allowNumbersWithKeys"
@keyup="CalculateAlinmayanIkramiye" />
<form-input
disabled
v-model="piyangoDosyaKapamaStore.dosyaKapamaIkramiyeData.alinmayanIkramiye"
label="Alınmayan İkramiye Adet"
modelKey="alinmayanIkramiye"
:invalidText="
piyangoDosyaKapamaValidationStore.ikramiyeInvalidTexts.alinmayanIkramiye
" />
<form-input
v-model="piyangoDosyaKapamaStore.dosyaKapamaIkramiyeData.aciklama"
label="Açıklama"
modelKey="aciklama" />
</template>
<script setup lang="ts">
import { onBeforeMount, ref } from 'vue'
import { useValidationStore } from '@/stores/validationStore'
const validationStore = useValidationStore()
import { usePiyangoDosyaKapamaStore } from '../../stores/piyangoDosyaKapamaStore'
const piyangoDosyaKapamaStore = usePiyangoDosyaKapamaStore()
import { usePiyangoDosyaKapamaValidationStore } from '../../validation/piyangoDosyaKapamaValidationStore'
const piyangoDosyaKapamaValidationStore = usePiyangoDosyaKapamaValidationStore()
import { usePiyangoIkramiyeService } from '../../service/piyangoIkramiyeService'
const piyangoIkramiyeService = usePiyangoIkramiyeService()
import { usePiyangoIkramiyeStore } from '../../stores/piyangoIkramiyeStore'
const piyangoIkramiyeStore = usePiyangoIkramiyeStore()
const selectedIkramiye = ref<string | number | null>(null)
const totalIkramiye = ref<number | null>(null)
const CalculateAlinmayanIkramiye = () => {
piyangoDosyaKapamaStore.dosyaKapamaIkramiyeData.alinmayanIkramiye =
Number(totalIkramiye.value) -
Number(
piyangoDosyaKapamaStore.dosyaKapamaIkramiyeData.teslimEdilenIkramiyeAsil || 0
) -
Number(
piyangoDosyaKapamaStore.dosyaKapamaIkramiyeData.teslimEdilenIkramiyeYedek || 0
)
piyangoDosyaKapamaStore.dosyaKapamaIkramiyeData.teslimEdilenIkramiye =
Number(
piyangoDosyaKapamaStore.dosyaKapamaIkramiyeData.teslimEdilenIkramiyeAsil || 0
) +
Number(
piyangoDosyaKapamaStore.dosyaKapamaIkramiyeData.teslimEdilenIkramiyeYedek || 0
)
}
const OnIkramiyeChanged = (e: Event, val: any, item: Record<string, any>) => {
piyangoDosyaKapamaStore.dosyaKapamaIkramiyeData.tahhutEdilenIkramiye = `
${item.cinsi}, ${item.marka}, ${item.model}, (${item.asilTalihliAdedi} adet)
`
piyangoDosyaKapamaStore.dosyaKapamaIkramiyeData.tahhutEdilenIkramiyeAdet =
item.asilTalihliAdedi
}
onBeforeMount(async () => {
if (piyangoIkramiyeStore.piyangoAllIkramiyeData.length === 0)
await piyangoIkramiyeService.GetAllIkramiyeler()
piyangoIkramiyeStore.piyangoAllIkramiyeData.forEach((item) => {
if (
`${item.cinsi}, ${item.marka}, ${item.model}, (${item.asilTalihliAdedi} adet)` ===
piyangoDosyaKapamaStore.dosyaKapamaIkramiyeData.tahhutEdilenIkramiye
) {
selectedIkramiye.value = item.id
}
})
totalIkramiye.value = piyangoIkramiyeStore.piyangoAllIkramiyeData.reduce(
(acc, item) => acc + (item.asilTalihliAdedi || 0),
0
)
})
</script>

View File

@ -0,0 +1,65 @@
<template>
<div class="form-part-content" v-if="piyangoOnayStore.onayPanelLoaded">
<form-select
label="İşlem"
:listData="piyangoDataStore.piyangoOnayDurumlari"
listText="tipAdi"
listVal="islemId"
v-model="piyangoOnayStore.piyangoPanelOnayForm.onayDurumuIslemTipiId"
required
:invalidText="piyangoOnayValidationStore.invalidTextsPanel.onayDurumuIslemTipiId" />
<template v-if="piyangoOnayStore.piyangoPanelOnayForm.onayDurumuIslemTipiId === 4">
<form-input
modelKey="izinSayisi"
v-model="piyangoOnayStore.piyangoPanelOnayForm.izinSayisi"
required
label="İzin Sayı No"
placeholder="İzin Sayı No"
:invalidText="piyangoOnayValidationStore.invalidTextsPanel.izinSayisi"
@keyup="OnKeyup" />
<form-date
type="date"
required
modelKey="izinTarihi"
v-model="piyangoOnayStore.piyangoPanelOnayForm.izinTarihi"
label="İzin Tarihi"
:invalidText="piyangoOnayValidationStore.invalidTextsPanel.izinTarihi"
@change="OnKeyup" />
<form-textarea
v-model="piyangoOnayStore.piyangoPanelOnayForm.izinAciklamasi"
:invalidText="piyangoOnayValidationStore.invalidTextsPanel.izinAciklamasi"
label="İzin Açıklaması"
@keyup="OnKeyup" />
</template>
<form-file
v-model="piyangoOnayStore.piyangoPanelOnayForm.file"
elclass="panel-documents-item"
:invalidText="piyangoOnayValidationStore.invalidTextsPanel.file" />
<form-textarea
v-model="piyangoOnayStore.piyangoPanelOnayForm.aciklama"
:invalidText="piyangoOnayValidationStore.invalidTextsPanel.aciklama"
label="Açıklama"
@keyup="OnKeyup" />
</div>
</template>
<script setup lang="ts">
import { onBeforeMount } from 'vue'
import { usePiyangoOnayStore } from '../../stores/piyangoOnayStore'
const piyangoOnayStore = usePiyangoOnayStore()
import { usePiyangoOnayValidationStore } from '../../validation/piyangoOnayValidationStore'
const piyangoOnayValidationStore = usePiyangoOnayValidationStore()
import { usePiyangoDataStore } from '../../stores/piyangoDataStore'
const piyangoDataStore = usePiyangoDataStore()
import { usePiyangoServices } from '../../service/piyangoServices'
const piyangoServices = usePiyangoServices()
const OnKeyup = () => {
piyangoOnayValidationStore.formChanged = true
}
onBeforeMount(async () => {
await piyangoServices.GetPiyangoOnayDurumList()
piyangoDataStore.RemoveOnayDurumIncelemeBekleniyor()
piyangoOnayStore.onayPanelLoaded = true
})
</script>

View File

@ -10,7 +10,40 @@
required
:invalidText="piyangoTeminatValidationStore.invalidTexts.state"
@change="OnKeyup"
:disabled="!usersStore.isPanelUser"/>
:disabled="!usersStore.isPanelUser" />
<template
v-if="
piyangoTeminatStore.piyangoTeminatFormData.state === 2 ||
piyangoTeminatStore.piyangoTeminatFormData.state === 3
">
<form-date
type="date"
half
modelKey="refundDate"
v-model="piyangoTeminatStore.piyangoTeminatFormData.refundDate"
label="İade Tarihi"
:invalidText="piyangoTeminatValidationStore.invalidTexts.refundDate"
@change="OnKeyup" />
<form-input
modelKey="refundCount"
v-model="piyangoTeminatStore.piyangoTeminatFormData.refundCount"
half
label="Sayısı"
@keyup="OnKeyup"
:invalidText="piyangoTeminatValidationStore.invalidTexts.refundCount" />
<form-file
v-model="piyangoTeminatStore.piyangoTeminatFormData.refundDocumentUrl"
label='Klasör Arşiv'
elclass="panel-documents-item"
:invalidText="piyangoTeminatValidationStore.invalidTexts.refundDocumentUrl"
@change="OnKeyup" />
<form-input
modelKey="refundDescription"
v-model="piyangoTeminatStore.piyangoTeminatFormData.refundDescription"
label="İade Açıklama"
@keyup="OnKeyup" />
</template>
<form-display
v-model="piyangoTeminatStore.piyangoTeminatFormData.amount"
@ -51,7 +84,10 @@
label="Banka Şubesi" />
<file-list-item
v-if="piyangoTeminatStore.piyangoTeminatFormData.teminantDocumentUrl !== null && piyangoTeminatStore.piyangoTeminatFormData.teminantDocumentUrl !== undefined"
v-if="
piyangoTeminatStore.piyangoTeminatFormData.teminantDocumentUrl !== null &&
piyangoTeminatStore.piyangoTeminatFormData.teminantDocumentUrl !== undefined
"
title="Dosya"
:data="piyangoTeminatStore.piyangoTeminatFormData"
:editable="false"

View File

@ -2,4 +2,4 @@ import piyangoListe from '@/module/cekilisler/routes/piyango-liste'
import piyangoYeni from '@/module/cekilisler/routes/piyango-yeni'
import piyangoDetay from '@/module/cekilisler/routes/piyango-detay'
export default [piyangoListe, piyangoYeni, piyangoDetay]
export default [piyangoListe, piyangoYeni, ...piyangoDetay]

View File

@ -1,10 +1,19 @@
import PiyangoDetay from '@/module/cekilisler/views/PiyangoDetay.vue'
export default {
path: '/piyangolar/detay/:piyangoId',
name: 'PiyangoDetay',
component: PiyangoDetay,
meta: {
authRequired: true
export default [
{
path: '/piyangolar/detay/:piyangoId/',
redirect: (to:Record<string,any>) => ({
name: 'PiyangoDetay',
params: { piyangoId: to.params.piyangoId, tabid: 'piyango-bilgileri' }
})
},
{
path: '/piyangolar/detay/:piyangoId/:tabid',
name: 'PiyangoDetay',
component: PiyangoDetay,
meta: {
authRequired: true
}
}
}
]

View File

@ -0,0 +1,84 @@
import { defineStore } from 'pinia'
import { useDataStore } from '@/stores/dataStore'
import { usePiyangoStore } from '../stores/piyangoStore'
import { usePiyangoDosyaKapamaStore } from '../stores/piyangoDosyaKapamaStore'
import { usePiyangoDosyaKapamaValidationStore } from '../validation/piyangoDosyaKapamaValidationStore'
export const usePiyangoDosyaKapamaService = defineStore(
'piyangoDosyaKapamaService',
() => {
const dataStore = useDataStore()
const piyangoStore = usePiyangoStore()
const piyangoDosyaKapamaStore = usePiyangoDosyaKapamaStore()
const piyangoDosyaKapamaValidationStore = usePiyangoDosyaKapamaValidationStore()
const GetDosyaKapama = async () => {
let data: Record<string, any> | any = await dataStore.dataGet(
'TeminatIadeEvrakKontrol/' + piyangoStore.selectedLottery
)
if (data !== 'errorfalse' || data.data.id === undefined) {
Object.assign(piyangoDosyaKapamaStore.dosyaKapamaData, data)
Object.assign(piyangoDosyaKapamaStore.safeDosyaKapamaData, data)
piyangoDosyaKapamaStore.isNew = false
setTimeout(() => {
piyangoDosyaKapamaStore.loaded = true
}, 30)
} else {
piyangoDosyaKapamaStore.isNew = true
}
}
const SaveDosyaKapama = async () => {
let dt: any
const localData = Object.assign({}, piyangoDosyaKapamaStore.dosyaKapamaData)
if (localData.cekilisId === undefined)
localData.cekilisId = piyangoStore.selectedLottery
if (piyangoDosyaKapamaStore.isNew) {
dt = await dataStore.dataPost('TeminatIadeEvrakKontrol', {
data: localData
})
} else {
dt = await dataStore.dataPut('TeminatIadeEvrakKontrol/' + localData.id, {
data: localData
})
}
if (dt !== 'errorfalse') {
piyangoDosyaKapamaStore.isUpdate = false
await GetDosyaKapama()
}
}
const SaveDosyaKapamaIkramiye = async () => {
if (piyangoDosyaKapamaValidationStore.IkramiyeFormCheck()) {
let dt: any
const localData = Object.assign(
{},
piyangoDosyaKapamaStore.dosyaKapamaIkramiyeData
)
if (localData.cekilisId === undefined)
localData.cekilisId = piyangoStore.selectedLottery
if (!piyangoDosyaKapamaStore.isDosyaKapamaIkramiyeUpdate) {
dt = await dataStore.dataPost('TeminatIadeEvrak', {
data: localData
})
} else {
dt = await dataStore.dataPut('TeminatIadeEvrak/' + localData.id, {
data: localData
})
}
if (dt !== 'errorfalse') {
piyangoDosyaKapamaStore.isDosyaKapamaIkramiyeUpdate = false
piyangoDosyaKapamaStore.dosyaKapamaIkramiyePanel = false
piyangoDosyaKapamaStore.dosyaKapamaIkramiyeListesiRefresh = true
}
} else {
piyangoDosyaKapamaValidationStore.isIkramiyeFormValid = true
}
}
return { GetDosyaKapama, SaveDosyaKapama, SaveDosyaKapamaIkramiye }
}
)

View File

@ -17,6 +17,12 @@ export const usePiyangoOnayService = defineStore('piyangoOnayService', () => {
piyangoOnayStore.loaded = false
let form: any
let dataForm = new FormData()
if (piyangoOnayStore.piyangoOnayForm.onayDurumuIslemTipiId !== 4) {
piyangoOnayStore.piyangoOnayForm.izinSayisi = ''
piyangoOnayStore.piyangoOnayForm.izinTarihi = ''
piyangoOnayStore.piyangoOnayForm.izinAciklamasi = ''
}
dataForm.append(
'onayDurumuIslemTipiId',
piyangoOnayStore.piyangoOnayForm.onayDurumuIslemTipiId
@ -25,6 +31,9 @@ export const usePiyangoOnayService = defineStore('piyangoOnayService', () => {
dataForm.append('kisiId', String(usersStore.userId))
dataForm.append('file', piyangoOnayStore.piyangoOnayForm.file)
dataForm.append('aciklama', piyangoOnayStore.piyangoOnayForm.aciklama)
dataForm.append('izinSayisi', piyangoOnayStore.piyangoOnayForm.izinSayisi)
dataForm.append('izinTarihi', piyangoOnayStore.piyangoOnayForm.izinTarihi)
dataForm.append('izinAciklamasi', piyangoOnayStore.piyangoOnayForm.izinAciklamasi)
form = await dataStore.dataPost('OnayDurumu/', {
data: dataForm,
@ -46,5 +55,48 @@ export const usePiyangoOnayService = defineStore('piyangoOnayService', () => {
piyangoOnayValidationStore.isFormValid = true
}
}
return { SaveOnayDurum }
const SaveOnayDurumPanel = async () => {
if (piyangoOnayValidationStore.FormPanelCheck()) {
let form: any
let dataForm = new FormData()
if (piyangoOnayStore.piyangoPanelOnayForm.onayDurumuIslemTipiId !== 4) {
piyangoOnayStore.piyangoPanelOnayForm.izinSayisi = ''
piyangoOnayStore.piyangoPanelOnayForm.izinTarihi = ''
piyangoOnayStore.piyangoPanelOnayForm.izinAciklamasi = ''
}
dataForm.append(
'onayDurumuIslemTipiId',
piyangoOnayStore.piyangoOnayForm.onayDurumuIslemTipiId
)
dataForm.append('id', piyangoOnayStore.piyangoPanelOnayForm.id)
dataForm.append('onayCekilisId', String(piyangoStore.selectedLottery))
dataForm.append('kisiId', String(usersStore.userId))
dataForm.append('file', piyangoOnayStore.piyangoPanelOnayForm.file)
dataForm.append('aciklama', piyangoOnayStore.piyangoPanelOnayForm.aciklama)
dataForm.append('izinSayisi', piyangoOnayStore.piyangoPanelOnayForm.izinSayisi)
dataForm.append('izinTarihi', piyangoOnayStore.piyangoPanelOnayForm.izinTarihi)
dataForm.append(
'izinAciklamasi',
piyangoOnayStore.piyangoPanelOnayForm.izinAciklamasi
)
form = await dataStore.dataPut(
'OnayDurumu/' + piyangoOnayStore.piyangoPanelOnayForm.id,
{
data: dataForm,
headers: { 'Content-Type': 'multipart/form-data' },
toast: { toast: 'Onay durumu başarıyla kaydedildi', type: 'success' }
}
)
if (form !== 'errorfalse') {
piyangoOnayStore.refreshList = true
}
} else {
piyangoOnayValidationStore.isPanelFormValid = true
}
}
return { SaveOnayDurum, SaveOnayDurumPanel }
})

View File

@ -52,6 +52,11 @@ export const usePiyangoServices = defineStore('piyangoServices', () => {
}
const GetPiyangoTeminatDurumList = async () => {
if (piyangoDataStore.piyangoTeminatDurumlari.length === 0) {
/*
1: Açık
2: İade
3: Zaman Aşımı İade
*/
let data = await dataStore.dataGet('TeminantStates/Durumlar')
piyangoDataStore.piyangoTeminatDurumlari = data
}

View File

@ -20,7 +20,10 @@ export const usePiyangoTeminatService = defineStore('piyangoTeminatService', ()
let dataForm = new FormData()
dataForm.append('state', piyangoTeminatStore.piyangoTeminatFormData.state)
dataForm.append('amount', globalStore.floatEnLocale(piyangoTeminatStore.piyangoTeminatFormData.amount))
dataForm.append(
'amount',
globalStore.floatEnLocale(piyangoTeminatStore.piyangoTeminatFormData.amount)
)
dataForm.append('bankName', piyangoTeminatStore.piyangoTeminatFormData.bankName)
dataForm.append('bankBranch', piyangoTeminatStore.piyangoTeminatFormData.bankBranch)
dataForm.append(
@ -43,6 +46,32 @@ export const usePiyangoTeminatService = defineStore('piyangoTeminatService', ()
'description',
piyangoTeminatStore.piyangoTeminatFormData.description
)
if (usersStore.isPanelUser) {
if (piyangoTeminatStore.piyangoTeminatFormData.state === 1) {
piyangoTeminatStore.piyangoTeminatFormData.refundDate = ''
piyangoTeminatStore.piyangoTeminatFormData.refundCount = ''
piyangoTeminatStore.piyangoTeminatFormData.refundDocumentUrl = ''
piyangoTeminatStore.piyangoTeminatFormData.refundDescription = ''
}
dataForm.append(
'refundDate',
String(piyangoTeminatStore.piyangoTeminatFormData.refundDate)
)
dataForm.append(
'refundCount',
String(piyangoTeminatStore.piyangoTeminatFormData.refundCount)
)
dataForm.append(
'refundDocumentUrl',
piyangoTeminatStore.piyangoTeminatFormData.refundDocumentUrl
)
dataForm.append(
'refundDescription',
piyangoTeminatStore.piyangoTeminatFormData.refundDescription
)
}
if (piyangoTeminatStore.isNew) {
form = await dataStore.dataPost('TeminantStates/', {
data: dataForm,

View File

@ -1,34 +1,48 @@
import * as signalR from "@microsoft/signalr";
import { v4 as uuidv4 } from "uuid";
import * as signalR from '@microsoft/signalr'
let connection: signalR.HubConnection;
let connectionId = "";
let connection: signalR.HubConnection
let connectionId = ''
export const connectToHub = async () => {
connection = new signalR.HubConnectionBuilder()
.withUrl("https://panelapi.cekilisevi.gov.tr/uploadHub", {
withCredentials: false // Bu zorunlu, yoksa cookie vs gönderilmez
}) // backend adresine göre düzenle
.withAutomaticReconnect()
.build();
console.log('Connecting to SignalR Hub...')
// Mevcut bağlantı varsa kapat
if (connection && connection.state === signalR.HubConnectionState.Connected) {
await connection.stop()
}
await connection.start();
connectionId = connection.connectionId || uuidv4(); // SignalR id'si ya da frontend'de de guid üretilebilir
return connectionId;
};
connection = new signalR.HubConnectionBuilder()
.withUrl(import.meta.env.VITE_SOCKET_URL, {
withCredentials: true,
skipNegotiation: true, // WebSocket kullanırken negotiation atlanabilir
transport: signalR.HttpTransportType.WebSockets
})
.withAutomaticReconnect()
.build()
// Eventleri ekle
onProgress((data) => console.log('progress', data))
onInsertProgress((data) => console.log('insert progress', data))
onCompleted((data) => console.log('completed', data))
onError((data) => console.log('error', data))
await connection.start()
connectionId = await connection.invoke<string>('GetConnectionId')
console.log('Connected to SignalR Hub with Connection ID:', connectionId)
return connectionId
}
export const onProgress = (callback: (data: any) => void) => {
connection.on("ReceiveProgress", callback);
};
connection.on('ReceiveProgress', callback)
}
export const onInsertProgress = (callback: (data: any) => void) => {
connection.on("ReceiveInsertProgress", callback);
};
connection.on('ReceiveInsertProgress', callback)
}
export const onCompleted = (callback: (data: any) => void) => {
connection.on("ReceiveCompleted", callback);
};
connection.on('ReceiveCompleted', callback)
}
export const onError = (callback: (data: any) => void) => {
connection.on("ReceiveError", callback);
};
connection.on('ReceiveError', callback)
}

View File

@ -0,0 +1,104 @@
import { defineStore } from 'pinia'
import { ref, reactive } from 'vue'
import { useGlobalStore } from '@/stores/globalStore'
import { usePiyangoStore } from './piyangoStore'
export const usePiyangoDosyaKapamaStore = defineStore('piyangoDosyaKapamaStore', () => {
const globalStore = useGlobalStore()
const piyangoStore = usePiyangoStore()
const baseDosyaKapamaData = reactive<Record<string, any>>({
katilimSekli: '',
cD: false,
kutuMuhurlemeTutanagi: false,
kutuAcmaTutanagi: false,
cekilisTutanagi: false,
cekilisIzinAlinanTarihSaatAdres: false,
oncedenBelirlenenIkramiyeCekilis: false,
cekilisNumaraUzerindenCekilis: false,
dagitilmayanKuponTespiti: false,
cekilisSonucuIlan: false,
ilandaTarihGazete: false,
ilandaToplamKatilimci: false,
cekilisTutanagiIleUyumluKazananlar: false,
ilanSonBasvuruTeslimSuresi: false,
taahhutEdilenIkramiyeAdedi: null,
teslimEdilenIkramiyeAdedi: null,
asilIkramiyeSayisi: null,
yedekIkramiyeSayisi: null,
nufusCuzdani: false,
noterOnayliIbraname: false,
teslimBelgesi: false,
faturaFotokopileri: false,
tescileAitBelgeler: false,
sureIcindesAlinmayanIkramiyeAdedi: null,
tebligat: false,
feragat: false,
bagis: false,
kuponAsli: false,
duyuruMateryali: false,
ikramiyelerinSonTeslimTarihi: '',
teminatIadeTarihi: '',
cekilisId: piyangoStore.selectedLottery
})
const baseDosyaKapamaIkramiyeData = reactive<Record<string, any>>({
taahhutEdilenIkramiye: '',
tahhutEdilenIkramiyeAdet: '',
teslimEdilenIkramiyeAsil: '',
teslimEdilenIkramiyeYedek: '',
teslimEdilenIkramiye: '',
alinmayanIkramiye: '',
aciklama: '',
cekilisId: piyangoStore.selectedLottery
})
const dosyaKapamaData = reactive<Record<string, any>>({})
const safeDosyaKapamaData = reactive<Record<string, any>>({})
const isNew = ref<boolean>(false)
const isUpdate = ref<boolean>(false)
const formChanged = ref<boolean>(false)
const loaded = ref<boolean>(false)
const dosyaKapamaIkramiyeData = reactive<Record<string, any>>({})
const safeDosyaKapamaIkramiyeData = reactive<Record<string, any>>({})
const isDosyaKapamaIkramiyeUpdate = ref<boolean>(false)
const isDosyaKapamaIkramiyeFormChanged = ref<boolean>(false)
const isDosyaKapamaIkramiyeLoaded = ref<boolean>(false)
const dosyaKapamaIkramiyeListesiRefresh = ref<boolean>(false)
const dosyaKapamaIkramiyePanel = ref<boolean>(false)
const ResetFormData = () => {
globalStore.ResetObject(dosyaKapamaData, baseDosyaKapamaData)
Object.assign(dosyaKapamaData, baseDosyaKapamaData)
}
const RestoreFormData = () => {
globalStore.ResetObject(dosyaKapamaData, baseDosyaKapamaData)
Object.assign(dosyaKapamaData, safeDosyaKapamaData)
}
const ResetIkramiyeFormData = () => {
globalStore.ResetObject(dosyaKapamaIkramiyeData, baseDosyaKapamaIkramiyeData)
Object.assign(dosyaKapamaIkramiyeData, baseDosyaKapamaIkramiyeData)
}
return {
baseDosyaKapamaData,
dosyaKapamaData,
safeDosyaKapamaData,
isNew,
isUpdate,
formChanged,
loaded,
baseDosyaKapamaIkramiyeData,
dosyaKapamaIkramiyeData,
safeDosyaKapamaIkramiyeData,
isDosyaKapamaIkramiyeUpdate,
isDosyaKapamaIkramiyeFormChanged,
isDosyaKapamaIkramiyeLoaded,
dosyaKapamaIkramiyeListesiRefresh,
dosyaKapamaIkramiyePanel,
ResetFormData,
RestoreFormData,
ResetIkramiyeFormData
}
})

View File

@ -31,6 +31,7 @@ export const usePiyangoIkramiyeStore = defineStore('piyangoIkramiyeStore', () =>
const refreshList = ref<boolean>(false)
const ikramiyePanel = ref<boolean>(false)
const loaded = ref<boolean>(false)
const totalIkramiyeValue = ref<number>(0)
const totalIkramiyeValues = reactive<Record<string, any>>({
yedekTalihliAdedi: 'toplamyedektalihli',
@ -69,6 +70,7 @@ export const usePiyangoIkramiyeStore = defineStore('piyangoIkramiyeStore', () =>
ikramiyePanel,
loaded,
totalIkramiyeValues,
totalIkramiyeValue,
ResetForm,
CalculateToplamDeger
}

View File

@ -12,13 +12,19 @@ export const usePiyangoOnayStore = defineStore('piyangoOnayStore', () => {
onayCekilisId: piyangoStore.selectedLottery,
kisiId: usersStore.userId,
aciklama: '',
file: ''
file: '',
izinSayisi: '',
izinTarihi: '',
izinAciklamasi: ''
})
const piyangoOnayForm = reactive<Record<string, any>>({})
const piyangoPanelOnayForm = reactive<Record<string, any>>({})
const piyangoOnaySafeForm = reactive<Record<string, any>>({})
const isUpdate = ref<boolean>(false)
const refreshList = ref<boolean>(false)
const loaded = ref<boolean>(false)
const onayPanelLoaded = ref<boolean>(false)
const onayFormPanel = ref<boolean>(false)
const ResetForm = () => {
Object.assign(piyangoOnayForm, piyangoOnayBaseForm)
@ -27,10 +33,13 @@ export const usePiyangoOnayStore = defineStore('piyangoOnayStore', () => {
return {
piyangoOnayBaseForm,
piyangoOnayForm,
piyangoPanelOnayForm,
piyangoOnaySafeForm,
isUpdate,
refreshList,
loaded,
onayPanelLoaded,
onayFormPanel,
ResetForm
}
})

View File

@ -48,7 +48,7 @@ export const usePiyangoStore = defineStore('piyangoStore', () => {
])
const baseLotteryData = reactive<Record<string, any>>({
amac:'',
amac: '',
amacpiyangoId: null,
duzenleyenId: null,
baslik: '',
@ -91,13 +91,14 @@ export const usePiyangoStore = defineStore('piyangoStore', () => {
const duzenleyenLink = computed<string | null>(() => {
if (lotteryData.baglisirketId === null && lotteryData.duzenleyenId !== null)
return '/uyeler/detay/' + lotteryData.duzenleyenId
return '/uyeler/detay/' + lotteryData.duzenleyenId + '/uye-bilgileri'
else if (lotteryData.duzenleyenId !== null && lotteryData.baglisirketId !== null)
return (
'/uyeler/detay/' +
araciUyeData.baglisirketId +
lotteryData.baglisirketId +
'/yetkili-uye/detay/' +
lotteryData.duzenleyenId
lotteryData.duzenleyenId +
'/kisi-kurum-bilgileri'
)
else return null
})
@ -122,8 +123,8 @@ export const usePiyangoStore = defineStore('piyangoStore', () => {
Object.assign(lotteryData, baseLotteryData)
lotteryApprove.value = null
selectedLottery.value = null
lotteryData.kapsamIl.splice(0,lotteryData.kapsamIl.length)
lotteryData.kapsamIlce.splice(0,lotteryData.kapsamIlce.length)
lotteryData.kapsamIl.splice(0, lotteryData.kapsamIl.length)
lotteryData.kapsamIlce.splice(0, lotteryData.kapsamIlce.length)
}
const ResetLotteryContent = () => {

View File

@ -23,7 +23,11 @@ export const usePiyangoTeminatStore = defineStore('piyangoTeminatStore', () => {
cekilisId: piyangoStore.selectedLottery,
kisiId: usersStore.userId,
description: '',
file: ''
file: '',
refundDate: '',
refundCount: '',
refundDocumentUrl: '',
refundDescription:''
})
const piyangoTeminatFormData = reactive<Record<string, any>>({})
@ -31,7 +35,7 @@ export const usePiyangoTeminatStore = defineStore('piyangoTeminatStore', () => {
const loaded = ref<boolean>(false)
const isNew = ref<boolean>(false)
const teminatPanel = ref<boolean>(false)
const selectedTeminatId = ref<number|null>(null)
const selectedTeminatId = ref<number | null>(null)
const refreshList = ref<boolean>(false)
const ResetFormData = () => {

View File

@ -0,0 +1,125 @@
import { defineStore } from 'pinia'
import { ref, reactive } from 'vue'
import { useValidationStore } from '@/stores/validationStore'
import { usePiyangoDosyaKapamaStore } from '../stores/piyangoDosyaKapamaStore'
export const usePiyangoDosyaKapamaValidationStore = defineStore(
'piyangoDosyaKapamaValidationStore',
() => {
const piyangoDosyaKapamaStore = usePiyangoDosyaKapamaStore()
const validationStore = useValidationStore()
const isFormValid = ref<boolean>(true)
const invalidTexts = reactive<Record<string, any>>({})
const isIkramiyeFormValid = ref<boolean>(true)
const ikramiyeInvalidTexts = reactive<Record<string, any>>({})
const FormCheck = (): boolean => {
Object.assign(invalidTexts, {})
validationStore.IsFieldEmpty(
piyangoDosyaKapamaStore.dosyaKapamaData,
invalidTexts,
'mecraAdi',
'Yayınlanacak mecranın adını yazınız.'
)
isFormValid.value = Object.keys(invalidTexts).length === 0
return isFormValid.value
}
const IkramiyeFormCheck = (): boolean => {
Object.assign(ikramiyeInvalidTexts, {})
validationStore.IsFieldEmpty(
piyangoDosyaKapamaStore.dosyaKapamaIkramiyeData,
ikramiyeInvalidTexts,
'tahhutEdilenIkramiye',
'Lütfen taahhüt edilen ikramiyeyi seçiniz.'
)
if (
validationStore.checkEmpty(
piyangoDosyaKapamaStore.dosyaKapamaIkramiyeData.tahhutEdilenIkramiyeAdet
)
) {
isIkramiyeFormValid.value = false
ikramiyeInvalidTexts.tahhutEdilenIkramiye =
'Lütfen taahhüt edilen ikramiyeyi seçiniz.'
}
if (
validationStore.checkEmpty(
piyangoDosyaKapamaStore.dosyaKapamaIkramiyeData.teslimEdilenIkramiyeAsil
) &&
validationStore.checkEmpty(
piyangoDosyaKapamaStore.dosyaKapamaIkramiyeData.teslimEdilenIkramiyeYedek
)
) {
isIkramiyeFormValid.value = false
ikramiyeInvalidTexts.teslimEdilenIkramiyeAsil =
'Yedek ve asil talihli alanlarının en az biri dolu olmalıdır'
ikramiyeInvalidTexts.teslimEdilenIkramiyeYedek =
'Yedek ve asil talihli alanlarının en az biri dolu olmalıdır'
}
if (
!validationStore.checkEmpty(
piyangoDosyaKapamaStore.dosyaKapamaIkramiyeData.teslimEdilenIkramiyeAsil
) &&
!validationStore.checkEmpty(
piyangoDosyaKapamaStore.dosyaKapamaIkramiyeData.teslimEdilenIkramiyeYedek
)
) {
if (
Number(
piyangoDosyaKapamaStore.dosyaKapamaIkramiyeData.teslimEdilenIkramiyeAsil
) +
Number(
piyangoDosyaKapamaStore.dosyaKapamaIkramiyeData.teslimEdilenIkramiyeYedek
) !==
Number(piyangoDosyaKapamaStore.dosyaKapamaIkramiyeData.tahhutEdilenIkramiyeAdet)
) {
isIkramiyeFormValid.value = false
ikramiyeInvalidTexts.teslimEdilenIkramiyeAsil =
'Asil ve yedek talihli toplamları, toplam ikramiye adedi kadar olmalıdır.'
ikramiyeInvalidTexts.teslimEdilenIkramiyeYedek =
'Asil ve yedek talihli toplamları, toplam ikramiye adedi kadar olmalıdır.'
}
}
validationStore.IsFieldEmpty(
piyangoDosyaKapamaStore.dosyaKapamaIkramiyeData,
ikramiyeInvalidTexts,
'alinmayanIkramiye',
'Alınmayan ikramiye adedi boş olamaz. En az 1 asil veya yedek ikramiye adedi giriniz.'
)
if (
!validationStore.checkEmpty(
piyangoDosyaKapamaStore.dosyaKapamaIkramiyeData.alinmayanIkramiye
)
) {
if (
Number(piyangoDosyaKapamaStore.dosyaKapamaIkramiyeData.alinmayanIkramiye) < 0
) {
isIkramiyeFormValid.value = false
ikramiyeInvalidTexts.alinmayanIkramiye =
'Teslim edilen asil ve yedek ikramiye toplamları, toplam ikramiye kadar olmalıdır.'
}
}
isIkramiyeFormValid.value = Object.keys(ikramiyeInvalidTexts).length === 0
return isIkramiyeFormValid.value
}
return {
isFormValid,
invalidTexts,
isIkramiyeFormValid,
ikramiyeInvalidTexts,
FormCheck,
IkramiyeFormCheck
}
}
)

View File

@ -12,6 +12,8 @@ export const usePiyangoOnayValidationStore = defineStore(
const formChanged = ref<boolean>(false)
const isFormValid = ref<boolean>(true)
const invalidTexts = reactive<Record<string, any>>({})
const isPanelFormValid = ref<boolean>(true)
const invalidTextsPanel = reactive<Record<string, any>>({})
const FormCheck = (): boolean => {
Object.assign(invalidTexts, {})
@ -22,15 +24,59 @@ export const usePiyangoOnayValidationStore = defineStore(
'onayDurumuIslemTipiId',
'Bir işlem tipi seçmelisinz.'
)
if (piyangoOnayStore.piyangoOnayForm.onayDurumuIslemTipiId === 4) {
validationStore.IsFieldEmpty(
piyangoOnayStore.piyangoOnayForm,
invalidTexts,
'izinSayisi',
'İzin sayı no girmelisiniz.'
)
validationStore.IsFieldEmpty(
piyangoOnayStore.piyangoOnayForm,
invalidTexts,
'izinTarihi',
'İzin tarihi seçmelisiniz.'
)
}
isFormValid.value = Object.keys(invalidTexts).length === 0
return isFormValid.value
}
const FormPanelCheck = (): boolean => {
Object.assign(invalidTextsPanel, {})
validationStore.IsFieldEmpty(
piyangoOnayStore.piyangoPanelOnayForm,
invalidTextsPanel,
'onayDurumuIslemTipiId',
'Bir işlem tipi seçmelisinz.'
)
if (piyangoOnayStore.piyangoPanelOnayForm.onayDurumuIslemTipiId === 4) {
validationStore.IsFieldEmpty(
piyangoOnayStore.piyangoPanelOnayForm,
invalidTextsPanel,
'izinSayisi',
'İzin sayı no girmelisiniz.'
)
validationStore.IsFieldEmpty(
piyangoOnayStore.piyangoPanelOnayForm,
invalidTextsPanel,
'izinTarihi',
'İzin tarihi seçmelisiniz.'
)
}
isPanelFormValid.value = Object.keys(invalidTextsPanel).length === 0
return isPanelFormValid.value
}
return {
formChanged,
isFormValid,
isPanelFormValid,
invalidTexts,
FormCheck
invalidTextsPanel,
FormCheck,
FormPanelCheck
}
}
)

View File

@ -24,6 +24,18 @@ export const usePiyangoTeminatValidationStore = defineStore(
'state',
'Lütfen işlem tipini seçiniz.'
)
validationStore.IsFieldEmpty(
piyangoTeminatStore.piyangoTeminatFormData,
invalidTexts,
'refundDate',
'Lütfen iade tarihini seçiniz.'
)
validationStore.IsFieldEmpty(
piyangoTeminatStore.piyangoTeminatFormData,
invalidTexts,
'refundCount',
'Lütfen iade sayı no giriniz.'
)
}
validationStore.IsFieldEmpty(

View File

@ -167,7 +167,19 @@ export const usePiyangoValidationStore = defineStore('piyangoValidationStore', (
}
})
const ikramiyeTeslimMin = computed((): Date => {
return piyangoStore.lotteryData.asilSonBasvuruTarihi
var date: Date = new Date()
if (piyangoStore.lotteryData.amacpiyangoId !== 2) {
date = new Date(piyangoStore.lotteryData.yedekSonBasvuruTarihi)
} else {
date = new Date(piyangoStore.lotteryData.asilSonBasvuruTarihi)
}
var year = date.getFullYear()
var month = date.getMonth()
var day = date.getDate()
let newDate = new Date(year, month, day + 1)
return newDate
})
const ikramiyeTeslimMax = computed((): Date => {
var date: Date = new Date()
@ -472,12 +484,16 @@ export const usePiyangoValidationStore = defineStore('piyangoValidationStore', (
date: ilanTarihi2Max.value,
pattern: 'dd-mm-yy'
})
if (ilanTarihi2 < ilan2min || ilanTarihi2 > ilan2max) {
if (ilan2min > ilan2max) {
isFormValid.value = false
invalidTexts.ilantarihi2 = `2. İlan Tarihi ${ilan2mind} - ${ilan2maxd} tarihleri arasında olmalıdır.`
invalidTexts.ilantarihi2 = `Lütfen 1. ilan tarihini daha erken bir tarih ile değiştiriniz. 2. İlan tarihi 1. ilan tarihinden en az 1 gün sonra olabilir`
} else {
delete invalidTexts.ilantarihi2
if (ilanTarihi2 < ilan2min || ilanTarihi2 > ilan2max) {
isFormValid.value = false
invalidTexts.ilantarihi2 = `2. İlan Tarihi ${ilan2mind} - ${ilan2maxd} tarihleri arasında olmalıdır.`
} else {
delete invalidTexts.ilantarihi2
}
}
}
}

View File

@ -1,8 +1,8 @@
<template>
<AdminLayout>
<Breadcrumb currentPageText="Piyango Detay" />
<tabs :tabList="tabList" v-if="loaded">
<template #piyangobilgileri>
<Breadcrumb currentPageText="Piyango Detay" go="/piyangolar/piyango-listesi" />
<tabs :tabList="tabList" v-if="loaded" isUseRoute>
<template #piyango-bilgileri>
<tab-piyango-bilgileri-display
v-if="
usersStore.isPanelUser ||
@ -12,20 +12,25 @@
" />
<tab-piyango-bilgileri v-else />
</template>
<template #katilimcilistesi><tab-piyango-katilimci-listesi /></template>
<template #katilim-listesi><tab-piyango-katilimci-listesi /></template>
<template #talihliler><tab-piyango-talihli-listesi /></template>
<template #itirazsikayet><tab-piyango-itiraz /></template>
<template #piyangologlari><tab-piyango-loglari /></template>
<template #yetkilendirme>
<template #itiraz-sikayet><tab-piyango-itiraz /></template>
<template #piyango-loglari><tab-piyango-loglari /></template>
<template #yetkilendirme v-if="usersStore.isPanelUser">
<tab-piyango-yetkilendirme />
</template>
<template #onaydurumu>
<template #onay-durumu>
<tab-piyango-onay-durumu v-if="usersStore.isPanelUser" />
<tab-piyango-onay-durumu-user v-else />
</template>
<template #teminatlistesi>
<template #teminat-listesi>
<tab-piyango-teminat-durumu />
</template>
<template
#dosya-kapama
v-if="usersStore.isPanelUser && piyangoStore.lotteryDrawState">
<tab-piyango-dosya-kapama />
</template>
</tabs>
</AdminLayout>
</template>
@ -52,38 +57,44 @@
import TabPiyangoBilgileri from '@/module/cekilisler/components/TabPiyangoBilgileri.vue'
import TabPiyangoBilgileriDisplay from '../components/TabPiyangoBilgileriDisplay.vue'
import TabPiyangoItiraz from '@/module/cekilisler/components/TabPiyangoItiraz.vue'
import TabPiyangoDosyaKapama from '@/module/cekilisler/components/TabPiyangoDosyaKapama.vue'
const loaded = ref<boolean>(false)
const tabList = ref<Record<string, any>[]>([
{ text: 'Piyango Bilgileri', id: 'piyangobilgileri' }
{ text: 'Piyango Bilgileri', id: 'piyango-bilgileri' }
])
const CreateTabs = () => {
if (
piyangoStore.lotteryApprove === 4 ||
piyangoStore.lotteryApprove === 10 ||
piyangoStore.lotteryApprove === 11 ||
piyangoStore.lotteryApprove === 12 ||
piyangoStore.lotteryApprove === 13 ||
piyangoStore.lotteryApprove === 14 ||
usersStore.isPanelUser
(piyangoStore.lotteryApprove === 4 ||
piyangoStore.lotteryApprove === 10 ||
piyangoStore.lotteryApprove === 11 ||
piyangoStore.lotteryApprove === 12 ||
piyangoStore.lotteryApprove === 13 ||
piyangoStore.lotteryApprove === 14 ||
usersStore.isPanelUser) &&
piyangoStore.lotteryPurposeId !== 3
) {
tabList.value.push(
{ text: 'Katılım Listesi', id: 'katilimcilistesi' },
{ text: 'Katılım Listesi', id: 'katilim-listesi' },
{ text: 'Talihliler', id: 'talihliler' },
{ text: 'İtiraz/Şikayet', id: 'itirazsikayet' }
{ text: 'İtiraz/Şikayet', id: 'itiraz-sikayet' }
)
}
if (usersStore.isPanelUser) {
tabList.value.push(
{ text: 'Piyango Logları', id: 'piyangologlari' },
{ text: 'Piyango Logları', id: 'piyango-loglari' },
{ text: 'Yetkilendirme', id: 'yetkilendirme' }
)
}
tabList.value.push({ text: 'Onay Durumu', id: 'onaydurumu' })
tabList.value.push({ text: 'Onay Durumu', id: 'onay-durumu' })
if (piyangoStore.lotteryApprove !== 0) {
tabList.value.push({ text: 'Teminat Listesi', id: 'teminatlistesi' })
if (piyangoStore.lotteryApprove !== 0 && piyangoStore.lotteryPurposeId !== 3) {
tabList.value.push({ text: 'Teminat Listesi', id: 'teminat-listesi' })
}
if (usersStore.isPanelUser && piyangoStore.lotteryDrawState) {
tabList.value.push({ text: 'Dosya Kapama', id: 'dosya-kapama' })
}
}

View File

@ -1,6 +1,6 @@
<template>
<AdminLayout>
<Breadcrumb currentPageText="Piyango Listesi" />
<Breadcrumb currentPageText="Piyango Listesi" go="/"/>
<div
class="form-inner-comment waiting-d"
v-if="!usersStore.isPanelUser && usersStore.userApproveId !== 4">
@ -17,12 +17,14 @@
listText="Piyango"
:addRoute="addApiControl"
:apiList="apiList"
apiText="Piyango Listesi" />
apiText="Piyango Listesi"
isUseRoute/>
</section>
</AdminLayout>
</template>
<script setup lang="ts">
import { ref, computed, onBeforeMount } from 'vue'
import { ref, computed, onBeforeMount, onMounted } from 'vue'
import { useRoute } from 'vue-router'
import AdminLayout from '@/layouts/AdminLayout.vue'
import { useDateStore } from '@/stores/dateStore'
@ -38,6 +40,7 @@
const piyangoServices = usePiyangoServices()
import router from '@/router'
const route = useRoute()
const loaded = ref<boolean>(false)
const apiList = ref<string>('')
@ -67,6 +70,14 @@
const tableHeader = computed<Record<string, any>[]>(() => {
let header: Record<string, any>[] = []
header.push({
name: 'piyangoId',
title: 'Piyango Id',
sort: true,
style: { width: '10%' }
})
if (usersStore.isAraciFirma || usersStore.isPanelUser) {
header.push({ name: 'duzenleyen', title: 'Düzenleyen' })
}
@ -101,14 +112,16 @@
type: 'date',
range: true
}
})
}
)
if (usersStore.isVakifDernek || usersStore.isPanelUser) {
header.push({
name: 'cekilisTarihi',
title: 'Çekiliş Tarihi',
compute: (v: Record<string, any>): string => {
return dateStore.dateFormat({ date: v.cekilisTarihi })
if(v.piyangoAmacId === 3) return ''
else return dateStore.dateFormat({ date: v.cekilisTarihi })
},
sort: true,
filter: {
@ -220,7 +233,7 @@
// tablodan herhangi bir satır tıklayınca çalısır
const OpenPiyango = (row: any) => {
router.push('detay/' + row.id)
router.push('detay/' + row.id+'/piyango-bilgileri')
}
onBeforeMount(async () => {
@ -230,4 +243,13 @@
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>

View File

@ -8,7 +8,8 @@
title="Piyangolar"
listText="Piyango"
:apiList="apiList"
apiText="Piyango Listesi" />
apiText="Piyango Listesi"
isUseRoute />
</section>
</template>
<script setup lang="ts">
@ -151,10 +152,11 @@
name: 'atanmis',
title: 'Sevk Durumu',
computeHtml: (v: Record<string, any>): string => {
if(v.atanmis){
if (v.atanmis) {
return `<strong class="back-grad back-grad-sevk-ok">
${v.atananlar}
</strong>`}else{
</strong>`
} else {
return `<span class="back-grad back-grad-sevk">
Sevk Edilmemiş</span>`
}
@ -164,7 +166,7 @@
// tablodan herhangi bir satır tıklayınca çalısır
const rwAction = (row: any) => {
router.push('/piyangolar/detay/' + row.id)
router.push('/piyangolar/detay/' + row.id + '/piyango-bilgileri')
}
onBeforeMount(async () => {

View File

@ -6,7 +6,7 @@ import kullaniciAyarlari from './kullanici-ayarlari'
export default [
kullanciYeni,
kullaniciDetay,
...kullaniciDetay,
kullaniciListesi,
kullaniciRolleri,
kullaniciAyarlari

View File

@ -1,10 +1,19 @@
import KullaniciDetay from '@/module/kullanicilar/views/KullaniciDetay.vue'
export default {
path: '/kullanicilar/detay/:kullaniciId',
name: 'KullaniciDetay',
component: KullaniciDetay,
meta: {
authRequired: true
export default [
{
path: '/kullanicilar/detay/:kullaniciId',
redirect: (to: Record<string, any>) => ({
name: 'PiyangoDetay',
params: { kullaniciId: to.params.kullaniciId, tabid: 'kullanici-bilgileri' }
})
},
{
path: '/kullanicilar/detay/:kullaniciId/:tabid',
name: 'KullaniciDetay',
component: KullaniciDetay,
meta: {
authRequired: true
}
}
}
]

View File

@ -1,6 +1,6 @@
<template>
<AdminLayout>
<Breadcrumb currentPageText="Kullanıcı Detay" />
<Breadcrumb currentPageText="Kullanıcı Detay"/>
<tabs :tabList="tabList">
<template #birimlistesi>
<tab-kullanici-birimleri />

View File

@ -1,14 +1,14 @@
<template>
<AdminLayout>
<Breadcrumb currentPageText="Kullanıcı Detay" />
<tabs :tabList="tabList">
<template #kullanicibilgileri>
<Breadcrumb currentPageText="Kullanıcı Detay" go="/kullanicilar/kullanici-liste"/>
<tabs :tabList="tabList" isUseRoute>
<template #kullanici-bilgileri>
<tab-kullanici-bilgileri />
</template>
<template #yetkilioldugupiyangolar>
<template #yetkili-oldugu-piyangolar>
<tab-kullanici-yetkili-piyangolar />
</template>
<template #kullaniciloglari>
<template #kullanici-loglari>
<tab-kullanici-loglari />
</template>
</tabs>
@ -28,8 +28,8 @@
if (globalStore.selUser === 0) globalStore.selUser = Number(route.params.kullaniciId)
const tabList = ref<Record<string, any>[]>([
{ text: 'Kullanıcı Bilgileri', id: 'kullanicibilgileri' },
{ text: 'Yetkili Olduğu Piyangolar', id: 'yetkilioldugupiyangolar' },
{ text: 'Kullanıcı Logları', id: 'kullaniciloglari' }
{ text: 'Kullanıcı Bilgileri', id: 'kullanici-bilgileri' },
{ text: 'Yetkili Olduğu Piyangolar', id: 'yetkili-oldugu-piyangolar' },
{ text: 'Kullanıcı Logları', id: 'kullanici-loglari' }
])
</script>

View File

@ -1,6 +1,6 @@
<template>
<AdminLayout>
<Breadcrumb current-page-text="Kullanıcılar Listesi" />
<Breadcrumb current-page-text="Kullanıcılar Listesi" go="/"/>
<section class="section-list">
<list-table-content
v-if="loaded"
@ -11,7 +11,8 @@
listText="Kullanıcı"
addRoute="yeni-kullanici"
apiList="Auth/kullaniciList"
apiText="Kullanıcı Listesi" />
apiText="Kullanıcı Listesi"
isUseRoute/>
</section>
</AdminLayout>
</template>
@ -88,7 +89,7 @@
])
const rwAction = (row: any) => {
globalStore.selUser = row.id
router.push('detay/' + row.id)
router.push('detay/' + row.id+'/kullanici-bilgileri')
}
onBeforeMount(async () => {

View File

@ -0,0 +1,8 @@
<template>
<section class="section-list form-inner-content-left">
<form-izin-bedel-orani />
</section>
</template>
<script setup lang="ts">
import FormIzinBedelOrani from './form/FormIzinBedelOrani.vue'
</script>

View File

@ -0,0 +1,105 @@
<template>
<section class="section-list">
<div class="section-list-header">
<h2>İzin Bedel Oranı Listesi</h2>
<div class="section-list-header-buttons">
<button class="button-c button-add" @click="izinBedelOraniStore.NewForm()">
<i class="ico-c">
<svg width="16" height="16">
<use href="@/assets/images/icons.svg#plus"></use>
</svg>
</i>
Yeni İzin Bedel Oranı Ekle
</button>
</div>
</div>
<list-table-content
v-if="izinBedelOraniService.loaded"
:tableHeader="tableHeader"
:rowAction="EditIzinBedelOrani"
icon="draws"
title="İzin Bedel Oranları"
listText="İzin Bedel Oranı"
:apiList="'IzinBedelOrani'"
apiText="İzin Bedel Oranı Listesi" />
</section>
</template>
<script setup lang="ts">
import { ref, computed, onBeforeMount } from 'vue'
import { useIzinBedelOraniStore } from '../store/izinBedelOraniStore'
import { useIzinBedelOraniService } from '../service/izinBedelOraniService'
const izinBedelOraniStore = useIzinBedelOraniStore()
const izinBedelOraniService = useIzinBedelOraniService()
const tableHeader = ref<Record<string, any>[]>(
[
{
name: 'id',
title: 'ID',
sort: true,
style: { width: '8%' }
},
{
name: 'ad',
title: 'Ad',
sort: true,
style: { width: '20%' }
},
{
name: 'oran',
title: 'Oran (%)',
sort: true,
style: { width: '15%' },
compute: (v: Record<string, any>): string => {
return `%${v.oran}`
}
},
{
name: 'aciklama',
title: 'Açıklama',
sort: true,
style: { width: '30%' }
},
{
name: 'aktif',
title: 'Durum',
sort: true,
style: { width: '12%' },
computeHtml: (v: Record<string, any>): string => {
if (v.aktif) {
return `<span class="back-grad back-grad-ok">Aktif</span>`
} else {
return `<span class="back-grad back-grad-alert">Pasif</span>`
}
}
},
{
name: 'actions',
title: 'İşlemler',
style: { width: '15%' },
computeHtml: (v: Record<string, any>): string => {
let actions = `<button class="button-c button-edit" onclick="window.editIzinBedelOrani(${v.id})">
<i class="ico-c">
<svg width="14" height="14">
<use href="@/assets/images/icons.svg#edit"></use>
</svg>
</i>
Düzenle
</button> `
return actions
}
}
]
)
const EditIzinBedelOrani = (row: any) => {
izinBedelOraniStore.EditForm(row)
}
onBeforeMount(async () => {
await izinBedelOraniService.GetIzinBedelOraniList()
izinBedelOraniService.loaded = true
})
</script>

View File

@ -2,9 +2,9 @@
<div :class="['form-part']" id="display-bilgi">
<div class="form-part-title">
<h4>Piyango Bilgileri</h4>
<div class="form-part-title-buttons" v-if="!isPreview">
<div class="form-part-title-buttons" v-if="!isPreview && loaded">
<button
@click="BasvuruBedeliMuhasebelestir"
@click="BasvuruBedeliDialog"
v-if="
(piyangoStore.lotteryApprove === 1 || piyangoStore.lotteryApprove === 4) &&
(!piyangoStore.lotteryBasvuruBedeliStatus ||
@ -14,7 +14,7 @@
Başvuru Bedelini Muhasebeleştir
</button>
<button
@click="IzinBedeliMuhasebelestir"
@click="OpenIzinBedeliModal"
v-if="
piyangoStore.lotteryApprove === 4 &&
piyangoStore.lotteryData.amacpiyangoId !== 3 &&
@ -24,19 +24,118 @@
class="button-save">
İzin Bedelini Muhasebeleştir
</button>
<router-link :to="'/piyangolar/detay/' + route.params.piyangoId" class="button-c">
<router-link
:to="'/piyangolar/detay/' + route.params.piyangoId + '/piyango-bilgileri'"
class="button-c">
Piyango Detayına Git
</router-link>
</div>
</div>
<div class="form-inner-comment waiting-d" v-if="!loaded">Yükleniyor, lütfen bekleyiniz...</div>
<piyango-bilgileri-display-content v-if="loaded" :isPreview="isPreview" />
<!-- İzin Bedeli Modal -->
<teleport to="body">
<div v-if="showIzinBedeliModal" class="modal-overlay" @click="CloseIzinBedeliModal">
<div class="modal-content" @click.stop>
<div class="modal-header">
<h3>İzin Bedeli Muhasebeleştir</h3>
<button class="modal-close" @click="CloseIzinBedeliModal">×</button>
</div>
<div class="modal-body">
<div class="form-group">
<label>Oran Seçiniz:</label>
<select @change="OnOranChange" class="form-select">
<option value="">Lütfen bir oran seçiniz</option>
<option v-for="oran in izinBedelOranlari" :key="oran.id" :value="oran.id">
{{ oran.oran }}% - {{ oran.adi }}
</option>
</select>
</div>
<div class="">
<table class="table-bordered">
<tbody>
<tr>
<td>Toplam İkramiye Bedeli:</td>
<td>
{{
globalStore.toTrLocale(
Number(piyangoIkramiyeStore.totalIkramiyeValue)
)
}}
</td>
</tr>
<tr>
<td>İzin Bedeli Oran Tutarı:</td>
<td>
{{ globalStore.toTrLocale(calculatedOran) }}
</td>
</tr>
<tr>
<td>KDV:</td>
<td>
{{ globalStore.toTrLocale(calculatedKdv) }}
</td>
</tr>
<tr>
<td>Toplam Bedel:</td>
<td>
{{
globalStore.toTrLocale(
Number(calculatedOran) + Number(calculatedKdv)
)
}}
</td>
</tr>
<tr v-if="piyangoStore.lotteryData.izinTarihi !== undefined">
<td>İzin Tarihi:</td>
<td>
{{
dateStore.dateFormat({
date: piyangoStore.lotteryData.izinTarihi,
pattern: 'dd-mm-yy',
splitDate: '/'
})
}}
</td>
</tr>
<tr v-if="piyangoStore.lotteryData.izinSayisi !== undefined">
<td>İzin Sayısı:</td>
<td>
{{ piyangoStore.lotteryData.izinSayisi }}
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="modal-footer">
<button class="button-c button-cancel" @click="CloseIzinBedeliModal">
İptal
</button>
<button class="button-c button-save" @click="IzinBedeliMuhasebelestir">
Muhasebeleştir
</button>
</div>
</div>
</div>
</teleport>
</div>
</template>
<script setup lang="ts">
import { ref, onBeforeMount } from 'vue'
import { ref, onBeforeMount, computed } from 'vue'
import { useToastStore } from '@/components/global/toastStore'
const toastStore = useToastStore()
import { usePiyangoIkramiyeStore } from '@/module/cekilisler/stores/piyangoIkramiyeStore'
const piyangoIkramiyeStore = usePiyangoIkramiyeStore()
import { useGlobalStore } from '@/stores/globalStore'
const globalStore = useGlobalStore()
import { useDialogStore } from '@/components/global/dialogStore'
const dialogStore = useDialogStore()
import { useDateStore } from '@/stores/dateStore'
const dateStore = useDateStore()
export interface Props {
isPreview?: boolean
@ -51,12 +150,27 @@
import { useDataStore } from '@/stores/dataStore'
const dataStore = useDataStore()
import { usePreviewStore } from '@/stores/previewStore'
const previewStore = usePreviewStore()
import { usePiyangoStore } from '@/module/cekilisler/stores/piyangoStore'
const piyangoStore = usePiyangoStore()
import { useMuhasebeSettingsStore } from '@/module/muhasebe/store/muhasebeSettingsStore'
const muhasebeSettingsStore = useMuhasebeSettingsStore()
const loaded = ref<boolean>(false)
const showIzinBedeliModal = ref<boolean>(false)
const selectedOran = ref<number | null>(null)
const izinBedelOranlari = ref<Record<string, any>[]>([])
const selectedOranId = ref<number | null>(null)
const calculatedKdv = ref<number>(0)
const calculatedOran = ref<number>(0)
const calculatedBasvuruKdv = computed<number>(() =>
muhasebeSettingsStore.muhasebeSettingsForm.basvuruBedeli !== undefined &&
muhasebeSettingsStore.muhasebeSettingsForm.basvuruBedeliKdvOrani !== undefined
? (Number(muhasebeSettingsStore.muhasebeSettingsForm.basvuruBedeli) *
Number(muhasebeSettingsStore.muhasebeSettingsForm.basvuruBedeliKdvOrani)) /
100
: 0
)
const GetData = async () => {
let data = await dataStore.dataGet(
@ -95,12 +209,88 @@
Object.assign(piyangoStore.araciUyeData, data)
}
}
const GetIzinBedelOranlari = async () => {
let data = await dataStore.dataGet('IzinBedelOrani/aktif')
if (data !== 'errorfalse') {
izinBedelOranlari.value = data
}
}
const GetIkramiyeTotalValues = async () => {
console.log(piyangoStore, 'piyangoStore')
let data = await dataStore.dataGet('Ikramiye/Cekilis/' + piyangoStore.selectedLottery +'?pageNumber=0')
//todo:page 0
if (data !== 'errorfalse') {
piyangoIkramiyeStore.totalIkramiyeValue = data.toplamdeger
}
}
const BasvuruBedeliDialog = () => {
dialogStore.CreateDialog({
title: 'Başvuru Bedelini Muhasebeleştir',
id: 'basvurubedelimuhasebelestir',
contentHtml: `<table class='table-bordered'>
<tbody>
<tr>
<td>Başvuru Bedeli:</td>
<td>${
muhasebeSettingsStore.muhasebeSettingsForm.basvuruBedeli !==
undefined
? globalStore.toTrLocale(
muhasebeSettingsStore.muhasebeSettingsForm.basvuruBedeli
)
: 0
} ₺</td>
</tr>
<tr>
<td>KDV (%${
muhasebeSettingsStore.muhasebeSettingsForm.basvuruBedeliKdvOrani
}):</td>
<td>
${
calculatedBasvuruKdv.value !== undefined
? globalStore.toTrLocale(calculatedBasvuruKdv.value)
: 0
}
</td>
</tr>
<tr>
<td>Toplam Bedel:</td>
<td>
${
muhasebeSettingsStore.muhasebeSettingsForm.basvuruBedeli !==
undefined
? globalStore.toTrLocale(
Number(
muhasebeSettingsStore.muhasebeSettingsForm.basvuruBedeli
) + calculatedBasvuruKdv.value
)
: 0
}
</td>
</tr>
</tbody>
</table>`,
closeText: 'Vazgeç',
buttons: [
{
label: 'Başvuru Bedelini Muhasebeleştir',
type: 'alert',
function: () => BasvuruBedeliMuhasebelestir()
}
]
})
}
const BasvuruBedeliMuhasebelestir = async () => {
console.log('basvuru bedeli muhasebelestir')
let data = await dataStore.dataGet(
'MuhasebeSettings/BasvuruBedeli/' + piyangoStore.selectedLottery
)
if (data !== 'errorfalse') {
toastStore.AddToast('Başvuru bedeli başarıyla muhasebeleştirildi. Fatura No: '+data.belgeNo, 'success', 30000)
toastStore.AddToast(
'Başvuru bedeli başarıyla muhasebeleştirildi. Fatura No: ' + data.belgeNo,
'success',
30000
)
loaded.value = false
await GetData()
piyangoStore.lotteryBasvuruBedeliStatus = true
@ -111,15 +301,68 @@
}
}
const OpenIzinBedeliModal = async () => {
await GetIzinBedelOranlari()
await GetIkramiyeTotalValues()
showIzinBedeliModal.value = true
selectedOran.value = null
selectedOranId.value = null
}
const CloseIzinBedeliModal = () => {
showIzinBedeliModal.value = false
selectedOran.value = null
selectedOranId.value = null
}
const OnOranChange = (event: Event) => {
const target = event.target as HTMLSelectElement
const selectedId = parseInt(target.value)
const selectedOranData = izinBedelOranlari.value.find(
(item) => item.id === selectedId
)
if (selectedOranData) {
selectedOranId.value = selectedOranData.id
selectedOran.value = selectedOranData.oran
} else {
selectedOranId.value = null
selectedOran.value = null
}
calculatedOran.value =
(Number(piyangoIkramiyeStore.totalIkramiyeValue) * Number(selectedOran.value)) / 100
calculatedKdv.value =
(calculatedOran.value *
Number(muhasebeSettingsStore.muhasebeSettingsForm.basvuruBedeliKdvOrani)) /
100
}
const IzinBedeliMuhasebelestir = async () => {
if (selectedOranId.value === null) {
toastStore.AddToast('Lütfen bir oran seçiniz', 'error', 5000)
return
}
let data = await dataStore.dataGet(
'MuhasebeSettings/IzinBasvuruBedeli/' + piyangoStore.selectedLottery
'MuhasebeSettings/IzinBasvuruBedeli/' +
piyangoStore.selectedLottery +
'/' +
selectedOranId.value
)
if (data !== 'errorfalse') {
toastStore.AddToast('İzin bedeli başarıyla muhasebeleştirildi. Fatura No: '+data.izinBelgeNo , 'success', 30000)
toastStore.AddToast(
'İzin bedeli başarıyla muhasebeleştirildi. Fatura No: ' + data.izinBelgeNo,
'success',
30000
)
loaded.value = false
await GetData()
piyangoStore.lotteryIzinBedeliStatus = true
showIzinBedeliModal.value = false
selectedOran.value = null
selectedOranId.value = null
setTimeout(() => {
loaded.value = true
}, 30)
@ -131,3 +374,140 @@
await GetData()
})
</script>
<style scoped>
.modal-overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
display: flex;
justify-content: center;
align-items: center;
z-index: 9999;
}
.modal-content {
background: white;
border-radius: 8px;
padding: 0;
max-width: 500px;
width: 90%;
max-height: 90vh;
overflow-y: auto;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
}
.modal-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 20px 24px;
border-bottom: 1px solid #e5e7eb;
}
.modal-header h3 {
margin: 0;
font-size: 18px;
font-weight: 600;
color: #1f2937;
}
.modal-close {
background: none;
border: none;
font-size: 24px;
cursor: pointer;
color: #6b7280;
padding: 0;
width: 30px;
height: 30px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 4px;
transition: background-color 0.2s;
}
.modal-close:hover {
background-color: #f3f4f6;
}
.modal-body {
padding: 24px;
}
.form-group {
margin-bottom: 16px;
}
.form-group label {
display: block;
margin-bottom: 8px;
font-weight: 500;
color: #374151;
}
.form-select {
width: 100%;
padding: 12px;
border: 1px solid #d1d5db;
border-radius: 6px;
font-size: 14px;
background-color: white;
transition: border-color 0.2s;
}
.form-select:focus {
outline: none;
border-color: #3b82f6;
box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);
}
.modal-footer {
display: flex;
justify-content: flex-end;
gap: 12px;
padding: 20px 24px;
border-top: 1px solid #e5e7eb;
background-color: #f9fafb;
border-radius: 0 0 8px 8px;
}
.button-c {
padding: 10px 20px;
border: none;
border-radius: 6px;
font-size: 14px;
font-weight: 500;
cursor: pointer;
transition: all 0.2s;
}
.button-cancel {
background-color: #6b7280;
color: white;
}
.button-cancel:hover {
background-color: #4b5563;
}
.button-save {
background-color: #3b82f6;
color: white;
}
.button-save:hover {
background-color: #2563eb;
}
.table-bordered {
width: 100%;
}
.table-bordered tr td {
border-bottom: 1px solid #d8d8d8;
padding: 8px;
}
</style>

View File

@ -0,0 +1,90 @@
<template>
<div
:class="['form-part', izinBedelOraniValidationStore.formChanged ? 'changed' : '']">
<div class="form-part-title">
<h4>{{ izinBedelOraniStore.isNew ? 'Yeni İzin Bedel Oranı' : 'İzin Bedel Oranı Düzenle' }}</h4>
<div class="form-part-title-buttons"></div>
</div>
<div class="form-part-content">
<form-input
required
half
modelKey="ad"
v-model="izinBedelOraniStore.izinBedelOraniForm.ad"
:invalidText="izinBedelOraniValidationStore.invalidTexts.ad"
label="Ad"
maxlength="100"
@keyup="OnKeyup" />
<form-input
required
half
modelKey="oran"
v-model="izinBedelOraniStore.izinBedelOraniForm.oran"
:invalidText="izinBedelOraniValidationStore.invalidTexts.oran"
label="Oran (%)"
maxlength="3"
@keydown="validationStore.allowNumbersWithKeys"
description="1-100 arasında bir rakam giriniz"
@keyup="OnKeyup" />
<form-textarea
required
modelKey="aciklama"
v-model="izinBedelOraniStore.izinBedelOraniForm.aciklama"
:invalidText="izinBedelOraniValidationStore.invalidTexts.aciklama"
label="Açıklama"
maxlength="500"
rows="4"
@keyup="OnKeyup" />
<form-checkbox
modelKey="aktif"
v-model="izinBedelOraniStore.izinBedelOraniForm.aktif"
label="Aktif"
@change="OnKeyup" />
<div
class="form-item"
v-if="izinBedelOraniStore.isNew || izinBedelOraniValidationStore.formChanged">
<button
class="button-c button-save"
@click="izinBedelOraniService.SaveIzinBedelOrani">
{{ izinBedelOraniStore.isNew ? 'Kaydet' : 'Güncelle' }}
</button>
<button
class="button-c button-cancel"
@click="CancelForm"
v-if="izinBedelOraniValidationStore.formChanged">
Vazgeç
</button>
</div>
</div>
</div>
</template>
<script setup lang="ts">
import { onBeforeMount } from 'vue'
import { useValidationStore } from '@/stores/validationStore'
const validationStore = useValidationStore()
import { useIzinBedelOraniStore } from '../../store/izinBedelOraniStore'
const izinBedelOraniStore = useIzinBedelOraniStore()
import { useIzinBedelOraniValidationStore } from '../../validation/izinBedelOraniValidationStore'
const izinBedelOraniValidationStore = useIzinBedelOraniValidationStore()
import { useIzinBedelOraniService } from '../../service/izinBedelOraniService'
const izinBedelOraniService = useIzinBedelOraniService()
const OnKeyup = () => {
izinBedelOraniValidationStore.formChanged = true
}
const CancelForm = () => {
if (izinBedelOraniStore.isNew) {
izinBedelOraniStore.isNew = false
} else {
izinBedelOraniStore.RestoreData()
izinBedelOraniValidationStore.formChanged = false
}
}
onBeforeMount(() => {
if (izinBedelOraniStore.isNew) {
izinBedelOraniStore.ResetForm()
}
})
</script>

View File

@ -6,17 +6,6 @@
<div class="form-part-title-buttons"></div>
</div>
<div class="form-part-content" v-if="muhasebeSettingsService.loaded">
<form-input
required
half
modelKey="izinBedeliOrani"
v-model="muhasebeSettingsStore.muhasebeSettingsForm.izinBedeliOrani"
:invalidText="muhasebeSettingsValidationStore.invalidTexts.izinBedeliOrani"
label="İzin Bedeli Oranı"
maxlength="3"
@keydown="validationStore.allowNumbersWithKeys"
description="1-100 arasında bir rakam giriniz"
@keyup="OnKeyup" />
<form-input
required
half
@ -26,6 +15,15 @@
label="Başvuru Bedeli"
@keydown="validationStore.allowPrice"
@keyup="OnKeyup" />
<form-input
required
half
modelKey="basvuruBedeliKdvOrani"
v-model="muhasebeSettingsStore.muhasebeSettingsForm.basvuruBedeliKdvOrani"
:invalidText="muhasebeSettingsValidationStore.invalidTexts.BasvuruBedeliKdvOrani"
label="Başvuru Bedeli KDV Oranı"
@keydown="validationStore.allowPrice"
@keyup="OnKeyup" />
<form-input
required
half
@ -58,7 +56,10 @@
@click="muhasebeSettingsService.SaveMuhasebeSettings">
Kaydet
</button>
<button class="button-c button-cancel" @click="muhasebeSettingsStore.RestoreData" v-if="muhasebeSettingsValidationStore.formChanged">
<button
class="button-c button-cancel"
@click="muhasebeSettingsStore.RestoreData"
v-if="muhasebeSettingsValidationStore.formChanged">
Vazgeç
</button>
</div>

View File

@ -1,9 +1,11 @@
import muhasebePiyangoListesi from './muhasebe-piyango-listesi'
import muhasebePiyangoDetay from './muhasebe-piyango-detay'
import muhasebeAyarlar from './muhasebe-ayarlar'
import izinBedelOrani from './izin-bedel-orani'
export default [
muhasebePiyangoListesi,
muhasebePiyangoDetay,
...muhasebePiyangoDetay,
muhasebeAyarlar,
izinBedelOrani,
]

View File

@ -0,0 +1,10 @@
import IzinBedelOrani from '../views/IzinBedelOrani.vue'
export default {
path: '/muhasebe/izin-bedel-orani',
name: 'IzinBedelOrani',
component: IzinBedelOrani,
meta: {
authRequired: true
}
}

View File

@ -1,10 +1,19 @@
import MuhasebePiyangoDetay from '../views/MuhasebePiyangoDetay.vue'
export default {
path: '/muhasebe/piyango-detay/:piyangoId',
name: 'MuhasebePiyangoDetay',
component: MuhasebePiyangoDetay,
meta: {
authRequired: true
export default [
{
path: '/muhasebe/piyango-detay/:piyangoId',
redirect: (to:Record<string,any>) => ({
name: 'MuhasebePiyangoDetay',
params: { piyangoId: to.params.piyangoId, tabid: 'piyango-bilgileri' }
})
},
{
path: '/muhasebe/piyango-detay/:piyangoId/:tabid',
name: 'MuhasebePiyangoDetay',
component: MuhasebePiyangoDetay,
meta: {
authRequired: true
}
}
}
]

View File

@ -0,0 +1,102 @@
import { defineStore } from 'pinia'
import { ref } from 'vue'
import { useDataStore } from '@/stores/dataStore'
import { useIzinBedelOraniStore } from '../store/izinBedelOraniStore'
import { useIzinBedelOraniValidationStore } from '../validation/izinBedelOraniValidationStore'
export const useIzinBedelOraniService = defineStore('izinBedelOraniService', () => {
const dataStore = useDataStore()
const izinBedelOraniStore = useIzinBedelOraniStore()
const izinBedelOraniValidationStore = useIzinBedelOraniValidationStore()
const loaded = ref<boolean>(false)
const SaveIzinBedelOrani = async (panelData: Record<string, any>, isUpdate: boolean = false) => {
if (izinBedelOraniValidationStore.FormCheck(panelData)) {
var res: any
if (!isUpdate) {
res = await dataStore.dataPost('IzinBedelOrani', {
data: {
adi: panelData.ad,
oran: panelData.oran,
aciklama: panelData.aciklama,
aktif: panelData.aktif
}
})
} else {
res = await dataStore.dataPut('IzinBedelOrani/' + panelData.id, {
data: {
id: panelData.id,
adi: panelData.ad,
oran: panelData.oran,
aciklama: panelData.aciklama,
aktif: panelData.aktif
}
})
}
if (res !== 'errorfalse') {
return true
}
}
return false
}
const DeleteIzinBedelOrani = async (id: number | string) => {
var res = await dataStore.dataDelete('IzinBedelOrani/' + id)
return res !== 'errorfalse'
}
const GetIzinBedelOraniList = async () => {
var res = await dataStore.dataGet('IzinBedelOrani')
if (res !== 'errorfalse') {
izinBedelOraniStore.izinBedelOraniList = res
return res
}
return []
}
const GetIzinBedelOraniById = async (id: number | string) => {
var res = await dataStore.dataGet('IzinBedelOrani/' + id)
if (res !== 'errorfalse') {
return res
}
return null
}
const GetAktifIzinBedelOraniList = async () => {
var res = await dataStore.dataGet('IzinBedelOrani/Aktif')
if (res !== 'errorfalse') {
izinBedelOraniStore.aktifIzinBedelOraniList = res
return res
}
return []
}
const UpdateIzinBedelOraniStatus = async (id: number | string, aktif: boolean) => {
var res = await dataStore.dataPut('IzinBedelOrani/' + id + '/Status', {
data: {
Aktif: aktif
}
})
return res !== 'errorfalse'
}
const LoadData = async () => {
await GetIzinBedelOraniList()
await GetAktifIzinBedelOraniList()
loaded.value = true
}
return {
loaded,
SaveIzinBedelOrani,
DeleteIzinBedelOrani,
GetIzinBedelOraniList,
GetIzinBedelOraniById,
GetAktifIzinBedelOraniList,
UpdateIzinBedelOraniStatus,
LoadData
}
})

View File

@ -0,0 +1,59 @@
import { defineStore } from 'pinia'
import { ref, reactive } from 'vue'
import { useUsersStore } from '@/stores/usersStore'
export const useIzinBedelOraniStore = defineStore('izinBedelOraniStore', () => {
const usersStore = useUsersStore()
const izinBedelOraniBaseForm = reactive<Record<string, any>>({
ad: '',
oran: 0,
aciklama: '',
aktif: true,
appUserId: usersStore.userId
})
const izinBedelOraniForm = reactive<Record<string, any>>({})
const izinBedelOraniSafeForm = reactive<Record<string, any>>({})
const izinBedelOraniList = ref<Record<string, any>[]>([])
const aktifIzinBedelOraniList = ref<Record<string, any>[]>([])
const isNew = ref<boolean>(false)
const izinBedelOraniLoaded = ref<boolean>(false)
const ResetForm = () => {
Object.assign(izinBedelOraniForm, izinBedelOraniBaseForm)
}
const SafeServerData = () => {
Object.assign(izinBedelOraniSafeForm, izinBedelOraniForm)
}
const RestoreData = () => {
Object.assign(izinBedelOraniForm, izinBedelOraniSafeForm)
}
const NewForm = () => {
ResetForm()
isNew.value = true
}
const EditForm = (item: Record<string, any>) => {
Object.assign(izinBedelOraniForm, item)
isNew.value = false
}
return {
izinBedelOraniBaseForm,
izinBedelOraniForm,
izinBedelOraniSafeForm,
izinBedelOraniList,
aktifIzinBedelOraniList,
isNew,
izinBedelOraniLoaded,
ResetForm,
SafeServerData,
RestoreData,
NewForm,
EditForm
}
})

View File

@ -7,8 +7,8 @@ export const useMuhasebeSettingsStore = defineStore('muhasebeSettingsStore', ()
const muhasebeSettingsBaseForm = reactive<Record<string, any>>({
appUserId: usersStore.userId,
izinBedeliOrani: 30,
basvuruBedeli: '10.167,00',
BasvuruBedeliKdvOrani: 20,
kurumBanka: 'Türkiye Vakıflar Bankası T.A.O.',
kurumBankaSube: 'Ankara Kurumsal',
kurumIBAN: 'TR26 0001 5001 5800 7295 4624 00'

View File

@ -0,0 +1,64 @@
import { defineStore } from 'pinia'
import { ref, reactive } from 'vue'
import { useValidationStore } from '@/stores/validationStore'
export const useIzinBedelOraniValidationStore = defineStore(
'izinBedelOraniValidationStore',
() => {
const validationStore = useValidationStore()
const formChanged = ref<boolean>(false)
const isFormValid = ref<boolean>(true)
const invalidTexts = reactive<Record<string, any>>({})
const FormCheck = (panelData: Record<string, any>): boolean => {
Object.assign(invalidTexts, {})
validationStore.IsFieldEmpty(
panelData,
invalidTexts,
'ad',
'Ad alanı zorunludur'
)
validationStore.IsFieldEmpty(
panelData,
invalidTexts,
'oran',
'Oran alanı zorunludur'
)
validationStore.IsFieldEmpty(
panelData,
invalidTexts,
'aciklama',
'Açıklama alanı zorunludur'
)
// Oran validation (0-100 arası)
if (panelData.oran !== undefined && panelData.oran !== '') {
const oran = parseFloat(panelData.oran)
if (isNaN(oran) || oran < 0 || oran > 100) {
invalidTexts.oran = 'Oran 0-100 arasında olmalıdır'
}
}
isFormValid.value = Object.keys(invalidTexts).length === 0
return isFormValid.value
}
const ResetValidation = () => {
Object.assign(invalidTexts, {})
formChanged.value = false
isFormValid.value = true
}
return {
formChanged,
isFormValid,
invalidTexts,
FormCheck,
ResetValidation
}
}
)

Some files were not shown because too many files have changed in this diff Show More