From 4110926694af0cf4fa129f8b143588f572d86ce2 Mon Sep 17 00:00:00 2001 From: Hyunseong0303 Date: Mon, 2 Mar 2026 14:56:44 +0900 Subject: [PATCH] feat: refine toast position, fix scroll bug, improve login stability, and visual tweaks --- dpbr_front/app/git_branches.txt | Bin 0 -> 2538 bytes dpbr_front/app/git_branches_utf8.txt | 35 ++++++++++++ dpbr_front/app/git_status_utf8.txt | 12 +++++ dpbr_front/app/src/app.css | 17 ++++-- dpbr_front/app/src/app.html | 2 +- dpbr_front/app/src/lib/api.ts | 8 ++- .../lib/components/BottomSheetLogin.svelte | 43 ++++++++------- .../app/src/lib/components/Button.svelte | 8 +-- .../lib/components/SettlementListItem.svelte | 6 ++- .../app/src/lib/components/Sidebar.svelte | 50 ++++++++++-------- .../lib/components/TeamMessageListItem.svelte | 8 +-- .../app/src/lib/components/Toast.svelte | 4 +- .../app/src/routes/member/[id]/+page.svelte | 35 ++++++++++-- .../src/routes/member/[id]/save/+page.svelte | 2 +- dpbr_front/app/src/routes/talk/+page.svelte | 2 +- 15 files changed, 170 insertions(+), 62 deletions(-) create mode 100644 dpbr_front/app/git_branches.txt create mode 100644 dpbr_front/app/git_branches_utf8.txt create mode 100644 dpbr_front/app/git_status_utf8.txt diff --git a/dpbr_front/app/git_branches.txt b/dpbr_front/app/git_branches.txt new file mode 100644 index 0000000000000000000000000000000000000000..37e960a90458d325afce13e0e2774e01ad8e8d56 GIT binary patch literal 2538 zcmb_e%}T>S5T2VLh-YsBZ$b#3yjesAeFecoY;7#oq_j<2Z@z;^AHth>@FFVs6oTMO zcu~J^$2Cc{x?4*~vf0eeeDnA1zP|+$NJ9=~APX{&aUe~6#nP8Z>XOL`u0u)j9bz`c zO!_%$;LVk7+`AFl5I#P(lWYwcqbU;()or#uRe7yoz=JX&cc= zh;>a5x+xtZ4>8aZc~#G(_0QS){oHj;cwJuY-(BpTnQ=`PZ-a-Y*RvAZmW+^T#(=Rn zFqT5ZGnP}tHaB^vha)p$tVds~PawsdSRBkPYd|9sVbsNc&2uE1vI|R_vgIhhBiph8 z=>UGO<5|__XPbW2PvY;gPspdU(f%{r`0CD)JF>Ipz;a6m5m)d0D$z#7h2#8?`ZA!O_L{uh)TXQ}cW(U) zlQJ(mYrLb#_+$;TZQ_jcKTPh1weX$01*>R?CwG;l$557KRn{EQ9)kmTXINi83k*&7 zA7OSH#x84O{Muj;jb(9)ajS5@-NiChWcJVjY?96T#=9yn*|SG=ANOO@A@p_;y$JQe Q^H2F?Gj1(GjP+FY0Wj~>V*mgE literal 0 HcmV?d00001 diff --git a/dpbr_front/app/git_branches_utf8.txt b/dpbr_front/app/git_branches_utf8.txt new file mode 100644 index 0000000..79e92f0 --- /dev/null +++ b/dpbr_front/app/git_branches_utf8.txt @@ -0,0 +1,35 @@ + dev + feat/comment-anon-and-delete-modal-dev + feature-login-signup + feature/admin-team-profile + feature/frontend-ui-redesign +* feature/frontend-ui-updates + feature/ui-improvement + feature/ui-save-card-improve + feature/濡쒓렇???뚯썝媛€???섏씠吏€ + fix/sidebar-layout-text-fix + main + remotes/origin/CI/CD + remotes/origin/HEAD -> origin/main + remotes/origin/backend + remotes/origin/dev + remotes/origin/feat/application-form-migration + remotes/origin/feat/comment-anon-and-delete-modal-dev + remotes/origin/feat/dev-deployment + remotes/origin/feat/pagination-infinite-sync + remotes/origin/feature/admin-team-profile + remotes/origin/feature/frontend-ui-redesign + remotes/origin/feature/frontend-ui-updates + remotes/origin/feature/full-page-capture + remotes/origin/feature/ui-improvement + remotes/origin/feature/ui-save-card-improve + remotes/origin/feature/?볤? + remotes/origin/feature/濡쒓렇???뚯썝媛€???섏씠吏€ + remotes/origin/fix/deployment-config + remotes/origin/fix/sidebar-layout-text-fix + remotes/origin/fix/濡쒓렇??id-pw-?섏젙-#17 + remotes/origin/kakao-login-with-backend + remotes/origin/login-only-comment + remotes/origin/main + remotes/origin/sync/dev-into-feature-ui-improvement + remotes/origin/work/frontend-feature-gap diff --git a/dpbr_front/app/git_status_utf8.txt b/dpbr_front/app/git_status_utf8.txt new file mode 100644 index 0000000..a41e789 --- /dev/null +++ b/dpbr_front/app/git_status_utf8.txt @@ -0,0 +1,12 @@ +On branch feature/frontend-ui-updates +Changes not staged for commit: + (use "git add ..." to update what will be committed) + (use "git restore ..." to discard changes in working directory) + (commit or discard the untracked or modified content in submodules) + modified: MSGS_13_F (modified content) + +Untracked files: + (use "git add ..." to include in what will be committed) + git_status.txt + +no changes added to commit (use "git add" and/or "git commit -a") diff --git a/dpbr_front/app/src/app.css b/dpbr_front/app/src/app.css index 9f29222..f38b6a4 100644 --- a/dpbr_front/app/src/app.css +++ b/dpbr_front/app/src/app.css @@ -1,5 +1,9 @@ @import "tailwindcss"; +:root { + color-scheme: light; +} + @font-face { font-family: 'NexonLv1Gothic'; src: url('https://cdn.jsdelivr.net/gh/projectnoonnu/noonfonts_20-04@2.1/NEXON Lv1 Gothic OTF Light.woff') format('woff'); @@ -37,14 +41,21 @@ --color-bg-overlay: #101010; } -html, body { +html, +body { font-family: 'NexonLv1Gothic', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; + background-color: white; + color: var(--color-text-primary); } /* 상호작용 가능한 요소들에 손가락 커서 강제 적용 */ -button, a, input[type="button"], input[type="submit"], input[type="reset"] { +button, +a, +input[type="button"], +input[type="submit"], +input[type="reset"] { cursor: pointer; } @@ -53,4 +64,4 @@ input[type="button"]:disabled, input[type="submit"]:disabled, input[type="reset"]:disabled { cursor: not-allowed; -} +} \ No newline at end of file diff --git a/dpbr_front/app/src/app.html b/dpbr_front/app/src/app.html index eff6309..3594cf4 100644 --- a/dpbr_front/app/src/app.html +++ b/dpbr_front/app/src/app.html @@ -1,5 +1,5 @@ - + diff --git a/dpbr_front/app/src/lib/api.ts b/dpbr_front/app/src/lib/api.ts index 7a49194..0451a89 100644 --- a/dpbr_front/app/src/lib/api.ts +++ b/dpbr_front/app/src/lib/api.ts @@ -128,6 +128,10 @@ interface TeamMemberResponse { name: string; role: string; profile_img_url: string | null; + message: { + title: string; + content: string; + } | null; } interface TeamMemberDetailResponse extends TeamMemberResponse { @@ -380,8 +384,8 @@ export async function getTeamMembers(): Promise { id: member.id.toString(), name: member.name, role: member.role, - title: '', - content: '', + title: member.message?.title || '', + content: member.message?.content || '', imageUrl: normalizeAssetUrl(member.profile_img_url) })); } diff --git a/dpbr_front/app/src/lib/components/BottomSheetLogin.svelte b/dpbr_front/app/src/lib/components/BottomSheetLogin.svelte index 2eb5876..4abe57d 100644 --- a/dpbr_front/app/src/lib/components/BottomSheetLogin.svelte +++ b/dpbr_front/app/src/lib/components/BottomSheetLogin.svelte @@ -22,9 +22,7 @@ let isLoading = $state(false); let studentIdInputRef: HTMLDivElement | undefined = $state(); let dialogEl: HTMLDivElement | undefined = $state(); - - // 에러 메시지 상태 - let errorMessage = $state(""); + let infoMessage = $state(""); // 애니메이션을 위한 상태 let isVisible = $state(false); @@ -65,7 +63,7 @@ async function handleLogin() { if (!name.trim() || !studentId.trim()) { - showToastMessage(); + showInfoMessage("이름 또는 학번을 확인해 주세요."); return; } @@ -74,12 +72,13 @@ try { await authStore.login(name.trim(), studentId.trim(), saveName); // 로그인 성공 시 콜백 호출 + showInfoMessage("로그인 되었습니다."); handleClose(); setTimeout(() => { onSuccess(); }, 300); } catch (error) { - showToastMessage(); + showInfoMessage("이름 또는 학번을 확인해 주세요."); studentId = ""; studentIdFocused = true; setTimeout(() => { @@ -108,10 +107,10 @@ } */ - function showToastMessage(message?: string) { - errorMessage = message || "이름 또는 학번을 확인해 주세요."; + function showInfoMessage(message: string) { + infoMessage = message; setTimeout(() => { - errorMessage = ""; + infoMessage = ""; }, 3000); } @@ -164,9 +163,11 @@ tabindex="-1" >
e.stopPropagation()} > @@ -192,7 +193,13 @@ /> -
+
{ + e.preventDefault(); + handleLogin(); + }} + >
@@ -233,14 +240,14 @@
- {#if errorMessage} + {#if infoMessage}
- {errorMessage} + {infoMessage}
{/if} @@ -248,8 +255,8 @@ label="메생결산 톡 입장" variant="primary" buttonState={isLoading ? "disabled" : "default"} - onClick={handleLogin} - type="button" + onClick={() => {}} + type="submit" class="bg-white !text-[#F87C56] hover:bg-white/90 font-medium py-[14px] rounded-lg w-full" />
@@ -298,7 +305,7 @@ 카카오 로그인 --> -
+
diff --git a/dpbr_front/app/src/lib/components/Button.svelte b/dpbr_front/app/src/lib/components/Button.svelte index 2a600a6..84d72b5 100644 --- a/dpbr_front/app/src/lib/components/Button.svelte +++ b/dpbr_front/app/src/lib/components/Button.svelte @@ -49,7 +49,9 @@ aria-label={label} > {label} - {#if isPressed || buttonState === "focused"} -
- {/if} +
diff --git a/dpbr_front/app/src/lib/components/SettlementListItem.svelte b/dpbr_front/app/src/lib/components/SettlementListItem.svelte index 716e932..73e7ac0 100644 --- a/dpbr_front/app/src/lib/components/SettlementListItem.svelte +++ b/dpbr_front/app/src/lib/components/SettlementListItem.svelte @@ -16,7 +16,7 @@ @@ -38,6 +38,8 @@ class="text-[17px] leading-tight text-text-primary font-semibold truncate" >{item.title} - {formatDate(item.acquiredAt)} + {formatDate(item.acquiredAt)}
diff --git a/dpbr_front/app/src/lib/components/Sidebar.svelte b/dpbr_front/app/src/lib/components/Sidebar.svelte index 314a651..3f3dee6 100644 --- a/dpbr_front/app/src/lib/components/Sidebar.svelte +++ b/dpbr_front/app/src/lib/components/Sidebar.svelte @@ -5,6 +5,7 @@ import { authStore } from "$lib/stores/auth"; import { getAdminCharacter } from "$lib/api"; import type { AuthState } from "$lib/types"; + import { toast } from "$lib/stores/toast"; interface Props { open: boolean; @@ -46,8 +47,8 @@ async function handleLogout() { await authStore.logout(); + toast.show("로그아웃 되었습니다."); onClose(); - await goto("/"); } @@ -59,31 +60,34 @@ aria-hidden={!open} >
- -
- 단풍바람 메생결산 정보 - 단풍바람 13기 메생결산 -
- - - {#if authState.user} -
- {authState.user.name} +
+ +
+ 단풍바람 메생결산 정보 -
- {/if} + + + {#if authState.user} +
+ {authState.user.name} + +
+ {/if} +
diff --git a/dpbr_front/app/src/lib/components/TeamMessageListItem.svelte b/dpbr_front/app/src/lib/components/TeamMessageListItem.svelte index 2486f38..179f5f8 100644 --- a/dpbr_front/app/src/lib/components/TeamMessageListItem.svelte +++ b/dpbr_front/app/src/lib/components/TeamMessageListItem.svelte @@ -26,11 +26,13 @@ />
-
+
{item.name}{item.title} + {item.name} {item.role} - {item.role}
diff --git a/dpbr_front/app/src/lib/components/Toast.svelte b/dpbr_front/app/src/lib/components/Toast.svelte index 6256f20..3ceec81 100644 --- a/dpbr_front/app/src/lib/components/Toast.svelte +++ b/dpbr_front/app/src/lib/components/Toast.svelte @@ -4,13 +4,13 @@
{#each $toast as { id, message } (id)}
{message}
diff --git a/dpbr_front/app/src/routes/member/[id]/+page.svelte b/dpbr_front/app/src/routes/member/[id]/+page.svelte index a5d2c7c..a8aa245 100644 --- a/dpbr_front/app/src/routes/member/[id]/+page.svelte +++ b/dpbr_front/app/src/routes/member/[id]/+page.svelte @@ -76,7 +76,21 @@ } else { character = fallbackAdminCharacter; } - teamMessages = await getTeamMembers(); + const members = await getTeamMembers(); + const rolePriority: Record = { + 인사팀원: 1, + 행사팀원: 2, + 홍보팀원: 3, + 인사팀장: 4, + 행사팀장: 5, + 홍보팀장: 6, + 회장: 7, + }; + teamMessages = members.sort( + (a, b) => + (rolePriority[a.role] || 99) - + (rolePriority[b.role] || 99), + ); settlements = []; settlementsHasMore = false; return; @@ -92,7 +106,21 @@ } if (charData.name === ADMIN_TEAM_NAME) { - teamMessages = await getTeamMembers(); + const members = await getTeamMembers(); + const rolePriority: Record = { + 인사팀원: 1, + 행사팀원: 2, + 홍보팀원: 3, + 인사팀장: 4, + 행사팀장: 5, + 홍보팀장: 6, + 회장: 7, + }; + teamMessages = members.sort( + (a, b) => + (rolePriority[a.role] || 99) - + (rolePriority[b.role] || 99), + ); settlements = []; settlementsHasMore = false; } else { @@ -133,7 +161,8 @@ e.message.includes("API Error: 404") && settlementsPage === 1 ) { - const fallbackItems = await getSettlementsByCharacterId(targetCharacterId); + const fallbackItems = + await getSettlementsByCharacterId(targetCharacterId); settlements = fallbackItems; settlementsHasMore = false; return; diff --git a/dpbr_front/app/src/routes/member/[id]/save/+page.svelte b/dpbr_front/app/src/routes/member/[id]/save/+page.svelte index c3e7453..bbcea9c 100644 --- a/dpbr_front/app/src/routes/member/[id]/save/+page.svelte +++ b/dpbr_front/app/src/routes/member/[id]/save/+page.svelte @@ -135,7 +135,7 @@

{ await authStore.logout(); - await goto("/"); + toast.show("로그아웃 되었습니다."); }} class="text-white text-[12px] font-light underline hover:opacity-80 transition-opacity" >