mirror of
https://forgejo.merr.is/annika/isl-vue3.git
synced 2025-12-12 05:03:35 -05:00
Many Changes
Added a 'default' image for spots where one is missing. Not the best solution, but it looks better on the site. Cleaned up my code to avoid some duplication. Added better 'Select All' logic to the event filter.
This commit is contained in:
parent
abe48cd902
commit
255f15798a
24 changed files with 323 additions and 783 deletions
BIN
public/images/isl_logo.png
Normal file
BIN
public/images/isl_logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 202 KiB |
BIN
public/images/touno_island.png
Normal file
BIN
public/images/touno_island.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 202 KiB |
BIN
public/images/unknown.png
Normal file
BIN
public/images/unknown.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 202 KiB |
|
|
@ -20,7 +20,7 @@
|
||||||
"isEventItem": false
|
"isEventItem": false
|
||||||
},
|
},
|
||||||
"ddd29671-ca7f-4132-8784-80346e154059": {
|
"ddd29671-ca7f-4132-8784-80346e154059": {
|
||||||
"iconURL": "",
|
"iconURL": "isl_logo.png",
|
||||||
"itemName": "Blessing Power Gachapon",
|
"itemName": "Blessing Power Gachapon",
|
||||||
"minItemPower": 10,
|
"minItemPower": 10,
|
||||||
"maxItemPower": 30,
|
"maxItemPower": 30,
|
||||||
|
|
@ -30,7 +30,7 @@
|
||||||
"isEventItem": true
|
"isEventItem": true
|
||||||
},
|
},
|
||||||
"c1e029ff-b82c-48bd-a1f1-ea6291fad948": {
|
"c1e029ff-b82c-48bd-a1f1-ea6291fad948": {
|
||||||
"iconURL": "",
|
"iconURL": "isl_logo.png",
|
||||||
"itemName": "Mandrake",
|
"itemName": "Mandrake",
|
||||||
"minItemPower": 1,
|
"minItemPower": 1,
|
||||||
"maxItemPower": 3,
|
"maxItemPower": 3,
|
||||||
|
|
@ -40,7 +40,7 @@
|
||||||
"isEventItem": true
|
"isEventItem": true
|
||||||
},
|
},
|
||||||
"52cd4a48-ff8a-4493-8030-b4e7754cd227": {
|
"52cd4a48-ff8a-4493-8030-b4e7754cd227": {
|
||||||
"iconURL": "",
|
"iconURL": "isl_logo.png",
|
||||||
"itemName": "Muddled Mushroom",
|
"itemName": "Muddled Mushroom",
|
||||||
"minItemPower": 2,
|
"minItemPower": 2,
|
||||||
"maxItemPower": 5,
|
"maxItemPower": 5,
|
||||||
|
|
@ -50,7 +50,7 @@
|
||||||
"isEventItem": true
|
"isEventItem": true
|
||||||
},
|
},
|
||||||
"636b7384-1389-4012-933c-9063baa7a38d": {
|
"636b7384-1389-4012-933c-9063baa7a38d": {
|
||||||
"iconURL": "",
|
"iconURL": "isl_logo.png",
|
||||||
"itemName": "Grassy Bunny",
|
"itemName": "Grassy Bunny",
|
||||||
"minItemPower": 3,
|
"minItemPower": 3,
|
||||||
"maxItemPower": 6,
|
"maxItemPower": 6,
|
||||||
|
|
@ -60,7 +60,7 @@
|
||||||
"isEventItem": true
|
"isEventItem": true
|
||||||
},
|
},
|
||||||
"2563b5f8-8fd5-4795-af86-33200605cf3e": {
|
"2563b5f8-8fd5-4795-af86-33200605cf3e": {
|
||||||
"iconURL": "",
|
"iconURL": "isl_logo.png",
|
||||||
"itemName": "Chirping Chick",
|
"itemName": "Chirping Chick",
|
||||||
"minItemPower": 4,
|
"minItemPower": 4,
|
||||||
"maxItemPower": 10,
|
"maxItemPower": 10,
|
||||||
|
|
@ -70,7 +70,7 @@
|
||||||
"isEventItem": true
|
"isEventItem": true
|
||||||
},
|
},
|
||||||
"54e9bcf5-f1a5-4350-a75d-88af02b4fc13": {
|
"54e9bcf5-f1a5-4350-a75d-88af02b4fc13": {
|
||||||
"iconURL": "",
|
"iconURL": "isl_logo.png",
|
||||||
"itemName": "Gorgeous Horse",
|
"itemName": "Gorgeous Horse",
|
||||||
"minItemPower": 5,
|
"minItemPower": 5,
|
||||||
"maxItemPower": 16,
|
"maxItemPower": 16,
|
||||||
|
|
@ -80,7 +80,7 @@
|
||||||
"isEventItem": true
|
"isEventItem": true
|
||||||
},
|
},
|
||||||
"e736d2b9-a8ec-4a4e-a721-24880c8a6038": {
|
"e736d2b9-a8ec-4a4e-a721-24880c8a6038": {
|
||||||
"iconURL": "",
|
"iconURL": "isl_logo.png",
|
||||||
"itemName": "Blooming Fox",
|
"itemName": "Blooming Fox",
|
||||||
"minItemPower": 7,
|
"minItemPower": 7,
|
||||||
"maxItemPower": 24,
|
"maxItemPower": 24,
|
||||||
|
|
@ -90,7 +90,7 @@
|
||||||
"isEventItem": true
|
"isEventItem": true
|
||||||
},
|
},
|
||||||
"9fb7f9ba-e7ed-4e99-b161-386f48299443": {
|
"9fb7f9ba-e7ed-4e99-b161-386f48299443": {
|
||||||
"iconURL": "",
|
"iconURL": "isl_logo.png",
|
||||||
"itemName": "Frozen Dragon",
|
"itemName": "Frozen Dragon",
|
||||||
"minItemPower": 10,
|
"minItemPower": 10,
|
||||||
"maxItemPower": 32,
|
"maxItemPower": 32,
|
||||||
|
|
@ -100,7 +100,7 @@
|
||||||
"isEventItem": true
|
"isEventItem": true
|
||||||
},
|
},
|
||||||
"e2472929-1218-4cd6-a73b-b783c17bbc31": {
|
"e2472929-1218-4cd6-a73b-b783c17bbc31": {
|
||||||
"iconURL": "",
|
"iconURL": "isl_logo.png",
|
||||||
"itemName": "Flaming Lion",
|
"itemName": "Flaming Lion",
|
||||||
"minItemPower": 14,
|
"minItemPower": 14,
|
||||||
"maxItemPower": 48,
|
"maxItemPower": 48,
|
||||||
|
|
@ -110,7 +110,7 @@
|
||||||
"isEventItem": true
|
"isEventItem": true
|
||||||
},
|
},
|
||||||
"0e21a6ea-8262-44f7-91c3-0c51ace7613f": {
|
"0e21a6ea-8262-44f7-91c3-0c51ace7613f": {
|
||||||
"iconURL": "",
|
"iconURL": "isl_logo.png",
|
||||||
"itemName": "Touno Souvenir 1",
|
"itemName": "Touno Souvenir 1",
|
||||||
"minItemPower": 5,
|
"minItemPower": 5,
|
||||||
"maxItemPower": 5,
|
"maxItemPower": 5,
|
||||||
|
|
@ -120,7 +120,7 @@
|
||||||
"isEventItem": true
|
"isEventItem": true
|
||||||
},
|
},
|
||||||
"700ffd61-c0bf-4f41-abd1-b6fd74a645bb": {
|
"700ffd61-c0bf-4f41-abd1-b6fd74a645bb": {
|
||||||
"iconURL": "",
|
"iconURL": "isl_logo.png",
|
||||||
"itemName": "Touno Souvenir 2",
|
"itemName": "Touno Souvenir 2",
|
||||||
"minItemPower": 10,
|
"minItemPower": 10,
|
||||||
"maxItemPower": 10,
|
"maxItemPower": 10,
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"1f7aff96-030d-4007-9a70-82db7a8be3e3": {
|
"1f7aff96-030d-4007-9a70-82db7a8be3e3": {
|
||||||
"iconURL": "",
|
"iconURL": "isl_logo.png",
|
||||||
"itemName": "Contestant Portrait (Wolf)",
|
"itemName": "Contestant Portrait (Wolf)",
|
||||||
"minItemPower": 15000,
|
"minItemPower": 15000,
|
||||||
"maxItemPower": 40000,
|
"maxItemPower": 40000,
|
||||||
|
|
@ -10,7 +10,7 @@
|
||||||
"isEventItem": true
|
"isEventItem": true
|
||||||
},
|
},
|
||||||
"2006c92e-8e32-4c9f-a913-3b2d1ed8dea0": {
|
"2006c92e-8e32-4c9f-a913-3b2d1ed8dea0": {
|
||||||
"iconURL": "",
|
"iconURL": "isl_logo.png",
|
||||||
"itemName": "Potion of Bravery",
|
"itemName": "Potion of Bravery",
|
||||||
"minItemPower": 800,
|
"minItemPower": 800,
|
||||||
"maxItemPower": 800,
|
"maxItemPower": 800,
|
||||||
|
|
@ -20,7 +20,7 @@
|
||||||
"isEventItem": false
|
"isEventItem": false
|
||||||
},
|
},
|
||||||
"30d05d98-a615-4e3a-94da-8aa6e4ad03a9": {
|
"30d05d98-a615-4e3a-94da-8aa6e4ad03a9": {
|
||||||
"iconURL": "",
|
"iconURL": "isl_logo.png",
|
||||||
"itemName": "Basic Elixir",
|
"itemName": "Basic Elixir",
|
||||||
"minItemPower": 3000,
|
"minItemPower": 3000,
|
||||||
"maxItemPower": 3000,
|
"maxItemPower": 3000,
|
||||||
|
|
@ -30,7 +30,7 @@
|
||||||
"isEventItem": false
|
"isEventItem": false
|
||||||
},
|
},
|
||||||
"3eccaaac-5afe-415a-ac8f-55df213cf015": {
|
"3eccaaac-5afe-415a-ac8f-55df213cf015": {
|
||||||
"iconURL": "",
|
"iconURL": "isl_logo.png",
|
||||||
"itemName": "Potion of Freedom",
|
"itemName": "Potion of Freedom",
|
||||||
"minItemPower": 800,
|
"minItemPower": 800,
|
||||||
"maxItemPower": 800,
|
"maxItemPower": 800,
|
||||||
|
|
@ -40,7 +40,7 @@
|
||||||
"isEventItem": false
|
"isEventItem": false
|
||||||
},
|
},
|
||||||
"68a7a68a-2123-4a8e-b64d-9dbdf0637521": {
|
"68a7a68a-2123-4a8e-b64d-9dbdf0637521": {
|
||||||
"iconURL": "",
|
"iconURL": "isl_logo.png",
|
||||||
"itemName": "Potion of Erudition",
|
"itemName": "Potion of Erudition",
|
||||||
"minItemPower": 800,
|
"minItemPower": 800,
|
||||||
"maxItemPower": 800,
|
"maxItemPower": 800,
|
||||||
|
|
@ -50,7 +50,7 @@
|
||||||
"isEventItem": false
|
"isEventItem": false
|
||||||
},
|
},
|
||||||
"7075da2f-a617-42a1-b142-fe2401ad87ec": {
|
"7075da2f-a617-42a1-b142-fe2401ad87ec": {
|
||||||
"iconURL": "",
|
"iconURL": "isl_logo.png",
|
||||||
"itemName": "Potion of Inspiration",
|
"itemName": "Potion of Inspiration",
|
||||||
"minItemPower": 800,
|
"minItemPower": 800,
|
||||||
"maxItemPower": 800,
|
"maxItemPower": 800,
|
||||||
|
|
@ -60,7 +60,7 @@
|
||||||
"isEventItem": false
|
"isEventItem": false
|
||||||
},
|
},
|
||||||
"762a2775-ca50-4c13-8797-2f03b045ed10": {
|
"762a2775-ca50-4c13-8797-2f03b045ed10": {
|
||||||
"iconURL": "",
|
"iconURL": "isl_logo.png",
|
||||||
"itemName": "Contestant Portrait (Lion)",
|
"itemName": "Contestant Portrait (Lion)",
|
||||||
"minItemPower": 10000,
|
"minItemPower": 10000,
|
||||||
"maxItemPower": 25000,
|
"maxItemPower": 25000,
|
||||||
|
|
@ -70,7 +70,7 @@
|
||||||
"isEventItem": true
|
"isEventItem": true
|
||||||
},
|
},
|
||||||
"9c95396d-e5d8-4f7d-9d37-1469e7dc0ee1": {
|
"9c95396d-e5d8-4f7d-9d37-1469e7dc0ee1": {
|
||||||
"iconURL": "",
|
"iconURL": "isl_logo.png",
|
||||||
"itemName": "Signed Towel (Yellow)",
|
"itemName": "Signed Towel (Yellow)",
|
||||||
"minItemPower": 4500,
|
"minItemPower": 4500,
|
||||||
"maxItemPower": 10000,
|
"maxItemPower": 10000,
|
||||||
|
|
@ -80,7 +80,7 @@
|
||||||
"isEventItem": true
|
"isEventItem": true
|
||||||
},
|
},
|
||||||
"a351a27b-765b-46b5-95fc-99c47e63176d": {
|
"a351a27b-765b-46b5-95fc-99c47e63176d": {
|
||||||
"iconURL": "",
|
"iconURL": "isl_logo.png",
|
||||||
"itemName": "Potion of Diligence",
|
"itemName": "Potion of Diligence",
|
||||||
"minItemPower": 800,
|
"minItemPower": 800,
|
||||||
"maxItemPower": 800,
|
"maxItemPower": 800,
|
||||||
|
|
@ -90,7 +90,7 @@
|
||||||
"isEventItem": false
|
"isEventItem": false
|
||||||
},
|
},
|
||||||
"a44b763b-833b-49d0-91d6-e5fcb8c6ce7c": {
|
"a44b763b-833b-49d0-91d6-e5fcb8c6ce7c": {
|
||||||
"iconURL": "",
|
"iconURL": "isl_logo.png",
|
||||||
"itemName": "Signed Handkerchief (Yellow)",
|
"itemName": "Signed Handkerchief (Yellow)",
|
||||||
"minItemPower": 2000,
|
"minItemPower": 2000,
|
||||||
"maxItemPower": 5000,
|
"maxItemPower": 5000,
|
||||||
|
|
@ -100,7 +100,7 @@
|
||||||
"isEventItem": true
|
"isEventItem": true
|
||||||
},
|
},
|
||||||
"bc5fc5c6-65e1-41c8-822d-d6e06ec0894e": {
|
"bc5fc5c6-65e1-41c8-822d-d6e06ec0894e": {
|
||||||
"iconURL": "",
|
"iconURL": "isl_logo.png",
|
||||||
"itemName": "Advanced Elixir",
|
"itemName": "Advanced Elixir",
|
||||||
"minItemPower": 30000,
|
"minItemPower": 30000,
|
||||||
"maxItemPower": 30000,
|
"maxItemPower": 30000,
|
||||||
|
|
@ -110,7 +110,7 @@
|
||||||
"isEventItem": false
|
"isEventItem": false
|
||||||
},
|
},
|
||||||
"cd50f711-36a4-4b3b-b4ef-84b52c8a18e2": {
|
"cd50f711-36a4-4b3b-b4ef-84b52c8a18e2": {
|
||||||
"iconURL": "",
|
"iconURL": "isl_logo.png",
|
||||||
"itemName": "Champion's Statue",
|
"itemName": "Champion's Statue",
|
||||||
"minItemPower": 30000,
|
"minItemPower": 30000,
|
||||||
"maxItemPower": 80000,
|
"maxItemPower": 80000,
|
||||||
|
|
@ -120,7 +120,7 @@
|
||||||
"isEventItem": true
|
"isEventItem": true
|
||||||
},
|
},
|
||||||
"ce522371-80bd-4266-b473-8f5ace7099c7": {
|
"ce522371-80bd-4266-b473-8f5ace7099c7": {
|
||||||
"iconURL": "",
|
"iconURL": "isl_logo.png",
|
||||||
"itemName": "Signed Handkerchief (Red)",
|
"itemName": "Signed Handkerchief (Red)",
|
||||||
"minItemPower": 3000,
|
"minItemPower": 3000,
|
||||||
"maxItemPower": 8000,
|
"maxItemPower": 8000,
|
||||||
|
|
@ -130,7 +130,7 @@
|
||||||
"isEventItem": true
|
"isEventItem": true
|
||||||
},
|
},
|
||||||
"d7d705d3-9562-4f03-98d8-3b0da81fcf47": {
|
"d7d705d3-9562-4f03-98d8-3b0da81fcf47": {
|
||||||
"iconURL": "",
|
"iconURL": "isl_logo.png",
|
||||||
"itemName": "Champion's Belt",
|
"itemName": "Champion's Belt",
|
||||||
"minItemPower": 20000,
|
"minItemPower": 20000,
|
||||||
"maxItemPower": 50000,
|
"maxItemPower": 50000,
|
||||||
|
|
@ -140,7 +140,7 @@
|
||||||
"isEventItem": true
|
"isEventItem": true
|
||||||
},
|
},
|
||||||
"ed1663c2-aff0-41b4-b5ed-7f86463c1d69": {
|
"ed1663c2-aff0-41b4-b5ed-7f86463c1d69": {
|
||||||
"iconURL": "",
|
"iconURL": "isl_logo.png",
|
||||||
"itemName": "Signed Towel (Red)",
|
"itemName": "Signed Towel (Red)",
|
||||||
"minItemPower": 6000,
|
"minItemPower": 6000,
|
||||||
"maxItemPower": 15000,
|
"maxItemPower": 15000,
|
||||||
|
|
@ -150,7 +150,7 @@
|
||||||
"isEventItem": true
|
"isEventItem": true
|
||||||
},
|
},
|
||||||
"472d229e-3541-4115-8104-53af579f24a4": {
|
"472d229e-3541-4115-8104-53af579f24a4": {
|
||||||
"iconURL": "",
|
"iconURL": "isl_logo.png",
|
||||||
"itemName": "Demonic Exercise Bike",
|
"itemName": "Demonic Exercise Bike",
|
||||||
"minItemPower": 20000,
|
"minItemPower": 20000,
|
||||||
"maxItemPower": 50000,
|
"maxItemPower": 50000,
|
||||||
|
|
@ -160,7 +160,7 @@
|
||||||
"isEventItem": true
|
"isEventItem": true
|
||||||
},
|
},
|
||||||
"6214eeeb-c77b-415c-a055-6d15b04ca026": {
|
"6214eeeb-c77b-415c-a055-6d15b04ca026": {
|
||||||
"iconURL": "",
|
"iconURL": "isl_logo.png",
|
||||||
"itemName": "Steel Barbell",
|
"itemName": "Steel Barbell",
|
||||||
"minItemPower": 15000,
|
"minItemPower": 15000,
|
||||||
"maxItemPower": 40000,
|
"maxItemPower": 40000,
|
||||||
|
|
@ -170,7 +170,7 @@
|
||||||
"isEventItem": true
|
"isEventItem": true
|
||||||
},
|
},
|
||||||
"732f16e3-6de7-4bc7-af77-9cdbaf68b695": {
|
"732f16e3-6de7-4bc7-af77-9cdbaf68b695": {
|
||||||
"iconURL": "",
|
"iconURL": "isl_logo.png",
|
||||||
"itemName": "Pac-Ball",
|
"itemName": "Pac-Ball",
|
||||||
"minItemPower": 4500,
|
"minItemPower": 4500,
|
||||||
"maxItemPower": 10000,
|
"maxItemPower": 10000,
|
||||||
|
|
@ -180,7 +180,7 @@
|
||||||
"isEventItem": true
|
"isEventItem": true
|
||||||
},
|
},
|
||||||
"a64b4819-5b32-41c5-8fe0-293ea8695a0c": {
|
"a64b4819-5b32-41c5-8fe0-293ea8695a0c": {
|
||||||
"iconURL": "",
|
"iconURL": "isl_logo.png",
|
||||||
"itemName": "Stone Dumbbell",
|
"itemName": "Stone Dumbbell",
|
||||||
"minItemPower": 3000,
|
"minItemPower": 3000,
|
||||||
"maxItemPower": 8000,
|
"maxItemPower": 8000,
|
||||||
|
|
@ -190,7 +190,7 @@
|
||||||
"isEventItem": true
|
"isEventItem": true
|
||||||
},
|
},
|
||||||
"b282b9cb-1802-4563-88a1-e7e267a0bcd4": {
|
"b282b9cb-1802-4563-88a1-e7e267a0bcd4": {
|
||||||
"iconURL": "",
|
"iconURL": "isl_logo.png",
|
||||||
"itemName": "Rock Kettlebell",
|
"itemName": "Rock Kettlebell",
|
||||||
"minItemPower": 6000,
|
"minItemPower": 6000,
|
||||||
"maxItemPower": 15000,
|
"maxItemPower": 15000,
|
||||||
|
|
@ -200,7 +200,7 @@
|
||||||
"isEventItem": true
|
"isEventItem": true
|
||||||
},
|
},
|
||||||
"bf1611c0-ddec-4ad8-8299-a2e19818186f": {
|
"bf1611c0-ddec-4ad8-8299-a2e19818186f": {
|
||||||
"iconURL": "",
|
"iconURL": "isl_logo.png",
|
||||||
"itemName": "Screaming Punching Bag",
|
"itemName": "Screaming Punching Bag",
|
||||||
"minItemPower": 30000,
|
"minItemPower": 30000,
|
||||||
"maxItemPower": 80000,
|
"maxItemPower": 80000,
|
||||||
|
|
@ -210,7 +210,7 @@
|
||||||
"isEventItem": true
|
"isEventItem": true
|
||||||
},
|
},
|
||||||
"daca4964-69c4-4167-b7bf-2e8eb49a8f1b": {
|
"daca4964-69c4-4167-b7bf-2e8eb49a8f1b": {
|
||||||
"iconURL": "",
|
"iconURL": "isl_logo.png",
|
||||||
"itemName": "Ivy Jump Rope",
|
"itemName": "Ivy Jump Rope",
|
||||||
"minItemPower": 2000,
|
"minItemPower": 2000,
|
||||||
"maxItemPower": 5000,
|
"maxItemPower": 5000,
|
||||||
|
|
@ -220,7 +220,7 @@
|
||||||
"isEventItem": true
|
"isEventItem": true
|
||||||
},
|
},
|
||||||
"fff5a89a-1691-47ea-af30-c811f1c1dbfc": {
|
"fff5a89a-1691-47ea-af30-c811f1c1dbfc": {
|
||||||
"iconURL": "",
|
"iconURL": "isl_logo.png",
|
||||||
"itemName": "Fairy Shuttlecock",
|
"itemName": "Fairy Shuttlecock",
|
||||||
"minItemPower": 10000,
|
"minItemPower": 10000,
|
||||||
"maxItemPower": 25000,
|
"maxItemPower": 25000,
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"09b1fff4-c1a3-49d5-acf1-b996d93a7217": {
|
"09b1fff4-c1a3-49d5-acf1-b996d93a7217": {
|
||||||
"iconURL": "",
|
"iconURL": "isl_logo.png",
|
||||||
"itemName": "Song: \"Unhappy Elder\"",
|
"itemName": "Song: \"Unhappy Elder\"",
|
||||||
"minItemPower": 2,
|
"minItemPower": 2,
|
||||||
"maxItemPower": 5,
|
"maxItemPower": 5,
|
||||||
|
|
@ -10,7 +10,7 @@
|
||||||
"isEventItem": true
|
"isEventItem": true
|
||||||
},
|
},
|
||||||
"0dbbda4c-0e4c-4cc2-b204-0301178ae667": {
|
"0dbbda4c-0e4c-4cc2-b204-0301178ae667": {
|
||||||
"iconURL": "",
|
"iconURL": "isl_logo.png",
|
||||||
"itemName": "Gold Ring",
|
"itemName": "Gold Ring",
|
||||||
"minItemPower": 1,
|
"minItemPower": 1,
|
||||||
"maxItemPower": 1,
|
"maxItemPower": 1,
|
||||||
|
|
@ -20,7 +20,7 @@
|
||||||
"isEventItem": false
|
"isEventItem": false
|
||||||
},
|
},
|
||||||
"590ebe99-0fdd-4216-bb51-88d48f07d518": {
|
"590ebe99-0fdd-4216-bb51-88d48f07d518": {
|
||||||
"iconURL": "",
|
"iconURL": "isl_logo.png",
|
||||||
"itemName": "Song: \"Forbidden Love\"",
|
"itemName": "Song: \"Forbidden Love\"",
|
||||||
"minItemPower": 10,
|
"minItemPower": 10,
|
||||||
"maxItemPower": 32,
|
"maxItemPower": 32,
|
||||||
|
|
@ -30,7 +30,7 @@
|
||||||
"isEventItem": true
|
"isEventItem": true
|
||||||
},
|
},
|
||||||
"62c5fe6d-92d2-458d-8ce4-c206eeb6245a": {
|
"62c5fe6d-92d2-458d-8ce4-c206eeb6245a": {
|
||||||
"iconURL": "",
|
"iconURL": "isl_logo.png",
|
||||||
"itemName": "Song: \"Prince's Wish\"",
|
"itemName": "Song: \"Prince's Wish\"",
|
||||||
"minItemPower": 4,
|
"minItemPower": 4,
|
||||||
"maxItemPower": 10,
|
"maxItemPower": 10,
|
||||||
|
|
@ -40,7 +40,7 @@
|
||||||
"isEventItem": true
|
"isEventItem": true
|
||||||
},
|
},
|
||||||
"67e7598f-f687-4ea0-b9f5-f89aaa965d44": {
|
"67e7598f-f687-4ea0-b9f5-f89aaa965d44": {
|
||||||
"iconURL": "",
|
"iconURL": "isl_logo.png",
|
||||||
"itemName": "Song: \"Otherworld Stars\"",
|
"itemName": "Song: \"Otherworld Stars\"",
|
||||||
"minItemPower": 7,
|
"minItemPower": 7,
|
||||||
"maxItemPower": 24,
|
"maxItemPower": 24,
|
||||||
|
|
@ -50,7 +50,7 @@
|
||||||
"isEventItem": true
|
"isEventItem": true
|
||||||
},
|
},
|
||||||
"71c7537b-ef33-4f64-91d4-e7e9c3915cad": {
|
"71c7537b-ef33-4f64-91d4-e7e9c3915cad": {
|
||||||
"iconURL": "",
|
"iconURL": "isl_logo.png",
|
||||||
"itemName": "Diamond Ring",
|
"itemName": "Diamond Ring",
|
||||||
"minItemPower": 5,
|
"minItemPower": 5,
|
||||||
"maxItemPower": 5,
|
"maxItemPower": 5,
|
||||||
|
|
@ -60,7 +60,7 @@
|
||||||
"isEventItem": false
|
"isEventItem": false
|
||||||
},
|
},
|
||||||
"73ddfbbf-3071-4103-9893-b9b77af05ce9": {
|
"73ddfbbf-3071-4103-9893-b9b77af05ce9": {
|
||||||
"iconURL": "",
|
"iconURL": "isl_logo.png",
|
||||||
"itemName": "Song: \"Single Golden Mushroom\"",
|
"itemName": "Song: \"Single Golden Mushroom\"",
|
||||||
"minItemPower": 5,
|
"minItemPower": 5,
|
||||||
"maxItemPower": 16,
|
"maxItemPower": 16,
|
||||||
|
|
@ -70,7 +70,7 @@
|
||||||
"isEventItem": true
|
"isEventItem": true
|
||||||
},
|
},
|
||||||
"910cfd8f-9e75-4ca1-b776-e6b4df78e80b": {
|
"910cfd8f-9e75-4ca1-b776-e6b4df78e80b": {
|
||||||
"iconURL": "",
|
"iconURL": "isl_logo.png",
|
||||||
"itemName": "Song: \"Starry Love\"",
|
"itemName": "Song: \"Starry Love\"",
|
||||||
"minItemPower": 1,
|
"minItemPower": 1,
|
||||||
"maxItemPower": 3,
|
"maxItemPower": 3,
|
||||||
|
|
@ -80,7 +80,7 @@
|
||||||
"isEventItem": true
|
"isEventItem": true
|
||||||
},
|
},
|
||||||
"b2536feb-7dcb-4cec-93e5-581bc64e693b": {
|
"b2536feb-7dcb-4cec-93e5-581bc64e693b": {
|
||||||
"iconURL": "",
|
"iconURL": "isl_logo.png",
|
||||||
"itemName": "Song: \"Princess's Wish\"",
|
"itemName": "Song: \"Princess's Wish\"",
|
||||||
"minItemPower": 3,
|
"minItemPower": 3,
|
||||||
"maxItemPower": 6,
|
"maxItemPower": 6,
|
||||||
|
|
@ -90,7 +90,7 @@
|
||||||
"isEventItem": true
|
"isEventItem": true
|
||||||
},
|
},
|
||||||
"b2ebc786-79c3-47df-b0d9-330bb8e85a5f": {
|
"b2ebc786-79c3-47df-b0d9-330bb8e85a5f": {
|
||||||
"iconURL": "",
|
"iconURL": "isl_logo.png",
|
||||||
"itemName": "Song: \"Unlucky Succubus\"",
|
"itemName": "Song: \"Unlucky Succubus\"",
|
||||||
"minItemPower": 14,
|
"minItemPower": 14,
|
||||||
"maxItemPower": 48,
|
"maxItemPower": 48,
|
||||||
|
|
@ -100,7 +100,7 @@
|
||||||
"isEventItem": true
|
"isEventItem": true
|
||||||
},
|
},
|
||||||
"d5eb513d-68e0-4cd3-bb44-e3e8d36cfecd": {
|
"d5eb513d-68e0-4cd3-bb44-e3e8d36cfecd": {
|
||||||
"iconURL": "",
|
"iconURL": "isl_logo.png",
|
||||||
"itemName": "Gemstone Ring",
|
"itemName": "Gemstone Ring",
|
||||||
"minItemPower": 2,
|
"minItemPower": 2,
|
||||||
"maxItemPower": 2,
|
"maxItemPower": 2,
|
||||||
|
|
@ -110,7 +110,7 @@
|
||||||
"isEventItem": false
|
"isEventItem": false
|
||||||
},
|
},
|
||||||
"bcd9068a-c3b1-4914-ac50-af3369a7a8e5": {
|
"bcd9068a-c3b1-4914-ac50-af3369a7a8e5": {
|
||||||
"iconURL": "",
|
"iconURL": "isl_logo.png",
|
||||||
"itemName": "Intamacy Gachapon",
|
"itemName": "Intamacy Gachapon",
|
||||||
"minItemPower": 10,
|
"minItemPower": 10,
|
||||||
"maxItemPower": 30,
|
"maxItemPower": 30,
|
||||||
|
|
@ -119,7 +119,7 @@
|
||||||
"isEventItem": true
|
"isEventItem": true
|
||||||
},
|
},
|
||||||
"6459b278-9e0d-48ab-b6bb-aa4bfc88011b": {
|
"6459b278-9e0d-48ab-b6bb-aa4bfc88011b": {
|
||||||
"iconURL": "",
|
"iconURL": "isl_logo.png",
|
||||||
"itemName": "Touno Speciality 1",
|
"itemName": "Touno Speciality 1",
|
||||||
"minItemPower": 5,
|
"minItemPower": 5,
|
||||||
"maxItemPower": 5,
|
"maxItemPower": 5,
|
||||||
|
|
@ -128,7 +128,7 @@
|
||||||
"origin": "Touno Island"
|
"origin": "Touno Island"
|
||||||
},
|
},
|
||||||
"223aafe8-450f-4343-8df3-d96117d28642": {
|
"223aafe8-450f-4343-8df3-d96117d28642": {
|
||||||
"iconURL": "",
|
"iconURL": "isl_logo.png",
|
||||||
"itemName": "Touno Speciality 2",
|
"itemName": "Touno Speciality 2",
|
||||||
"minItemPower": 10,
|
"minItemPower": 10,
|
||||||
"maxItemPower": 10,
|
"maxItemPower": 10,
|
||||||
|
|
|
||||||
14
src/App.vue
14
src/App.vue
|
|
@ -1,13 +1,25 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { RouterView } from 'vue-router'
|
import { RouterView } from 'vue-router'
|
||||||
import GlobalHeader from '@/components/GlobalHeader.vue'
|
import GlobalHeader from '@/components/GlobalHeader.vue'
|
||||||
|
import { storeToRefs } from 'pinia'
|
||||||
|
import { usePowerItems } from './stores/powerItems'
|
||||||
|
import { computed } from 'vue'
|
||||||
|
|
||||||
|
const { blessingPowerItems, fellowPowerItems, intimacyPowerItems } = storeToRefs(usePowerItems())
|
||||||
|
|
||||||
|
const isLoaded = computed(
|
||||||
|
() =>
|
||||||
|
!blessingPowerItems.value.keys().next().done &&
|
||||||
|
!fellowPowerItems.value.keys().next().done &&
|
||||||
|
!intimacyPowerItems.value.keys().next().done
|
||||||
|
)
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<v-app>
|
<v-app>
|
||||||
<GlobalHeader />
|
<GlobalHeader />
|
||||||
<v-main class="d-flex">
|
<v-main class="d-flex">
|
||||||
<RouterView />
|
<RouterView v-if="isLoaded" />
|
||||||
</v-main>
|
</v-main>
|
||||||
<v-footer app>
|
<v-footer app>
|
||||||
<div>Copyright Annika Merris 2024</div>
|
<div>Copyright Annika Merris 2024</div>
|
||||||
|
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 196 KiB |
|
|
@ -1,187 +0,0 @@
|
||||||
<script setup lang="ts">
|
|
||||||
import { usePowerItems } from '@/stores/powerItems'
|
|
||||||
import { storeToRefs } from 'pinia'
|
|
||||||
import type { Ref } from 'vue';
|
|
||||||
import { computed, ref } from 'vue'
|
|
||||||
|
|
||||||
const {
|
|
||||||
specialBlessingItems,
|
|
||||||
specialBlessingItemsMinTotal,
|
|
||||||
specialBlessingItemsMaxTotal,
|
|
||||||
specialBlessingItemsAveTotal
|
|
||||||
} = storeToRefs(usePowerItems())
|
|
||||||
|
|
||||||
const headers = ref([
|
|
||||||
{
|
|
||||||
title: "Event",
|
|
||||||
align: ' d-none d-lg-table-cell start',
|
|
||||||
sortable: true,
|
|
||||||
value: '1.origin'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Name',
|
|
||||||
align: 'start',
|
|
||||||
sortable: true,
|
|
||||||
value: '1.itemName'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Min.',
|
|
||||||
align: ' d-none d-lg-table-cell',
|
|
||||||
sortable: true,
|
|
||||||
key: '1.minItemPower'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Max.',
|
|
||||||
align: ' d-none d-lg-table-cell',
|
|
||||||
sortable: true,
|
|
||||||
key: '1.maxItemPower'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Owned',
|
|
||||||
align: 'end',
|
|
||||||
sortable: true,
|
|
||||||
key: `1.owned`
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Min. Total',
|
|
||||||
align: ' d-none d-lg-table-cell',
|
|
||||||
sortable: false,
|
|
||||||
key: `1.minTotalPower`
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Max. Total',
|
|
||||||
align: ' d-none d-lg-table-cell',
|
|
||||||
sortable: false,
|
|
||||||
key: `1.maxTotalPower`
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Mean Total Power',
|
|
||||||
align: 'end',
|
|
||||||
sortable: false,
|
|
||||||
key: `1.aveTotalPower`
|
|
||||||
}
|
|
||||||
])
|
|
||||||
const sortBy = ref([
|
|
||||||
{
|
|
||||||
key: '1.minItemPower',
|
|
||||||
order: 'asc'
|
|
||||||
}
|
|
||||||
])
|
|
||||||
const selectedEvents: Ref<string[]> = ref(['All'])
|
|
||||||
|
|
||||||
const getEventImageUrl = function(eventName: string): string {
|
|
||||||
return eventName !== undefined ? "/images/" + eventName.replace(/\s/g, '_').toLocaleLowerCase() + ".png" : ''
|
|
||||||
}
|
|
||||||
|
|
||||||
const events = computed(() =>
|
|
||||||
[...specialBlessingItems.value.values()]
|
|
||||||
.map((cur) => cur.origin)
|
|
||||||
.filter((value: string, idx: number, arr: string[]) => arr.indexOf(value) === idx)
|
|
||||||
.concat('All')
|
|
||||||
)
|
|
||||||
const filteredItems = computed(() =>
|
|
||||||
[...specialBlessingItems.value.entries()]
|
|
||||||
.map((value) =>
|
|
||||||
selectedEvents.value.indexOf('All') !== -1 ||
|
|
||||||
selectedEvents.value.indexOf(value[1].origin) !== -1
|
|
||||||
? value
|
|
||||||
: undefined
|
|
||||||
)
|
|
||||||
.filter((value) => value !== undefined)
|
|
||||||
)
|
|
||||||
const getColor = computed(() => (rarity: number): string => {
|
|
||||||
if (rarity === 5) {
|
|
||||||
return 'red'
|
|
||||||
} else if (rarity === 4) {
|
|
||||||
return 'amber'
|
|
||||||
} else if (rarity === 3) {
|
|
||||||
return 'purple'
|
|
||||||
} else if (rarity === 2) {
|
|
||||||
return 'blue'
|
|
||||||
} else {
|
|
||||||
return 'green'
|
|
||||||
}
|
|
||||||
})
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<v-card fluid>
|
|
||||||
<v-card-title>Special Items</v-card-title>
|
|
||||||
<v-card-subtitle>Items from events</v-card-subtitle>
|
|
||||||
<v-card-item>
|
|
||||||
<v-select
|
|
||||||
clearable
|
|
||||||
chips
|
|
||||||
label="Event"
|
|
||||||
:items="events"
|
|
||||||
multiple
|
|
||||||
density="compact"
|
|
||||||
v-model="selectedEvents"
|
|
||||||
></v-select>
|
|
||||||
<v-data-table
|
|
||||||
density="compact"
|
|
||||||
v-model:sort-by="sortBy"
|
|
||||||
:items="filteredItems"
|
|
||||||
:headers="headers"
|
|
||||||
>
|
|
||||||
<template v-slot:item.1.origin="{ item }">
|
|
||||||
<v-card class="my-2" elevation="2" rounded width="39" v-if="getEventImageUrl(item[1].origin) !== ''" color="transparent">
|
|
||||||
<v-img :src="getEventImageUrl(item[1].origin)"></v-img>
|
|
||||||
</v-card>
|
|
||||||
</template>
|
|
||||||
<template v-slot:item.1.itemName="{ item }">
|
|
||||||
<v-tooltip activator="parent" v-if="item[1].tooltip != undefined" content-class="custom-tooltip">
|
|
||||||
<v-card variant="text" density="compact" max-width="25vw">
|
|
||||||
<v-card-title class="px-2">Origin: {{ item[1].origin }}</v-card-title>
|
|
||||||
<v-card-text class="px-2" v-if="item[1].tooltip !== ''">{{ item[1].tooltip }}</v-card-text>
|
|
||||||
</v-card>
|
|
||||||
</v-tooltip>
|
|
||||||
<v-chip :color="`${getColor(item[1].rarity)}`">
|
|
||||||
{{ item[1].itemName }}
|
|
||||||
</v-chip>
|
|
||||||
</template>
|
|
||||||
<template v-slot:item.1.owned="{ item }">
|
|
||||||
<v-text-field
|
|
||||||
density="compact"
|
|
||||||
hide-details="auto"
|
|
||||||
v-model.number="item[1].owned"
|
|
||||||
@update:model-value="usePowerItems().updateOwned(item[0], item[1].owned)"
|
|
||||||
></v-text-field>
|
|
||||||
</template>
|
|
||||||
<template v-slot:item.1.minTotalPower="{ item }">
|
|
||||||
{{ item[1].minItemPower * item[1].owned }}
|
|
||||||
</template>
|
|
||||||
<template v-slot:item.1.maxTotalPower="{ item }">
|
|
||||||
{{ item[1].maxItemPower * item[1].owned }}
|
|
||||||
</template>
|
|
||||||
<template v-slot:item.1.aveTotalPower="{ item }">
|
|
||||||
{{ ((item[1].minItemPower + item[1].maxItemPower) / 2) * item[1].owned }}
|
|
||||||
</template>
|
|
||||||
<template v-slot:tfoot>
|
|
||||||
<tfoot>
|
|
||||||
<tr>
|
|
||||||
<td class="d-none d-lg-table-cell"></td>
|
|
||||||
<td></td>
|
|
||||||
<td class="d-none d-lg-table-cell"></td>
|
|
||||||
<td class="d-none d-lg-table-cell"></td>
|
|
||||||
<td></td>
|
|
||||||
<td class="px-0 text-right font-weight-bold d-none d-lg-table-cell">
|
|
||||||
{{ specialBlessingItemsMinTotal }}
|
|
||||||
</td>
|
|
||||||
<td class="px-0 text-right font-weight-bold d-none d-lg-table-cell">
|
|
||||||
{{ specialBlessingItemsMaxTotal }}
|
|
||||||
</td>
|
|
||||||
<td class="px-0 text-right font-weight-bold">{{ specialBlessingItemsAveTotal }}</td>
|
|
||||||
</tr>
|
|
||||||
</tfoot>
|
|
||||||
</template>
|
|
||||||
</v-data-table>
|
|
||||||
</v-card-item>
|
|
||||||
</v-card>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
|
||||||
:global(.custom-tooltip) {
|
|
||||||
padding: 0 !important;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
@ -1,107 +0,0 @@
|
||||||
<script setup lang="ts">
|
|
||||||
import { usePowerItems } from '@/stores/powerItems'
|
|
||||||
import { storeToRefs } from 'pinia'
|
|
||||||
import { computed, ref } from 'vue'
|
|
||||||
|
|
||||||
const { standardFellowItems, standardFellowItemTotal } = storeToRefs(usePowerItems())
|
|
||||||
const headers = ref([
|
|
||||||
{
|
|
||||||
title: 'Name',
|
|
||||||
align: 'start',
|
|
||||||
sortable: true,
|
|
||||||
value: '1.itemName'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Power',
|
|
||||||
align: ' d-none d-lg-table-cell',
|
|
||||||
sortable: true,
|
|
||||||
key: '1.minItemPower'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Owned',
|
|
||||||
align: 'end',
|
|
||||||
sortable: true,
|
|
||||||
key: `1.owned`
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Total Power',
|
|
||||||
align: 'end',
|
|
||||||
sortable: false,
|
|
||||||
key: `1.totalPower`
|
|
||||||
}
|
|
||||||
])
|
|
||||||
const sortBy = ref([
|
|
||||||
{
|
|
||||||
key: '1.minItemPower',
|
|
||||||
order: 'asc'
|
|
||||||
}
|
|
||||||
])
|
|
||||||
|
|
||||||
const getColor = computed(() => (rarity: number): string => {
|
|
||||||
if (rarity === 5) {
|
|
||||||
return 'red'
|
|
||||||
} else if (rarity === 4) {
|
|
||||||
return 'amber'
|
|
||||||
} else if (rarity === 3) {
|
|
||||||
return 'purple'
|
|
||||||
} else if (rarity === 2) {
|
|
||||||
return 'blue'
|
|
||||||
} else {
|
|
||||||
return 'green'
|
|
||||||
}
|
|
||||||
})
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<v-card>
|
|
||||||
<v-card-title>Standard Items</v-card-title>
|
|
||||||
<v-card-subtitle>Items that exist all the time</v-card-subtitle>
|
|
||||||
<v-card-item>
|
|
||||||
<v-data-table
|
|
||||||
density="compact"
|
|
||||||
v-model:sort-by="sortBy"
|
|
||||||
:items="[...standardFellowItems.entries()]"
|
|
||||||
:headers="headers"
|
|
||||||
>
|
|
||||||
<template v-slot:item.1.itemName="{ item }">
|
|
||||||
<v-tooltip activator="parent" v-if="item[1].tooltip != undefined" content-class="custom-tooltip">
|
|
||||||
<v-card variant="text" density="compact" max-width="25vw">
|
|
||||||
<v-card-title class="px-2">Origin: {{ item[1].origin }}</v-card-title>
|
|
||||||
<v-card-text class="px-2" v-if="item[1].tooltip !== ''">{{ item[1].tooltip }}</v-card-text>
|
|
||||||
</v-card>
|
|
||||||
</v-tooltip>
|
|
||||||
<v-chip :color="`${getColor(item[1].rarity)}`">
|
|
||||||
{{ item[1].itemName }}
|
|
||||||
</v-chip>
|
|
||||||
</template>
|
|
||||||
<template v-slot:item.1.owned="{ item }">
|
|
||||||
<v-text-field
|
|
||||||
density="compact"
|
|
||||||
hide-details="auto"
|
|
||||||
v-model.number="item[1].owned"
|
|
||||||
@update:model-value="usePowerItems().updateOwned(item[0], item[1].owned)"
|
|
||||||
></v-text-field>
|
|
||||||
</template>
|
|
||||||
<template v-slot:item.1.totalPower="{ item }">
|
|
||||||
{{ item[1].minItemPower * item[1].owned }}
|
|
||||||
</template>
|
|
||||||
<template v-slot:tfoot>
|
|
||||||
<tfoot>
|
|
||||||
<tr>
|
|
||||||
<td></td>
|
|
||||||
<td></td>
|
|
||||||
<td></td>
|
|
||||||
<td class="px-0 text-right font-weight-bold">{{ standardFellowItemTotal }}</td>
|
|
||||||
</tr>
|
|
||||||
</tfoot>
|
|
||||||
</template>
|
|
||||||
</v-data-table>
|
|
||||||
</v-card-item>
|
|
||||||
</v-card>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
|
||||||
:global(.custom-tooltip) {
|
|
||||||
padding: 0 !important;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
@ -1,30 +0,0 @@
|
||||||
<script setup lang="ts">
|
|
||||||
import { usePowerItems } from '@/stores/powerItems';
|
|
||||||
import { storeToRefs } from 'pinia';
|
|
||||||
import { computed } from 'vue';
|
|
||||||
|
|
||||||
const { standardFellowItemTotal, specialFellowItemsMinTotal, specialFellowItemsMaxTotal, specialFellowItemsAveTotal} = storeToRefs(usePowerItems())
|
|
||||||
|
|
||||||
const minIncrease = computed(() => standardFellowItemTotal.value + specialFellowItemsMinTotal.value)
|
|
||||||
const maxIncrease = computed(() => standardFellowItemTotal.value + specialFellowItemsMaxTotal.value)
|
|
||||||
const aveIncrease = computed(() => standardFellowItemTotal.value + specialFellowItemsAveTotal.value)
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<v-card>
|
|
||||||
<v-card-title>Overall Fellow Power Increase</v-card-title>
|
|
||||||
<v-card-item>
|
|
||||||
<v-list density="compact">
|
|
||||||
<v-list-item>
|
|
||||||
<v-list-item-title>Minimum: {{ minIncrease }}</v-list-item-title>
|
|
||||||
</v-list-item>
|
|
||||||
<v-list-item>
|
|
||||||
<v-list-item-title>Maximum: {{ maxIncrease }}</v-list-item-title>
|
|
||||||
</v-list-item>
|
|
||||||
<v-list-item>
|
|
||||||
<v-list-item-title>Mean: {{ aveIncrease }}</v-list-item-title>
|
|
||||||
</v-list-item>
|
|
||||||
</v-list>
|
|
||||||
</v-card-item>
|
|
||||||
</v-card>
|
|
||||||
</template>
|
|
||||||
|
|
@ -1,183 +0,0 @@
|
||||||
<script setup lang="ts">
|
|
||||||
import { usePowerItems } from '@/stores/powerItems'
|
|
||||||
import { storeToRefs } from 'pinia'
|
|
||||||
import { computed, ref, type Ref } from 'vue'
|
|
||||||
|
|
||||||
const {
|
|
||||||
specialIntimacyItems,
|
|
||||||
specialIntimacyItemsMinTotal,
|
|
||||||
specialIntimacyItemsMaxTotal,
|
|
||||||
specialIntimacyItemsAveTotal
|
|
||||||
} = storeToRefs(usePowerItems())
|
|
||||||
|
|
||||||
const headers = ref([
|
|
||||||
{
|
|
||||||
title: "Event",
|
|
||||||
align: ' d-none d-lg-table-cell start',
|
|
||||||
sortable: true,
|
|
||||||
value: '1.origin'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Name',
|
|
||||||
align: 'start',
|
|
||||||
sortable: true,
|
|
||||||
value: '1.itemName'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Min.',
|
|
||||||
align: ' d-none d-lg-table-cell',
|
|
||||||
sortable: true,
|
|
||||||
key: '1.minItemPower'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Max.',
|
|
||||||
align: ' d-none d-lg-table-cell',
|
|
||||||
sortable: true,
|
|
||||||
key: '1.maxItemPower'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Owned',
|
|
||||||
align: 'end',
|
|
||||||
sortable: true,
|
|
||||||
key: `1.owned`
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Min. Total',
|
|
||||||
align: ' d-none d-lg-table-cell',
|
|
||||||
sortable: false,
|
|
||||||
key: `1.minTotalPower`
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Max. Total',
|
|
||||||
align: ' d-none d-lg-table-cell',
|
|
||||||
sortable: false,
|
|
||||||
key: `1.maxTotalPower`
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Mean Total',
|
|
||||||
align: 'end',
|
|
||||||
sortable: false,
|
|
||||||
key: `1.aveTotalPower`
|
|
||||||
}
|
|
||||||
])
|
|
||||||
const sortBy = ref([
|
|
||||||
{
|
|
||||||
key: '1.minItemPower',
|
|
||||||
order: 'asc'
|
|
||||||
}
|
|
||||||
])
|
|
||||||
const selectedEvents: Ref<string[]> = ref(['All'])
|
|
||||||
|
|
||||||
const getEventImageUrl = function(eventName: string): string {
|
|
||||||
return eventName !== undefined ? "/images/" + eventName.replace(/\s/g, '_').toLocaleLowerCase() + ".png" : ''
|
|
||||||
}
|
|
||||||
|
|
||||||
const events = computed(() =>
|
|
||||||
[...specialIntimacyItems.value.values()]
|
|
||||||
.map((cur) => cur.origin)
|
|
||||||
.filter((value: string, idx: number, arr: string[]) => arr.indexOf(value) === idx)
|
|
||||||
.concat('All')
|
|
||||||
)
|
|
||||||
const filteredItems = computed(() =>
|
|
||||||
[...specialIntimacyItems.value.entries()]
|
|
||||||
.map((value) =>
|
|
||||||
selectedEvents.value.indexOf('All') !== -1 ||
|
|
||||||
selectedEvents.value.indexOf(value[1].origin) !== -1
|
|
||||||
? value
|
|
||||||
: undefined
|
|
||||||
)
|
|
||||||
.filter((value) => value !== undefined)
|
|
||||||
)
|
|
||||||
const getColor = computed(() => (rarity: number): string => {
|
|
||||||
if (rarity === 5) {
|
|
||||||
return 'red'
|
|
||||||
} else if (rarity === 4) {
|
|
||||||
return 'amber'
|
|
||||||
} else if (rarity === 3) {
|
|
||||||
return 'purple'
|
|
||||||
} else if (rarity === 2) {
|
|
||||||
return 'blue'
|
|
||||||
} else {
|
|
||||||
return 'green'
|
|
||||||
}
|
|
||||||
})
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<v-card fluid>
|
|
||||||
<v-card-title>Special Items</v-card-title>
|
|
||||||
<v-card-subtitle>Items from events</v-card-subtitle>
|
|
||||||
<v-card-item>
|
|
||||||
<v-select
|
|
||||||
clearable
|
|
||||||
chips
|
|
||||||
label="Event"
|
|
||||||
:items="events"
|
|
||||||
multiple
|
|
||||||
density="compact"
|
|
||||||
v-model="selectedEvents"
|
|
||||||
></v-select>
|
|
||||||
<v-data-table
|
|
||||||
density="compact"
|
|
||||||
v-model:sort-by="sortBy"
|
|
||||||
:items="filteredItems"
|
|
||||||
:headers="headers"
|
|
||||||
>
|
|
||||||
<template v-slot:item.1.origin="{ item }">
|
|
||||||
<v-card class="my-2" elevation="2" rounded width="39" v-if="getEventImageUrl(item[1].origin) !== ''" color="transparent">
|
|
||||||
<v-img :src="getEventImageUrl(item[1].origin)"></v-img>
|
|
||||||
</v-card>
|
|
||||||
</template>
|
|
||||||
<template v-slot:item.1.itemName="{ item }">
|
|
||||||
<v-tooltip activator="parent" v-if="item[1].tooltip != undefined" content-class="custom-tooltip">
|
|
||||||
<v-card variant="text" density="compact" max-width="25vw">
|
|
||||||
<v-card-title class="px-2">Origin: {{ item[1].origin }}</v-card-title>
|
|
||||||
<v-card-text class="px-2" v-if="item[1].tooltip !== ''">{{ item[1].tooltip }}</v-card-text>
|
|
||||||
</v-card>
|
|
||||||
</v-tooltip>
|
|
||||||
<v-chip :color="`${getColor(item[1].rarity)}`">
|
|
||||||
{{ item[1].itemName }}
|
|
||||||
</v-chip>
|
|
||||||
</template>
|
|
||||||
<template v-slot:item.1.owned="{ item }">
|
|
||||||
<v-text-field
|
|
||||||
reverse
|
|
||||||
density="compact"
|
|
||||||
hide-details="auto"
|
|
||||||
v-model.number="item[1].owned"
|
|
||||||
@update:model-value="usePowerItems().updateOwned(item[0], item[1].owned)"
|
|
||||||
></v-text-field>
|
|
||||||
</template>
|
|
||||||
<template v-slot:item.1.minTotalPower="{ item }">
|
|
||||||
{{ item[1].minItemPower * item[1].owned }}
|
|
||||||
</template>
|
|
||||||
<template v-slot:item.1.maxTotalPower="{ item }">
|
|
||||||
{{ item[1].maxItemPower * item[1].owned }}
|
|
||||||
</template>
|
|
||||||
<template v-slot:item.1.aveTotalPower="{ item }">
|
|
||||||
{{ ((item[1].minItemPower + item[1].maxItemPower) / 2) * item[1].owned }}
|
|
||||||
</template>
|
|
||||||
<template v-slot:tfoot>
|
|
||||||
<tfoot>
|
|
||||||
<tr>
|
|
||||||
<td class="d-none d-lg-table-cell"></td>
|
|
||||||
<td></td>
|
|
||||||
<td class="d-none d-lg-table-cell"></td>
|
|
||||||
<td class="d-none d-lg-table-cell"></td>
|
|
||||||
<td></td>
|
|
||||||
<td class="px-0 text-right font-weight-bold d-none d-lg-table-cell">{{ specialIntimacyItemsMinTotal }}</td>
|
|
||||||
<td class="px-0 text-right font-weight-bold d-none d-lg-table-cell">{{ specialIntimacyItemsMaxTotal }}</td>
|
|
||||||
<td class="px-0 text-right font-weight-bold">{{ specialIntimacyItemsAveTotal }}</td>
|
|
||||||
</tr>
|
|
||||||
</tfoot>
|
|
||||||
</template>
|
|
||||||
</v-data-table>
|
|
||||||
</v-card-item>
|
|
||||||
</v-card>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
|
||||||
:global(.custom-tooltip) {
|
|
||||||
padding: 0 !important;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
@ -1,107 +0,0 @@
|
||||||
<script setup lang="ts">
|
|
||||||
import { usePowerItems } from '@/stores/powerItems'
|
|
||||||
import { storeToRefs } from 'pinia'
|
|
||||||
import { computed, ref } from 'vue'
|
|
||||||
|
|
||||||
const { standardIntimacyItems, standardIntimacyItemTotal } = storeToRefs(usePowerItems())
|
|
||||||
const headers = ref([
|
|
||||||
{
|
|
||||||
title: 'Name',
|
|
||||||
align: 'start',
|
|
||||||
sortable: true,
|
|
||||||
value: '1.itemName'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Power',
|
|
||||||
align: ' d-none d-lg-table-cell',
|
|
||||||
sortable: true,
|
|
||||||
key: '1.minItemPower'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Owned',
|
|
||||||
align: 'end',
|
|
||||||
sortable: true,
|
|
||||||
key: `1.owned`
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'Total Power',
|
|
||||||
align: 'end',
|
|
||||||
sortable: false,
|
|
||||||
key: `1.totalPower`
|
|
||||||
}
|
|
||||||
])
|
|
||||||
const sortBy = ref([
|
|
||||||
{
|
|
||||||
key: '1.minItemPower',
|
|
||||||
order: 'asc'
|
|
||||||
}
|
|
||||||
])
|
|
||||||
|
|
||||||
const getColor = computed(() => (rarity: number): string => {
|
|
||||||
if (rarity === 5) {
|
|
||||||
return 'red'
|
|
||||||
} else if (rarity === 4) {
|
|
||||||
return 'amber'
|
|
||||||
} else if (rarity === 3) {
|
|
||||||
return 'purple'
|
|
||||||
} else if (rarity === 2) {
|
|
||||||
return 'blue'
|
|
||||||
} else {
|
|
||||||
return 'green'
|
|
||||||
}
|
|
||||||
})
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<v-card>
|
|
||||||
<v-card-title>Standard Items</v-card-title>
|
|
||||||
<v-card-subtitle>Items that exist all the time</v-card-subtitle>
|
|
||||||
<v-card-item>
|
|
||||||
<v-data-table
|
|
||||||
density="compact"
|
|
||||||
v-model:sort-by="sortBy"
|
|
||||||
:items="[...standardIntimacyItems.entries()]"
|
|
||||||
:headers="headers"
|
|
||||||
>
|
|
||||||
<template v-slot:item.1.itemName="{ item }">
|
|
||||||
<v-tooltip activator="parent" v-if="item[1].tooltip != undefined" content-class="custom-tooltip">
|
|
||||||
<v-card variant="text" density="compact" max-width="25vw">
|
|
||||||
<v-card-title class="px-2">Origin: {{ item[1].origin }}</v-card-title>
|
|
||||||
<v-card-text class="px-2" v-if="item[1].tooltip !== ''">{{ item[1].tooltip }}</v-card-text>
|
|
||||||
</v-card>
|
|
||||||
</v-tooltip>
|
|
||||||
<v-chip :color="`${getColor(item[1].rarity)}`">
|
|
||||||
{{ item[1].itemName }}
|
|
||||||
</v-chip>
|
|
||||||
</template>
|
|
||||||
<template v-slot:item.1.owned="{ item }">
|
|
||||||
<v-text-field
|
|
||||||
density="compact"
|
|
||||||
hide-details="auto"
|
|
||||||
v-model.number="item[1].owned"
|
|
||||||
@update:model-value="usePowerItems().updateOwned(item[0], item[1].owned)"
|
|
||||||
></v-text-field>
|
|
||||||
</template>
|
|
||||||
<template v-slot:item.1.totalPower="{ item }">
|
|
||||||
{{ item[1].minItemPower * item[1].owned }}
|
|
||||||
</template>
|
|
||||||
<template v-slot:tfoot>
|
|
||||||
<tfoot>
|
|
||||||
<tr>
|
|
||||||
<td></td>
|
|
||||||
<td></td>
|
|
||||||
<td></td>
|
|
||||||
<td class="px-0 text-right font-weight-bold">{{ standardIntimacyItemTotal }}</td>
|
|
||||||
</tr>
|
|
||||||
</tfoot>
|
|
||||||
</template>
|
|
||||||
</v-data-table>
|
|
||||||
</v-card-item>
|
|
||||||
</v-card>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<style scoped lang="scss">
|
|
||||||
:global(.custom-tooltip) {
|
|
||||||
padding: 0 !important;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
@ -1,30 +0,0 @@
|
||||||
<script setup lang="ts">
|
|
||||||
import { usePowerItems } from '@/stores/powerItems';
|
|
||||||
import { storeToRefs } from 'pinia';
|
|
||||||
import { computed } from 'vue';
|
|
||||||
|
|
||||||
const { standardIntimacyItemTotal, specialIntimacyItemsMinTotal, specialIntimacyItemsMaxTotal, specialIntimacyItemsAveTotal} = storeToRefs(usePowerItems())
|
|
||||||
|
|
||||||
const minIncrease = computed(() => standardIntimacyItemTotal.value + specialIntimacyItemsMinTotal.value)
|
|
||||||
const maxIncrease = computed(() => standardIntimacyItemTotal.value + specialIntimacyItemsMaxTotal.value)
|
|
||||||
const aveIncrease = computed(() => standardIntimacyItemTotal.value + specialIntimacyItemsAveTotal.value)
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<v-card>
|
|
||||||
<v-card-title>Overall Intimacy Power Increase</v-card-title>
|
|
||||||
<v-card-item>
|
|
||||||
<v-list density="compact">
|
|
||||||
<v-list-item>
|
|
||||||
<v-list-item-title>Minimum: {{ minIncrease }}</v-list-item-title>
|
|
||||||
</v-list-item>
|
|
||||||
<v-list-item>
|
|
||||||
<v-list-item-title>Maximum: {{ maxIncrease }}</v-list-item-title>
|
|
||||||
</v-list-item>
|
|
||||||
<v-list-item>
|
|
||||||
<v-list-item-title>Mean: {{ aveIncrease }}</v-list-item-title>
|
|
||||||
</v-list-item>
|
|
||||||
</v-list>
|
|
||||||
</v-card-item>
|
|
||||||
</v-card>
|
|
||||||
</template>
|
|
||||||
|
|
@ -1,16 +1,19 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { usePowerItems } from '@/stores/powerItems'
|
import { usePowerItems } from '@/stores/powerItems'
|
||||||
import type { PowerItem } from '@/types/PowerItem'
|
import type { PowerItem } from '@/types/PowerItem';
|
||||||
import { storeToRefs } from 'pinia'
|
|
||||||
import type { Ref } from 'vue'
|
import type { Ref } from 'vue'
|
||||||
import { computed, ref } from 'vue'
|
import { computed, ref } from 'vue'
|
||||||
|
|
||||||
const {
|
export interface Props {
|
||||||
specialFellowItems,
|
items: Map<string, PowerItem>
|
||||||
specialFellowItemsMinTotal,
|
minimumTotal: number
|
||||||
specialFellowItemsMaxTotal,
|
maximumTotal: number
|
||||||
specialFellowItemsAveTotal
|
averageTotal: number
|
||||||
} = storeToRefs(usePowerItems())
|
}
|
||||||
|
|
||||||
|
const props = withDefaults(defineProps<Props>(), {
|
||||||
|
items: () => new Map<string, PowerItem>
|
||||||
|
})
|
||||||
|
|
||||||
const headers = ref([
|
const headers = ref([
|
||||||
{
|
{
|
||||||
|
|
@ -56,7 +59,7 @@ const headers = ref([
|
||||||
key: `1.maxTotalPower`
|
key: `1.maxTotalPower`
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Mean Total',
|
title: 'Mean Total Power',
|
||||||
align: 'end',
|
align: 'end',
|
||||||
sortable: false,
|
sortable: false,
|
||||||
key: `1.aveTotalPower`
|
key: `1.aveTotalPower`
|
||||||
|
|
@ -68,22 +71,28 @@ const sortBy = ref([
|
||||||
order: 'asc'
|
order: 'asc'
|
||||||
}
|
}
|
||||||
])
|
])
|
||||||
const selectedEvents: Ref<string[]> = ref(['All'])
|
const selectedEvents: Ref<string[]> = ref([])
|
||||||
|
|
||||||
const getEventImageUrl = function (eventName: string): string {
|
const getEventImageUrl = function (eventName: string): string {
|
||||||
return eventName !== undefined
|
return eventName !== undefined
|
||||||
? '/images/' + eventName.replace(/\s/g, '_').toLocaleLowerCase() + '.png'
|
? '/images/' + eventName.replace(/\s/g, '_').toLocaleLowerCase() + '.png'
|
||||||
: ''
|
: ''
|
||||||
}
|
}
|
||||||
|
const toggle = function () {
|
||||||
|
if (allSelected.value) {
|
||||||
|
selectedEvents.value = []
|
||||||
|
} else {
|
||||||
|
selectedEvents.value = events.value.slice()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const events = computed(() =>
|
const events = computed(() =>
|
||||||
[...specialFellowItems.value.values()]
|
[...props.items.values()]
|
||||||
.map((cur) => cur.origin)
|
.map((cur) => cur.origin)
|
||||||
.filter((value: string, idx: number, arr: string[]) => arr.indexOf(value) === idx)
|
.filter((value: string, idx: number, arr: string[]) => arr.indexOf(value) === idx)
|
||||||
.concat('All')
|
|
||||||
)
|
)
|
||||||
const filteredItems = computed(() =>
|
const filteredItems = computed(() =>
|
||||||
[...specialFellowItems.value.entries()]
|
[...props.items.entries()]
|
||||||
.map((value) =>
|
.map((value) =>
|
||||||
selectedEvents.value.indexOf('All') !== -1 ||
|
selectedEvents.value.indexOf('All') !== -1 ||
|
||||||
selectedEvents.value.indexOf(value[1].origin) !== -1
|
selectedEvents.value.indexOf(value[1].origin) !== -1
|
||||||
|
|
@ -105,6 +114,9 @@ const getColor = computed(() => (rarity: number): string => {
|
||||||
return 'green'
|
return 'green'
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
const allSelected = computed(() => events.value.length === selectedEvents.value.length)
|
||||||
|
const partialSelected = computed(() => selectedEvents.value.length > 0)
|
||||||
|
toggle()
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
|
@ -120,7 +132,19 @@ const getColor = computed(() => (rarity: number): string => {
|
||||||
multiple
|
multiple
|
||||||
density="compact"
|
density="compact"
|
||||||
v-model="selectedEvents"
|
v-model="selectedEvents"
|
||||||
></v-select>
|
>
|
||||||
|
<template v-slot:prepend-item>
|
||||||
|
<v-list-item title="Select All" @click="toggle">
|
||||||
|
<template v-slot:prepend>
|
||||||
|
<v-checkbox-btn
|
||||||
|
:color="partialSelected ? 'indigo-darken-2' : undefined"
|
||||||
|
:indeterminate="partialSelected && !allSelected"
|
||||||
|
:model-value="partialSelected"
|
||||||
|
></v-checkbox-btn>
|
||||||
|
</template>
|
||||||
|
</v-list-item>
|
||||||
|
</template>
|
||||||
|
</v-select>
|
||||||
<v-data-table
|
<v-data-table
|
||||||
density="compact"
|
density="compact"
|
||||||
v-model:sort-by="sortBy"
|
v-model:sort-by="sortBy"
|
||||||
|
|
@ -137,6 +161,7 @@ const getColor = computed(() => (rarity: number): string => {
|
||||||
color="transparent"
|
color="transparent"
|
||||||
>
|
>
|
||||||
<v-img :src="getEventImageUrl(item[1].origin)"></v-img>
|
<v-img :src="getEventImageUrl(item[1].origin)"></v-img>
|
||||||
|
<v-tooltip activator="parent">{{ item?.[1].origin }}</v-tooltip>
|
||||||
</v-card>
|
</v-card>
|
||||||
</template>
|
</template>
|
||||||
<template v-slot:item.1.itemName="{ item }">
|
<template v-slot:item.1.itemName="{ item }">
|
||||||
|
|
@ -182,12 +207,12 @@ const getColor = computed(() => (rarity: number): string => {
|
||||||
<td class="d-none d-lg-table-cell"></td>
|
<td class="d-none d-lg-table-cell"></td>
|
||||||
<td></td>
|
<td></td>
|
||||||
<td class="px-0 text-right font-weight-bold d-none d-lg-table-cell">
|
<td class="px-0 text-right font-weight-bold d-none d-lg-table-cell">
|
||||||
{{ specialFellowItemsMinTotal }}
|
{{ minimumTotal }}
|
||||||
</td>
|
</td>
|
||||||
<td class="px-0 text-right font-weight-bold d-none d-lg-table-cell">
|
<td class="px-0 text-right font-weight-bold d-none d-lg-table-cell">
|
||||||
{{ specialFellowItemsMaxTotal }}
|
{{ maximumTotal }}
|
||||||
</td>
|
</td>
|
||||||
<td class="px-0 text-right font-weight-bold">{{ specialFellowItemsAveTotal }}</td>
|
<td class="px-0 text-right font-weight-bold">{{ averageTotal }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tfoot>
|
</tfoot>
|
||||||
</template>
|
</template>
|
||||||
|
|
@ -1,9 +1,17 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { usePowerItems } from '@/stores/powerItems'
|
import { usePowerItems } from '@/stores/powerItems'
|
||||||
import { storeToRefs } from 'pinia'
|
import type { PowerItem } from '@/types/PowerItem'
|
||||||
import { computed, ref } from 'vue'
|
import { computed, ref } from 'vue'
|
||||||
|
|
||||||
const { standardBlessingItems, standardBlessingItemTotal } = storeToRefs(usePowerItems())
|
export interface Props {
|
||||||
|
items: Map<string, PowerItem>
|
||||||
|
total: number
|
||||||
|
}
|
||||||
|
|
||||||
|
const props = withDefaults(defineProps<Props>(), {
|
||||||
|
items: () => new Map<string, PowerItem>
|
||||||
|
})
|
||||||
|
|
||||||
const headers = ref([
|
const headers = ref([
|
||||||
{
|
{
|
||||||
title: '',
|
title: '',
|
||||||
|
|
@ -66,7 +74,7 @@ const getColor = computed(() => (rarity: number): string => {
|
||||||
<v-data-table
|
<v-data-table
|
||||||
density="compact"
|
density="compact"
|
||||||
v-model:sort-by="sortBy"
|
v-model:sort-by="sortBy"
|
||||||
:items="[...standardBlessingItems.entries()]"
|
:items="[...items.entries()]"
|
||||||
:headers="headers"
|
:headers="headers"
|
||||||
>
|
>
|
||||||
<template v-slot:item.1.iconURL="{ item }">
|
<template v-slot:item.1.iconURL="{ item }">
|
||||||
|
|
@ -109,7 +117,7 @@ const getColor = computed(() => (rarity: number): string => {
|
||||||
<td class="d-none d-lg-table-cell"></td>
|
<td class="d-none d-lg-table-cell"></td>
|
||||||
<td></td>
|
<td></td>
|
||||||
<td></td>
|
<td></td>
|
||||||
<td class="px-0 text-right font-weight-bold">{{ standardBlessingItemTotal }}</td>
|
<td class="px-0 text-right font-weight-bold">{{ total }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tfoot>
|
</tfoot>
|
||||||
</template>
|
</template>
|
||||||
|
|
@ -1,13 +1,18 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { usePowerItems } from '@/stores/powerItems';
|
|
||||||
import { storeToRefs } from 'pinia';
|
|
||||||
import { computed } from 'vue';
|
import { computed } from 'vue';
|
||||||
|
|
||||||
const { standardBlessingItemTotal, specialBlessingItemsMinTotal, specialBlessingItemsMaxTotal, specialBlessingItemsAveTotal} = storeToRefs(usePowerItems())
|
export interface Props {
|
||||||
|
standardTotal: number
|
||||||
|
minimumTotal: number
|
||||||
|
maximumTotal: number
|
||||||
|
averageTotal: number
|
||||||
|
}
|
||||||
|
|
||||||
const minIncrease = computed(() => standardBlessingItemTotal.value + specialBlessingItemsMinTotal.value)
|
const props = defineProps<Props>()
|
||||||
const maxIncrease = computed(() => standardBlessingItemTotal.value + specialBlessingItemsMaxTotal.value)
|
|
||||||
const aveIncrease = computed(() => standardBlessingItemTotal.value + specialBlessingItemsAveTotal.value)
|
const minIncrease = computed(() => props.standardTotal + props.minimumTotal)
|
||||||
|
const maxIncrease = computed(() => props.standardTotal + props.maximumTotal)
|
||||||
|
const aveIncrease = computed(() => props.standardTotal + props.averageTotal)
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
|
@ -23,6 +23,11 @@ const router = createRouter({
|
||||||
path: "/intimacy-power",
|
path: "/intimacy-power",
|
||||||
name: "intimacy-power",
|
name: "intimacy-power",
|
||||||
component: () => import('@/views/IntimacyPowerView.vue')
|
component: () => import('@/views/IntimacyPowerView.vue')
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "/test",
|
||||||
|
name: "test",
|
||||||
|
component: () => import('@/views/Test.vue')
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ export const usePowerItems = defineStore('powerItems', () => {
|
||||||
const blessingPowerItems = ref(new Map<string, PowerItem>())
|
const blessingPowerItems = ref(new Map<string, PowerItem>())
|
||||||
const fellowPowerItems = ref(new Map<string, PowerItem>())
|
const fellowPowerItems = ref(new Map<string, PowerItem>())
|
||||||
const intimacyPowerItems = ref(new Map<string, PowerItem>())
|
const intimacyPowerItems = ref(new Map<string, PowerItem>())
|
||||||
|
const isLoadComplete = ref(false)
|
||||||
|
|
||||||
async function fetchPowerItems() {
|
async function fetchPowerItems() {
|
||||||
axios
|
axios
|
||||||
|
|
@ -78,6 +79,7 @@ export const usePowerItems = defineStore('powerItems', () => {
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
console.log(err)
|
console.log(err)
|
||||||
})
|
})
|
||||||
|
isLoadComplete.value = true
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateOwned(key: string, newOwned: number) {
|
function updateOwned(key: string, newOwned: number) {
|
||||||
|
|
@ -134,12 +136,7 @@ export const usePowerItems = defineStore('powerItems', () => {
|
||||||
)
|
)
|
||||||
|
|
||||||
const standardBlessingItems = computed(
|
const standardBlessingItems = computed(
|
||||||
() =>
|
() => new Map([...blessingPowerItems.value.entries()].filter((cur) => !cur[1].isEventItem))
|
||||||
new Map(
|
|
||||||
[...blessingPowerItems.value.entries()].filter(
|
|
||||||
(cur) => !(cur[1].isEventItem)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const standardBlessingItemTotal = computed(() =>
|
const standardBlessingItemTotal = computed(() =>
|
||||||
|
|
@ -154,12 +151,7 @@ export const usePowerItems = defineStore('powerItems', () => {
|
||||||
)
|
)
|
||||||
|
|
||||||
const specialBlessingItems = computed(
|
const specialBlessingItems = computed(
|
||||||
() =>
|
() => new Map([...blessingPowerItems.value.entries()].filter((cur) => cur[1].isEventItem))
|
||||||
new Map(
|
|
||||||
[...blessingPowerItems.value.entries()].filter(
|
|
||||||
(cur) => (cur[1].isEventItem)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const specialBlessingItemsMinTotal = computed(() =>
|
const specialBlessingItemsMinTotal = computed(() =>
|
||||||
|
|
@ -203,12 +195,7 @@ export const usePowerItems = defineStore('powerItems', () => {
|
||||||
)
|
)
|
||||||
|
|
||||||
const standardFellowItems = computed(
|
const standardFellowItems = computed(
|
||||||
() =>
|
() => new Map([...fellowPowerItems.value.entries()].filter((cur) => !cur[1].isEventItem))
|
||||||
new Map(
|
|
||||||
[...fellowPowerItems.value.entries()].filter(
|
|
||||||
(cur) => !(cur[1].isEventItem)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const standardFellowItemTotal = computed(() =>
|
const standardFellowItemTotal = computed(() =>
|
||||||
|
|
@ -223,12 +210,7 @@ export const usePowerItems = defineStore('powerItems', () => {
|
||||||
)
|
)
|
||||||
|
|
||||||
const specialFellowItems = computed(
|
const specialFellowItems = computed(
|
||||||
() =>
|
() => new Map([...fellowPowerItems.value.entries()].filter((cur) => cur[1].isEventItem))
|
||||||
new Map(
|
|
||||||
[...fellowPowerItems.value.entries()].filter(
|
|
||||||
(cur) => (cur[1].isEventItem)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const specialFellowItemsMinTotal = computed(() =>
|
const specialFellowItemsMinTotal = computed(() =>
|
||||||
|
|
@ -275,12 +257,7 @@ export const usePowerItems = defineStore('powerItems', () => {
|
||||||
)
|
)
|
||||||
|
|
||||||
const standardIntimacyItems = computed(
|
const standardIntimacyItems = computed(
|
||||||
() =>
|
() => new Map([...intimacyPowerItems.value.entries()].filter((cur) => !cur[1].isEventItem))
|
||||||
new Map(
|
|
||||||
[...intimacyPowerItems.value.entries()].filter(
|
|
||||||
(cur) => !(cur[1].isEventItem)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const standardIntimacyItemTotal = computed(() =>
|
const standardIntimacyItemTotal = computed(() =>
|
||||||
|
|
@ -295,12 +272,7 @@ export const usePowerItems = defineStore('powerItems', () => {
|
||||||
)
|
)
|
||||||
|
|
||||||
const specialIntimacyItems = computed(
|
const specialIntimacyItems = computed(
|
||||||
() =>
|
() => new Map([...intimacyPowerItems.value.entries()].filter((cur) => cur[1].isEventItem))
|
||||||
new Map(
|
|
||||||
[...intimacyPowerItems.value.entries()].filter(
|
|
||||||
(cur) => (cur[1].isEventItem)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const specialIntimacyItemsMinTotal = computed(() =>
|
const specialIntimacyItemsMinTotal = computed(() =>
|
||||||
|
|
@ -338,6 +310,9 @@ export const usePowerItems = defineStore('powerItems', () => {
|
||||||
|
|
||||||
return {
|
return {
|
||||||
blessingPowerItems,
|
blessingPowerItems,
|
||||||
|
fellowPowerItems,
|
||||||
|
intimacyPowerItems,
|
||||||
|
isLoadComplete,
|
||||||
fetchPowerItems,
|
fetchPowerItems,
|
||||||
updateOwned,
|
updateOwned,
|
||||||
totalBlessingPower,
|
totalBlessingPower,
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,47 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import SpecialItemsCard from '@/components/BlessingPower/SpecialItemsCard.vue'
|
import SpecialItemsCard from '@/components/SpecialItemsCard.vue'
|
||||||
import StandardItemsCard from '@/components/BlessingPower/StandardItemsCard.vue'
|
import StandardItemsCard from '@/components/StandardItemsCard.vue'
|
||||||
import SummaryCard from '@/components/BlessingPower/SummaryCard.vue'
|
import SummaryCard from '@/components/SummaryCard.vue'
|
||||||
|
import { storeToRefs } from 'pinia'
|
||||||
|
import { usePowerItems } from '@/stores/powerItems'
|
||||||
|
|
||||||
|
const {
|
||||||
|
standardBlessingItems,
|
||||||
|
standardBlessingItemTotal,
|
||||||
|
specialBlessingItems,
|
||||||
|
specialBlessingItemsMinTotal,
|
||||||
|
specialBlessingItemsMaxTotal,
|
||||||
|
specialBlessingItemsAveTotal
|
||||||
|
} = storeToRefs(usePowerItems())
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<v-sheet class="d-flex flex-wrap flex-fill">
|
<v-card>
|
||||||
<StandardItemsCard class="ma-2 align-self-start" />
|
<v-card-title>Blessing Power</v-card-title>
|
||||||
<SpecialItemsCard class="ma-2 align-self-start" />
|
<v-card-text>
|
||||||
<SummaryCard class="ma-2 align-self-start" />
|
<v-sheet class="d-flex flex-wrap flex-fill">
|
||||||
</v-sheet>
|
<StandardItemsCard
|
||||||
|
class="ma-2 align-self-start"
|
||||||
|
:items="standardBlessingItems"
|
||||||
|
:total="standardBlessingItemTotal"
|
||||||
|
/>
|
||||||
|
<SpecialItemsCard
|
||||||
|
class="ma-2 align-self-start"
|
||||||
|
:items="specialBlessingItems"
|
||||||
|
:minimum-total="specialBlessingItemsMinTotal"
|
||||||
|
:maximum-total="specialBlessingItemsMaxTotal"
|
||||||
|
:average-total="specialBlessingItemsAveTotal"
|
||||||
|
/>
|
||||||
|
<SummaryCard
|
||||||
|
class="ma-2 align-self-start"
|
||||||
|
:standard-total="standardBlessingItemTotal"
|
||||||
|
:minimum-total="specialBlessingItemsMinTotal"
|
||||||
|
:maximum-total="specialBlessingItemsMaxTotal"
|
||||||
|
:average-total="specialBlessingItemsAveTotal"
|
||||||
|
/>
|
||||||
|
</v-sheet>
|
||||||
|
</v-card-text>
|
||||||
|
</v-card>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,51 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import SpecialItemsCard from '@/components/FellowPower/SpecialItemsCard.vue'
|
import SpecialItemsCard from '@/components/SpecialItemsCard.vue'
|
||||||
import StandardItemsCard from '@/components/FellowPower/StandardItemsCard.vue'
|
import StandardItemsCard from '@/components/StandardItemsCard.vue'
|
||||||
import SummaryCard from '@/components/FellowPower/SummaryCard.vue'
|
import SummaryCard from '@/components/SummaryCard.vue'
|
||||||
|
import { storeToRefs } from 'pinia'
|
||||||
|
import { usePowerItems } from '@/stores/powerItems'
|
||||||
|
|
||||||
|
const {
|
||||||
|
standardFellowItems,
|
||||||
|
standardFellowItemTotal,
|
||||||
|
specialFellowItems,
|
||||||
|
specialFellowItemsMinTotal,
|
||||||
|
specialFellowItemsMaxTotal,
|
||||||
|
specialFellowItemsAveTotal
|
||||||
|
} = storeToRefs(usePowerItems())
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<v-sheet class="d-flex flex-wrap flex-fill">
|
<v-card>
|
||||||
<StandardItemsCard class="ma-2 align-self-start"/>
|
<v-card-title>Fellow Power</v-card-title>
|
||||||
<SpecialItemsCard class="ma-2 align-self-start"/>
|
<v-card-text>
|
||||||
<SummaryCard class="ma-2 align-self-start" />
|
<v-sheet class="d-flex flex-wrap flex-fill">
|
||||||
</v-sheet>
|
<StandardItemsCard
|
||||||
|
class="ma-2 align-self-start"
|
||||||
|
:items="standardFellowItems"
|
||||||
|
:total="standardFellowItemTotal"
|
||||||
|
/>
|
||||||
|
<SpecialItemsCard
|
||||||
|
class="ma-2 align-self-start"
|
||||||
|
:items="specialFellowItems"
|
||||||
|
:minimum-total="specialFellowItemsMinTotal"
|
||||||
|
:maximum-total="specialFellowItemsMaxTotal"
|
||||||
|
:average-total="specialFellowItemsAveTotal"
|
||||||
|
/>
|
||||||
|
<SummaryCard
|
||||||
|
class="ma-2 align-self-start"
|
||||||
|
:standard-total="standardFellowItemTotal"
|
||||||
|
:minimum-total="specialFellowItemsMinTotal"
|
||||||
|
:maximum-total="specialFellowItemsMaxTotal"
|
||||||
|
:average-total="specialFellowItemsAveTotal"
|
||||||
|
/>
|
||||||
|
</v-sheet>
|
||||||
|
</v-card-text>
|
||||||
|
</v-card>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
@use "@/styles/settings.scss";
|
@use '@/styles/settings.scss';
|
||||||
:deep(tbody) tr:nth-of-type(even) {
|
:deep(tbody) tr:nth-of-type(even) {
|
||||||
background-color: rgba(var(--v-theme-primary-darken-1), 0.25);
|
background-color: rgba(var(--v-theme-primary-darken-1), 0.25);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,11 @@ const entries20240121 = ref([
|
||||||
'Added event icon display',
|
'Added event icon display',
|
||||||
'Added filters, looks ugly, maybe works'
|
'Added filters, looks ugly, maybe works'
|
||||||
])
|
])
|
||||||
|
const entries20240122 = ref([
|
||||||
|
'Added a better "Select All" to event filters',
|
||||||
|
'Added a default image so there aren\'t random blank spots',
|
||||||
|
'Did a bunch of code cleanup',
|
||||||
|
])
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
|
@ -84,6 +89,7 @@ const entries20240121 = ref([
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
<ChangeLogEntry date="2024-01-20" :entries="entries20240120"></ChangeLogEntry>
|
<ChangeLogEntry date="2024-01-20" :entries="entries20240120"></ChangeLogEntry>
|
||||||
<ChangeLogEntry date="2024-01-21" :entries="entries20240121"></ChangeLogEntry>
|
<ChangeLogEntry date="2024-01-21" :entries="entries20240121"></ChangeLogEntry>
|
||||||
|
<ChangeLogEntry date="2024-01-22" :entries="entries20240122"></ChangeLogEntry>
|
||||||
</v-list>
|
</v-list>
|
||||||
</v-sheet>
|
</v-sheet>
|
||||||
<v-sheet :elevation="1" class="ma-2 my-4">
|
<v-sheet :elevation="1" class="ma-2 my-4">
|
||||||
|
|
@ -95,7 +101,7 @@ const entries20240121 = ref([
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
Thanks to <span class="font-weight-bold">@kathinja</span> for her assistance with flavor
|
Thanks to <span class="font-weight-bold">@kathinja</span> for her assistance with flavor
|
||||||
text and proof reading.
|
text and proofreading.
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
Thanks <span class="font-weight-bold">@werewaffle</span> for all of his help with
|
Thanks <span class="font-weight-bold">@werewaffle</span> for all of his help with
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,51 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import SpecialItemsCard from '@/components/IntimacyPower/SpecialItemsCard.vue'
|
import SpecialItemsCard from '@/components/SpecialItemsCard.vue'
|
||||||
import StandardItemsCard from '@/components/IntimacyPower/StandardItemsCard.vue'
|
import StandardItemsCard from '@/components/StandardItemsCard.vue'
|
||||||
import SummaryCard from '@/components/IntimacyPower/SummaryCard.vue'
|
import SummaryCard from '@/components/SummaryCard.vue'
|
||||||
|
import { storeToRefs } from 'pinia'
|
||||||
|
import { usePowerItems } from '@/stores/powerItems'
|
||||||
|
|
||||||
|
const {
|
||||||
|
standardIntimacyItems,
|
||||||
|
standardIntimacyItemTotal,
|
||||||
|
specialIntimacyItems,
|
||||||
|
specialIntimacyItemsMinTotal,
|
||||||
|
specialIntimacyItemsMaxTotal,
|
||||||
|
specialIntimacyItemsAveTotal
|
||||||
|
} = storeToRefs(usePowerItems())
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<v-sheet class="d-flex flex-wrap flex-fill">
|
<v-card>
|
||||||
<StandardItemsCard class="ma-2 align-self-start"/>
|
<v-card-title>Intimacy Power</v-card-title>
|
||||||
<SpecialItemsCard class="ma-2 align-self-start"/>
|
<v-card-text>
|
||||||
<SummaryCard class="ma-2 align-self-start" />
|
<v-sheet class="d-flex flex-wrap flex-fill">
|
||||||
</v-sheet>
|
<StandardItemsCard
|
||||||
|
class="ma-2 align-self-start"
|
||||||
|
:items="standardIntimacyItems"
|
||||||
|
:total="standardIntimacyItemTotal"
|
||||||
|
/>
|
||||||
|
<SpecialItemsCard
|
||||||
|
class="ma-2 align-self-start"
|
||||||
|
:items="specialIntimacyItems"
|
||||||
|
:minimum-total="specialIntimacyItemsMinTotal"
|
||||||
|
:maximum-total="specialIntimacyItemsMaxTotal"
|
||||||
|
:average-total="specialIntimacyItemsAveTotal"
|
||||||
|
/>
|
||||||
|
<SummaryCard
|
||||||
|
class="ma-2 align-self-start"
|
||||||
|
:standard-total="standardIntimacyItemTotal"
|
||||||
|
:minimum-total="specialIntimacyItemsMinTotal"
|
||||||
|
:maximum-total="specialIntimacyItemsMaxTotal"
|
||||||
|
:average-total="specialIntimacyItemsAveTotal"
|
||||||
|
/>
|
||||||
|
</v-sheet>
|
||||||
|
</v-card-text>
|
||||||
|
</v-card>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
@use "@/styles/settings.scss";
|
@use '@/styles/settings.scss';
|
||||||
:deep(tbody) tr:nth-of-type(even) {
|
:deep(tbody) tr:nth-of-type(even) {
|
||||||
background-color: rgba(var(--v-theme-primary-darken-1), 0.25);
|
background-color: rgba(var(--v-theme-primary-darken-1), 0.25);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
52
src/views/Test.vue
Normal file
52
src/views/Test.vue
Normal file
|
|
@ -0,0 +1,52 @@
|
||||||
|
<script setup lang="ts">
|
||||||
|
import SpecialItemsCard from '@/components/SpecialItemsCard.vue'
|
||||||
|
import StandardItemsCard from '@/components/StandardItemsCard.vue'
|
||||||
|
import SummaryCard from '@/components/SummaryCard.vue'
|
||||||
|
import { storeToRefs } from 'pinia'
|
||||||
|
import { usePowerItems } from '@/stores/powerItems'
|
||||||
|
|
||||||
|
const {
|
||||||
|
standardBlessingItems,
|
||||||
|
standardBlessingItemTotal,
|
||||||
|
specialBlessingItems,
|
||||||
|
specialBlessingItemsMinTotal,
|
||||||
|
specialBlessingItemsMaxTotal,
|
||||||
|
specialBlessingItemsAveTotal
|
||||||
|
} = storeToRefs(usePowerItems())
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<v-card>
|
||||||
|
<v-card-title>Intimacy Power</v-card-title>
|
||||||
|
<v-card-text>
|
||||||
|
<v-sheet class="d-flex flex-wrap flex-fill">
|
||||||
|
<StandardItemsCard
|
||||||
|
class="ma-2 align-self-start"
|
||||||
|
:items="standardBlessingItems"
|
||||||
|
:total="standardBlessingItemTotal"
|
||||||
|
/>
|
||||||
|
<SpecialItemsCard
|
||||||
|
class="ma-2 align-self-start"
|
||||||
|
:items="specialBlessingItems"
|
||||||
|
:minimum-total="specialBlessingItemsMinTotal"
|
||||||
|
:maximum-total="specialBlessingItemsMaxTotal"
|
||||||
|
:average-total="specialBlessingItemsAveTotal"
|
||||||
|
/>
|
||||||
|
<SummaryCard
|
||||||
|
class="ma-2 align-self-start"
|
||||||
|
:standard-total="standardBlessingItemTotal"
|
||||||
|
:minimum-total="specialBlessingItemsMinTotal"
|
||||||
|
:maximum-total="specialBlessingItemsMaxTotal"
|
||||||
|
:average-total="specialBlessingItemsAveTotal"
|
||||||
|
/>
|
||||||
|
</v-sheet>
|
||||||
|
</v-card-text>
|
||||||
|
</v-card>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
@use '@/styles/settings.scss';
|
||||||
|
:deep(tbody) tr:nth-of-type(even) {
|
||||||
|
background-color: rgba(var(--v-theme-primary-darken-1), 0.25);
|
||||||
|
}
|
||||||
|
</style>
|
||||||
Loading…
Add table
Add a link
Reference in a new issue