77 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
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
9a66af25c2 - Trash ikonu eklendi
- FileListItem ek butonlar için alan açıldı.
- Piyango dökümanları adminler için silme butonu eklendi. Api bağlanmadı
2025-07-24 21:57:18 +03:00
131 changed files with 3827 additions and 1157 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" /> /// <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": { "node_modules/@babel/code-frame": {
"version": "7.24.7", "version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz",
"integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==",
"dev": true, "dev": true,
"license": "MIT",
"dependencies": { "dependencies": {
"@babel/highlight": "^7.24.7", "@babel/helper-validator-identifier": "^7.27.1",
"picocolors": "^1.0.0" "js-tokens": "^4.0.0",
"picocolors": "^1.1.1"
}, },
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
@ -278,17 +280,19 @@
} }
}, },
"node_modules/@babel/helper-string-parser": { "node_modules/@babel/helper-string-parser": {
"version": "7.25.9", "version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
"integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
"license": "MIT",
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
} }
}, },
"node_modules/@babel/helper-validator-identifier": { "node_modules/@babel/helper-validator-identifier": {
"version": "7.25.9", "version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz",
"integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==",
"license": "MIT",
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
} }
@ -303,39 +307,26 @@
} }
}, },
"node_modules/@babel/helpers": { "node_modules/@babel/helpers": {
"version": "7.25.0", "version": "7.28.3",
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.3.tgz",
"integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", "integrity": "sha512-PTNtvUQihsAsDHMOP5pfobP8C6CM4JWXmP8DrEIt46c3r2bf87Ua1zoqevsMo9g+tWDwgWrFP5EIxuBx5RudAw==",
"dev": true, "dev": true,
"license": "MIT",
"dependencies": { "dependencies": {
"@babel/template": "^7.25.0", "@babel/template": "^7.27.2",
"@babel/types": "^7.25.0" "@babel/types": "^7.28.2"
},
"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"
}, },
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
} }
}, },
"node_modules/@babel/parser": { "node_modules/@babel/parser": {
"version": "7.26.9", "version": "7.28.3",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.9.tgz", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.3.tgz",
"integrity": "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==", "integrity": "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==",
"license": "MIT",
"dependencies": { "dependencies": {
"@babel/types": "^7.26.9" "@babel/types": "^7.28.2"
}, },
"bin": { "bin": {
"parser": "bin/babel-parser.js" "parser": "bin/babel-parser.js"
@ -394,14 +385,15 @@
} }
}, },
"node_modules/@babel/template": { "node_modules/@babel/template": {
"version": "7.25.0", "version": "7.27.2",
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz",
"integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==",
"dev": true, "dev": true,
"license": "MIT",
"dependencies": { "dependencies": {
"@babel/code-frame": "^7.24.7", "@babel/code-frame": "^7.27.1",
"@babel/parser": "^7.25.0", "@babel/parser": "^7.27.2",
"@babel/types": "^7.25.0" "@babel/types": "^7.27.1"
}, },
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
@ -426,12 +418,13 @@
} }
}, },
"node_modules/@babel/types": { "node_modules/@babel/types": {
"version": "7.26.9", "version": "7.28.2",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.9.tgz", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.2.tgz",
"integrity": "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==", "integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==",
"license": "MIT",
"dependencies": { "dependencies": {
"@babel/helper-string-parser": "^7.25.9", "@babel/helper-string-parser": "^7.27.1",
"@babel/helper-validator-identifier": "^7.25.9" "@babel/helper-validator-identifier": "^7.27.1"
}, },
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
@ -913,208 +906,294 @@
} }
}, },
"node_modules/@rollup/rollup-android-arm-eabi": { "node_modules/@rollup/rollup-android-arm-eabi": {
"version": "4.19.1", "version": "4.50.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.19.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.50.0.tgz",
"integrity": "sha512-XzqSg714++M+FXhHfXpS1tDnNZNpgxxuGZWlRG/jSj+VEPmZ0yg6jV4E0AL3uyBKxO8mO3xtOsP5mQ+XLfrlww==", "integrity": "sha512-lVgpeQyy4fWN5QYebtW4buT/4kn4p4IJ+kDNB4uYNT5b8c8DLJDg6titg20NIg7E8RWwdWZORW6vUFfrLyG3KQ==",
"cpu": [ "cpu": [
"arm" "arm"
], ],
"dev": true, "dev": true,
"license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
"android" "android"
] ]
}, },
"node_modules/@rollup/rollup-android-arm64": { "node_modules/@rollup/rollup-android-arm64": {
"version": "4.19.1", "version": "4.50.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.19.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.50.0.tgz",
"integrity": "sha512-thFUbkHteM20BGShD6P08aungq4irbIZKUNbG70LN8RkO7YztcGPiKTTGZS7Kw+x5h8hOXs0i4OaHwFxlpQN6A==", "integrity": "sha512-2O73dR4Dc9bp+wSYhviP6sDziurB5/HCym7xILKifWdE9UsOe2FtNcM+I4xZjKrfLJnq5UR8k9riB87gauiQtw==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
"dev": true, "dev": true,
"license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
"android" "android"
] ]
}, },
"node_modules/@rollup/rollup-darwin-arm64": { "node_modules/@rollup/rollup-darwin-arm64": {
"version": "4.19.1", "version": "4.50.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.19.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.50.0.tgz",
"integrity": "sha512-8o6eqeFZzVLia2hKPUZk4jdE3zW7LCcZr+MD18tXkgBBid3lssGVAYuox8x6YHoEPDdDa9ixTaStcmx88lio5Q==", "integrity": "sha512-vwSXQN8T4sKf1RHr1F0s98Pf8UPz7pS6P3LG9NSmuw0TVh7EmaE+5Ny7hJOZ0M2yuTctEsHHRTMi2wuHkdS6Hg==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
"dev": true, "dev": true,
"license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
"darwin" "darwin"
] ]
}, },
"node_modules/@rollup/rollup-darwin-x64": { "node_modules/@rollup/rollup-darwin-x64": {
"version": "4.19.1", "version": "4.50.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.19.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.50.0.tgz",
"integrity": "sha512-4T42heKsnbjkn7ovYiAdDVRRWZLU9Kmhdt6HafZxFcUdpjlBlxj4wDrt1yFWLk7G4+E+8p2C9tcmSu0KA6auGA==", "integrity": "sha512-cQp/WG8HE7BCGyFVuzUg0FNmupxC+EPZEwWu2FCGGw5WDT1o2/YlENbm5e9SMvfDFR6FRhVCBePLqj0o8MN7Vw==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
"dev": true, "dev": true,
"license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
"darwin" "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": { "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
"version": "4.19.1", "version": "4.50.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.19.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.50.0.tgz",
"integrity": "sha512-MXg1xp+e5GhZ3Vit1gGEyoC+dyQUBy2JgVQ+3hUrD9wZMkUw/ywgkpK7oZgnB6kPpGrxJ41clkPPnsknuD6M2Q==", "integrity": "sha512-u72Mzc6jyJwKjJbZZcIYmd9bumJu7KNmHYdue43vT1rXPm2rITwmPWF0mmPzLm9/vJWxIRbao/jrQmxTO0Sm9w==",
"cpu": [ "cpu": [
"arm" "arm"
], ],
"dev": true, "dev": true,
"license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
"linux" "linux"
] ]
}, },
"node_modules/@rollup/rollup-linux-arm-musleabihf": { "node_modules/@rollup/rollup-linux-arm-musleabihf": {
"version": "4.19.1", "version": "4.50.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.19.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.50.0.tgz",
"integrity": "sha512-DZNLwIY4ftPSRVkJEaxYkq7u2zel7aah57HESuNkUnz+3bZHxwkCUkrfS2IWC1sxK6F2QNIR0Qr/YXw7nkF3Pw==", "integrity": "sha512-S4UefYdV0tnynDJV1mdkNawp0E5Qm2MtSs330IyHgaccOFrwqsvgigUD29uT+B/70PDY1eQ3t40+xf6wIvXJyg==",
"cpu": [ "cpu": [
"arm" "arm"
], ],
"dev": true, "dev": true,
"license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
"linux" "linux"
] ]
}, },
"node_modules/@rollup/rollup-linux-arm64-gnu": { "node_modules/@rollup/rollup-linux-arm64-gnu": {
"version": "4.19.1", "version": "4.50.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.19.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.50.0.tgz",
"integrity": "sha512-C7evongnjyxdngSDRRSQv5GvyfISizgtk9RM+z2biV5kY6S/NF/wta7K+DanmktC5DkuaJQgoKGf7KUDmA7RUw==", "integrity": "sha512-1EhkSvUQXJsIhk4msxP5nNAUWoB4MFDHhtc4gAYvnqoHlaL9V3F37pNHabndawsfy/Tp7BPiy/aSa6XBYbaD1g==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
"dev": true, "dev": true,
"license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
"linux" "linux"
] ]
}, },
"node_modules/@rollup/rollup-linux-arm64-musl": { "node_modules/@rollup/rollup-linux-arm64-musl": {
"version": "4.19.1", "version": "4.50.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.19.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.50.0.tgz",
"integrity": "sha512-89tFWqxfxLLHkAthAcrTs9etAoBFRduNfWdl2xUs/yLV+7XDrJ5yuXMHptNqf1Zw0UCA3cAutkAiAokYCkaPtw==", "integrity": "sha512-EtBDIZuDtVg75xIPIK1l5vCXNNCIRM0OBPUG+tbApDuJAy9mKago6QxX+tfMzbCI6tXEhMuZuN1+CU8iDW+0UQ==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
"dev": true, "dev": true,
"license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
"linux" "linux"
] ]
}, },
"node_modules/@rollup/rollup-linux-powerpc64le-gnu": { "node_modules/@rollup/rollup-linux-loongarch64-gnu": {
"version": "4.19.1", "version": "4.50.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.19.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.50.0.tgz",
"integrity": "sha512-PromGeV50sq+YfaisG8W3fd+Cl6mnOOiNv2qKKqKCpiiEke2KiKVyDqG/Mb9GWKbYMHj5a01fq/qlUR28PFhCQ==", "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": [ "cpu": [
"ppc64" "ppc64"
], ],
"dev": true, "dev": true,
"license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
"linux" "linux"
] ]
}, },
"node_modules/@rollup/rollup-linux-riscv64-gnu": { "node_modules/@rollup/rollup-linux-riscv64-gnu": {
"version": "4.19.1", "version": "4.50.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.19.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.50.0.tgz",
"integrity": "sha512-/1BmHYh+iz0cNCP0oHCuF8CSiNj0JOGf0jRlSo3L/FAyZyG2rGBuKpkZVH9YF+x58r1jgWxvm1aRg3DHrLDt6A==", "integrity": "sha512-bSbWlY3jZo7molh4tc5dKfeSxkqnf48UsLqYbUhnkdnfgZjgufLS/NTA8PcP/dnvct5CCdNkABJ56CbclMRYCA==",
"cpu": [ "cpu": [
"riscv64" "riscv64"
], ],
"dev": true, "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, "optional": true,
"os": [ "os": [
"linux" "linux"
] ]
}, },
"node_modules/@rollup/rollup-linux-s390x-gnu": { "node_modules/@rollup/rollup-linux-s390x-gnu": {
"version": "4.19.1", "version": "4.50.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.19.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.50.0.tgz",
"integrity": "sha512-0cYP5rGkQWRZKy9/HtsWVStLXzCF3cCBTRI+qRL8Z+wkYlqN7zrSYm6FuY5Kd5ysS5aH0q5lVgb/WbG4jqXN1Q==", "integrity": "sha512-CxRKyakfDrsLXiCyucVfVWVoaPA4oFSpPpDwlMcDFQvrv3XY6KEzMtMZrA+e/goC8xxp2WSOxHQubP8fPmmjOQ==",
"cpu": [ "cpu": [
"s390x" "s390x"
], ],
"dev": true, "dev": true,
"license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
"linux" "linux"
] ]
}, },
"node_modules/@rollup/rollup-linux-x64-gnu": { "node_modules/@rollup/rollup-linux-x64-gnu": {
"version": "4.19.1", "version": "4.50.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.19.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.50.0.tgz",
"integrity": "sha512-XUXeI9eM8rMP8aGvii/aOOiMvTs7xlCosq9xCjcqI9+5hBxtjDpD+7Abm1ZhVIFE1J2h2VIg0t2DX/gjespC2Q==", "integrity": "sha512-8PrJJA7/VU8ToHVEPu14FzuSAqVKyo5gg/J8xUerMbyNkWkO9j2ExBho/68RnJsMGNJq4zH114iAttgm7BZVkA==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
"dev": true, "dev": true,
"license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
"linux" "linux"
] ]
}, },
"node_modules/@rollup/rollup-linux-x64-musl": { "node_modules/@rollup/rollup-linux-x64-musl": {
"version": "4.19.1", "version": "4.50.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.19.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.50.0.tgz",
"integrity": "sha512-V7cBw/cKXMfEVhpSvVZhC+iGifD6U1zJ4tbibjjN+Xi3blSXaj/rJynAkCFFQfoG6VZrAiP7uGVzL440Q6Me2Q==", "integrity": "sha512-SkE6YQp+CzpyOrbw7Oc4MgXFvTw2UIBElvAvLCo230pyxOLmYwRPwZ/L5lBe/VW/qT1ZgND9wJfOsdy0XptRvw==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
"dev": true, "dev": true,
"license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
"linux" "linux"
] ]
}, },
"node_modules/@rollup/rollup-win32-arm64-msvc": { "node_modules/@rollup/rollup-openharmony-arm64": {
"version": "4.19.1", "version": "4.50.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.19.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.50.0.tgz",
"integrity": "sha512-88brja2vldW/76jWATlBqHEoGjJLRnP0WOEKAUbMcXaAZnemNhlAHSyj4jIwMoP2T750LE9lblvD4e2jXleZsA==", "integrity": "sha512-PZkNLPfvXeIOgJWA804zjSFH7fARBBCpCXxgkGDRjjAhRLOR8o0IGS01ykh5GYfod4c2yiiREuDM8iZ+pVsT+Q==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
"dev": true, "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, "optional": true,
"os": [ "os": [
"win32" "win32"
] ]
}, },
"node_modules/@rollup/rollup-win32-ia32-msvc": { "node_modules/@rollup/rollup-win32-ia32-msvc": {
"version": "4.19.1", "version": "4.50.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.19.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.50.0.tgz",
"integrity": "sha512-LdxxcqRVSXi6k6JUrTah1rHuaupoeuiv38du8Mt4r4IPer3kwlTo+RuvfE8KzZ/tL6BhaPlzJ3835i6CxrFIRQ==", "integrity": "sha512-XzNOVg/YnDOmFdDKcxxK410PrcbcqZkBmz+0FicpW5jtjKQxcW1BZJEQOF0NJa6JO7CZhett8GEtRN/wYLYJuw==",
"cpu": [ "cpu": [
"ia32" "ia32"
], ],
"dev": true, "dev": true,
"license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
"win32" "win32"
] ]
}, },
"node_modules/@rollup/rollup-win32-x64-msvc": { "node_modules/@rollup/rollup-win32-x64-msvc": {
"version": "4.19.1", "version": "4.50.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.19.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.50.0.tgz",
"integrity": "sha512-2bIrL28PcK3YCqD9anGxDxamxdiJAxA+l7fWIwM5o8UqNy1t3d1NdAweO2XhA0KTDJ5aH1FsuiT5+7VhtHliXg==", "integrity": "sha512-xMmiWRR8sp72Zqwjgtf3QbZfF1wdh8X2ABu3EaozvZcyHJeU0r+XAnXdKgs4cCAp6ORoYoCygipYP1mjmbjrsg==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
"dev": true, "dev": true,
"license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
"win32" "win32"
@ -1127,10 +1206,11 @@
"dev": true "dev": true
}, },
"node_modules/@types/estree": { "node_modules/@types/estree": {
"version": "1.0.5", "version": "1.0.8",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
"integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
"dev": true "dev": true,
"license": "MIT"
}, },
"node_modules/@types/html-to-pdfmake": { "node_modules/@types/html-to-pdfmake": {
"version": "2.4.4", "version": "2.4.4",
@ -1489,30 +1569,20 @@
"node": ">=6.5" "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": { "node_modules/asynckit": {
"version": "0.4.0", "version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "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": { "node_modules/axios": {
"version": "1.7.2", "version": "1.11.0",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", "resolved": "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz",
"integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", "integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==",
"license": "MIT",
"dependencies": { "dependencies": {
"follow-redirects": "^1.15.6", "follow-redirects": "^1.15.6",
"form-data": "^4.0.0", "form-data": "^4.0.4",
"proxy-from-env": "^1.1.0" "proxy-from-env": "^1.1.0"
} }
}, },
@ -1536,10 +1606,11 @@
"integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g=="
}, },
"node_modules/brace-expansion": { "node_modules/brace-expansion": {
"version": "2.0.1", "version": "2.0.2",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
"dev": true, "dev": true,
"license": "MIT",
"dependencies": { "dependencies": {
"balanced-match": "^1.0.0" "balanced-match": "^1.0.0"
} }
@ -1602,6 +1673,19 @@
"url": "https://github.com/sponsors/ljharb" "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": { "node_modules/camelcase": {
"version": "6.3.0", "version": "6.3.0",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "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": { "node_modules/clone": {
"version": "2.1.2", "version": "2.1.2",
"resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
@ -1656,25 +1726,11 @@
"node": ">=0.8" "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": { "node_modules/combined-stream": {
"version": "1.0.8", "version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
"license": "MIT",
"dependencies": { "dependencies": {
"delayed-stream": "~1.0.0" "delayed-stream": "~1.0.0"
}, },
@ -1695,10 +1751,11 @@
"dev": true "dev": true
}, },
"node_modules/cross-spawn": { "node_modules/cross-spawn": {
"version": "7.0.3", "version": "7.0.6",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
"integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
"dev": true, "dev": true,
"license": "MIT",
"dependencies": { "dependencies": {
"path-key": "^3.1.0", "path-key": "^3.1.0",
"shebang-command": "^2.0.0", "shebang-command": "^2.0.0",
@ -1804,6 +1861,7 @@
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
"license": "MIT",
"engines": { "engines": {
"node": ">=0.4.0" "node": ">=0.4.0"
} }
@ -1813,6 +1871,20 @@
"resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz", "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz",
"integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==" "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": { "node_modules/electron-to-chromium": {
"version": "1.5.3", "version": "1.5.3",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.3.tgz", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.3.tgz",
@ -1831,12 +1903,10 @@
} }
}, },
"node_modules/es-define-property": { "node_modules/es-define-property": {
"version": "1.0.0", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
"integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
"dependencies": { "license": "MIT",
"get-intrinsic": "^1.2.4"
},
"engines": { "engines": {
"node": ">= 0.4" "node": ">= 0.4"
} }
@ -1849,6 +1919,33 @@
"node": ">= 0.4" "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": { "node_modules/esbuild": {
"version": "0.21.5", "version": "0.21.5",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
@ -1896,15 +1993,6 @@
"node": ">=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": { "node_modules/estree-walker": {
"version": "2.0.2", "version": "2.0.2",
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
@ -1965,12 +2053,15 @@
} }
}, },
"node_modules/form-data": { "node_modules/form-data": {
"version": "4.0.0", "version": "4.0.4",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz",
"integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==",
"license": "MIT",
"dependencies": { "dependencies": {
"asynckit": "^0.4.0", "asynckit": "^0.4.0",
"combined-stream": "^1.0.8", "combined-stream": "^1.0.8",
"es-set-tostringtag": "^2.1.0",
"hasown": "^2.0.2",
"mime-types": "^2.1.12" "mime-types": "^2.1.12"
}, },
"engines": { "engines": {
@ -1983,6 +2074,7 @@
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
"dev": true, "dev": true,
"hasInstallScript": true, "hasInstallScript": true,
"license": "MIT",
"optional": true, "optional": true,
"os": [ "os": [
"darwin" "darwin"
@ -2017,15 +2109,21 @@
} }
}, },
"node_modules/get-intrinsic": { "node_modules/get-intrinsic": {
"version": "1.2.4", "version": "1.3.0",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
"integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
"license": "MIT",
"dependencies": { "dependencies": {
"call-bind-apply-helpers": "^1.0.2",
"es-define-property": "^1.0.1",
"es-errors": "^1.3.0", "es-errors": "^1.3.0",
"es-object-atoms": "^1.1.1",
"function-bind": "^1.1.2", "function-bind": "^1.1.2",
"has-proto": "^1.0.1", "get-proto": "^1.0.1",
"has-symbols": "^1.0.3", "gopd": "^1.2.0",
"hasown": "^2.0.0" "has-symbols": "^1.1.0",
"hasown": "^2.0.2",
"math-intrinsics": "^1.1.0"
}, },
"engines": { "engines": {
"node": ">= 0.4" "node": ">= 0.4"
@ -2034,6 +2132,19 @@
"url": "https://github.com/sponsors/ljharb" "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": { "node_modules/globals": {
"version": "11.12.0", "version": "11.12.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
@ -2044,25 +2155,17 @@
} }
}, },
"node_modules/gopd": { "node_modules/gopd": {
"version": "1.0.1", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
"integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
"dependencies": { "license": "MIT",
"get-intrinsic": "^1.1.3" "engines": {
"node": ">= 0.4"
}, },
"funding": { "funding": {
"url": "https://github.com/sponsors/ljharb" "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": { "node_modules/has-property-descriptors": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "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" "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": { "node_modules/has-symbols": {
"version": "1.0.3", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
"integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
"license": "MIT",
"engines": { "engines": {
"node": ">= 0.4" "node": ">= 0.4"
}, },
@ -2230,7 +2323,8 @@
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
"dev": true "dev": true,
"license": "MIT"
}, },
"node_modules/jsesc": { "node_modules/jsesc": {
"version": "2.5.2", "version": "2.5.2",
@ -2302,6 +2396,15 @@
"@jridgewell/sourcemap-codec": "^1.5.0" "@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": { "node_modules/memorystream": {
"version": "0.3.1", "version": "0.3.1",
"resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz",
@ -2315,6 +2418,7 @@
"version": "1.52.0", "version": "1.52.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
"license": "MIT",
"engines": { "engines": {
"node": ">= 0.6" "node": ">= 0.6"
} }
@ -2323,6 +2427,7 @@
"version": "2.1.35", "version": "2.1.35",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
"license": "MIT",
"dependencies": { "dependencies": {
"mime-db": "1.52.0" "mime-db": "1.52.0"
}, },
@ -2771,12 +2876,13 @@
"integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ=="
}, },
"node_modules/rollup": { "node_modules/rollup": {
"version": "4.19.1", "version": "4.50.0",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.19.1.tgz", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.50.0.tgz",
"integrity": "sha512-K5vziVlg7hTpYfFBI+91zHBEMo6jafYXpkMlqZjg7/zhIG9iHqazBf4xz9AVdjS9BruRn280ROqLI7G3OFRIlw==", "integrity": "sha512-/Zl4D8zPifNmyGzJS+3kVoyXeDeT/GrsJM94sACNg9RtUE0hrHa1bNPtRSrfHTMH5HjRzce6K7rlTh3Khiw+pw==",
"dev": true, "dev": true,
"license": "MIT",
"dependencies": { "dependencies": {
"@types/estree": "1.0.5" "@types/estree": "1.0.8"
}, },
"bin": { "bin": {
"rollup": "dist/bin/rollup" "rollup": "dist/bin/rollup"
@ -2786,22 +2892,27 @@
"npm": ">=8.0.0" "npm": ">=8.0.0"
}, },
"optionalDependencies": { "optionalDependencies": {
"@rollup/rollup-android-arm-eabi": "4.19.1", "@rollup/rollup-android-arm-eabi": "4.50.0",
"@rollup/rollup-android-arm64": "4.19.1", "@rollup/rollup-android-arm64": "4.50.0",
"@rollup/rollup-darwin-arm64": "4.19.1", "@rollup/rollup-darwin-arm64": "4.50.0",
"@rollup/rollup-darwin-x64": "4.19.1", "@rollup/rollup-darwin-x64": "4.50.0",
"@rollup/rollup-linux-arm-gnueabihf": "4.19.1", "@rollup/rollup-freebsd-arm64": "4.50.0",
"@rollup/rollup-linux-arm-musleabihf": "4.19.1", "@rollup/rollup-freebsd-x64": "4.50.0",
"@rollup/rollup-linux-arm64-gnu": "4.19.1", "@rollup/rollup-linux-arm-gnueabihf": "4.50.0",
"@rollup/rollup-linux-arm64-musl": "4.19.1", "@rollup/rollup-linux-arm-musleabihf": "4.50.0",
"@rollup/rollup-linux-powerpc64le-gnu": "4.19.1", "@rollup/rollup-linux-arm64-gnu": "4.50.0",
"@rollup/rollup-linux-riscv64-gnu": "4.19.1", "@rollup/rollup-linux-arm64-musl": "4.50.0",
"@rollup/rollup-linux-s390x-gnu": "4.19.1", "@rollup/rollup-linux-loongarch64-gnu": "4.50.0",
"@rollup/rollup-linux-x64-gnu": "4.19.1", "@rollup/rollup-linux-ppc64-gnu": "4.50.0",
"@rollup/rollup-linux-x64-musl": "4.19.1", "@rollup/rollup-linux-riscv64-gnu": "4.50.0",
"@rollup/rollup-win32-arm64-msvc": "4.19.1", "@rollup/rollup-linux-riscv64-musl": "4.50.0",
"@rollup/rollup-win32-ia32-msvc": "4.19.1", "@rollup/rollup-linux-s390x-gnu": "4.50.0",
"@rollup/rollup-win32-x64-msvc": "4.19.1", "@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" "fsevents": "~2.3.2"
} }
}, },
@ -2911,18 +3022,6 @@
"node": ">=17.0.0" "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": { "node_modules/svg-tags": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz",
@ -3066,14 +3165,15 @@
} }
}, },
"node_modules/vite": { "node_modules/vite": {
"version": "5.3.5", "version": "5.4.19",
"resolved": "https://registry.npmjs.org/vite/-/vite-5.3.5.tgz", "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.19.tgz",
"integrity": "sha512-MdjglKR6AQXQb9JGiS7Rc2wC6uMjcm7Go/NHNO63EwiJXfuk9PgqiP/n5IDJCziMkfw9n4Ubp7lttNwz+8ZVKA==", "integrity": "sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==",
"dev": true, "dev": true,
"license": "MIT",
"dependencies": { "dependencies": {
"esbuild": "^0.21.3", "esbuild": "^0.21.3",
"postcss": "^8.4.39", "postcss": "^8.4.43",
"rollup": "^4.13.0" "rollup": "^4.20.0"
}, },
"bin": { "bin": {
"vite": "bin/vite.js" "vite": "bin/vite.js"
@ -3092,6 +3192,7 @@
"less": "*", "less": "*",
"lightningcss": "^1.21.0", "lightningcss": "^1.21.0",
"sass": "*", "sass": "*",
"sass-embedded": "*",
"stylus": "*", "stylus": "*",
"sugarss": "*", "sugarss": "*",
"terser": "^5.4.0" "terser": "^5.4.0"
@ -3109,6 +3210,9 @@
"sass": { "sass": {
"optional": true "optional": true
}, },
"sass-embedded": {
"optional": true
},
"stylus": { "stylus": {
"optional": true "optional": true
}, },

View File

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

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

Binary file not shown.

View File

@ -237,4 +237,18 @@
d="M16.1362 14.1067H14.7781C14.3632 14.1067 14.0268 14.4424 14.0268 14.8564V19.8401C14.0268 20.2541 14.3632 20.5897 14.7781 20.5897H16.1362C16.5511 20.5897 16.8875 20.2541 16.8875 19.8401V14.8564C16.8875 14.4424 16.5511 14.1067 16.1362 14.1067Z" d="M16.1362 14.1067H14.7781C14.3632 14.1067 14.0268 14.4424 14.0268 14.8564V19.8401C14.0268 20.2541 14.3632 20.5897 14.7781 20.5897H16.1362C16.5511 20.5897 16.8875 20.2541 16.8875 19.8401V14.8564C16.8875 14.4424 16.5511 14.1067 16.1362 14.1067Z"
/> />
</symbol> </symbol>
<symbol id="trash" viewBox="0 0 20 22">
<path
d="M19.4015 6.14128H18.7672L18.8227 5.47865C18.8227 5.47865 18.8227 5.44229 18.8227 5.42613C18.8227 3.9837 17.6691 2.80795 16.2538 2.80795H14.8544V1.78976C14.8544 0.803906 14.0695 0.00390625 13.1022 0.00390625H6.88614C5.91885 0.00390625 5.13391 0.803906 5.13391 1.78976V2.80795H3.73451C2.31924 2.80795 1.16563 3.9837 1.16563 5.42613C1.16563 5.44229 1.16563 5.46249 1.16563 5.47865L1.22113 6.14128H0.586836C0.257797 6.14128 -0.0078125 6.41199 -0.0078125 6.74734C-0.0078125 7.08269 0.257797 7.3534 0.586836 7.3534H1.3242L2.35096 19.41C2.36682 20.8403 3.5125 21.9999 4.91984 21.9999H15.0645C16.4719 21.9999 17.6176 20.8403 17.6334 19.41L18.6602 7.3534H19.3975C19.7266 7.3534 19.9922 7.08269 19.9922 6.74734C19.9922 6.41199 19.7266 6.14128 19.3975 6.14128H19.4015ZM6.32321 1.78572C6.32321 1.46653 6.57692 1.21199 6.88614 1.21199H13.1022C13.4154 1.21199 13.6651 1.47057 13.6651 1.78572V2.80391H6.32321V1.78572ZM2.35492 5.40189C2.36682 4.63825 2.98129 4.02007 3.73451 4.02007H16.2578C17.011 4.02007 17.6255 4.63825 17.6374 5.40189L17.5739 6.14128H2.41835L2.35492 5.40189ZM16.452 19.3292C16.452 19.3292 16.452 19.3655 16.452 19.3817C16.452 20.1574 15.8336 20.7877 15.0725 20.7877H4.9238C4.16265 20.7877 3.54422 20.1574 3.54422 19.3817C3.54422 19.3655 3.54422 19.3453 3.54422 19.3292L2.52539 7.3534H17.4748L16.456 19.3292H16.452Z"
/>
<path
d="M14.7236 13.9756H5.2687C4.93966 13.9756 4.67405 14.2463 4.67405 14.5817C4.67405 14.917 4.93966 15.1877 5.2687 15.1877H14.7196C15.0487 15.1877 15.3143 14.917 15.3143 14.5817C15.3143 14.2463 15.0487 13.9756 14.7196 13.9756H14.7236Z"
/>
<path
d="M4.87227 11.6766H15.1161C15.4451 11.6766 15.7107 11.4059 15.7107 11.0706C15.7107 10.7352 15.4451 10.4645 15.1161 10.4645H4.87227C4.54323 10.4645 4.27762 10.7352 4.27762 11.0706C4.27762 11.4059 4.54323 11.6766 4.87227 11.6766Z"
/>
<path
d="M14.3272 17.4867H5.66513C5.33609 17.4867 5.07048 17.7574 5.07048 18.0928C5.07048 18.4281 5.33609 18.6989 5.66513 18.6989H14.3232C14.6522 18.6989 14.9179 18.4281 14.9179 18.0928C14.9179 17.7574 14.6522 17.4867 14.3232 17.4867H14.3272Z"
/>
</symbol>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 41 KiB

After

Width:  |  Height:  |  Size: 43 KiB

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -18,14 +18,17 @@
{{ fileName }} {{ fileName }}
</div> </div>
</a> </a>
<div class="actions-c" v-if="editable || $slots.actionButtons">
<slot name="actionButtons"></slot>
<i <i
class="ico-c ico-section ico-section-header-btn ico-replace" class="ico-c ico-section ico-btn back-grad-dgrey"
@click="OnClick" @click="OnClick"
v-if="editable"> v-if="editable">
<svg><use href="/src/assets/images/icons.svg#replace"></use></svg> <svg><use href="/src/assets/images/icons.svg#replace"></use></svg>
</i> </i>
</div> </div>
</div> </div>
</div>
</template> </template>
<template v-else> <template v-else>
<div class="form-item-picture only-image clickable"> <div class="form-item-picture only-image clickable">
@ -35,13 +38,16 @@
</div> </div>
<div v-else>{{ fileType.toLocaleUpperCase() }}</div> <div v-else>{{ fileType.toLocaleUpperCase() }}</div>
</a> </a>
<div class="actions-c actions-top" v-if="editable || $slots.actionButtons">
<slot name="actionButtons"></slot>
<i <i
class="ico-c ico-section ico-section-header-btn ico-replace" class="ico-c ico-section ico-btn back-grad-dgrey"
@click="OnClick" @click="OnClick"
v-if="editable"> v-if="editable">
<svg><use href="/src/assets/images/icons.svg#replace"></use></svg> <svg><use href="/src/assets/images/icons.svg#replace"></use></svg>
</i> </i>
</div> </div>
</div>
</template> </template>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
@ -75,8 +81,8 @@
if (props.filePath !== undefined && props.filePath !== null) { if (props.filePath !== undefined && props.filePath !== null) {
localFilePath.value = props.usePath localFilePath.value = props.usePath
? props.filePath as string ? (props.filePath as string)
: (axios.defaults.baseURL as string + props.filePath as string) as string : (((axios.defaults.baseURL as string) + props.filePath) as string as string)
fileType.value = globalStore.FileType(localFilePath.value) fileType.value = globalStore.FileType(localFilePath.value)
fileName.value = globalStore.FileName(localFilePath.value) fileName.value = globalStore.FileName(localFilePath.value)
@ -96,8 +102,29 @@
() => props.filePath, () => props.filePath,
() => { () => {
localFilePath.value = props.usePath localFilePath.value = props.usePath
? props.filePath as string ? (props.filePath as string)
: (axios.defaults.baseURL as string + props.filePath as string) as string : (((axios.defaults.baseURL as string) + props.filePath) as string as string)
} }
) )
</script> </script>
<style scoped>
.actions-c {
display: flex;
position: absolute;
right: 0;
height: 100%;
padding: 8px;
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

@ -14,7 +14,9 @@
</span> </span>
<template v-if="modelText !== undefined && modelText !== ''"> <template v-if="modelText !== undefined && modelText !== ''">
<template v-if="typeof modelText === 'string'"> <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>
<template v-if="typeof modelText === 'object'"> <template v-if="typeof modelText === 'object'">
<ul> <ul>
@ -25,7 +27,9 @@
</template> </template>
</template> </template>
<template v-else> <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> </template>
<span <span
class="form-item-alert" class="form-item-alert"
@ -64,6 +68,7 @@
modelText?: any modelText?: any
invalidText?: string invalidText?: string
price?: boolean price?: boolean
size?: number | string
} }
const props = withDefaults(defineProps<Props>(), { const props = withDefaults(defineProps<Props>(), {
half: false, half: false,
@ -71,13 +76,23 @@
}) })
const localValue = ref<any>(props.modelValue) 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({ localValue.value = dateStore.dateFormat({
date: props.modelValue as Date, date: props.modelValue as Date,
pattern: 'dd-mm-yy' 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({ localValue.value = dateStore.dateFormat({
date: props.modelValue as Date, date: props.modelValue as Date,
pattern: 'dd-mm-yy-t' pattern: 'dd-mm-yy-t'
@ -108,3 +123,14 @@
} }
) )
</script> </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ü' multipleText: 'Tümü'
}) })
const emit = defineEmits(['update:modelValue', 'change','clear']) const emit = defineEmits(['update:modelValue', 'change', 'clear'])
const activated = ref<Boolean>(false) const activated = ref<Boolean>(false)
const multipleAllSelected = ref<boolean>(false) const multipleAllSelected = ref<boolean>(false)
@ -214,9 +214,8 @@
} else { } else {
let text = props.listData.filter((v: Record<string, any>) => { let text = props.listData.filter((v: Record<string, any>) => {
let val = props.listVal !== undefined ? v[props.listVal] : v let val = props.listVal !== undefined ? v[props.listVal] : v
return localValue.value === val return String(localValue.value) === String(val)
})[0] })[0]
return text !== undefined return text !== undefined
? props.listText !== undefined ? props.listText !== undefined
? text[props.listText] ? text[props.listText]
@ -357,7 +356,7 @@
const SetSelectedOption = () => { const SetSelectedOption = () => {
selectedOption.value = props.listData.filter((v: Record<string, any>) => { 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] })[0]
} }

View File

@ -120,13 +120,17 @@
:isPreview="isPreview" :isPreview="isPreview"
:rowActions="rowActions" :rowActions="rowActions"
:actionFixed="actionFixed" :actionFixed="actionFixed"
:rowActionStyle="rowActionStyle" /> :rowActionStyle="rowActionStyle"
:isUseRoute="isUseRoute" />
</slot> </slot>
</div> </div>
<panel-wrapper v-if="filterPanel" v-model="filterPanel" :panel-title="'Filtreleme'"> <panel-wrapper v-if="filterPanel" v-model="filterPanel" :panel-title="'Filtreleme'">
<template #panelContent> <template #panelContent>
<panel-filter :filterHead="tableHeader" v-model:filterParams="localFilterParams" /> <panel-filter
:filterHead="tableHeader"
v-model:filterParams="localFilterParams"
:isUseRoute="isUseRoute" />
</template> </template>
<template #footerButton> <template #footerButton>
<div class="button-c button-save" @click="FilterData">Filtrele</div> <div class="button-c button-save" @click="FilterData">Filtrele</div>
@ -140,8 +144,11 @@
</template> </template>
<script setup lang="ts"> <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 axios from 'axios'
import { useRouter, useRoute } from 'vue-router'
const router = useRouter()
const route = useRoute()
import { useGlobalStore } from '@/stores/globalStore' import { useGlobalStore } from '@/stores/globalStore'
const globalStore = useGlobalStore() const globalStore = useGlobalStore()
@ -161,6 +168,7 @@
computeHtml?: Function computeHtml?: Function
sort?: boolean sort?: boolean
filter?: Record<string, any> filter?: Record<string, any>
style?: Record<string, any>
} }
interface IPagination { interface IPagination {
[key: string]: any [key: string]: any
@ -199,7 +207,8 @@
isPreview?: boolean isPreview?: boolean
rowActions?: Record<string, any>[] rowActions?: Record<string, any>[]
actionFixed?: boolean actionFixed?: boolean
rowActionStyle?:string rowActionStyle?: string
isUseRoute?: boolean
} }
const props = withDefaults(defineProps<Props>(), { const props = withDefaults(defineProps<Props>(), {
@ -212,7 +221,8 @@
search: true, search: true,
rowNumber: false, rowNumber: false,
isPreview: false, isPreview: false,
actionFixed:false actionFixed: false,
isUseRoute: false
}) })
const emit = defineEmits([ const emit = defineEmits([
@ -237,6 +247,7 @@
const localPagination = ref<IPagination>({} as IPagination) const localPagination = ref<IPagination>({} as IPagination)
const localTotalValues = reactive<Record<string, any>>({}) const localTotalValues = reactive<Record<string, any>>({})
const searchFieldPos = ref<string>('') const searchFieldPos = ref<string>('')
const localLoaded = ref<boolean>(false)
if (props.totalValues !== undefined) Object.assign(localTotalValues, props.totalValues) if (props.totalValues !== undefined) Object.assign(localTotalValues, props.totalValues)
@ -264,8 +275,26 @@
} }
const FilterData = async () => { const FilterData = async () => {
Object.keys(filterParams).forEach((k) => {
delete filterParams[k]
})
Object.assign(filterParams, localFilterParams.value) Object.assign(filterParams, localFilterParams.value)
EqualObjects(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 () => { setTimeout(async () => {
await GetLocalData() await GetLocalData()
filterPanel.value = false filterPanel.value = false
@ -288,6 +317,11 @@
const RemoveFilterKey = (k: string) => { const RemoveFilterKey = (k: string) => {
delete localFilterParams.value[k] delete localFilterParams.value[k]
delete filterParams[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() GetLocalData()
} }
const RemoveSearch = () => { const RemoveSearch = () => {
@ -295,19 +329,165 @@
searched.value = false searched.value = false
GetLocalData() GetLocalData()
} }
const GetLocalData = async () => { const pageNumberChanging = ref<boolean>(false)
if (selectedExport.value !== null) { const sortChanging = ref<boolean>(false)
const exportUrl = const searchChanging = ref<boolean>(false)
axios.defaults.baseURL + dataStore.apiBase + props.apiList + '?isPdf=true' const filterChanging = ref<boolean>(false)
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') const link = document.createElement('a')
link.href = exportUrl link.href = url
link.download = fileName
document.body.appendChild(link) document.body.appendChild(link)
link.dispatchEvent( link.dispatchEvent(
new MouseEvent('click', { bubbles: true, cancelable: true, view: window }) new MouseEvent('click', { bubbles: true, cancelable: true, view: window })
) )
link.remove() link.remove()
window.URL.revokeObjectURL(link.href) window.URL.revokeObjectURL(url)
} catch (error) {
console.error('Export error:', error)
}
selectedExport.value = null selectedExport.value = null
exportPanel.value = false exportPanel.value = false
@ -362,6 +542,9 @@
} }
emit('update:refresh', false) emit('update:refresh', false)
} }
nextTick(() => {
localLoaded.value = true
})
} }
const OpenMobileButtons = () => { const OpenMobileButtons = () => {
searchForm.value = false searchForm.value = false
@ -392,6 +575,14 @@
const SearchQuery = () => { const SearchQuery = () => {
if (props.apiList !== undefined) GetLocalData() if (props.apiList !== undefined) GetLocalData()
else emit('update:query', localQuery.value) else emit('update:query', localQuery.value)
if (props.isUseRoute) {
router.push({
query: {
...route.query,
searchString: localQuery.value
}
})
}
searchForm.value = false searchForm.value = false
searched.value = true searched.value = true
} }
@ -399,9 +590,39 @@
searchForm.value = false searchForm.value = false
mobileButtons.value = false mobileButtons.value = false
} }
// Filtre başlığını almak için yardımcı fonksiyon
const getFilterTitle = (key: string): string => {
const filterTitles: Record<string, string> = {
'durumId': 'Durum',
'piyangoAmacId': 'Piyango Amacı',
'cekilisYontemiId': 'Çekiliş Yöntemi'
}
return filterTitles[key] || key
}
onBeforeMount(() => { onBeforeMount(() => {
if (globalStore.screenWidth >= globalStore.breakPoints.tabletp) if (globalStore.screenWidth >= globalStore.breakPoints.tabletp)
mobileButtons.value = true mobileButtons.value = true
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() if (props.apiList !== undefined) GetLocalData()
@ -409,18 +630,38 @@
}) })
watch( watch(
() => localSort.value, () => [localSort.value],
() => { () => {
if (!sortChanging.value) GetLocalData()
},
{ deep: true }
)
watch(
() => [route],
() => {
RoutePageControl()
RouteSortControl()
RouteSearchControl()
RouteFilterControl()
GetLocalData() GetLocalData()
}, },
{ deep: true } { deep: true }
) )
watch( watch(
() => localPagination.value.pageNumber, () => localPagination.value.pageNumber,
() => { () => {
if (!pageNumberChanging.value) {
GetLocalData() GetLocalData()
} }
}
)
watch(
() => localPagination.value.pageNumber,
() => {
if (!pageNumberChanging.value) {
GetLocalData()
}
}
) )
watch( watch(
() => props.refresh, () => props.refresh,
@ -431,8 +672,9 @@
watch( watch(
() => localQuery.value, () => localQuery.value,
() => { () => {
if (props.apiList !== undefined && localQuery.value.length === 0) GetLocalData() if (props.apiList !== undefined && localQuery.value.length === 0) {
else if (localQuery.value.length === 0) emit('update:query', localQuery.value) if (!searchChanging.value) GetLocalData()
} else if (localQuery.value.length === 0) emit('update:query', localQuery.value)
} }
) )
watch( watch(

View File

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

View File

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

View File

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

View File

@ -2,7 +2,7 @@ import axios from 'axios'
import { useUsersStore } from '@/stores/usersStore' import { useUsersStore } from '@/stores/usersStore'
import router from '@/router' 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.timeout = 2000;
axios.defaults.headers['Content-Type'] = 'application/json; charset=utf-8' axios.defaults.headers['Content-Type'] = 'application/json; charset=utf-8'
import { useDataStore } from '@/stores/dataStore' import { useDataStore } from '@/stores/dataStore'
@ -48,7 +48,7 @@ axios.interceptors.response.use(
const token = sessionStorage.getItem(usersStore.userStorageKeys.TOKEN) const token = sessionStorage.getItem(usersStore.userStorageKeys.TOKEN)
if (token !== undefined) { if (token !== undefined) {
usersStore.ResetUserData() usersStore.ResetUserData()
router.push('/login') router.push('/giris')
} }
} }
return Promise.reject(error) return Promise.reject(error)

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,7 +1,7 @@
import Register from '@/module/auth/views/Register.vue' import Register from '@/module/auth/views/Register.vue'
export default { export default {
path: '/register', path: '/kayit-ol',
name: 'Register', name: 'Register',
component: Register, component: Register,
meta: { 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 { defineStore } from 'pinia'
import { useDataStore } from '@/stores/dataStore' import { useDataStore } from '@/stores/dataStore'
import { useAuthStore } from '../stores/authStore' 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 dataStore = useDataStore()
const authStore = useAuthStore() const authStore = useAuthStore()
const authValidationStore = useAuthValidationStore()
const usersStore = useUsersStore()
const GetAAuthRoleList = async () => { const Login = async () => {
if (authStore.rolesList.length === 0) { if (authValidationStore.LoginFormCheck()) {
let data = await dataStore.dataGet('Auth/rolelistesi') let login = await dataStore.dataPost('Auth/login', {
authStore.rolesList = data 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 { defineStore } from 'pinia'
import { ref,reactive } from 'vue' import { ref, reactive } from 'vue'
export const useAuthStore = defineStore('authStore', () => { export const useAuthStore = defineStore('authStore', () => {
const loginData = reactive<Record<string, any>>({ username: '', password: '' }) const loginData = reactive<Record<string, any>>({ username: '', password: '' })
const safeLoginData = reactive<Record<string, any>>({}) const safeLoginData = reactive<Record<string, any>>({})
const rolesList = ref<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) 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> </button>
</form> </form>
<div class="login-nav login-nav-back"> <div class="login-nav login-nav-back">
<RouterLink to="/login">&lt; Geri</RouterLink> <RouterLink to="/giris">&lt; Geri</RouterLink>
</div> </div>
</div> </div>
</section> </section>

View File

@ -3,14 +3,12 @@
<section class="section-login"> <section class="section-login">
<div class="login-header"> <div class="login-header">
<div class="logo-header"> <div class="logo-header">
<img <img src="@/assets/images/cekilisevi-logo-n.png" alt="MPI Çekiliş Evi" />
src="@/assets/images/cekilisevi-logo-n.png"
alt="MPI Çekiliş Evi"/>
</div> </div>
<h1>Giriş Yap</h1> <h1>Giriş Yap</h1>
</div> </div>
<div class="section-content"> <div class="section-content">
<form action="#" id="login-form" @submit.prevent="Login"> <form action="#" id="login-form" @submit.prevent="authService.Login">
<form-input <form-input
type="email" type="email"
modelKey="username" modelKey="username"
@ -18,12 +16,11 @@
required required
label="Kullanıcı Adı (e-posta adresi)" label="Kullanıcı Adı (e-posta adresi)"
placeholder="eposta@alanadi.com" placeholder="eposta@alanadi.com"
:invalidText="authValidationStore.invalidTexts.username" /> :invalidText="authValidationStore.loginInvalidTexts.username" />
<form-input <form-input
type="password" type="password"
label="Şifre" label="Şifre"
v-model="authStore.loginData.password" v-model="authStore.loginData.password"
required /> required />
@ -32,64 +29,38 @@
v-if="authValidationStore.isLoginMessage"> v-if="authValidationStore.isLoginMessage">
<span>{{ authValidationStore.loginMessage }}</span> <span>{{ authValidationStore.loginMessage }}</span>
</div> </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 Giriş Yap
</button> </button>
</form> </form>
<div class="login-nav"> <div class="login-nav">
<RouterLink to="/forgot-password">Şifremi Unuttum</RouterLink> <RouterLink to="/sifremi-unuttum">Şifremi Unuttum</RouterLink>
<RouterLink to="/register">Kaydol</RouterLink> <RouterLink to="/kayit-ol">Kayıt Ol</RouterLink>
</div> </div>
</div> </div>
</section> </section>
</GuestLayout> </GuestLayout>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { onBeforeMount, reactive, ref } from 'vue' import { onBeforeMount } from 'vue'
import { useUsersStore } from '@/stores/usersStore' import { useUsersStore } from '@/stores/usersStore'
const usersStore = useUsersStore() const usersStore = useUsersStore()
import { useDataStore } from '@/stores/dataStore'
const dataStore = useDataStore()
import { useAuthStore } from '../stores/authStore' import { useAuthStore } from '../stores/authStore'
const authStore = useAuthStore() const authStore = useAuthStore()
import { useAuthValidationStore } from '../stores/authValidationStore' import { useAuthValidationStore } from '../validation/authValidationStore'
const authValidationStore = useAuthValidationStore() const authValidationStore = useAuthValidationStore()
import { useAuthService } from '../services/authService'
const authService = useAuthService()
import router from '@/router' import router from '@/router'
import GuestLayout from '@/layouts/GuestLayout.vue' 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(() => { onBeforeMount(() => {
if(usersStore.userIsAuth) router.push('/') if (usersStore.userIsAuth) router.push('/')
}) })
</script> </script>

View File

@ -80,8 +80,8 @@
v-model="uyeBilgileriStore.formData.gercekVergiNo" v-model="uyeBilgileriStore.formData.gercekVergiNo"
required required
label="Vergi No" label="Vergi No"
maxlength="11" maxlength="10"
minlength="11" minlength="10"
:invalidText="uyeBilgileriStore.invalidTexts.gercekVergiNo" :invalidText="uyeBilgileriStore.invalidTexts.gercekVergiNo"
@keydown="validationStore.allowNumbersWithKeys" /> @keydown="validationStore.allowNumbersWithKeys" />
@ -339,7 +339,7 @@
</button> </button>
</form> </form>
<div class="login-nav login-nav-back"> <div class="login-nav login-nav-back">
<RouterLink to="/login">&lt; Geri</RouterLink> <RouterLink to="/giris">&lt; Geri</RouterLink>
</div> </div>
</div> </div>
</section> </section>
@ -355,7 +355,7 @@
const globalDataStore = useGlobalDataStore() const globalDataStore = useGlobalDataStore()
import { useValidationStore } from '@/stores/validationStore' import { useValidationStore } from '@/stores/validationStore'
const validationStore = useValidationStore() const validationStore = useValidationStore()
import { useAuthValidationStore } from '../stores/authValidationStore' import { useAuthValidationStore } from '../validation/authValidationStore'
const authValidationStore = useAuthValidationStore() const authValidationStore = useAuthValidationStore()
import router from '@/router' import router from '@/router'
@ -413,7 +413,7 @@
'Başarıyla kayıt oldunuz. Kullanıcı adı ve şifreniz ile giriş yapabilirsiniz.' 'Başarıyla kayıt oldunuz. Kullanıcı adı ve şifreniz ile giriş yapabilirsiniz.'
authValidationStore.isLoginMessage = true authValidationStore.isLoginMessage = true
router.push('/login') router.push('/giris')
} }
} else { } else {
uyeBilgileriStore.isFormValid = true 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

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -3,6 +3,10 @@
<lottery-states <lottery-states
:piyangoAmac="piyangoStore.lotteryData.amacpiyangoId" :piyangoAmac="piyangoStore.lotteryData.amacpiyangoId"
v-if="!isPreview" /> v-if="!isPreview" />
<form-display
v-model="piyangoStore.lotteryData.piyangoId"
label="Piyango ID"
size="1" />
<template <template
v-if=" v-if="
usersStore.isPanelUser && usersStore.isPanelUser &&
@ -20,6 +24,19 @@
v-model="piyangoStore.lotteryData.izinBedelNo" v-model="piyangoStore.lotteryData.izinBedelNo"
label="İzin Bedel No" /> label="İzin Bedel No" />
</template> </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 <form-display
v-model="piyangoStore.lotteryData.baslik" v-model="piyangoStore.lotteryData.baslik"
label="Piyango Başlığı" label="Piyango Başlığı"

View File

@ -19,6 +19,7 @@
</button> </button>
</div> </div>
</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" /> <piyango-bilgileri-display-content v-if="loaded" :isPreview="isPreview" />
</div> </div>
<panel-wrapper <panel-wrapper

View File

@ -10,7 +10,15 @@
:editable="false" :editable="false"
:data="file" :data="file"
title="dokumanAdi" title="dokumanAdi"
:filePath="file.url" /> :filePath="file.url">
<template #actionButtons v-if="usersStore.isPanelUser">
<i
class="ico-c ico-btn ico-section back-grad-alert"
@click="DeleteDocumentPop(file)">
<svg><use href="/src/assets/images/icons.svg#trash"></use></svg>
</i>
</template>
</file-list-item>
</template> </template>
</template> </template>
<template v-else> <template v-else>
@ -33,6 +41,35 @@
const piyangoDocumentStore = usePiyangoDocumentStore() const piyangoDocumentStore = usePiyangoDocumentStore()
import { usePiyangoDocumentService } from '../../service/piyangoDocumentService' import { usePiyangoDocumentService } from '../../service/piyangoDocumentService'
const piyangoDocumentService = usePiyangoDocumentService() const piyangoDocumentService = usePiyangoDocumentService()
import { useDialogStore } from '@/components/global/dialogStore'
const dialogStore = useDialogStore()
import { useDataStore } from '@/stores/dataStore'
const dataStore = useDataStore()
const DeleteDocumentPop = (data: Record<string, any>) => {
dialogStore.CreateDialog({
title: 'Doküman Sil',
id: 'deletedoc',
content: 'Dokümanı silmek istediğinize emin misiniz? Bu işlem geri alınamaz.',
closeText: 'Vazgeç',
buttons: [
{
label: 'Doküman Sil',
type: 'alert',
function: () => DeleteDocument(data.id)
}
]
})
}
const DeleteDocument = async (id: number | string) => {
var dt = await dataStore.dataDelete('Dokuman/' + id)
if (dt !== 'errorfalse') {
dialogStore.CloseDialog('deletedoc')
await piyangoDocumentService.GetDocumentList()
}
}
onBeforeMount(async () => { onBeforeMount(async () => {
await piyangoDocumentService.GetDocumentList() await piyangoDocumentService.GetDocumentList()

View File

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

View File

@ -2,6 +2,9 @@
<div class="form-part"> <div class="form-part">
<div class="form-part-title"> <div class="form-part-title">
<h4>Piyango Resimleri</h4> <h4>Piyango Resimleri</h4>
<a href="/data/mpi-sablon.zip" class="button-c" target="_blank">
Örnek Resim Şablonları
</a>
</div> </div>
<div class="form-part-content"> <div class="form-part-content">
<template v-for="(file, i) in fileList"> <template v-for="(file, i) in fileList">
@ -9,9 +12,19 @@
:data="file" :data="file"
onlyPreview onlyPreview
:editable="false" :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> </template>
<div v-if="usersStore.isPanelUser && fileList.length === 0" class="form-inner-comment"> </file-list-item>
</template>
<div
v-if="usersStore.isPanelUser && fileList.length === 0"
class="form-inner-comment">
Eklenmiş resim bulunamadı. Eklenmiş resim bulunamadı.
</div> </div>
</div> </div>
@ -26,13 +39,43 @@
const usersStore = useUsersStore() const usersStore = useUsersStore()
import { usePiyangoStore } from '../../stores/piyangoStore' import { usePiyangoStore } from '../../stores/piyangoStore'
const piyangoStore = usePiyangoStore() 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 () => { 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) 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 () => { onBeforeMount(async () => {
await GetData() 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=" style="
display: inline-block; display: inline-block;
width: 100%; width: 100%;
font-size: 13pt; font-size: 10pt;
margin-bottom: 12px; margin-bottom: 10px;
text-align: center; text-align: center;
"> ">
MİLLİ PİYANGO İDARESİ GENEL MÜDÜRLÜĞÜ 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 düzenlemek üzere, aşağıda belirtilen koşullarda piyango düzenlemek üzere gerekli iznin
verilmesi hususunda bilgilerinizi ve gereğini arz ederiz. verilmesi hususunda bilgilerinizi ve gereğini arz ederiz.
<br /> <br />
<br />
</div> </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 PİYANGO İLE İLGİLİ BİLGİLER
</strong> </strong>
<br />
<strong style="font-size: 10pt; margin-bottom: 10px">
PİYANGO ID: {{ piyangoStore.lotteryData.piyangoId }}
</strong>
<br />
<table <table
cellspacing="0" cellspacing="0"
class="table-no-line" class="table-no-line"
@ -30,7 +34,7 @@
<tbody> <tbody>
<tr> <tr>
<td colspan="2"> <td colspan="2">
<strong style="font-size: 10pt; margin-bottom: 12px"> <strong style="font-size: 10pt; margin-bottom: 10px">
1- Piyangoyu Düzenleyenin 1- Piyangoyu Düzenleyenin
</strong> </strong>
</td> </td>
@ -41,7 +45,7 @@
<table <table
cellspacing="0" cellspacing="0"
data-pdfmake="{'widths': [ '50%', '50%'],'layout':'pdfTableLayout'}" data-pdfmake="{'widths': [ '50%', '50%'],'layout':'pdfTableLayout'}"
style="margin-bottom: 12px; font-size: 10pt"> style="margin-bottom: 10px; font-size: 10pt">
<tbody> <tbody>
<template v-if="piyangoStore.duzenleyenData.basvuruTipId === 18"> <template v-if="piyangoStore.duzenleyenData.basvuruTipId === 18">
<tr> <tr>
@ -201,7 +205,7 @@
<tbody> <tbody>
<tr> <tr>
<td colspan="2"> <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: Piyangoyu Yürütenin:
</strong> </strong>
</td> </td>
@ -250,7 +254,7 @@
<tbody> <tbody>
<tr> <tr>
<td colspan="2"> <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: 2- Kampanyanın:
</strong> </strong>
</td> </td>
@ -260,7 +264,7 @@
<table <table
cellspacing="0" cellspacing="0"
data-pdfmake="{'widths': [ '50%', '50%'],'layout':'pdfTableLayout'}" data-pdfmake="{'widths': [ '50%', '50%'],'layout':'pdfTableLayout'}"
style="margin-bottom: 12px; font-size: 10pt"> style="margin-bottom: 10px; font-size: 10pt">
<tbody> <tbody>
<tr> <tr>
<td> <td>
@ -306,7 +310,7 @@
<tbody> <tbody>
<tr> <tr>
<td colspan="2"> <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ı: 3-Çekilişe katılma şekil ve şartları:
</strong> </strong>
</td> </td>
@ -317,7 +321,7 @@
<table <table
cellspacing="0" cellspacing="0"
data-pdfmake="{'widths': [ '50%', '50%'],'layout':'pdfTableLayout'}" data-pdfmake="{'widths': [ '50%', '50%'],'layout':'pdfTableLayout'}"
style="margin-bottom: 12px; font-size: 10pt"> style="margin-bottom: 10px; font-size: 10pt">
<tbody> <tbody>
<tr> <tr>
<td colspan="2"> <td colspan="2">
@ -341,7 +345,7 @@
<tbody> <tbody>
<tr> <tr>
<td colspan="2"> <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; 4-Çekilişin;
</strong> </strong>
</td> </td>
@ -352,7 +356,7 @@
<table <table
cellspacing="0" cellspacing="0"
data-pdfmake="{'widths': [ '50%', '50%'],'layout':'pdfTableLayout'}" data-pdfmake="{'widths': [ '50%', '50%'],'layout':'pdfTableLayout'}"
style="margin-bottom: 12px; font-size: 10pt"> style="margin-bottom: 10px; font-size: 10pt">
<tbody> <tbody>
<tr> <tr>
<td colspan="2"> <td colspan="2">
@ -402,7 +406,7 @@
<tbody> <tbody>
<tr> <tr>
<td colspan="2"> <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: 5-Çekiliş sonuçlarının ilan edileceği gazetenin:
</strong> </strong>
</td> </td>
@ -413,7 +417,7 @@
<table <table
cellspacing="0" cellspacing="0"
data-pdfmake="{'widths': [ '50%', '50%'],'layout':'pdfTableLayout'}" data-pdfmake="{'widths': [ '50%', '50%'],'layout':'pdfTableLayout'}"
style="margin-bottom: 12px; font-size: 10pt"> style="margin-bottom: 10px; font-size: 10pt">
<tbody> <tbody>
<tr> <tr>
<td colspan="2"> <td colspan="2">
@ -462,7 +466,7 @@
<table <table
cellspacing="0" cellspacing="0"
data-pdfmake="{'widths': [ '50%', '50%'],'layout':'pdfTableLayout'}" data-pdfmake="{'widths': [ '50%', '50%'],'layout':'pdfTableLayout'}"
style="margin-bottom: 12px; font-size: 10pt"> style="margin-bottom: 10px; font-size: 10pt">
<tbody> <tbody>
<tr> <tr>
<td colspan="2"> <td colspan="2">
@ -508,7 +512,7 @@
<tbody> <tbody>
<tr> <tr>
<td colspan="2"> <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: 7-Diğer hususlar:
</strong> </strong>
</td> </td>
@ -519,7 +523,7 @@
<table <table
cellspacing="0" cellspacing="0"
data-pdfmake="{'widths': [ '50%', '50%'],'layout':'pdfTableLayout'}" data-pdfmake="{'widths': [ '50%', '50%'],'layout':'pdfTableLayout'}"
style="margin-bottom: 12px; font-size: 10pt"> style="margin-bottom: 10px; font-size: 10pt">
<tbody> <tbody>
<tr> <tr>
<td colspan="2"> <td colspan="2">
@ -548,7 +552,7 @@
<tbody> <tbody>
<tr> <tr>
<td colspan="2"> <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: 8-Piyangoya konu ikramiyeler:
</strong> </strong>
</td> </td>
@ -559,7 +563,7 @@
<table <table
cellspacing="0" cellspacing="0"
data-pdfmake="{'widths': ['10%', '30%', '15%', '15%', '15%', '15%'],'layout': 'pdfTableLayout'}" 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"> v-if="piyangoIkramiyeStore.piyangoAllIkramiyeData.length > 0">
<tbody> <tbody>
<tr> <tr>
@ -619,7 +623,7 @@
cellspacing="0" cellspacing="0"
class="table-no-line" class="table-no-line"
data-pdfmake="{'widths': [ '50%', '30%','20%'],'layout':'pdfTableLayoutNoLine'}" data-pdfmake="{'widths': [ '50%', '30%','20%'],'layout':'pdfTableLayoutNoLine'}"
style="margin-bottom: 12px; font-size: 10pt"> style="margin-bottom: 10px; font-size: 10pt">
<tbody> <tbody>
<tr> <tr>
<td> <td>
@ -628,7 +632,13 @@
</td> </td>
<td></td> <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> </td>
</tr> </tr>
<tr> <tr>

View File

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

View File

@ -29,9 +29,38 @@
</button> </button>
</div> </div>
</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"> <div class="form-part-content" v-if="loaded">
<lottery-states :piyangoAmac="piyangoStore.lotteryData.amacpiyangoId" /> <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 <form-input
modelKey="cekilisBaslik" modelKey="cekilisBaslik"
v-model="piyangoStore.lotteryData.baslik" v-model="piyangoStore.lotteryData.baslik"
@ -80,7 +109,7 @@
'/uyeler/detay/' + '/uyeler/detay/' +
piyangoStore.lotteryData.baglisirketId + piyangoStore.lotteryData.baglisirketId +
'/yetkili-uye/detay/' + '/yetkili-uye/detay/' +
piyangoStore.lotteryData.duzenleyenId piyangoStore.lotteryData.duzenleyenId+'/kisi-kurum-bilgileri'
" "
class="button-c"> class="button-c">
Üyeyi Kontrol Et Üyeyi Kontrol Et
@ -515,7 +544,7 @@
piyangoStore.lotteryApprove = 0 piyangoStore.lotteryApprove = 0
piyangoStore.isNew = false piyangoStore.isNew = false
piyangoStore.ResetLotteryData() piyangoStore.ResetLotteryData()
router.push('/piyangolar/detay/' + form.id) router.push('/piyangolar/detay/' + form.id + '/piyango-bilgileri')
} else { } else {
GetData() GetData()
} }
@ -602,7 +631,7 @@
let list = await dataStore.dataGet('Auth/userbyuserChildList/' + id) 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ı' return p.islemTipId === 4 || p.islemTipi === 'Üyelik Onaylandı'
}) })

View File

@ -100,8 +100,9 @@
<form-input <form-input
modelKey="taahhutEdilenIkramiyeAdedi" modelKey="taahhutEdilenIkramiyeAdedi"
v-model="piyangoDosyaKapamaStore.dosyaKapamaData.taahhutEdilenIkramiyeAdedi" v-model="piyangoDosyaKapamaStore.dosyaKapamaData.taahhutEdilenIkramiyeAdedi"
label="7. Taahhüt Edilen İkramiye" label="7. Taahhüt Edilen İkramiye Adedi"
placeholder="Taahhüt Edilen İkramiye" placeholder="Taahhüt Edilen İkramiye Adedi"
@keydown="validationStore.allowNumbersWithKeys"
@keyup="OnKeyup" /> @keyup="OnKeyup" />
<div class="form-part-title"> <div class="form-part-title">
@ -110,20 +111,23 @@
<form-input <form-input
modelKey="teslimEdilenIkramiyeAdedi" modelKey="teslimEdilenIkramiyeAdedi"
v-model="piyangoDosyaKapamaStore.dosyaKapamaData.teslimEdilenIkramiyeAdedi" v-model="piyangoDosyaKapamaStore.dosyaKapamaData.teslimEdilenIkramiyeAdedi"
label="Teslim Edilen İkramiye" label="Teslim Edilen İkramiye Adedi"
placeholder="Teslim Edilen İkramiye" placeholder="Teslim Edilen İkramiye Adedi"
@keydown="validationStore.allowNumbersWithKeys"
@keyup="OnKeyup" /> @keyup="OnKeyup" />
<form-input <form-input
modelKey="asilIkramiyeSayisi" modelKey="asilIkramiyeSayisi"
v-model="piyangoDosyaKapamaStore.dosyaKapamaData.asilIkramiyeSayisi" v-model="piyangoDosyaKapamaStore.dosyaKapamaData.asilIkramiyeSayisi"
label="Teslim Edilen Asıl İkramiye" label="Teslim Edilen Asıl İkramiye Adedi"
placeholder="Teslim Edilen Asıl İkramiye" placeholder="Teslim Edilen Asıl İkramiye Adedi"
@keydown="validationStore.allowNumbersWithKeys"
@keyup="OnKeyup" /> @keyup="OnKeyup" />
<form-input <form-input
modelKey="yedekIkramiyeSayisi" modelKey="yedekIkramiyeSayisi"
v-model="piyangoDosyaKapamaStore.dosyaKapamaData.yedekIkramiyeSayisi" v-model="piyangoDosyaKapamaStore.dosyaKapamaData.yedekIkramiyeSayisi"
label="Teslim Edilen Yedek İkramiye" label="Teslim Edilen Yedek İkramiye Adedi"
placeholder="Teslim Edilen Yedek İkramiye" placeholder="Teslim Edilen Yedek İkramiye Adedi"
@keydown="validationStore.allowNumbersWithKeys"
@keyup="OnKeyup" /> @keyup="OnKeyup" />
<form-checkbox <form-checkbox
label="Nüfus Cüzdanları" label="Nüfus Cüzdanları"
@ -153,8 +157,9 @@
v-model=" v-model="
piyangoDosyaKapamaStore.dosyaKapamaData.sureIcindesAlinmayanIkramiyeAdedi piyangoDosyaKapamaStore.dosyaKapamaData.sureIcindesAlinmayanIkramiyeAdedi
" "
label="Süresi İçinde Alınmayan İkramiye" label="Süresi İçinde Alınmayan İkramiye Adedi"
placeholder="Süresi İçinde Alınmayan İkramiye" placeholder="Süresi İçinde Alınmayan İkramiye Adedi"
@keydown="validationStore.allowNumbersWithKeys"
@keyup="OnKeyup" /> @keyup="OnKeyup" />
<form-checkbox <form-checkbox
label="Tebligat" label="Tebligat"
@ -223,6 +228,8 @@
const piyangoDosyaKapamaStore = usePiyangoDosyaKapamaStore() const piyangoDosyaKapamaStore = usePiyangoDosyaKapamaStore()
import { usePiyangoDosyaKapamaService } from '../../service/piyangoDosyaKapamaService' import { usePiyangoDosyaKapamaService } from '../../service/piyangoDosyaKapamaService'
const piyangoDosyaKapamaService = usePiyangoDosyaKapamaService() const piyangoDosyaKapamaService = usePiyangoDosyaKapamaService()
import { useValidationStore } from '@/stores/validationStore'
const validationStore = useValidationStore()
const OnKeyup = () => { const OnKeyup = () => {
piyangoDosyaKapamaStore.formChanged = true piyangoDosyaKapamaStore.formChanged = true
@ -234,6 +241,7 @@
} }
onBeforeMount(async () => { onBeforeMount(async () => {
piyangoDosyaKapamaStore.formChanged = false
await piyangoDosyaKapamaService.GetDosyaKapama() await piyangoDosyaKapamaService.GetDosyaKapama()
if (piyangoDosyaKapamaStore.isNew) { if (piyangoDosyaKapamaStore.isNew) {

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

View File

@ -19,6 +19,29 @@
v-model="piyangoOnayStore.piyangoOnayForm.onayDurumuIslemTipiId" v-model="piyangoOnayStore.piyangoOnayForm.onayDurumuIslemTipiId"
required required
:invalidText="piyangoOnayValidationStore.invalidTexts.onayDurumuIslemTipiId" /> :invalidText="piyangoOnayValidationStore.invalidTexts.onayDurumuIslemTipiId" />
<template v-if="piyangoOnayStore.piyangoOnayForm.onayDurumuIslemTipiId === 4">
<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 <form-file
v-model="piyangoOnayStore.piyangoOnayForm.file" v-model="piyangoOnayStore.piyangoOnayForm.file"
elclass="panel-documents-item" elclass="panel-documents-item"
@ -32,16 +55,7 @@
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref, reactive, onBeforeMount } from 'vue' import { 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 { usePiyangoOnayStore } from '../../stores/piyangoOnayStore' import { usePiyangoOnayStore } from '../../stores/piyangoOnayStore'
const piyangoOnayStore = usePiyangoOnayStore() const piyangoOnayStore = usePiyangoOnayStore()
import { usePiyangoOnayValidationStore } from '../../validation/piyangoOnayValidationStore' import { usePiyangoOnayValidationStore } from '../../validation/piyangoOnayValidationStore'

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

@ -4,33 +4,22 @@
:tableHeader="tableHeader" :tableHeader="tableHeader"
formTitle="Piyango Onay Logları" formTitle="Piyango Onay Logları"
listText="Kayıt" listText="Kayıt"
:apiList="'OnayDurumu/GetSonOnayDurumlariList/' + piyangoStore.selectedLottery" :apiList="'OnayDurumLog/Cekilis/' + piyangoStore.selectedLottery"
apiText="Piyango Onay Log Listesi" apiText="Piyango Onay Log Listesi"
page="form" page="form"
:refresh="piyangoOnayStore.refreshList" /> :refresh="piyangoOnayStore.refreshList" />
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref,onBeforeMount,computed } from 'vue' import { ref, onBeforeMount, computed } from 'vue'
import axios from 'axios'
import { useDateStore } from '@/stores/dateStore' import { useDateStore } from '@/stores/dateStore'
const dateStore = useDateStore() const dateStore = useDateStore()
import { useGlobalStore } from '@/stores/globalStore'
const globalStore = useGlobalStore()
import { usePiyangoOnayStore } from '../../stores/piyangoOnayStore' import { usePiyangoOnayStore } from '../../stores/piyangoOnayStore'
const piyangoOnayStore = usePiyangoOnayStore() const piyangoOnayStore = usePiyangoOnayStore()
import { usePiyangoStore } from '../../stores/piyangoStore' import { usePiyangoStore } from '../../stores/piyangoStore'
const piyangoStore = usePiyangoStore() 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 loaded = ref<boolean>(false)
const piyangoOnayDurumlari = computed<Record<string, any>[]>(() => {
return piyangoDataStore.piyangoOnayDurumlari
})
const tableHeader = ref<Record<string, any>[]>([ const tableHeader = ref<Record<string, any>[]>([
{ {
name: 'tarih', name: 'tarih',
@ -47,38 +36,24 @@
} }
}, },
{ {
name: 'kisiAdi', name: 'islemYapanKullanici.email',
title: 'Kişi', title: 'Kişi',
sort: true, sort: true,
style: { width: '20%' } style: { width: '20%' }
}, },
{ {
name: 'onayDurumuIslemTipiAdi', name: 'eskiDurum',
title: 'İşlem', title: 'Eski Durum'
sort: true, },
filter: { {
type: 'select', name: 'yeniDurum',
data: piyangoOnayDurumlari, title: 'Yeni Durum'
listVal: 'id',
listText: 'tipAdi',
filterId: 'onayDurumuIslemTipiId'
}
}, },
{ {
name: 'aciklama', name: 'aciklama',
title: 'Açıklama', title: 'Açıklama',
sort: true, sort: true,
style: { width: '30%' } 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">
<div class="form-part-title"> <div class="form-part-title">
<h4>Piyango Resimleri</h4> <h4>Piyango Resimleri</h4>
<a href="/data/mpi-sablon.zip" class="button-c" target="_blank">
Örnek Resim Şablonları
</a>
</div> </div>
<div class="form-part-content"> <div class="form-part-content">
<template v-for="(file, i) in fileList"> <template v-for="(file, i) in fileList">
@ -9,7 +12,17 @@
:data="file" :data="file"
@click="EditImage" @click="EditImage"
onlyPreview 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> </template>
<div <div
class="form-item form-item-picture clickable" class="form-item form-item-picture clickable"
@ -23,7 +36,9 @@
</i> </i>
</div> </div>
</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ı. Eklenmiş resim bulunamadı.
</div> </div>
</div> </div>
@ -57,16 +72,14 @@
const usersStore = useUsersStore() const usersStore = useUsersStore()
import { usePiyangoStore } from '../../stores/piyangoStore' import { usePiyangoStore } from '../../stores/piyangoStore'
const piyangoStore = usePiyangoStore() const piyangoStore = usePiyangoStore()
import { useDialogStore } from '@/components/global/dialogStore'
const dialogStore = useDialogStore()
const picturePanel = ref<boolean>(false) const picturePanel = ref<boolean>(false)
const isUpdate = ref<boolean>(false) const isUpdate = ref<boolean>(false)
const isFormValid = ref<boolean>(true) const isFormValid = ref<boolean>(true)
interface IFileList { const fileList = ref<Record<string, any>[]>([])
[key: string]: any
}
const fileList = ref<IFileList[]>([] as IFileList[])
const AddNewImage = () => { const AddNewImage = () => {
dataStore.panelData = { dataStore.panelData = {
@ -82,7 +95,9 @@
} }
const GetData = async () => { 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) 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 () => { onBeforeMount(async () => {
await GetData() 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 required
:invalidText="piyangoTeminatValidationStore.invalidTexts.state" :invalidText="piyangoTeminatValidationStore.invalidTexts.state"
@change="OnKeyup" @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 <form-display
v-model="piyangoTeminatStore.piyangoTeminatFormData.amount" v-model="piyangoTeminatStore.piyangoTeminatFormData.amount"
@ -51,7 +84,10 @@
label="Banka Şubesi" /> label="Banka Şubesi" />
<file-list-item <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" title="Dosya"
:data="piyangoTeminatStore.piyangoTeminatFormData" :data="piyangoTeminatStore.piyangoTeminatFormData"
:editable="false" :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 piyangoYeni from '@/module/cekilisler/routes/piyango-yeni'
import piyangoDetay from '@/module/cekilisler/routes/piyango-detay' 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' import PiyangoDetay from '@/module/cekilisler/views/PiyangoDetay.vue'
export default { export default [
path: '/piyangolar/detay/:piyangoId', {
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', name: 'PiyangoDetay',
component: PiyangoDetay, component: PiyangoDetay,
meta: { meta: {
authRequired: true authRequired: true
} }
} }
]

View File

@ -18,8 +18,8 @@ export const usePiyangoDosyaKapamaService = defineStore(
) )
if (data !== 'errorfalse' || data.data.id === undefined) { if (data !== 'errorfalse' || data.data.id === undefined) {
Object.assign(piyangoDosyaKapamaStore.dosyaKapamaData, data.data) Object.assign(piyangoDosyaKapamaStore.dosyaKapamaData, data)
Object.assign(piyangoDosyaKapamaStore.safeDosyaKapamaData, data.data) Object.assign(piyangoDosyaKapamaStore.safeDosyaKapamaData, data)
piyangoDosyaKapamaStore.isNew = false piyangoDosyaKapamaStore.isNew = false
setTimeout(() => { setTimeout(() => {
piyangoDosyaKapamaStore.loaded = true piyangoDosyaKapamaStore.loaded = true
@ -31,20 +31,18 @@ export const usePiyangoDosyaKapamaService = defineStore(
const SaveDosyaKapama = async () => { const SaveDosyaKapama = async () => {
let dt: any let dt: any
dataStore.panelData.yayinlanacagiTarih = new Date( const localData = Object.assign({}, piyangoDosyaKapamaStore.dosyaKapamaData)
dataStore.panelData.yayinlanacagiTarih if (localData.cekilisId === undefined)
) localData.cekilisId = piyangoStore.selectedLottery
if (!piyangoDosyaKapamaStore.isUpdate) {
if (piyangoDosyaKapamaStore.isNew) {
dt = await dataStore.dataPost('TeminatIadeEvrakKontrol', { dt = await dataStore.dataPost('TeminatIadeEvrakKontrol', {
data: piyangoDosyaKapamaStore.dosyaKapamaData data: localData
}) })
} else { } else {
dt = await dataStore.dataPut( dt = await dataStore.dataPut('TeminatIadeEvrakKontrol/' + localData.id, {
'TeminatIadeEvrakKontrol/' + piyangoDosyaKapamaStore.dosyaKapamaData.id, data: localData
{ })
data: piyangoDosyaKapamaStore.dosyaKapamaData
}
)
} }
if (dt !== 'errorfalse') { if (dt !== 'errorfalse') {
piyangoDosyaKapamaStore.isUpdate = false piyangoDosyaKapamaStore.isUpdate = false
@ -52,6 +50,35 @@ export const usePiyangoDosyaKapamaService = defineStore(
} }
} }
return { GetDosyaKapama, SaveDosyaKapama } 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 piyangoOnayStore.loaded = false
let form: any let form: any
let dataForm = new FormData() let dataForm = new FormData()
if (piyangoOnayStore.piyangoOnayForm.onayDurumuIslemTipiId !== 4) {
piyangoOnayStore.piyangoOnayForm.izinSayisi = ''
piyangoOnayStore.piyangoOnayForm.izinTarihi = ''
piyangoOnayStore.piyangoOnayForm.izinAciklamasi = ''
}
dataForm.append( dataForm.append(
'onayDurumuIslemTipiId', 'onayDurumuIslemTipiId',
piyangoOnayStore.piyangoOnayForm.onayDurumuIslemTipiId piyangoOnayStore.piyangoOnayForm.onayDurumuIslemTipiId
@ -25,6 +31,9 @@ export const usePiyangoOnayService = defineStore('piyangoOnayService', () => {
dataForm.append('kisiId', String(usersStore.userId)) dataForm.append('kisiId', String(usersStore.userId))
dataForm.append('file', piyangoOnayStore.piyangoOnayForm.file) dataForm.append('file', piyangoOnayStore.piyangoOnayForm.file)
dataForm.append('aciklama', piyangoOnayStore.piyangoOnayForm.aciklama) dataForm.append('aciklama', piyangoOnayStore.piyangoOnayForm.aciklama)
dataForm.append('izinSayisi', piyangoOnayStore.piyangoOnayForm.izinSayisi)
dataForm.append('izinTarihi', piyangoOnayStore.piyangoOnayForm.izinTarihi)
dataForm.append('izinAciklamasi', piyangoOnayStore.piyangoOnayForm.izinAciklamasi)
form = await dataStore.dataPost('OnayDurumu/', { form = await dataStore.dataPost('OnayDurumu/', {
data: dataForm, data: dataForm,
@ -46,5 +55,48 @@ export const usePiyangoOnayService = defineStore('piyangoOnayService', () => {
piyangoOnayValidationStore.isFormValid = true 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 () => { const GetPiyangoTeminatDurumList = async () => {
if (piyangoDataStore.piyangoTeminatDurumlari.length === 0) { if (piyangoDataStore.piyangoTeminatDurumlari.length === 0) {
/*
1: Açık
2: İade
3: Zaman Aşımı İade
*/
let data = await dataStore.dataGet('TeminantStates/Durumlar') let data = await dataStore.dataGet('TeminantStates/Durumlar')
piyangoDataStore.piyangoTeminatDurumlari = data piyangoDataStore.piyangoTeminatDurumlari = data
} }

View File

@ -20,7 +20,10 @@ export const usePiyangoTeminatService = defineStore('piyangoTeminatService', ()
let dataForm = new FormData() let dataForm = new FormData()
dataForm.append('state', piyangoTeminatStore.piyangoTeminatFormData.state) 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('bankName', piyangoTeminatStore.piyangoTeminatFormData.bankName)
dataForm.append('bankBranch', piyangoTeminatStore.piyangoTeminatFormData.bankBranch) dataForm.append('bankBranch', piyangoTeminatStore.piyangoTeminatFormData.bankBranch)
dataForm.append( dataForm.append(
@ -43,6 +46,32 @@ export const usePiyangoTeminatService = defineStore('piyangoTeminatService', ()
'description', 'description',
piyangoTeminatStore.piyangoTeminatFormData.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) { if (piyangoTeminatStore.isNew) {
form = await dataStore.dataPost('TeminantStates/', { form = await dataStore.dataPost('TeminantStates/', {
data: dataForm, data: dataForm,

View File

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

View File

@ -1,9 +1,11 @@
import { defineStore } from 'pinia' import { defineStore } from 'pinia'
import { ref, reactive } from 'vue' import { ref, reactive } from 'vue'
import { useGlobalStore } from '@/stores/globalStore' import { useGlobalStore } from '@/stores/globalStore'
import { usePiyangoStore } from './piyangoStore'
export const usePiyangoDosyaKapamaStore = defineStore('piyangoDosyaKapamaStore', () => { export const usePiyangoDosyaKapamaStore = defineStore('piyangoDosyaKapamaStore', () => {
const globalStore = useGlobalStore() const globalStore = useGlobalStore()
const piyangoStore = usePiyangoStore()
const baseDosyaKapamaData = reactive<Record<string, any>>({ const baseDosyaKapamaData = reactive<Record<string, any>>({
katilimSekli: '', katilimSekli: '',
@ -36,7 +38,18 @@ export const usePiyangoDosyaKapamaStore = defineStore('piyangoDosyaKapamaStore',
kuponAsli: false, kuponAsli: false,
duyuruMateryali: false, duyuruMateryali: false,
ikramiyelerinSonTeslimTarihi: '', ikramiyelerinSonTeslimTarihi: '',
teminatIadeTarihi: '' 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 dosyaKapamaData = reactive<Record<string, any>>({})
const safeDosyaKapamaData = reactive<Record<string, any>>({}) const safeDosyaKapamaData = reactive<Record<string, any>>({})
@ -45,6 +58,13 @@ export const usePiyangoDosyaKapamaStore = defineStore('piyangoDosyaKapamaStore',
const formChanged = ref<boolean>(false) const formChanged = ref<boolean>(false)
const loaded = 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 = () => { const ResetFormData = () => {
globalStore.ResetObject(dosyaKapamaData, baseDosyaKapamaData) globalStore.ResetObject(dosyaKapamaData, baseDosyaKapamaData)
@ -56,6 +76,11 @@ export const usePiyangoDosyaKapamaStore = defineStore('piyangoDosyaKapamaStore',
Object.assign(dosyaKapamaData, safeDosyaKapamaData) Object.assign(dosyaKapamaData, safeDosyaKapamaData)
} }
const ResetIkramiyeFormData = () => {
globalStore.ResetObject(dosyaKapamaIkramiyeData, baseDosyaKapamaIkramiyeData)
Object.assign(dosyaKapamaIkramiyeData, baseDosyaKapamaIkramiyeData)
}
return { return {
baseDosyaKapamaData, baseDosyaKapamaData,
dosyaKapamaData, dosyaKapamaData,
@ -64,7 +89,16 @@ export const usePiyangoDosyaKapamaStore = defineStore('piyangoDosyaKapamaStore',
isUpdate, isUpdate,
formChanged, formChanged,
loaded, loaded,
baseDosyaKapamaIkramiyeData,
dosyaKapamaIkramiyeData,
safeDosyaKapamaIkramiyeData,
isDosyaKapamaIkramiyeUpdate,
isDosyaKapamaIkramiyeFormChanged,
isDosyaKapamaIkramiyeLoaded,
dosyaKapamaIkramiyeListesiRefresh,
dosyaKapamaIkramiyePanel,
ResetFormData, ResetFormData,
RestoreFormData RestoreFormData,
ResetIkramiyeFormData
} }
}) })

View File

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

View File

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

View File

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

View File

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

View File

@ -11,6 +11,8 @@ export const usePiyangoDosyaKapamaValidationStore = defineStore(
const isFormValid = ref<boolean>(true) const isFormValid = ref<boolean>(true)
const invalidTexts = reactive<Record<string, any>>({}) const invalidTexts = reactive<Record<string, any>>({})
const isIkramiyeFormValid = ref<boolean>(true)
const ikramiyeInvalidTexts = reactive<Record<string, any>>({})
const FormCheck = (): boolean => { const FormCheck = (): boolean => {
Object.assign(invalidTexts, {}) Object.assign(invalidTexts, {})
@ -26,10 +28,98 @@ export const usePiyangoDosyaKapamaValidationStore = defineStore(
return isFormValid.value 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 { return {
isFormValid, isFormValid,
invalidTexts, invalidTexts,
FormCheck isIkramiyeFormValid,
ikramiyeInvalidTexts,
FormCheck,
IkramiyeFormCheck
} }
} }
) )

View File

@ -12,6 +12,8 @@ export const usePiyangoOnayValidationStore = defineStore(
const formChanged = ref<boolean>(false) const formChanged = ref<boolean>(false)
const isFormValid = ref<boolean>(true) const isFormValid = ref<boolean>(true)
const invalidTexts = reactive<Record<string, any>>({}) const invalidTexts = reactive<Record<string, any>>({})
const isPanelFormValid = ref<boolean>(true)
const invalidTextsPanel = reactive<Record<string, any>>({})
const FormCheck = (): boolean => { const FormCheck = (): boolean => {
Object.assign(invalidTexts, {}) Object.assign(invalidTexts, {})
@ -22,15 +24,59 @@ export const usePiyangoOnayValidationStore = defineStore(
'onayDurumuIslemTipiId', 'onayDurumuIslemTipiId',
'Bir işlem tipi seçmelisinz.' '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 isFormValid.value = Object.keys(invalidTexts).length === 0
return isFormValid.value 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 { return {
formChanged, formChanged,
isFormValid, isFormValid,
isPanelFormValid,
invalidTexts, invalidTexts,
FormCheck invalidTextsPanel,
FormCheck,
FormPanelCheck
} }
} }
) )

View File

@ -24,6 +24,18 @@ export const usePiyangoTeminatValidationStore = defineStore(
'state', 'state',
'Lütfen işlem tipini seçiniz.' '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( validationStore.IsFieldEmpty(

View File

@ -167,7 +167,19 @@ export const usePiyangoValidationStore = defineStore('piyangoValidationStore', (
} }
}) })
const ikramiyeTeslimMin = computed((): Date => { 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 => { const ikramiyeTeslimMax = computed((): Date => {
var date: Date = new Date() var date: Date = new Date()
@ -472,7 +484,10 @@ export const usePiyangoValidationStore = defineStore('piyangoValidationStore', (
date: ilanTarihi2Max.value, date: ilanTarihi2Max.value,
pattern: 'dd-mm-yy' pattern: 'dd-mm-yy'
}) })
if (ilan2min > ilan2max) {
isFormValid.value = false
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 {
if (ilanTarihi2 < ilan2min || ilanTarihi2 > ilan2max) { if (ilanTarihi2 < ilan2min || ilanTarihi2 > ilan2max) {
isFormValid.value = false isFormValid.value = false
invalidTexts.ilantarihi2 = `2. İlan Tarihi ${ilan2mind} - ${ilan2maxd} tarihleri arasında olmalıdır.` invalidTexts.ilantarihi2 = `2. İlan Tarihi ${ilan2mind} - ${ilan2maxd} tarihleri arasında olmalıdır.`
@ -481,6 +496,7 @@ export const usePiyangoValidationStore = defineStore('piyangoValidationStore', (
} }
} }
} }
}
validationStore.IsFieldEmpty( validationStore.IsFieldEmpty(
piyangoStore.lotteryData, piyangoStore.lotteryData,

View File

@ -1,8 +1,8 @@
<template> <template>
<AdminLayout> <AdminLayout>
<Breadcrumb currentPageText="Piyango Detay" /> <Breadcrumb currentPageText="Piyango Detay" go="/piyangolar/piyango-listesi" />
<tabs :tabList="tabList" v-if="loaded"> <tabs :tabList="tabList" v-if="loaded" isUseRoute>
<template #piyangobilgileri> <template #piyango-bilgileri>
<tab-piyango-bilgileri-display <tab-piyango-bilgileri-display
v-if=" v-if="
usersStore.isPanelUser || usersStore.isPanelUser ||
@ -12,21 +12,23 @@
" /> " />
<tab-piyango-bilgileri v-else /> <tab-piyango-bilgileri v-else />
</template> </template>
<template #katilimcilistesi><tab-piyango-katilimci-listesi /></template> <template #katilim-listesi><tab-piyango-katilimci-listesi /></template>
<template #talihliler><tab-piyango-talihli-listesi /></template> <template #talihliler><tab-piyango-talihli-listesi /></template>
<template #itirazsikayet><tab-piyango-itiraz /></template> <template #itiraz-sikayet><tab-piyango-itiraz /></template>
<template #piyangologlari><tab-piyango-loglari /></template> <template #piyango-loglari><tab-piyango-loglari /></template>
<template #yetkilendirme v-if="usersStore.isPanelUser"> <template #yetkilendirme v-if="usersStore.isPanelUser">
<tab-piyango-yetkilendirme /> <tab-piyango-yetkilendirme />
</template> </template>
<template #onaydurumu> <template #onay-durumu>
<tab-piyango-onay-durumu v-if="usersStore.isPanelUser" /> <tab-piyango-onay-durumu v-if="usersStore.isPanelUser" />
<tab-piyango-onay-durumu-user v-else /> <tab-piyango-onay-durumu-user v-else />
</template> </template>
<template #teminatlistesi> <template #teminat-listesi>
<tab-piyango-teminat-durumu /> <tab-piyango-teminat-durumu />
</template> </template>
<template #dosyakapama v-if="usersStore.isPanelUser && piyangoStore.lotteryDrawState"> <template
#dosya-kapama
v-if="usersStore.isPanelUser && piyangoStore.lotteryDrawState">
<tab-piyango-dosya-kapama /> <tab-piyango-dosya-kapama />
</template> </template>
</tabs> </tabs>
@ -59,39 +61,40 @@
const loaded = ref<boolean>(false) const loaded = ref<boolean>(false)
const tabList = ref<Record<string, any>[]>([ const tabList = ref<Record<string, any>[]>([
{ text: 'Piyango Bilgileri', id: 'piyangobilgileri' } { text: 'Piyango Bilgileri', id: 'piyango-bilgileri' }
]) ])
const CreateTabs = () => { const CreateTabs = () => {
if ( if (
piyangoStore.lotteryApprove === 4 || (piyangoStore.lotteryApprove === 4 ||
piyangoStore.lotteryApprove === 10 || piyangoStore.lotteryApprove === 10 ||
piyangoStore.lotteryApprove === 11 || piyangoStore.lotteryApprove === 11 ||
piyangoStore.lotteryApprove === 12 || piyangoStore.lotteryApprove === 12 ||
piyangoStore.lotteryApprove === 13 || piyangoStore.lotteryApprove === 13 ||
piyangoStore.lotteryApprove === 14 || piyangoStore.lotteryApprove === 14 ||
usersStore.isPanelUser usersStore.isPanelUser) &&
piyangoStore.lotteryPurposeId !== 3
) { ) {
tabList.value.push( tabList.value.push(
{ text: 'Katılım Listesi', id: 'katilimcilistesi' }, { text: 'Katılım Listesi', id: 'katilim-listesi' },
{ text: 'Talihliler', id: 'talihliler' }, { text: 'Talihliler', id: 'talihliler' },
{ text: 'İtiraz/Şikayet', id: 'itirazsikayet' } { text: 'İtiraz/Şikayet', id: 'itiraz-sikayet' }
) )
} }
if (usersStore.isPanelUser) { if (usersStore.isPanelUser) {
tabList.value.push( tabList.value.push(
{ text: 'Piyango Logları', id: 'piyangologlari' }, { text: 'Piyango Logları', id: 'piyango-loglari' },
{ text: 'Yetkilendirme', id: 'yetkilendirme' } { 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) { if (piyangoStore.lotteryApprove !== 0 && piyangoStore.lotteryPurposeId !== 3) {
tabList.value.push({ text: 'Teminat Listesi', id: 'teminatlistesi' }) tabList.value.push({ text: 'Teminat Listesi', id: 'teminat-listesi' })
} }
if (usersStore.isPanelUser && piyangoStore.lotteryDrawState) { if (usersStore.isPanelUser && piyangoStore.lotteryDrawState) {
tabList.value.push({ text: 'Dossya Kapama', id: 'dosyakapama' }) tabList.value.push({ text: 'Dosya Kapama', id: 'dosya-kapama' })
} }
} }

View File

@ -1,6 +1,6 @@
<template> <template>
<AdminLayout> <AdminLayout>
<Breadcrumb currentPageText="Piyango Listesi" /> <Breadcrumb currentPageText="Piyango Listesi" go="/"/>
<div <div
class="form-inner-comment waiting-d" class="form-inner-comment waiting-d"
v-if="!usersStore.isPanelUser && usersStore.userApproveId !== 4"> v-if="!usersStore.isPanelUser && usersStore.userApproveId !== 4">
@ -17,12 +17,14 @@
listText="Piyango" listText="Piyango"
:addRoute="addApiControl" :addRoute="addApiControl"
:apiList="apiList" :apiList="apiList"
apiText="Piyango Listesi" /> apiText="Piyango Listesi"
isUseRoute/>
</section> </section>
</AdminLayout> </AdminLayout>
</template> </template>
<script setup lang="ts"> <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 AdminLayout from '@/layouts/AdminLayout.vue'
import { useDateStore } from '@/stores/dateStore' import { useDateStore } from '@/stores/dateStore'
@ -38,6 +40,7 @@
const piyangoServices = usePiyangoServices() const piyangoServices = usePiyangoServices()
import router from '@/router' import router from '@/router'
const route = useRoute()
const loaded = ref<boolean>(false) const loaded = ref<boolean>(false)
const apiList = ref<string>('') const apiList = ref<string>('')
@ -67,6 +70,14 @@
const tableHeader = computed<Record<string, any>[]>(() => { const tableHeader = computed<Record<string, any>[]>(() => {
let header: 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) { if (usersStore.isAraciFirma || usersStore.isPanelUser) {
header.push({ name: 'duzenleyen', title: 'Düzenleyen' }) header.push({ name: 'duzenleyen', title: 'Düzenleyen' })
} }
@ -101,14 +112,16 @@
type: 'date', type: 'date',
range: true range: true
} }
}) }
)
if (usersStore.isVakifDernek || usersStore.isPanelUser) { if (usersStore.isVakifDernek || usersStore.isPanelUser) {
header.push({ header.push({
name: 'cekilisTarihi', name: 'cekilisTarihi',
title: 'Çekiliş Tarihi', title: 'Çekiliş Tarihi',
compute: (v: Record<string, any>): string => { 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, sort: true,
filter: { filter: {
@ -220,7 +233,7 @@
// tablodan herhangi bir satır tıklayınca çalısır // tablodan herhangi bir satır tıklayınca çalısır
const OpenPiyango = (row: any) => { const OpenPiyango = (row: any) => {
router.push('detay/' + row.id) router.push('detay/' + row.id+'/piyango-bilgileri')
} }
onBeforeMount(async () => { onBeforeMount(async () => {
@ -230,4 +243,13 @@
loaded.value = true loaded.value = true
}) })
onMounted(() => {
// URL query parametrelerini kontrol et ve filtreleri uygula
if (route.query.durumId) {
// Filtre parametresini ListTableContent bileşenine iletmek için
// Bu parametre otomatik olarak ListTableContent tarafından işlenecek
console.log('Durum filtresi uygulanıyor:', route.query.durumId)
}
})
</script> </script>

View File

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

View File

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

View File

@ -1,10 +1,19 @@
import KullaniciDetay from '@/module/kullanicilar/views/KullaniciDetay.vue' import KullaniciDetay from '@/module/kullanicilar/views/KullaniciDetay.vue'
export default { export default [
{
path: '/kullanicilar/detay/:kullaniciId', 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', name: 'KullaniciDetay',
component: KullaniciDetay, component: KullaniciDetay,
meta: { meta: {
authRequired: true authRequired: true
} }
} }
]

View File

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

View File

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

View File

@ -1,6 +1,6 @@
<template> <template>
<AdminLayout> <AdminLayout>
<Breadcrumb current-page-text="Kullanıcılar Listesi" /> <Breadcrumb current-page-text="Kullanıcılar Listesi" go="/"/>
<section class="section-list"> <section class="section-list">
<list-table-content <list-table-content
v-if="loaded" v-if="loaded"
@ -11,7 +11,8 @@
listText="Kullanıcı" listText="Kullanıcı"
addRoute="yeni-kullanici" addRoute="yeni-kullanici"
apiList="Auth/kullaniciList" apiList="Auth/kullaniciList"
apiText="Kullanıcı Listesi" /> apiText="Kullanıcı Listesi"
isUseRoute/>
</section> </section>
</AdminLayout> </AdminLayout>
</template> </template>
@ -88,7 +89,7 @@
]) ])
const rwAction = (row: any) => { const rwAction = (row: any) => {
globalStore.selUser = row.id globalStore.selUser = row.id
router.push('detay/' + row.id) router.push('detay/' + row.id+'/kullanici-bilgileri')
} }
onBeforeMount(async () => { 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']" id="display-bilgi">
<div class="form-part-title"> <div class="form-part-title">
<h4>Piyango Bilgileri</h4> <h4>Piyango Bilgileri</h4>
<div class="form-part-title-buttons" v-if="!isPreview"> <div class="form-part-title-buttons" v-if="!isPreview && loaded">
<button <button
@click="BasvuruBedeliMuhasebelestir" @click="BasvuruBedeliDialog"
v-if=" v-if="
(piyangoStore.lotteryApprove === 1 || piyangoStore.lotteryApprove === 4) && (piyangoStore.lotteryApprove === 1 || piyangoStore.lotteryApprove === 4) &&
(!piyangoStore.lotteryBasvuruBedeliStatus || (!piyangoStore.lotteryBasvuruBedeliStatus ||
@ -14,7 +14,7 @@
Başvuru Bedelini Muhasebeleştir Başvuru Bedelini Muhasebeleştir
</button> </button>
<button <button
@click="IzinBedeliMuhasebelestir" @click="OpenIzinBedeliModal"
v-if=" v-if="
piyangoStore.lotteryApprove === 4 && piyangoStore.lotteryApprove === 4 &&
piyangoStore.lotteryData.amacpiyangoId !== 3 && piyangoStore.lotteryData.amacpiyangoId !== 3 &&
@ -24,19 +24,118 @@
class="button-save"> class="button-save">
İzin Bedelini Muhasebeleştir İzin Bedelini Muhasebeleştir
</button> </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 Piyango Detayına Git
</router-link> </router-link>
</div> </div>
</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" /> <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> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref, onBeforeMount } from 'vue' import { ref, onBeforeMount, computed } from 'vue'
import { useToastStore } from '@/components/global/toastStore' import { useToastStore } from '@/components/global/toastStore'
const toastStore = useToastStore() 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 { export interface Props {
isPreview?: boolean isPreview?: boolean
@ -51,12 +150,27 @@
import { useDataStore } from '@/stores/dataStore' import { useDataStore } from '@/stores/dataStore'
const dataStore = useDataStore() const dataStore = useDataStore()
import { usePreviewStore } from '@/stores/previewStore'
const previewStore = usePreviewStore()
import { usePiyangoStore } from '@/module/cekilisler/stores/piyangoStore' import { usePiyangoStore } from '@/module/cekilisler/stores/piyangoStore'
const piyangoStore = usePiyangoStore() const piyangoStore = usePiyangoStore()
import { useMuhasebeSettingsStore } from '@/module/muhasebe/store/muhasebeSettingsStore'
const muhasebeSettingsStore = useMuhasebeSettingsStore()
const loaded = ref<boolean>(false) 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 () => { const GetData = async () => {
let data = await dataStore.dataGet( let data = await dataStore.dataGet(
@ -95,12 +209,88 @@
Object.assign(piyangoStore.araciUyeData, data) 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 () => { const BasvuruBedeliMuhasebelestir = async () => {
console.log('basvuru bedeli muhasebelestir')
let data = await dataStore.dataGet( let data = await dataStore.dataGet(
'MuhasebeSettings/BasvuruBedeli/' + piyangoStore.selectedLottery 'MuhasebeSettings/BasvuruBedeli/' + piyangoStore.selectedLottery
) )
if (data !== 'errorfalse') { 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 loaded.value = false
await GetData() await GetData()
piyangoStore.lotteryBasvuruBedeliStatus = true 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 () => { const IzinBedeliMuhasebelestir = async () => {
if (selectedOranId.value === null) {
toastStore.AddToast('Lütfen bir oran seçiniz', 'error', 5000)
return
}
let data = await dataStore.dataGet( let data = await dataStore.dataGet(
'MuhasebeSettings/IzinBasvuruBedeli/' + piyangoStore.selectedLottery 'MuhasebeSettings/IzinBasvuruBedeli/' +
piyangoStore.selectedLottery +
'/' +
selectedOranId.value
) )
if (data !== 'errorfalse') { 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 loaded.value = false
await GetData() await GetData()
piyangoStore.lotteryIzinBedeliStatus = true piyangoStore.lotteryIzinBedeliStatus = true
showIzinBedeliModal.value = false
selectedOran.value = null
selectedOranId.value = null
setTimeout(() => { setTimeout(() => {
loaded.value = true loaded.value = true
}, 30) }, 30)
@ -131,3 +374,140 @@
await GetData() await GetData()
}) })
</script> </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 class="form-part-title-buttons"></div>
</div> </div>
<div class="form-part-content" v-if="muhasebeSettingsService.loaded"> <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 <form-input
required required
half half
@ -26,6 +15,15 @@
label="Başvuru Bedeli" label="Başvuru Bedeli"
@keydown="validationStore.allowPrice" @keydown="validationStore.allowPrice"
@keyup="OnKeyup" /> @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 <form-input
required required
half half
@ -58,7 +56,10 @@
@click="muhasebeSettingsService.SaveMuhasebeSettings"> @click="muhasebeSettingsService.SaveMuhasebeSettings">
Kaydet Kaydet
</button> </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ç Vazgeç
</button> </button>
</div> </div>

View File

@ -1,9 +1,11 @@
import muhasebePiyangoListesi from './muhasebe-piyango-listesi' import muhasebePiyangoListesi from './muhasebe-piyango-listesi'
import muhasebePiyangoDetay from './muhasebe-piyango-detay' import muhasebePiyangoDetay from './muhasebe-piyango-detay'
import muhasebeAyarlar from './muhasebe-ayarlar' import muhasebeAyarlar from './muhasebe-ayarlar'
import izinBedelOrani from './izin-bedel-orani'
export default [ export default [
muhasebePiyangoListesi, muhasebePiyangoListesi,
muhasebePiyangoDetay, ...muhasebePiyangoDetay,
muhasebeAyarlar, 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' import MuhasebePiyangoDetay from '../views/MuhasebePiyangoDetay.vue'
export default { export default [
{
path: '/muhasebe/piyango-detay/:piyangoId', 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', name: 'MuhasebePiyangoDetay',
component: MuhasebePiyangoDetay, component: MuhasebePiyangoDetay,
meta: { meta: {
authRequired: true 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>>({ const muhasebeSettingsBaseForm = reactive<Record<string, any>>({
appUserId: usersStore.userId, appUserId: usersStore.userId,
izinBedeliOrani: 30,
basvuruBedeli: '10.167,00', basvuruBedeli: '10.167,00',
BasvuruBedeliKdvOrani: 20,
kurumBanka: 'Türkiye Vakıflar Bankası T.A.O.', kurumBanka: 'Türkiye Vakıflar Bankası T.A.O.',
kurumBankaSube: 'Ankara Kurumsal', kurumBankaSube: 'Ankara Kurumsal',
kurumIBAN: 'TR26 0001 5001 5800 7295 4624 00' 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