48 Commits

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

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

Binary file not shown.

View File

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

Before

Width:  |  Height:  |  Size: 41 KiB

After

Width:  |  Height:  |  Size: 43 KiB

View File

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

View File

@ -18,12 +18,15 @@
{{ fileName }} {{ fileName }}
</div> </div>
</a> </a>
<i <div class="actions-c" v-if="editable || $slots.actionButtons">
class="ico-c ico-section ico-section-header-btn ico-replace" <slot name="actionButtons"></slot>
@click="OnClick" <i
v-if="editable"> class="ico-c ico-section ico-btn back-grad-dgrey"
<svg><use href="/src/assets/images/icons.svg#replace"></use></svg> @click="OnClick"
</i> v-if="editable">
<svg><use href="/src/assets/images/icons.svg#replace"></use></svg>
</i>
</div>
</div> </div>
</div> </div>
</template> </template>
@ -35,12 +38,15 @@
</div> </div>
<div v-else>{{ fileType.toLocaleUpperCase() }}</div> <div v-else>{{ fileType.toLocaleUpperCase() }}</div>
</a> </a>
<i <div class="actions-c actions-top" v-if="editable || $slots.actionButtons">
class="ico-c ico-section ico-section-header-btn ico-replace" <slot name="actionButtons"></slot>
@click="OnClick" <i
v-if="editable"> class="ico-c ico-section ico-btn back-grad-dgrey"
<svg><use href="/src/assets/images/icons.svg#replace"></use></svg> @click="OnClick"
</i> v-if="editable">
<svg><use href="/src/assets/images/icons.svg#replace"></use></svg>
</i>
</div>
</div> </div>
</template> </template>
</template> </template>
@ -75,8 +81,8 @@
if (props.filePath !== undefined && props.filePath !== null) { if (props.filePath !== undefined && props.filePath !== null) {
localFilePath.value = props.usePath localFilePath.value = props.usePath
? props.filePath as string ? (props.filePath as string)
: (axios.defaults.baseURL as string + props.filePath as string) as string : (((axios.defaults.baseURL as string) + props.filePath) as string as string)
fileType.value = globalStore.FileType(localFilePath.value) fileType.value = globalStore.FileType(localFilePath.value)
fileName.value = globalStore.FileName(localFilePath.value) fileName.value = globalStore.FileName(localFilePath.value)
@ -96,8 +102,29 @@
() => props.filePath, () => props.filePath,
() => { () => {
localFilePath.value = props.usePath localFilePath.value = props.usePath
? props.filePath as string ? (props.filePath as string)
: (axios.defaults.baseURL as string + props.filePath as string) as string : (((axios.defaults.baseURL as string) + props.filePath) as string as string)
} }
) )
</script> </script>
<style scoped>
.actions-c {
display: flex;
position: absolute;
right: 0;
height: 100%;
padding: 8px;
align-items: center;
pointer-events: fill;
}
.actions-c.actions-top{
align-items: flex-start;
}
.form-item-picture.only-image{
width: 140px;
height: 140px;
}
.actions-c .ico-btn:last-child {
margin-right: 0;
}
</style>

View File

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

View File

@ -161,6 +161,7 @@
computeHtml?: Function computeHtml?: Function
sort?: boolean sort?: boolean
filter?: Record<string, any> filter?: Record<string, any>
style?: Record<string, any>
} }
interface IPagination { interface IPagination {
[key: string]: any [key: string]: any

View File

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

View File

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

@ -57,7 +57,7 @@
<panel-katilimci-document /> <panel-katilimci-document />
</template> </template>
<template #footerButton> <template #footerButton>
<button class="button-c button-save" @click="FileUpload">Yükle</button> <button class="button-c button-save" @click="FileUpload" :disabled="uploadProgressPanel">Yükle</button>
</template> </template>
</panel-wrapper> </panel-wrapper>
<panel-wrapper <panel-wrapper
@ -315,10 +315,11 @@
headers: { 'Content-Type': 'multipart/form-data' } headers: { 'Content-Type': 'multipart/form-data' }
} }
) )
console.log('excel response',response)
if (response.data !== 'errorfalse') { if (response !== 'errorfalse') {
// Başarı işlemi zaten onCompleted içinde yapıldı // Başarı işlemi zaten onCompleted içinde yapıldı
} else { } else {
// Hata olursa paneli kapat // Hata olursa paneli kapat
uploadProgressPanel.value = false uploadProgressPanel.value = false
} }

View File

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

View File

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

View File

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

View File

@ -84,7 +84,7 @@
Başvuru admin tarafından kapsam dışı olarak işaretlenmiştir. Başvuru admin tarafından kapsam dışı olarak işaretlenmiştir.
</template> </template>
</div> </div>
<div class="form-inner-comment alert-d" v-if="piyangoStore.lotteryApprove === 11"> <div class="form-inner-comment alert-d" v-if="piyangoStore.lotteryApprove === 13">
Kampanya için cezai işlem uygulanmıştır. Kampanya için cezai işlem uygulanmıştır.
</div> </div>
</template> </template>

View File

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

View File

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

View File

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

View File

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

View File

@ -19,6 +19,29 @@
v-model="piyangoOnayStore.piyangoOnayForm.onayDurumuIslemTipiId" v-model="piyangoOnayStore.piyangoOnayForm.onayDurumuIslemTipiId"
required required
:invalidText="piyangoOnayValidationStore.invalidTexts.onayDurumuIslemTipiId" /> :invalidText="piyangoOnayValidationStore.invalidTexts.onayDurumuIslemTipiId" />
<template v-if="piyangoOnayStore.piyangoOnayForm.onayDurumuIslemTipiId === 4">
<form-input
modelKey="izinSayisi"
v-model="piyangoOnayStore.piyangoOnayForm.izinSayisi"
required
label="İzin Sayı No"
placeholder="İzin Sayı No"
:invalidText="piyangoOnayValidationStore.invalidTexts.izinSayisi"
@keyup="OnKeyup" />
<form-date
type="date"
required
modelKey="izinTarihi"
v-model="piyangoOnayStore.piyangoOnayForm.izinTarihi"
label="İzin Tarihi"
:invalidText="piyangoOnayValidationStore.invalidTexts.izinTarihi"
@change="OnKeyup" />
<form-textarea
v-model="piyangoOnayStore.piyangoOnayForm.izinAciklamasi"
:invalidText="piyangoOnayValidationStore.invalidTexts.izinAciklamasi"
label="İzin Açıklaması"
@keyup="OnKeyup" />
</template>
<form-file <form-file
v-model="piyangoOnayStore.piyangoOnayForm.file" v-model="piyangoOnayStore.piyangoOnayForm.file"
elclass="panel-documents-item" elclass="panel-documents-item"

View File

@ -0,0 +1,88 @@
<template>
<list-table-content
v-if="loaded"
:tableHeader="tableHeader"
formTitle="Piyango Onay Durumları"
listText="Kayıt"
:apiList="'OnayDurumu/GetSonOnayDurumlariList/' + 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 { 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',
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',
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%' }
}
])
onBeforeMount(async () => {
loaded.value = true
})
</script>

View File

@ -4,7 +4,7 @@
:tableHeader="tableHeader" :tableHeader="tableHeader"
formTitle="Piyango Onay Logları" formTitle="Piyango Onay Logları"
listText="Kayıt" listText="Kayıt"
:apiList="'OnayDurumu/GetSonOnayDurumlariList/' + piyangoStore.selectedLottery" :apiList="'OnayDurumLog/Cekilis/' + piyangoStore.selectedLottery"
apiText="Piyango Onay Log Listesi" apiText="Piyango Onay Log Listesi"
page="form" page="form"
:refresh="piyangoOnayStore.refreshList" /> :refresh="piyangoOnayStore.refreshList" />
@ -47,38 +47,24 @@
} }
}, },
{ {
name: 'kisiAdi', name: 'islemYapanKullanici.email',
title: 'Kişi', title: 'Kişi',
sort: true, sort: true,
style: { width: '20%' } style: { width: '20%' }
}, },
{ {
name: 'onayDurumuIslemTipiAdi', name: 'eskiDurum',
title: 'İşlem', title: 'Eski Durum',
sort: true, },
filter: { {
type: 'select', name: 'yeniDurum',
data: piyangoOnayDurumlari, title: 'Yeni Durum',
listVal: 'id',
listText: 'tipAdi',
filterId: 'onayDurumuIslemTipiId'
}
}, },
{ {
name: 'aciklama', name: 'aciklama',
title: 'Açıklama', title: 'Açıklama',
sort: true, sort: true,
style: { width: '30%' } style: { width: '30%' }
},
{
dosyaUrl: 'aciklama',
title: 'Dosya',
computeHtml: (v: Record<string, any>) => {
if (v.dosyaUrl !== null && v.dosyaUrl !== undefined) {
return globalStore.TableCellDocument(v.dosyaUrl)
}
},
style: { width: '20%' }
} }
]) ])

View File

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

View File

@ -0,0 +1,137 @@
<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.activatorData.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

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

View File

@ -0,0 +1,80 @@
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.data)
Object.assign(piyangoDosyaKapamaStore.safeDosyaKapamaData, data.data)
piyangoDosyaKapamaStore.isNew = false
setTimeout(() => {
piyangoDosyaKapamaStore.loaded = true
}, 30)
} else {
piyangoDosyaKapamaStore.isNew = true
}
}
const SaveDosyaKapama = async () => {
let dt: any
if (!piyangoDosyaKapamaStore.isUpdate) {
dt = await dataStore.dataPost('TeminatIadeEvrakKontrol', {
data: piyangoDosyaKapamaStore.dosyaKapamaData
})
} else {
dt = await dataStore.dataPut(
'TeminatIadeEvrakKontrol/' + piyangoDosyaKapamaStore.dosyaKapamaData.id,
{
data: piyangoDosyaKapamaStore.dosyaKapamaData
}
)
}
if (dt !== 'errorfalse') {
piyangoDosyaKapamaStore.isUpdate = false
await GetDosyaKapama()
}
}
const SaveDosyaKapamaIkramiye = async () => {
if (piyangoDosyaKapamaValidationStore.IkramiyeFormCheck()) {
let dt: any
if (!piyangoDosyaKapamaStore.isDosyaKapamaIkramiyeUpdate) {
dt = await dataStore.dataPost('TeminatIadeEvrak', {
data: piyangoDosyaKapamaStore.dosyaKapamaIkramiyeData
})
} else {
dt = await dataStore.dataPut(
'TeminatIadeEvrak/' +
piyangoDosyaKapamaStore.dosyaKapamaIkramiyeData.id,
{
data: piyangoDosyaKapamaStore.dosyaKapamaIkramiyeData
}
)
}
if (dt !== 'errorfalse') {
piyangoDosyaKapamaStore.isDosyaKapamaIkramiyeUpdate = false
piyangoDosyaKapamaStore.dosyaKapamaIkramiyePanel = false
piyangoDosyaKapamaStore.dosyaKapamaIkramiyeListesiRefresh = true
}
} else {
piyangoDosyaKapamaValidationStore.isIkramiyeFormValid = true
}
}
return { GetDosyaKapama, SaveDosyaKapama, SaveDosyaKapamaIkramiye }
}
)

View File

@ -17,6 +17,12 @@ export const usePiyangoOnayService = defineStore('piyangoOnayService', () => {
piyangoOnayStore.loaded = false piyangoOnayStore.loaded = false
let form: any let form: any
let dataForm = new FormData() let dataForm = new FormData()
if (piyangoOnayStore.piyangoOnayForm.onayDurumuIslemTipiId !== 4) {
piyangoOnayStore.piyangoOnayForm.izinSayisi = ''
piyangoOnayStore.piyangoOnayForm.izinTarihi = ''
piyangoOnayStore.piyangoOnayForm.izinAciklamasi = ''
}
dataForm.append( dataForm.append(
'onayDurumuIslemTipiId', 'onayDurumuIslemTipiId',
piyangoOnayStore.piyangoOnayForm.onayDurumuIslemTipiId piyangoOnayStore.piyangoOnayForm.onayDurumuIslemTipiId
@ -25,6 +31,9 @@ export const usePiyangoOnayService = defineStore('piyangoOnayService', () => {
dataForm.append('kisiId', String(usersStore.userId)) dataForm.append('kisiId', String(usersStore.userId))
dataForm.append('file', piyangoOnayStore.piyangoOnayForm.file) dataForm.append('file', piyangoOnayStore.piyangoOnayForm.file)
dataForm.append('aciklama', piyangoOnayStore.piyangoOnayForm.aciklama) dataForm.append('aciklama', piyangoOnayStore.piyangoOnayForm.aciklama)
dataForm.append('izinSayisi', piyangoOnayStore.piyangoOnayForm.izinSayisi)
dataForm.append('izinTarihi', piyangoOnayStore.piyangoOnayForm.izinTarihi)
dataForm.append('izinAciklamasi', piyangoOnayStore.piyangoOnayForm.izinAciklamasi)
form = await dataStore.dataPost('OnayDurumu/', { form = await dataStore.dataPost('OnayDurumu/', {
data: dataForm, data: dataForm,

View File

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

View File

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

View File

@ -1,34 +1,34 @@
import * as signalR from "@microsoft/signalr"; import * as signalR from '@microsoft/signalr'
import { v4 as uuidv4 } from "uuid"; import { v4 as uuidv4 } from 'uuid'
let connection: signalR.HubConnection; let connection: signalR.HubConnection
let connectionId = ""; let connectionId = ''
export const connectToHub = async () => { export const connectToHub = async () => {
connection = new signalR.HubConnectionBuilder() connection = new signalR.HubConnectionBuilder()
.withUrl("https://panelapi.cekilisevi.gov.tr/uploadHub", { .withUrl(import.meta.env.VITE_SOCKET_URL, {
withCredentials: false // Bu zorunlu, yoksa cookie vs gönderilmez withCredentials: false // Bu zorunlu, yoksa cookie vs gönderilmez
}) // backend adresine göre düzenle }) // backend adresine göre düzenle
.withAutomaticReconnect() .withAutomaticReconnect()
.build(); .build()
await connection.start(); await connection.start()
connectionId = connection.connectionId || uuidv4(); // SignalR id'si ya da frontend'de de guid üretilebilir connectionId = connection.connectionId || uuidv4() // SignalR id'si ya da frontend'de de guid üretilebilir
return connectionId; return connectionId
}; }
export const onProgress = (callback: (data: any) => void) => { export const onProgress = (callback: (data: any) => void) => {
connection.on("ReceiveProgress", callback); connection.on('ReceiveProgress', callback)
}; }
export const onInsertProgress = (callback: (data: any) => void) => { export const onInsertProgress = (callback: (data: any) => void) => {
connection.on("ReceiveInsertProgress", callback); connection.on('ReceiveInsertProgress', callback)
}; }
export const onCompleted = (callback: (data: any) => void) => { export const onCompleted = (callback: (data: any) => void) => {
connection.on("ReceiveCompleted", callback); connection.on('ReceiveCompleted', callback)
}; }
export const onError = (callback: (data: any) => void) => { export const onError = (callback: (data: any) => void) => {
connection.on("ReceiveError", callback); connection.on('ReceiveError', callback)
}; }

View File

@ -0,0 +1,100 @@
import { defineStore } from 'pinia'
import { ref, reactive } from 'vue'
import { useGlobalStore } from '@/stores/globalStore'
export const usePiyangoDosyaKapamaStore = defineStore('piyangoDosyaKapamaStore', () => {
const globalStore = useGlobalStore()
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: ''
})
const baseDosyaKapamaIkramiyeData = reactive<Record<string, any>>({
taahhutEdilenIkramiye: '',
tahhutEdilenIkramiyeAdet: '',
teslimEdilenIkramiyeAsil: '',
teslimEdilenIkramiyeYedek: '',
teslimEdilenIkramiye: '',
alinmayanIkramiye: '',
aciklama: ''
})
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

@ -12,7 +12,10 @@ export const usePiyangoOnayStore = defineStore('piyangoOnayStore', () => {
onayCekilisId: piyangoStore.selectedLottery, onayCekilisId: piyangoStore.selectedLottery,
kisiId: usersStore.userId, kisiId: usersStore.userId,
aciklama: '', aciklama: '',
file: '' file: '',
izinSayisi: '',
izinTarihi: '',
izinAciklamasi: ''
}) })
const piyangoOnayForm = reactive<Record<string, any>>({}) const piyangoOnayForm = reactive<Record<string, any>>({})
const piyangoOnaySafeForm = reactive<Record<string, any>>({}) const piyangoOnaySafeForm = reactive<Record<string, any>>({})

View File

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

@ -22,6 +22,20 @@ export const usePiyangoOnayValidationStore = defineStore(
'onayDurumuIslemTipiId', 'onayDurumuIslemTipiId',
'Bir işlem tipi seçmelisinz.' 'Bir işlem tipi seçmelisinz.'
) )
if (piyangoOnayStore.piyangoOnayForm.onayDurumuIslemTipiId === 4) {
validationStore.IsFieldEmpty(
piyangoOnayStore.piyangoOnayForm,
invalidTexts,
'izinSayisi',
'İzin sayı no girmelisiniz.'
)
validationStore.IsFieldEmpty(
piyangoOnayStore.piyangoOnayForm,
invalidTexts,
'izinTarihi',
'İzin tarihi seçmelisiniz.'
)
}
isFormValid.value = Object.keys(invalidTexts).length === 0 isFormValid.value = Object.keys(invalidTexts).length === 0
return isFormValid.value return isFormValid.value
} }

View File

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

View File

@ -216,7 +216,7 @@ export const usePiyangoValidationStore = defineStore('piyangoValidationStore', (
!usersStore.isPanelUser) || !usersStore.isPanelUser) ||
(usersStore.isPanelUser && piyangoStore.duzenleyenData.basvuruTipId !== 22)) && (usersStore.isPanelUser && piyangoStore.duzenleyenData.basvuruTipId !== 22)) &&
piyangoStore.lotteryData.amacpiyangoId === 2 piyangoStore.lotteryData.amacpiyangoId === 2
) { ) {
if (!usersStore.isPanelUser) piyangoStore.lotteryData.amacpiyangoId = null if (!usersStore.isPanelUser) piyangoStore.lotteryData.amacpiyangoId = null
isFormValid.value = false isFormValid.value = false
invalidTexts.amacpiyangoId = invalidTexts.amacpiyangoId =
@ -240,7 +240,7 @@ export const usePiyangoValidationStore = defineStore('piyangoValidationStore', (
if ( if (
piyangoStore.duzenleyenData.basvuruTipId !== 22 && piyangoStore.duzenleyenData.basvuruTipId !== 22 &&
piyangoStore.lotteryData.amacpiyangoId === 2 piyangoStore.lotteryData.amacpiyangoId === 2
) { ) {
if (!usersStore.isPanelUser) piyangoStore.lotteryData.amacpiyangoId = null if (!usersStore.isPanelUser) piyangoStore.lotteryData.amacpiyangoId = null
isFormValid.value = false isFormValid.value = false
invalidTexts.amacpiyangoId = invalidTexts.amacpiyangoId =
@ -472,12 +472,16 @@ export const usePiyangoValidationStore = defineStore('piyangoValidationStore', (
date: ilanTarihi2Max.value, date: ilanTarihi2Max.value,
pattern: 'dd-mm-yy' pattern: 'dd-mm-yy'
}) })
if (ilan2min > ilan2max) {
if (ilanTarihi2 < ilan2min || ilanTarihi2 > ilan2max) {
isFormValid.value = false isFormValid.value = false
invalidTexts.ilantarihi2 = `2. İlan Tarihi ${ilan2mind} - ${ilan2maxd} tarihleri arasında olmalıdır.` invalidTexts.ilantarihi2 = `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 { } 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

@ -16,7 +16,7 @@
<template #talihliler><tab-piyango-talihli-listesi /></template> <template #talihliler><tab-piyango-talihli-listesi /></template>
<template #itirazsikayet><tab-piyango-itiraz /></template> <template #itirazsikayet><tab-piyango-itiraz /></template>
<template #piyangologlari><tab-piyango-loglari /></template> <template #piyangologlari><tab-piyango-loglari /></template>
<template #yetkilendirme> <template #yetkilendirme v-if="usersStore.isPanelUser">
<tab-piyango-yetkilendirme /> <tab-piyango-yetkilendirme />
</template> </template>
<template #onaydurumu> <template #onaydurumu>
@ -26,6 +26,9 @@
<template #teminatlistesi> <template #teminatlistesi>
<tab-piyango-teminat-durumu /> <tab-piyango-teminat-durumu />
</template> </template>
<template #dosyakapama v-if="usersStore.isPanelUser && piyangoStore.lotteryDrawState">
<tab-piyango-dosya-kapama />
</template>
</tabs> </tabs>
</AdminLayout> </AdminLayout>
</template> </template>
@ -52,6 +55,7 @@
import TabPiyangoBilgileri from '@/module/cekilisler/components/TabPiyangoBilgileri.vue' import TabPiyangoBilgileri from '@/module/cekilisler/components/TabPiyangoBilgileri.vue'
import TabPiyangoBilgileriDisplay from '../components/TabPiyangoBilgileriDisplay.vue' import TabPiyangoBilgileriDisplay from '../components/TabPiyangoBilgileriDisplay.vue'
import TabPiyangoItiraz from '@/module/cekilisler/components/TabPiyangoItiraz.vue' import TabPiyangoItiraz from '@/module/cekilisler/components/TabPiyangoItiraz.vue'
import TabPiyangoDosyaKapama from '@/module/cekilisler/components/TabPiyangoDosyaKapama.vue'
const loaded = ref<boolean>(false) const loaded = ref<boolean>(false)
const tabList = ref<Record<string, any>[]>([ const tabList = ref<Record<string, any>[]>([
@ -86,6 +90,10 @@
if (piyangoStore.lotteryApprove !== 0 && piyangoStore.lotteryPurposeId !== 3) { if (piyangoStore.lotteryApprove !== 0 && piyangoStore.lotteryPurposeId !== 3) {
tabList.value.push({ text: 'Teminat Listesi', id: 'teminatlistesi' }) tabList.value.push({ text: 'Teminat Listesi', id: 'teminatlistesi' })
} }
if (usersStore.isPanelUser && piyangoStore.lotteryDrawState) {
tabList.value.push({ text: 'Dosya Kapama', id: 'dosyakapama' })
}
} }
onBeforeMount(async () => { onBeforeMount(async () => {

View File

@ -80,12 +80,6 @@
} }
header.push( header.push(
{
name: 'piyangoId',
title: 'Piyango ID',
sort: true,
style: { width: '10%' }
},
{ {
name: 'baslik', name: 'baslik',
title: 'Başlık', title: 'Başlık',

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

@ -14,7 +14,7 @@
Başvuru Bedelini Muhasebeleştir Başvuru Bedelini Muhasebeleştir
</button> </button>
<button <button
@click="IzinBedeliMuhasebelestir" @click="OpenIzinBedeliModal"
v-if=" v-if="
piyangoStore.lotteryApprove === 4 && piyangoStore.lotteryApprove === 4 &&
piyangoStore.lotteryData.amacpiyangoId !== 3 && piyangoStore.lotteryData.amacpiyangoId !== 3 &&
@ -30,6 +30,40 @@
</div> </div>
</div> </div>
<piyango-bilgileri-display-content v-if="loaded" :isPreview="isPreview" /> <piyango-bilgileri-display-content v-if="loaded" :isPreview="isPreview" />
<!-- İzin Bedeli Modal -->
<teleport to="body">
<div v-if="showIzinBedeliModal" class="modal-overlay" @click="CloseIzinBedeliModal">
<div class="modal-content" @click.stop>
<div class="modal-header">
<h3>İzin Bedeli Muhasebeleştir</h3>
<button class="modal-close" @click="CloseIzinBedeliModal">×</button>
</div>
<div class="modal-body">
<div class="form-group">
<label>Oran Seçiniz:</label>
<select @change="OnOranChange" class="form-select">
<option value="">Lütfen bir oran seçiniz</option>
<option
v-for="oran in izinBedelOranlari"
:key="oran.id"
:value="oran.id">
{{ oran.oran }}% - {{ oran.adi }}
</option>
</select>
</div>
</div>
<div class="modal-footer">
<button class="button-c button-cancel" @click="CloseIzinBedeliModal">
İptal
</button>
<button class="button-c button-save" @click="IzinBedeliMuhasebelestir">
Muhasebeleştir
</button>
</div>
</div>
</div>
</teleport>
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
@ -57,6 +91,10 @@
const piyangoStore = usePiyangoStore() const piyangoStore = usePiyangoStore()
const loaded = ref<boolean>(false) const loaded = ref<boolean>(false)
const showIzinBedeliModal = ref<boolean>(false)
const selectedOran = ref<number | null>(null)
const izinBedelOranlari = ref<Record<string, any>[]>([])
const selectedOranId = ref<number | null>(null)
const GetData = async () => { const GetData = async () => {
let data = await dataStore.dataGet( let data = await dataStore.dataGet(
@ -95,6 +133,13 @@
Object.assign(piyangoStore.araciUyeData, data) Object.assign(piyangoStore.araciUyeData, data)
} }
} }
const GetIzinBedelOranlari = async () => {
let data = await dataStore.dataGet('IzinBedelOrani/aktif')
if (data !== 'errorfalse') {
izinBedelOranlari.value = data
}
}
const BasvuruBedeliMuhasebelestir = async () => { const BasvuruBedeliMuhasebelestir = async () => {
let data = await dataStore.dataGet( let data = await dataStore.dataGet(
'MuhasebeSettings/BasvuruBedeli/' + piyangoStore.selectedLottery 'MuhasebeSettings/BasvuruBedeli/' + piyangoStore.selectedLottery
@ -111,15 +156,50 @@
} }
} }
const OpenIzinBedeliModal = async () => {
await GetIzinBedelOranlari()
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
}
}
const IzinBedeliMuhasebelestir = async () => { const IzinBedeliMuhasebelestir = async () => {
if (selectedOranId.value === null) {
toastStore.AddToast('Lütfen bir oran seçiniz', 'error', 5000)
return
}
let data = await dataStore.dataGet( let data = await dataStore.dataGet(
'MuhasebeSettings/IzinBasvuruBedeli/' + piyangoStore.selectedLottery 'MuhasebeSettings/IzinBasvuruBedeli/' + piyangoStore.selectedLottery + '/' + selectedOranId.value
) )
if (data !== 'errorfalse') { if (data !== 'errorfalse') {
toastStore.AddToast('İzin bedeli başarıyla muhasebeleştirildi. Fatura No: '+data.izinBelgeNo , 'success', 30000) toastStore.AddToast('İzin bedeli başarıyla muhasebeleştirildi. Fatura No: '+data.izinBelgeNo , 'success', 30000)
loaded.value = false loaded.value = false
await GetData() await GetData()
piyangoStore.lotteryIzinBedeliStatus = true piyangoStore.lotteryIzinBedeliStatus = true
showIzinBedeliModal.value = false
selectedOran.value = null
selectedOranId.value = null
setTimeout(() => { setTimeout(() => {
loaded.value = true loaded.value = true
}, 30) }, 30)
@ -131,3 +211,133 @@
await GetData() await GetData()
}) })
</script> </script>
<style scoped>
.modal-overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
display: flex;
justify-content: center;
align-items: center;
z-index: 9999;
}
.modal-content {
background: white;
border-radius: 8px;
padding: 0;
max-width: 500px;
width: 90%;
max-height: 90vh;
overflow-y: auto;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
}
.modal-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 20px 24px;
border-bottom: 1px solid #e5e7eb;
}
.modal-header h3 {
margin: 0;
font-size: 18px;
font-weight: 600;
color: #1f2937;
}
.modal-close {
background: none;
border: none;
font-size: 24px;
cursor: pointer;
color: #6b7280;
padding: 0;
width: 30px;
height: 30px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 4px;
transition: background-color 0.2s;
}
.modal-close:hover {
background-color: #f3f4f6;
}
.modal-body {
padding: 24px;
}
.form-group {
margin-bottom: 16px;
}
.form-group label {
display: block;
margin-bottom: 8px;
font-weight: 500;
color: #374151;
}
.form-select {
width: 100%;
padding: 12px;
border: 1px solid #d1d5db;
border-radius: 6px;
font-size: 14px;
background-color: white;
transition: border-color 0.2s;
}
.form-select:focus {
outline: none;
border-color: #3b82f6;
box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);
}
.modal-footer {
display: flex;
justify-content: flex-end;
gap: 12px;
padding: 20px 24px;
border-top: 1px solid #e5e7eb;
background-color: #f9fafb;
border-radius: 0 0 8px 8px;
}
.button-c {
padding: 10px 20px;
border: none;
border-radius: 6px;
font-size: 14px;
font-weight: 500;
cursor: pointer;
transition: all 0.2s;
}
.button-cancel {
background-color: #6b7280;
color: white;
}
.button-cancel:hover {
background-color: #4b5563;
}
.button-save {
background-color: #3b82f6;
color: white;
}
.button-save:hover {
background-color: #2563eb;
}
</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,17 @@
<div class="form-part-title-buttons"></div> <div class="form-part-title-buttons"></div>
</div> </div>
<div class="form-part-content" v-if="muhasebeSettingsService.loaded"> <div class="form-part-content" v-if="muhasebeSettingsService.loaded">
<form-input <!-- <form-input-->
required <!-- required-->
half <!-- half-->
modelKey="izinBedeliOrani" <!-- modelKey="izinBedeliOrani"-->
v-model="muhasebeSettingsStore.muhasebeSettingsForm.izinBedeliOrani" <!-- v-model="muhasebeSettingsStore.muhasebeSettingsForm.izinBedeliOrani"-->
:invalidText="muhasebeSettingsValidationStore.invalidTexts.izinBedeliOrani" <!-- :invalidText="muhasebeSettingsValidationStore.invalidTexts.izinBedeliOrani" -->
label="İzin Bedeli Oranı" <!-- label="İzin Bedeli Oranı"-->
maxlength="3" <!-- maxlength="3"-->
@keydown="validationStore.allowNumbersWithKeys" <!-- @keydown="validationStore.allowNumbersWithKeys"-->
description="1-100 arasında bir rakam giriniz" <!-- description="1-100 arasında bir rakam giriniz"-->
@keyup="OnKeyup" /> <!-- @keyup="OnKeyup" />-->
<form-input <form-input
required required
half half

View File

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

View File

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

View File

@ -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

@ -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

@ -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

@ -9,7 +9,15 @@
:data="file" :data="file"
@click="ReplaceImage" @click="ReplaceImage"
onlyPreview 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>
<template v-else> <template v-else>
<div class="form-item form-item-picture clickable" @click="picturePanel = true"> <div class="form-item form-item-picture clickable" @click="picturePanel = true">
@ -43,17 +51,19 @@
import { useDataStore } from '@/stores/dataStore' import { useDataStore } from '@/stores/dataStore'
const dataStore = useDataStore() const dataStore = useDataStore()
import { useGlobalStore } from '@/stores/globalStore'
const globalStore = useGlobalStore()
import { useValidationStore } from '@/stores/validationStore' import { useValidationStore } from '@/stores/validationStore'
const validationStore = useValidationStore() const validationStore = useValidationStore()
import { useSiteManagementPageStore } from '../../stores/siteManagementPageStore' 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 picturePanel = ref<boolean>(false)
const isUpdate = ref<boolean>(false) const isUpdate = ref<boolean>(false)
const file = reactive<Record<string,any>>({ const file = reactive<Record<string, any>>({
title: '', title: '',
fileUrl: '' 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 () => { onBeforeMount(async () => {
await GetData() await GetData()
}) })

View File

@ -51,7 +51,7 @@
</AdminLayout> </AdminLayout>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref, onMounted, computed } from 'vue' import { ref, computed } from 'vue'
import AdminLayout from '@/layouts/AdminLayout.vue' import AdminLayout from '@/layouts/AdminLayout.vue'
import { Breadcrumb } from '@/components/global' import { Breadcrumb } from '@/components/global'
import router from '@/router' import router from '@/router'

View File

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

View File

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

View File

@ -1,49 +1,64 @@
<template> <template>
<div class='form-part'> <div class="form-part">
<div class='form-part-title'> <div class="form-part-title">
<h4>Profil Resmi</h4> <h4>Profil Resmi</h4>
</div> </div>
<div class='form-part-content'> <div class="form-part-content">
<template v-if="file.filePath !== '' && file.filePath !== null"> <template v-if="file.filePath !== '' && file.filePath !== null">
<file-list-item <file-list-item
:data='file' :data="file"
@click='ReplaceImage' @click="ReplaceImage"
onlyPreview 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>
<template v-else> <template v-else>
<template v-if="route.name === 'Profil' || (route.name === 'Profil' && !usersStore.isPanelUser)"> <template
<div class='form-item form-item-picture clickable' @click='picturePanel = true'> v-if="
<div class='image-c'> route.name === 'Profil' ||
<i class='ico-c'> (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> <svg>
<use href='@/assets/images/icons.svg#plus'></use> <use href="@/assets/images/icons.svg#plus"></use>
</svg> </svg>
</i> </i>
</div> </div>
</div> </div>
</template> </template>
<template v-else> <template v-else>
<div class='form-inner-comment'> <div class="form-inner-comment">Eklenmiş resim bulunamadı.</div>
Eklenmiş resim bulunamadı.
</div>
</template> </template>
</template> </template>
</div> </div>
</div> </div>
<panel-wrapper <panel-wrapper
v-if='picturePanel' v-if="picturePanel"
v-model='picturePanel' v-model="picturePanel"
panel-title='Profil Resmi Ekle'> panel-title="Profil Resmi Ekle">
<template #panelContent> <template #panelContent>
<panel-user-picture /> <panel-user-picture />
</template> </template>
<template #footerButton> <template #footerButton>
<div class='button-c button-save' @click='FileUpload'>Ekle</div> <div class="button-c button-save" @click="FileUpload">Ekle</div>
</template> </template>
</panel-wrapper> </panel-wrapper>
</template> </template>
<script setup lang='ts'> <script setup lang="ts">
import { ref, reactive, onBeforeMount } from 'vue' import { ref, reactive, onBeforeMount } from 'vue'
import PanelUserPicture from '../panel/PanelUserPicture.vue' import PanelUserPicture from '../panel/PanelUserPicture.vue'
import PanelWrapper from '@/components/PanelWrapper.vue' import PanelWrapper from '@/components/PanelWrapper.vue'
@ -52,20 +67,13 @@
const route = useRoute() const route = useRoute()
import { useDataStore } from '@/stores/dataStore' import { useDataStore } from '@/stores/dataStore'
const dataStore = useDataStore() const dataStore = useDataStore()
import { useGlobalStore } from '@/stores/globalStore'
const globalStore = useGlobalStore()
import { useValidationStore } from '@/stores/validationStore' import { useValidationStore } from '@/stores/validationStore'
const validationStore = useValidationStore() const validationStore = useValidationStore()
import { useUsersStore } from '@/stores/usersStore' import { useUsersStore } from '@/stores/usersStore'
const usersStore = useUsersStore() const usersStore = useUsersStore()
import { useCustomerStore } from '@/module/uyeler/stores/customerStore' import { useDialogStore } from '@/components/global/dialogStore'
const dialogStore = useDialogStore()
const customerStore = useCustomerStore()
const picturePanel = ref<boolean>(false) const picturePanel = ref<boolean>(false)
const isUpdate = ref<boolean>(false) const isUpdate = ref<boolean>(false)
@ -82,7 +90,9 @@
} }
const GetData = async () => { const GetData = async () => {
let dt = await dataStore.dataGet('AppUserResim/AppUserId/' + usersStore.selectedUserId()) let dt = await dataStore.dataGet(
'AppUserResim/AppUserId/' + usersStore.selectedUserId()
)
if (dt !== 'errorfalse') { if (dt !== 'errorfalse') {
Object.assign(file, dt) Object.assign(file, dt)
if (usersStore.selectedUserId() === usersStore.userId) 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 () => { onBeforeMount(async () => {
await GetData() await GetData()
}) })

View File

@ -325,8 +325,8 @@ export const useUyeBilgileriStore = defineStore('uyeBilgileriStore', () => {
IsFieldEmpty('gercekVergiDairesi', 'Bu alan boş bırakılamaz') IsFieldEmpty('gercekVergiDairesi', 'Bu alan boş bırakılamaz')
IsFieldEmpty('gercekVergiNo', 'Bu alan boş bırakılamaz') IsFieldEmpty('gercekVergiNo', 'Bu alan boş bırakılamaz')
if (!validationStore.checkEmpty(formData.gercekVergiNo)) { if (!validationStore.checkEmpty(formData.gercekVergiNo)) {
if (formData.gercekVergiNo.length !== 11) { if (formData.gercekVergiNo.length !== 10) {
invalidTexts.gercekVergiNo = 'Vergi numaranızı 11 hane olarak giriniz.' invalidTexts.gercekVergiNo = 'Vergi numaranızı 10 hane olarak giriniz.'
isFormValid.value = false isFormValid.value = false
} else { } else {
delete invalidTexts.gercekVergiNo delete invalidTexts.gercekVergiNo

View File

@ -163,17 +163,23 @@ export const useDataStore = defineStore('dataStore', () => {
const CheckApiError = async (status: number, data: Record<string, any>) => { const CheckApiError = async (status: number, data: Record<string, any>) => {
if (status === 400) { if (status === 400) {
const errorKey = data['hata'] || data['errors'] const errorKey = typeof data === "string" ? data : data?.hata || data?.errors;
if (errorKey !== undefined) { if (errorKey !== undefined) {
errorKey.forEach((el: string) => { if (Array.isArray(errorKey)) {
toastStore.AddToast(el, 'alert') errorKey.forEach((el: string) => {
}) toastStore.AddToast(el, "alert");
});
} else if (typeof errorKey === "string") {
toastStore.AddToast(errorKey, "alert");
} else {
toastStore.AddToast("Bir hata oluştu.", "alert");
}
} else { } else {
toastStore.AddToast('Bir hata oluştu.', 'alert') toastStore.AddToast("Bir hata oluştu.", "alert");
} }
} }
} };
const GetCustomerTipList = async () => { const GetCustomerTipList = async () => {
if (globalDataStore.customerTips.length === 0) { if (globalDataStore.customerTips.length === 0) {

View File

@ -6,7 +6,16 @@ import vueJsx from '@vitejs/plugin-vue-jsx'
// https://vitejs.dev/config/ // https://vitejs.dev/config/
export default defineConfig({ export default defineConfig({
plugins: [vue(), vueJsx()], plugins: [
vue({
template: {
compilerOptions: {
comments: false
}
}
}),
vueJsx()
],
resolve: { resolve: {
alias: { alias: {
'@': fileURLToPath(new URL('./src', import.meta.url)) '@': fileURLToPath(new URL('./src', import.meta.url))