65 Commits

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

View File

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

View File

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

View File

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

588
package-lock.json generated
View File

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

View File

@ -5,7 +5,7 @@
"type": "module",
"scripts": {
"dev": "vite",
"localdev": "vite",
"localdev": "vite --mode localdev",
"build": "run-p type-check \"build-only {@}\" --",
"buildtest": "run-p type-check \"build-only-test {@}\" --",
"preview": "vite preview",

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"
/>
</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>

Before

Width:  |  Height:  |  Size: 41 KiB

After

Width:  |  Height:  |  Size: 43 KiB

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -18,12 +18,15 @@
{{ fileName }}
</div>
</a>
<i
class="ico-c ico-section ico-section-header-btn ico-replace"
@click="OnClick"
v-if="editable">
<svg><use href="/src/assets/images/icons.svg#replace"></use></svg>
</i>
<div class="actions-c" v-if="editable || $slots.actionButtons">
<slot name="actionButtons"></slot>
<i
class="ico-c ico-section ico-btn back-grad-dgrey"
@click="OnClick"
v-if="editable">
<svg><use href="/src/assets/images/icons.svg#replace"></use></svg>
</i>
</div>
</div>
</div>
</template>
@ -35,12 +38,15 @@
</div>
<div v-else>{{ fileType.toLocaleUpperCase() }}</div>
</a>
<i
class="ico-c ico-section ico-section-header-btn ico-replace"
@click="OnClick"
v-if="editable">
<svg><use href="/src/assets/images/icons.svg#replace"></use></svg>
</i>
<div class="actions-c actions-top" v-if="editable || $slots.actionButtons">
<slot name="actionButtons"></slot>
<i
class="ico-c ico-section ico-btn back-grad-dgrey"
@click="OnClick"
v-if="editable">
<svg><use href="/src/assets/images/icons.svg#replace"></use></svg>
</i>
</div>
</div>
</template>
</template>
@ -75,8 +81,8 @@
if (props.filePath !== undefined && props.filePath !== null) {
localFilePath.value = props.usePath
? props.filePath as string
: (axios.defaults.baseURL as string + props.filePath as string) as string
? (props.filePath as string)
: (((axios.defaults.baseURL as string) + props.filePath) as string as string)
fileType.value = globalStore.FileType(localFilePath.value)
fileName.value = globalStore.FileName(localFilePath.value)
@ -96,8 +102,29 @@
() => props.filePath,
() => {
localFilePath.value = props.usePath
? props.filePath as string
: (axios.defaults.baseURL as string + props.filePath as string) as string
? (props.filePath as string)
: (((axios.defaults.baseURL as string) + props.filePath) as string as string)
}
)
</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

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -142,6 +142,10 @@
title: 'Piyango Listesi',
to: '/muhasebe/piyango-listesi'
},
{
title: 'İzin Bedel Oranı',
to: '/muhasebe/izin-bedel-orani'
},
{
title: 'Ayarlar',
to: '/muhasebe/ayarlar'

View File

@ -80,8 +80,8 @@
v-model="uyeBilgileriStore.formData.gercekVergiNo"
required
label="Vergi No"
maxlength="11"
minlength="11"
maxlength="10"
minlength="10"
:invalidText="uyeBilgileriStore.invalidTexts.gercekVergiNo"
@keydown="validationStore.allowNumbersWithKeys" />
@ -355,8 +355,6 @@
const globalDataStore = useGlobalDataStore()
import { useValidationStore } from '@/stores/validationStore'
const validationStore = useValidationStore()
import { useUsersStore } from '@/stores/usersStore'
const usersStore = useUsersStore()
import { useAuthValidationStore } from '../stores/authValidationStore'
const authValidationStore = useAuthValidationStore()
import router from '@/router'
@ -365,12 +363,6 @@
const uyeBilgileriStore = useUyeBilgileriStore()
uyeBilgileriStore.ResetStore()
interface IIl {
[key: string]: any
ad: string
id: number
}
const kvkkCheck = ref([
{
label: '',

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -24,6 +24,19 @@
v-model="piyangoStore.lotteryData.izinBedelNo"
label="İzin Bedel No" />
</template>
<form-display
type="date"
v-if="piyangoStore.lotteryData.izinTarihi !== undefined"
v-model="piyangoStore.lotteryData.izinTarihi"
half
label="İzin Tarihi" />
<form-display
v-if="piyangoStore.lotteryData.izinSayisi !== undefined"
v-model="piyangoStore.lotteryData.izinSayisi"
half
label="İzin Sayısı" />
<form-display
v-model="piyangoStore.lotteryData.baslik"
label="Piyango Başlığı"

View File

@ -39,7 +39,7 @@
</panel-wrapper>
</template>
<script setup lang="ts">
import { ref, reactive, computed, onBeforeMount } from 'vue'
import { ref, onBeforeMount } from 'vue'
import { usePDF } from 'vue3-pdfmake'
import { useUsersStore } from '@/stores/usersStore'
const usersStore = useUsersStore()

View File

@ -10,7 +10,15 @@
:editable="false"
:data="file"
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 v-else>
@ -33,6 +41,35 @@
const piyangoDocumentStore = usePiyangoDocumentStore()
import { usePiyangoDocumentService } from '../../service/piyangoDocumentService'
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 () => {
await piyangoDocumentService.GetDocumentList()

View File

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

View File

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

View File

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

View File

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

View File

@ -31,16 +31,32 @@
</div>
<div class="form-part-content" v-if="loaded">
<lottery-states :piyangoAmac="piyangoStore.lotteryData.amacpiyangoId" />
<template
v-if="
!piyangoStore.isNew &&
piyangoStore.lotteryData.piyangoId !== undefined &&
piyangoStore.lotteryData.piyangoId !== null
">
<template v-if="!piyangoStore.isNew">
<form-display
v-if="
piyangoStore.lotteryData.piyangoId !== undefined &&
piyangoStore.lotteryData.piyangoId !== null
"
v-model="piyangoStore.lotteryData.piyangoId"
label="Piyango ID"
size="1" />
<form-display
type="date"
v-if="
piyangoStore.lotteryData.izinTarihi !== undefined &&
piyangoStore.lotteryData.izinTarihi !== null
"
v-model="piyangoStore.lotteryData.izinTarihi"
half
label="İzin Tarihi" />
<form-display
v-if="
piyangoStore.lotteryData.izinSayisi !== undefined &&
piyangoStore.lotteryData.izinSayisi !== null
"
v-model="piyangoStore.lotteryData.izinSayisi"
half
label="İzin Sayısı" />
</template>
<form-input
modelKey="cekilisBaslik"
@ -525,7 +541,7 @@
piyangoStore.lotteryApprove = 0
piyangoStore.isNew = false
piyangoStore.ResetLotteryData()
router.push('/piyangolar/detay/' + form.id)
router.push('/piyangolar/detay/' + form.id+'/piyango-bilgileri')
} else {
GetData()
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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.taahhutEdilenIkramiye
">
<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.taahhutEdilenIkramiye
) {
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

@ -12,21 +12,39 @@
@change="OnKeyup"
:disabled="!usersStore.isPanelUser" />
<template v-if="piyangoTeminatStore.piyangoTeminatFormData.state === 2">
<template
v-if="
piyangoTeminatStore.piyangoTeminatFormData.state === 2 ||
piyangoTeminatStore.piyangoTeminatFormData.state === 3
">
<form-date
type="date"
modelKey="iadeTarihi"
v-model="piyangoTeminatStore.piyangoTeminatFormData.iadeTarihi"
label="İlan Tarihi"
:invalidText="piyangoTeminatValidationStore.invalidTexts.iadeTarihi"
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.iadeFile"
v-model="piyangoTeminatStore.piyangoTeminatFormData.refundDocumentUrl"
label='Klasör Arşiv'
elclass="panel-documents-item"
:invalidText="piyangoTeminatValidationStore.invalidTexts.iadeFile"
:invalidText="piyangoTeminatValidationStore.invalidTexts.refundDocumentUrl"
@change="OnKeyup" />
<form-input
modelKey="refundDescription"
v-model="piyangoTeminatStore.piyangoTeminatFormData.refundDescription"
label="İade Açıklama"
@keyup="OnKeyup" />
</template>
<form-display
v-model="piyangoTeminatStore.piyangoTeminatFormData.amount"
half

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -48,15 +48,28 @@ export const usePiyangoTeminatService = defineStore('piyangoTeminatService', ()
)
if (usersStore.isPanelUser) {
if (piyangoTeminatStore.piyangoTeminatFormData.state !== 2) {
piyangoTeminatStore.piyangoTeminatFormData.iadeTarihi = ''
piyangoTeminatStore.piyangoTeminatFormData.iadeFile = ''
if (piyangoTeminatStore.piyangoTeminatFormData.state === 1) {
piyangoTeminatStore.piyangoTeminatFormData.refundDate = ''
piyangoTeminatStore.piyangoTeminatFormData.refundCount = ''
piyangoTeminatStore.piyangoTeminatFormData.refundDocumentUrl = ''
piyangoTeminatStore.piyangoTeminatFormData.refundDescription = ''
}
dataForm.append(
'iadeTarihi',
String(piyangoTeminatStore.piyangoTeminatFormData.iadeTarihi)
'refundDate',
String(piyangoTeminatStore.piyangoTeminatFormData.refundDate)
)
dataForm.append(
'refundCount',
String(piyangoTeminatStore.piyangoTeminatFormData.refundCount)
)
dataForm.append(
'refundDocumentUrl',
piyangoTeminatStore.piyangoTeminatFormData.refundDocumentUrl
)
dataForm.append(
'refundDescription',
piyangoTeminatStore.piyangoTeminatFormData.refundDescription
)
dataForm.append('iadeFile', piyangoTeminatStore.piyangoTeminatFormData.iadeFile)
}
if (piyangoTeminatStore.isNew) {

View File

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

View File

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

View File

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

View File

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

View File

@ -24,8 +24,10 @@ export const usePiyangoTeminatStore = defineStore('piyangoTeminatStore', () => {
kisiId: usersStore.userId,
description: '',
file: '',
iadeTarihi: '',
iadeFile: ''
refundDate: '',
refundCount: '',
refundDocumentUrl: '',
refundDescription:''
})
const piyangoTeminatFormData = reactive<Record<string, any>>({})

View File

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

View File

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

View File

@ -27,9 +27,15 @@ export const usePiyangoTeminatValidationStore = defineStore(
validationStore.IsFieldEmpty(
piyangoTeminatStore.piyangoTeminatFormData,
invalidTexts,
'iadeTarihi',
'refundDate',
'Lütfen iade tarihini seçiniz.'
)
validationStore.IsFieldEmpty(
piyangoTeminatStore.piyangoTeminatFormData,
invalidTexts,
'refundCount',
'Lütfen iade sayı no giriniz.'
)
}
validationStore.IsFieldEmpty(

View File

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

View File

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

View File

@ -1,6 +1,6 @@
<template>
<AdminLayout>
<Breadcrumb currentPageText="Piyango Listesi" />
<Breadcrumb currentPageText="Piyango Listesi" go="/"/>
<div
class="form-inner-comment waiting-d"
v-if="!usersStore.isPanelUser && usersStore.userApproveId !== 4">
@ -17,12 +17,14 @@
listText="Piyango"
:addRoute="addApiControl"
:apiList="apiList"
apiText="Piyango Listesi" />
apiText="Piyango Listesi"
isUseRoute/>
</section>
</AdminLayout>
</template>
<script setup lang="ts">
import { ref, computed, onBeforeMount } from 'vue'
import { ref, computed, onBeforeMount, onMounted } from 'vue'
import { useRoute } from 'vue-router'
import AdminLayout from '@/layouts/AdminLayout.vue'
import { useDateStore } from '@/stores/dateStore'
@ -38,6 +40,7 @@
const piyangoServices = usePiyangoServices()
import router from '@/router'
const route = useRoute()
const loaded = ref<boolean>(false)
const apiList = ref<string>('')
@ -80,12 +83,6 @@
}
header.push(
{
name: 'piyangoId',
title: 'Piyango ID',
sort: true,
style: { width: '10%' }
},
{
name: 'baslik',
title: 'Başlık',
@ -236,7 +233,7 @@
// tablodan herhangi bir satır tıklayınca çalısır
const OpenPiyango = (row: any) => {
router.push('detay/' + row.id)
router.push('detay/' + row.id+'/piyango-bilgileri')
}
onBeforeMount(async () => {
@ -246,4 +243,13 @@
loaded.value = true
})
onMounted(() => {
// URL query parametrelerini kontrol et ve filtreleri uygula
if (route.query.durumId) {
// Filtre parametresini ListTableContent bileşenine iletmek için
// Bu parametre otomatik olarak ListTableContent tarafından işlenecek
console.log('Durum filtresi uygulanıyor:', route.query.durumId)
}
})
</script>

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -19,22 +19,24 @@ export const useMuhasebeSettingsValidationStore = defineStore(
validationStore.IsFieldEmpty(
muhasebeSettingsStore.muhasebeSettingsForm,
invalidTexts,
'izinBedeliOrani',
'basvuruBedeliKdvOrani',
'Lütfen izin bedeli oranını giriniz.'
)
if (
!validationStore.checkEmpty(
muhasebeSettingsStore.muhasebeSettingsForm.izinBedeliOrani
muhasebeSettingsStore.muhasebeSettingsForm.basvuruBedeliKdvOrani
)
) {
if (
Number(muhasebeSettingsStore.muhasebeSettingsForm.izinBedeliOrani) === 0 ||
Number(muhasebeSettingsStore.muhasebeSettingsForm.izinBedeliOrani) > 100
Number(muhasebeSettingsStore.muhasebeSettingsForm.basvuruBedeliKdvOrani) ===
0 ||
Number(muhasebeSettingsStore.muhasebeSettingsForm.basvuruBedeliKdvOrani) > 100
) {
isFormValid.value = false
invalidTexts['izinBedeliOrani'] = 'Lütfen 0-100 arasında bir değer giriniz.'
invalidTexts['basvuruBedeliKdvOrani'] =
'Lütfen 0-100 arasında bir değer giriniz.'
} else {
delete invalidTexts['izinBedeliOrani']
delete invalidTexts['basvuruBedeliKdvOrani']
}
}
validationStore.IsFieldEmpty(

View File

@ -0,0 +1,201 @@
<template>
<AdminLayout>
<Breadcrumb currentPageText="Muhasebe / İzin Bedel Oranı" />
<section class="section-list">
<list-table-content
:tableHeader="tableHeader"
:rowAction="updateAction"
:addAction="addAction"
icon="draws"
title="İzin Bedel Oranları"
listText="İzin Bedel Oranı"
:tableData="izinBedelOraniList"
apiText="İzin Bedel Oranı Listesi"
apiList="IzinBedelOrani"
v-model:refresh="refresh"
:rowActions="rowActions"
:rowActionStyle="'width:15%;'" />
</section>
<panel-wrapper
v-if="panel"
v-model="panel"
:panel-title="isUpdate ? 'İzin Bedel Oranı Düzenle' : 'Yeni İzin Bedel Oranı Ekle'">
<template #panelContent>
<form-input
required
v-model="panelIzinBedelOrani.ad"
label="Ad"
maxlength="100" />
<form-input
required
v-model="panelIzinBedelOrani.oran"
label="Oran (%)"
maxlength="3"
@keydown="validationStore.allowNumbersWithKeys"
description="1-100 arasında bir rakam giriniz" />
<form-textarea
required
v-model="panelIzinBedelOrani.aciklama"
label="Açıklama"
maxlength="500"
rows="4" />
<form-checkbox
v-model="panelIzinBedelOrani.aktif"
label="Aktif" />
</template>
<template #footerButton>
<div class="button-c button-save" @click="save">
{{ isUpdate ? 'Güncelle' : 'Ekle' }}
</div>
</template>
</panel-wrapper>
</AdminLayout>
</template>
<script setup lang="ts">
import { ref, onBeforeMount, computed } from 'vue'
import AdminLayout from '@/layouts/AdminLayout.vue'
import PanelWrapper from '@/components/PanelWrapper.vue'
import { useIzinBedelOraniStore } from '../store/izinBedelOraniStore'
import { useIzinBedelOraniService } from '../service/izinBedelOraniService'
import { useValidationStore } from '@/stores/validationStore'
import { useDialogStore } from '@/components/global/dialogStore'
import { useDataStore } from '@/stores/dataStore'
const izinBedelOraniStore = useIzinBedelOraniStore()
const izinBedelOraniService = useIzinBedelOraniService()
const validationStore = useValidationStore()
const dialogStore = useDialogStore()
const dataStore = useDataStore()
const panel = ref<boolean>(false)
const isUpdate = ref<boolean>(false)
const refresh = ref<boolean>(false)
const panelIzinBedelOrani = ref<Record<string, any>>({})
const izinBedelOraniList = ref<Record<string, any>[]>([])
const tableHeader = ref<Record<string, any>[]>(
[
{
name: 'id',
title: 'ID',
sort: true,
style: { width: '8%' }
},
{
name: 'adi',
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>`
}
}
}
]
)
const DeleteRowPop = (data: Record<string, any>, i: number) => {
dialogStore.CreateDialog({
title: 'İzin Bedel Oranı Sil',
id: 'deleteIzinBedelOrani',
content: 'İzin bedel oranını silmek istediğinize emin misiniz?',
closeText: 'Vazgeç',
buttons: [
{
label: 'İzin Bedel Oranı Sil',
type: 'alert',
function: () => DeleteRow(data.id)
}
]
})
}
const DeleteRow = async (id: number | string) => {
var dt = await dataStore.dataDelete('IzinBedelOrani/' + id)
if (dt !== 'errorfalse') {
dialogStore.CloseDialog('deleteIzinBedelOrani')
refresh.value = true
}
}
const rowActions = ref<Record<string, any>[]>([
{
text: 'Sil',
class: 'alert',
action: DeleteRowPop
}
])
const addAction = async () => {
isUpdate.value = false
panelIzinBedelOrani.value = {
ad: '',
oran: 0,
aciklama: '',
aktif: true
}
panel.value = true
}
const updateAction = (row: any) => {
const foundItem = izinBedelOraniList.value.find((x) => x.id == row.id)
if (foundItem) {
panelIzinBedelOrani.value = {
id: foundItem.id,
ad: foundItem.adi,
oran: foundItem.oran,
aciklama: foundItem.aciklama,
aktif: foundItem.aktif
}
}
panel.value = true
isUpdate.value = true
}
const save = async () => {
const result = await izinBedelOraniService.SaveIzinBedelOrani(panelIzinBedelOrani.value, isUpdate.value)
if (result) {
panel.value = false
isUpdate.value = false
refresh.value = true
await loadIzinBedelOraniList()
}
}
const loadIzinBedelOraniList = async () => {
const data = await dataStore.dataGet('IzinBedelOrani')
if (data !== 'errorfalse') {
izinBedelOraniList.value = data
}
}
onBeforeMount(async () => {
await loadIzinBedelOraniList()
})
</script>

View File

@ -1,8 +1,8 @@
<template>
<AdminLayout>
<Breadcrumb currentPageText="Muhasebe / Piyango Detay" />
<tabs :tabList="tabList" v-if="loaded">
<template #piyangobilgileri>
<Breadcrumb currentPageText="Muhasebe / Piyango Detay" go="/muhasebe/piyango-listesi"/>
<tabs :tabList="tabList" v-if="loaded" isUseRoute>
<template #piyango-bilgileri>
<tab-muhasebe-piyango-bilgileri-display />
</template>
</tabs>
@ -25,7 +25,7 @@
const loaded = ref<boolean>(false)
const tabList = ref<Record<string, any>[]>([
{ text: 'Piyango Bilgileri', id: 'piyangobilgileri' }
{ text: 'Piyango Bilgileri', id: 'piyango-bilgileri' }
])
onBeforeMount(async () => {

View File

@ -1,6 +1,6 @@
<template>
<AdminLayout>
<Breadcrumb currentPageText="Muhasebe / Piyango Listesi" />
<Breadcrumb currentPageText="Muhasebe / Piyango Listesi" go="/" />
<section class="section-list">
<list-table-content
v-if="loaded"
@ -10,7 +10,8 @@
title="Piyangolar"
listText="Piyango"
:apiList="'Cekilis/GetCekilislerListAtanan/' + usersStore.userId"
apiText="Piyango Listesi" />
apiText="Piyango Listesi"
isUseRoute />
</section>
</AdminLayout>
</template>
@ -204,7 +205,7 @@
// tablodan herhangi bir satır tıklayınca çalısır
const OpenPiyango = (row: any) => {
router.push('/muhasebe/piyango-detay/' + row.id)
router.push('/muhasebe/piyango-detay/' + row.id + '/piyango-bilgileri')
}
onBeforeMount(async () => {

View File

@ -8,7 +8,8 @@
title="Sistem Günlüğü"
listText="Log"
apiList="Auth/GetOperationLogs"
apiText="Sistem Günlüğü Listesi" />
apiText="Sistem Günlüğü Listesi"
isUseRoute />
</section>
</AdminLayout>
</template>
@ -26,19 +27,19 @@
return dateStore.dateFormat({ date: v.timestamp })
},
sort: true,
style:{width:'10%'}
style: { width: '10%' }
},
{
name: 'userName',
title: 'İşlemi yapan',
sort: true,
style:{width:'20%'}
style: { width: '20%' }
},
{
name: 'operationType',
title: 'Bölüm',
sort: true,
style:{width:'15%'}
style: { width: '15%' }
},
{
name: 'description',

View File

@ -9,7 +9,15 @@
:data="file"
@click="ReplaceImage"
onlyPreview
:filePath="file.fileUrl" />
:filePath="file.fileUrl">
<template #actionButtons v-if="!usersStore.isPanelUser">
<i
class="ico-c ico-btn ico-section back-grad-alert"
@click="DeleteImagePop(file)">
<svg><use href="/src/assets/images/icons.svg#trash"></use></svg>
</i>
</template>
</file-list-item>
</template>
<template v-else>
<div class="form-item form-item-picture clickable" @click="picturePanel = true">
@ -43,17 +51,19 @@
import { useDataStore } from '@/stores/dataStore'
const dataStore = useDataStore()
import { useGlobalStore } from '@/stores/globalStore'
const globalStore = useGlobalStore()
import { useValidationStore } from '@/stores/validationStore'
const validationStore = useValidationStore()
import { useSiteManagementPageStore } from '../../stores/siteManagementPageStore'
const siteManagementPageStore = useSiteManagementPageStore()
const siteManagementPageStore = useSiteManagementPageStore()
import { useDialogStore } from '@/components/global/dialogStore'
const dialogStore = useDialogStore()
import { useUsersStore } from '@/stores/usersStore'
const usersStore = useUsersStore()
const picturePanel = ref<boolean>(false)
const isUpdate = ref<boolean>(false)
const file = reactive<Record<string,any>>({
const file = reactive<Record<string, any>>({
title: '',
fileUrl: ''
})
@ -108,6 +118,32 @@
}
}
}
const DeleteImagePop = (data: Record<string, any>) => {
dialogStore.CreateDialog({
title: 'Resim Sil',
id: 'deleteimage',
content: 'Resmi 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('DocumentPage/' + id)
if (dt !== 'errorfalse') {
dialogStore.CloseDialog('deleteimage')
await GetData()
}
}
onBeforeMount(async () => {
await GetData()
})

View File

@ -1,6 +1,6 @@
<template>
<AdminLayout>
<Breadcrumb currentPageText="Menü Listesi" />
<Breadcrumb currentPageText="Menü Listesi" go="/"/>
<section class="section-list">
<list-table-content
:tableHeader="tableHeader"

View File

@ -1,6 +1,6 @@
<template>
<AdminLayout>
<Breadcrumb current-page-text="Menu Yonetimi" />
<Breadcrumb current-page-text="Menu Yonetimi" go="/site-yonetimi/menu-listesi"/>
<div class="form-content">
<div class="form-inner-content form-inner-content-left">
<div class="form-part">

View File

@ -1,6 +1,6 @@
<template>
<AdminLayout>
<Breadcrumb currentPageText="Popup Listesi" />
<Breadcrumb currentPageText="Popup Listesi" go="/"/>
<section class="section-list">
<list-table-content
:tableHeader="tableHeader"
@ -51,7 +51,7 @@
</AdminLayout>
</template>
<script setup lang="ts">
import { ref, onMounted, computed } from 'vue'
import { ref, computed } from 'vue'
import AdminLayout from '@/layouts/AdminLayout.vue'
import { Breadcrumb } from '@/components/global'
import router from '@/router'

View File

@ -1,6 +1,6 @@
<template>
<AdminLayout>
<Breadcrumb current-page-text="Menu Yonetimi" />
<Breadcrumb current-page-text="Popup Yonetimi" />
<div class="form-content">
<div class="form-inner-content form-inner-content-left">
<div class="form-part">

View File

@ -1,6 +1,6 @@
<template>
<AdminLayout>
<Breadcrumb currentPageText="Sayfa Detay" />
<Breadcrumb currentPageText="Sayfa Detay" go="/site-yonetimi/sayfa-listesi"/>
<div class="form-part form-title">
<div class="form-title-buttons">
<button

View File

@ -1,6 +1,6 @@
<template>
<AdminLayout>
<Breadcrumb current-page-text="Sayfa Listesi" />
<Breadcrumb current-page-text="Sayfa Listesi" go="/" />
<section class="section-list">
<list-table-content
:tableHeader="tableHeader"
@ -13,7 +13,8 @@
apiText="Sayfa Listesi"
:refresh="refresh"
:rowActions="rowActions"
:rowActionStyle="'width:10%;'" />
:rowActionStyle="'width:10%;'"
isUseRoute />
</section>
</AdminLayout>
</template>

View File

@ -9,7 +9,8 @@
listText="Piyango"
:addRoute="PiyangoLink()"
:apiList="apiList"
apiText="Piyango Listesi" />
apiText="Piyango Listesi"
isUseRoute />
</section>
</template>
<script setup lang="ts">
@ -176,7 +177,7 @@
// tablodan herhangi bir satır tıklayınca çalısır
const rwAction = (row: any) => {
router.push('/piyangolar/detay/' + row.id)
router.push('/piyangolar/detay/' + row.id + '/piyango-bilgileri')
}
onBeforeMount(async () => {

View File

@ -8,14 +8,13 @@
icon="draws"
title="Yetkili Olduğu Kişi/Kurum"
listText="Kayıt"
:apiList="'Auth/userbyuserChildList/' + usersStore.selectedUserId()" />
:apiList="'Auth/userbyuserChildList/' + usersStore.selectedUserId()"
isUseRoute />
</section>
</template>
<script setup lang="ts">
import { ref, computed, onBeforeMount } from 'vue'
import { useGlobalStore } from '@/stores/globalStore'
const globalStore = useGlobalStore()
import { useGlobalDataStore } from '@/stores/globalDataStore'
const globalDataStore = useGlobalDataStore()
import { useUsersStore } from '@/stores/usersStore'
@ -82,7 +81,7 @@
listText: 'baslik',
filterId: 'basvuruTipId'
},
style:{width:'10%'}
style: { width: '10%' }
},
{
name: 'unvan',
@ -125,7 +124,13 @@
])
const rwAction = (row: any) => {
router.push('/uyeler/detay/' + UyeId() + '/yetkili-uye/detay/' + row.id)
router.push(
'/uyeler/detay/' +
UyeId() +
'/yetkili-uye/detay/' +
row.id +
'/kisi-kurum-bilgileri'
)
}
onBeforeMount(async () => {

View File

@ -108,8 +108,8 @@
v-model="uyeBilgileriStore.formData.gercekVergiNo"
required
label="Vergi No"
maxlength="11"
minlength="11"
maxlength="10"
minlength="10"
:invalidText="uyeBilgileriStore.invalidTexts.gercekVergiNo"
@keydown="validationStore.allowNumbersWithKeys"
@keyup="OnKeyup" />

View File

@ -16,7 +16,9 @@
</div>
<div class="form-part-content" v-if="customerDocumentStore.loaded">
<template v-if="customerDocumentStore.customerDocumentsList.length > 0">
<div class="form-inner-comment waiting-d" v-if="customerDocumentStore.customerDocumentsList.length < 3">
<div
class="form-inner-comment waiting-d"
v-if="customerDocumentStore.customerDocumentsList.length < 3">
En az
<strong>Ticaret Sicil Gazetesi, Vergi Levhası, İmza Sirküleri</strong>
sisteme yüklenmiş olmalıdır.
@ -26,12 +28,26 @@
:data="file"
@click="EditDocument"
:filePath="file.filePath"
:editable="usersStore.selectedUserApproveId === 3 || usersStore.selectedUserApproveId === 0"
title="title" />
:editable="
usersStore.isPanelUser ||
(!usersStore.isPanelUser &&
(usersStore.selectedUserApproveId === 3 ||
usersStore.selectedUserApproveId === 0))
"
title="title">
<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 v-else>
<template v-if="!usersStore.isPanelUser && usersStore.selectedUserApproveId !== 5">
<template
v-if="!usersStore.isPanelUser && usersStore.selectedUserApproveId !== 5">
<div class="form-inner-comment">
<span>
Eklenmiş dosya bulunamadı. Üstteki butonu kullanarak dosya ekleyebilirsiniz.
@ -79,20 +95,21 @@
</panel-wrapper>
</template>
<script setup lang="ts">
import { ref, onBeforeMount } from 'vue'
import { onBeforeMount } from 'vue'
import PanelUserDocument from '../panel/PanelUserDocument.vue'
import PanelWrapper from '@/components/PanelWrapper.vue'
import { useDataStore } from '@/stores/dataStore'
const dataStore = useDataStore()
import { useUsersStore } from '@/stores/usersStore'
const usersStore = useUsersStore()
import { useCustomerDocumentStore } from '../../stores/customerDocumentStore'
const customerDocumentStore = useCustomerDocumentStore()
import { useCustomerDocumentService } from '../../service/customerDocumentService'
const customerDocumentService = useCustomerDocumentService()
import { useDialogStore } from '@/components/global/dialogStore'
const dialogStore = useDialogStore()
import { useDataStore } from '@/stores/dataStore'
const dataStore = useDataStore()
const NewDocument = () => {
customerDocumentStore.ResetForm()
@ -106,6 +123,31 @@
customerDocumentStore.documentPanel = true
}
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('AppUserDocument/' + id)
if (dt !== 'errorfalse') {
dialogStore.CloseDialog('deletedoc')
await customerDocumentService.GetDocumentList()
}
}
onBeforeMount(async () => {
usersStore.SetSelectedUser()

View File

@ -1,49 +1,64 @@
<template>
<div class='form-part'>
<div class='form-part-title'>
<div class="form-part">
<div class="form-part-title">
<h4>Profil Resmi</h4>
</div>
<div class='form-part-content'>
<div class="form-part-content">
<template v-if="file.filePath !== '' && file.filePath !== null">
<file-list-item
:data='file'
@click='ReplaceImage'
:data="file"
@click="ReplaceImage"
onlyPreview
:filePath='file.filePath' />
:filePath="file.filePath">
<template
#actionButtons
v-if="
route.name === 'Profil' ||
(route.name === 'Profil' && !usersStore.isPanelUser)
">
<i
class="ico-c ico-btn ico-section back-grad-alert"
@click="DeleteImagePop(file)">
<svg><use href="/src/assets/images/icons.svg#trash"></use></svg>
</i>
</template>
</file-list-item>
</template>
<template v-else>
<template v-if="route.name === 'Profil' || (route.name === 'Profil' && !usersStore.isPanelUser)">
<div class='form-item form-item-picture clickable' @click='picturePanel = true'>
<div class='image-c'>
<i class='ico-c'>
<template
v-if="
route.name === 'Profil' ||
(route.name === 'Profil' && !usersStore.isPanelUser)
">
<div class="form-item form-item-picture clickable" @click="picturePanel = true">
<div class="image-c">
<i class="ico-c">
<svg>
<use href='@/assets/images/icons.svg#plus'></use>
<use href="@/assets/images/icons.svg#plus"></use>
</svg>
</i>
</div>
</div>
</template>
<template v-else>
<div class='form-inner-comment'>
Eklenmiş resim bulunamadı.
</div>
<div class="form-inner-comment">Eklenmiş resim bulunamadı.</div>
</template>
</template>
</div>
</div>
<panel-wrapper
v-if='picturePanel'
v-model='picturePanel'
panel-title='Profil Resmi Ekle'>
v-if="picturePanel"
v-model="picturePanel"
panel-title="Profil Resmi Ekle">
<template #panelContent>
<panel-user-picture />
</template>
<template #footerButton>
<div class='button-c button-save' @click='FileUpload'>Ekle</div>
<div class="button-c button-save" @click="FileUpload">Ekle</div>
</template>
</panel-wrapper>
</template>
<script setup lang='ts'>
<script setup lang="ts">
import { ref, reactive, onBeforeMount } from 'vue'
import PanelUserPicture from '../panel/PanelUserPicture.vue'
import PanelWrapper from '@/components/PanelWrapper.vue'
@ -52,20 +67,13 @@
const route = useRoute()
import { useDataStore } from '@/stores/dataStore'
const dataStore = useDataStore()
import { useGlobalStore } from '@/stores/globalStore'
const globalStore = useGlobalStore()
import { useValidationStore } from '@/stores/validationStore'
const validationStore = useValidationStore()
import { useUsersStore } from '@/stores/usersStore'
const usersStore = useUsersStore()
import { useCustomerStore } from '@/module/uyeler/stores/customerStore'
const customerStore = useCustomerStore()
import { useDialogStore } from '@/components/global/dialogStore'
const dialogStore = useDialogStore()
const picturePanel = ref<boolean>(false)
const isUpdate = ref<boolean>(false)
@ -82,7 +90,9 @@
}
const GetData = async () => {
let dt = await dataStore.dataGet('AppUserResim/AppUserId/' + usersStore.selectedUserId())
let dt = await dataStore.dataGet(
'AppUserResim/AppUserId/' + usersStore.selectedUserId()
)
if (dt !== 'errorfalse') {
Object.assign(file, dt)
if (usersStore.selectedUserId() === usersStore.userId)
@ -126,6 +136,32 @@
}
}
}
const DeleteImagePop = (data: Record<string, any>) => {
dialogStore.CreateDialog({
title: 'Resim Sil',
id: 'deleteimage',
content: 'Resmi silmek istediğinize emin misiniz? Bu işlem geri alınamaz.',
closeText: 'Vazgeç',
buttons: [
{
label: 'Resim Sil',
type: 'alert',
function: () => DeleteImage(data.id)
}
]
})
}
const DeleteImage = async (id: number | string) => {
var dt = await dataStore.dataDelete('AppUserResim/' + id)
if (dt !== 'errorfalse') {
dialogStore.CloseDialog('deleteimage')
await GetData()
}
}
onBeforeMount(async () => {
await GetData()
})

View File

@ -4,4 +4,4 @@ import UyeYetkiliYeni from '@/module/uyeler/routes/uye-yetkili-yeni'
import UyeListe from '@/module/uyeler/routes/uye-liste'
import UyeTipleri from '@/module/uyeler/routes/uye-tipleri'
export default [UyeDetay,UyeYetkili,UyeYetkiliYeni, UyeListe, UyeTipleri]
export default [...UyeDetay,...UyeYetkili,UyeYetkiliYeni, UyeListe, UyeTipleri]

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