V3.0.2; add new data, fix stat bugs, add customizations
Some checks failed
Build / build (push) Has been cancelled

This commit is contained in:
Trenton Zimmer 2025-04-07 21:00:28 -04:00
parent c61c729fbd
commit c18f587829
13 changed files with 263 additions and 37 deletions

View File

@ -1,4 +1,4 @@
VITE_APP_VERSION="3.0.1"
VITE_APP_VERSION="3.0.2"
VITE_API_URL="http://10.5.7.5:8000/"
VITE_API_KEY="your_api_key_should_be_here"
VITE_ASSET_PATH="/assets"

View File

@ -1,4 +1,4 @@
VITE_APP_VERSION="3.0.1"
VITE_APP_VERSION="3.0.2"
VITE_API_URL="https://restfulsleep.phaseii.network"
VITE_API_KEY="your_api_key_should_be_here"
VITE_ASSET_PATH="https://cdn.phaseii.network/file/PhaseII/web-assets"

View File

@ -1,6 +1,6 @@
{
"name": "phaseweb3",
"version": "1.0.0",
"version": "3.0.2",
"scripts": {
"dev": "vite --host",
"build": "vite build",

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

View File

@ -1,3 +1,4 @@
{
"3.0.1": ["- (Feature) Added update popup", "- (Optimization) Disabled ParticlesJS for the time being. This will be returned as an option in the future.", "- (Optimization) Fill in more score table data for GFDM.", "- (soon™) I've started rival support, but it's not ready just yet. Stay tuned!"]
"3.0.1": ["- (Feature) Added update popup", "- (Optimization) Disabled ParticlesJS for the time being. This will be returned as an option in the future.", "- (Optimization) Fill in more score table data for GFDM.", "- (soon™) I've started rival support, but it's not ready just yet. Stay tuned!"],
"3.0.2": ["- (Feature) Added new greetings", "- (Feature) Added new user background", "- (Feature) Added toggle for disabling/enabling this popup", "- (Feature) Added version info to footer", "- (Feature) Fill in more profile data on personal profile view", "- (Fix) DDR stats now work again", "- (Fix) DDR player weight can now be set (kinda)"]
}

View File

@ -3,6 +3,8 @@ import { containerMaxW } from "@/config.js";
import { mdiCash, mdiGithub } from "@mdi/js";
import BaseLevel from "@/components/BaseLevel.vue";
import BaseButton from "@/components/BaseButton.vue";
const appVersion = import.meta.env.VITE_APP_VERSION;
</script>
<template>
@ -19,7 +21,10 @@ import BaseButton from "@/components/BaseButton.vue";
>.
</p>
</div>
<div class="md:py-2 space-x-2">
<div class="flex md:py-2 gap-2">
<span class="text-pink-700 bg-slate-900 p-1.5 font-mono rounded-lg">
v{{ appVersion }}
</span>
<BaseButton
color="warning"
href="https://paypal.me/trmazi"

View File

@ -6,7 +6,7 @@ import OverlayLayer from "@/components/OverlayLayer.vue";
import BaseButton from "@/components/BaseButton.vue";
import BaseIcon from "@/components/BaseIcon.vue";
import { mdiSourceBranchRefresh } from "@mdi/js";
import { APIUserAppUpdate } from "@/stores/api/account";
import { APIUserAppUpdate, APIUserCustomize } from "@/stores/api/account";
import { useMainStore } from "@/stores/main.js";
@ -38,7 +38,7 @@ function isActive() {
}
}
if (mainStore.userData.disableUpdateModal) {
if (mainStore.userCustomize.disableUpdatePopup) {
activeState.value = false;
}
@ -50,11 +50,19 @@ async function updateUserData(disable = false) {
var data = null;
try {
data = await APIUserAppUpdate(appVersion, disable);
data = await APIUserAppUpdate(appVersion, false);
} catch (error) {
console.error("Failed to update user:", error);
}
if (disable) {
try {
await APIUserCustomize({ disableUpdatePopup: true });
} catch (error) {
console.error("Failed to update customize:", error);
}
}
if (data?.status === "success") {
activeState.value = false;
mainStore.userLoaded = false;

View File

@ -8,6 +8,7 @@ export class ProfileCustomizations {
{ id: "pride", label: "Pride Flag" },
{ id: "trans", label: "Trans Flag" },
{ id: "loveplus", label: "LovePlus" },
{ id: "paint", label: "i eat paint" },
];
static get cardList() {

View File

@ -418,5 +418,30 @@
"author": "timeripple",
"header": "phasing on <username>'s II til they network",
"comment": "networking on my phase til i II?"
},
{
"author": "caldenza",
"header": "Have you thanked your mechanic today, <username>?",
"comment": "you should. or else."
},
{
"author": "caldenza",
"header": "You! <username>, Shoot The Core!",
"comment": "* Good morning! *"
},
{
"author": "roxandtol",
"header": "R U READY 2 GO INSIDA DJ BOX <username>?",
"comment": "wait, wrong game..."
},
{
"author": "roxandtol",
"header": "Just 1 more play for the MAX- <username>!",
"comment": ""
},
{
"author": "Ryuto Setsujin",
"header": "Up Loving your Plus, <username>?",
"comment": ""
}
]

View File

@ -15,7 +15,7 @@ export const DDROptions = {
{
id: "weight",
name: "Weight (kg)",
help: "Set your weight for in-game workout mode",
help: "Set your weight for in-game workout mode. Input is kg multiplied by 10. EX: 100lbs -> ~45kg -> 4500. This will be fixed soon™.",
type: "Number",
},
{

View File

@ -212,7 +212,7 @@ async function updateProfile() {
type="number"
onkeypress="return event.charCode >= 48 && event.charCode <= 57"
min="0"
max="999"
max="10000"
@update:model-value="
(value) =>
setNestedValue(optionForm, setting.id, Number(value))

View File

@ -250,7 +250,6 @@ function formatProfile(profile) {
function formatCounts(profile) {
const stats = profile.stats?.count;
return stats
? [
stats.mfc != null
@ -258,31 +257,46 @@ function formatCounts(profile) {
label: "MFCs",
value: stats.mfc,
}
: 0,
: {
label: "MFCs",
value: 0,
},
stats.pfc != null
? {
label: "PFCs",
value: stats.pfc,
}
: 0,
: {
label: "PFCs",
value: 0,
},
stats.fc != null
? {
label: "GFCs",
value: stats.fc,
}
: 0,
: {
label: "GFCs",
value: 0,
},
stats.gfc != null
? {
label: "FCs",
value: stats.gfc,
}
: 0,
: {
label: "FCs",
value: 0,
},
stats.life4 != null
? {
label: "Life-4 Clears",
value: stats.life4,
}
: 0,
: {
label: "Life-4 Clears",
value: 0,
},
]
: [];
}
@ -425,11 +439,6 @@ async function generateTimeline(myProfile) {
:num-color="colorText(stat)"
>
{{ stat.type == String ? myProfile.stats[stat.key] : null }}
<!-- {{
stat.type == String && stat.isIIDXDan
? getIIDXDan(myProfile[stat.key]).label
: None
}} -->
</CardBoxWidget>
</template>
<CardBoxWidget
@ -442,47 +451,87 @@ async function generateTimeline(myProfile) {
label="Attempts"
:number="myProfile.stats?.count?.attempts"
/>
<!-- GFDM -->
<CardBoxWidget
v-if="myProfile.skill"
label="Skill Points"
:number="myProfile.skill / 100"
:num-color="getGitadoraColor(myProfile.skill)"
/>
<CardBoxWidget v-if="myProfile.profile_skill" label="Skill Level">{{
myProfile.profile_skill / 100
}}</CardBoxWidget>
<CardBoxWidget v-if="myProfile.profile_skill" label="Skill Level">
{{ myProfile.profile_skill / 100 }}
</CardBoxWidget>
<!-- Jubeat -->
<CardBoxWidget
v-if="myProfile.jubility"
label="Jubility"
:num-color="getJubilityColor(myProfile.jubility)"
>{{ myProfile.jubility / 10 }}</CardBoxWidget
>
{{ myProfile.jubility / 10 }}</CardBoxWidget
>
<CardBoxWidget
v-if="myProfile.pick_up_jubility"
label="Pick-Up Jubility"
:num-color="getJubilityColor(myProfile.pick_up_jubility)"
>{{ myProfile.pick_up_jubility / 10 }}</CardBoxWidget
>
{{ myProfile.pick_up_jubility / 10 }}</CardBoxWidget
>
<CardBoxWidget
v-if="myProfile.common_jubility"
label="Common Jubility"
:num-color="getJubilityColor(myProfile.common_jubility)"
>{{ myProfile.common_jubility / 10 }}</CardBoxWidget
>
{{ myProfile.common_jubility / 10 }}
</CardBoxWidget>
<!-- IIDX -->
<CardBoxWidget
v-if="myProfile.deller"
label="Deller"
:number="myProfile.deller"
/>
<CardBoxWidget v-if="myProfile.sgrade" label="SP DAN">{{
getIIDXDan(myProfile.sgrade).label
}}</CardBoxWidget>
<CardBoxWidget v-if="myProfile.dgrade" label="DP DAN">{{
getIIDXDan(myProfile.dgrade).label
}}</CardBoxWidget>
<CardBoxWidget v-if="myProfile.sgrade" label="SP DAN">
{{ getIIDXDan(myProfile.sgrade).label }}
</CardBoxWidget>
<CardBoxWidget v-if="myProfile.dgrade" label="DP DAN">
{{ getIIDXDan(myProfile.dgrade).label }}
</CardBoxWidget>
<!-- Tsum Tsum -->
<CardBoxWidget
v-if="myProfile.total_exp"
label="EXP"
:number="myProfile.total_exp"
/>
<CardBoxWidget
v-if="myProfile.coin_num"
label="Coins"
:number="myProfile.coin_num"
/>
<!-- SDVX -->
<CardBoxWidget
v-if="myProfile.block"
label="Block"
:number="myProfile.block"
/>
<CardBoxWidget
v-if="myProfile.packet"
label="Packet"
:number="myProfile.packet"
/>
</div>
<template v-if="myProfile.stats?.count">
<template
v-if="
myProfile.stats?.count ||
myProfile.tune_cnt ||
myProfile.max_clear_diff ||
myProfile.battle_data
"
>
<SectionTitleLine
:icon="mdiChartAreasplineVariant"
title="Stats"
@ -492,8 +541,138 @@ async function generateTimeline(myProfile) {
class="my-6 grid grid-cols-2 md:grid-cols-5 xl:grid-cols-6 gap-6"
>
<template v-for="stat of formatCounts(myProfile)" :key="stat">
<CardBoxWidget v-if="stat" :label="stat.label" :number="stat" />
<CardBoxWidget
v-if="stat !== undefined"
:label="stat.label"
:number="stat.value"
>
{{ stat.value ? null : "0" }}
</CardBoxWidget>
</template>
<!-- Jubeat -->
<CardBoxWidget
v-if="myProfile.tune_cnt"
label="Total Tunes"
:number="myProfile.tune_cnt"
/>
<CardBoxWidget
v-if="myProfile.ex_cnt"
label="Total EXC"
:number="myProfile.ex_cnt"
/>
<CardBoxWidget
v-if="myProfile.fc_cnt"
label="Total FC"
:number="myProfile.fc_cnt"
/>
<CardBoxWidget
v-if="myProfile.clear_cnt"
label="Total Clear"
:number="myProfile.clear_cnt"
/>
<CardBoxWidget
v-if="myProfile.saved_cnt"
label="Total Saved"
:number="myProfile.saved_cnt"
/>
<CardBoxWidget
v-if="myProfile.match_cnt"
label="Total Matches"
:number="myProfile.match_cnt"
/>
<!-- Gitadora -->
<CardBoxWidget
v-if="myProfile.max_clear_diff"
label="Max Clear Difficulty"
>
{{ myProfile.max_clear_diff / 100 }}
</CardBoxWidget>
<CardBoxWidget
v-if="myProfile.max_full_diff"
label="Max FC Difficulty"
>
{{ myProfile.max_full_diff / 100 }}
</CardBoxWidget>
<CardBoxWidget
v-if="myProfile.max_exce_diff"
label="Max EX FC Difficulty"
>
{{ myProfile.max_exce_diff / 100 }}
</CardBoxWidget>
<CardBoxWidget
v-if="myProfile.clear_num"
label="Total Clear"
:number="myProfile.clear_num"
/>
<CardBoxWidget
v-if="myProfile.full_num"
label="Total FC"
:number="myProfile.full_num"
/>
<CardBoxWidget
v-if="myProfile.exce_num"
label="Total EX FC"
:number="myProfile.exce_num"
/>
<CardBoxWidget
v-if="myProfile.e_num"
label="Total E"
:number="myProfile.e_num"
/>
<CardBoxWidget
v-if="myProfile.d_num"
label="Total D"
:number="myProfile.d_num"
/>
<CardBoxWidget
v-if="myProfile.c_num"
label="Total C"
:number="myProfile.c_num"
/>
<CardBoxWidget
v-if="myProfile.b_num"
label="Total B"
:number="myProfile.b_num"
/>
<CardBoxWidget
v-if="myProfile.a_num"
label="Total A"
:number="myProfile.a_num"
/>
<CardBoxWidget
v-if="myProfile.s_num"
label="Total S"
:number="myProfile.s_num"
/>
<CardBoxWidget
v-if="myProfile.ss_num"
label="Total SS"
:number="myProfile.ss_num"
/>
<CardBoxWidget
v-if="myProfile.session_cnt"
label="Sessions Played"
:number="myProfile.session_cnt"
/>
<!-- Tsum Tsum -->
<CardBoxWidget
v-if="myProfile.battle_data?.win_num"
label="Total Wins"
:number="myProfile.battle_data?.win_num"
/>
<CardBoxWidget
v-if="myProfile.battle_data?.lose_num"
label="Total Losses"
:number="myProfile.battle_data?.lose_num"
/>
<CardBoxWidget
v-if="myProfile.battle_data?.draw_num"
label="Total Draws"
:number="myProfile.battle_data?.draw_num"
/>
</div>
</template>

View File

@ -45,8 +45,6 @@ async function updateCustomize() {
}
function userChanged() {
console.log(originalData);
console.log(userCustomize.value);
if (JSON.stringify(originalData) !== JSON.stringify(userCustomize.value)) {
return true;
} else {
@ -100,6 +98,15 @@ async function revert() {
/>
</FormField>
<FormField label="Disable WebUI Update Popup">
<FormCheckRadio
v-model="userCustomize.disableUpdatePopup"
type="switch"
:input-value="userCustomize.disableUpdatePopup ?? false"
name="disableUpdatePopup"
/>
</FormField>
<div class="space-x-2">
<BaseButton type="submit" color="success" label="Save" />
<BaseButton