{safeStores.length > 0 ? (
- safeStores.map((store) => (
-
+ );
+ })
) : (
가게 목록이 없습니다.
)}
diff --git a/src/components/employeeMy/EmployeeMyInfo.module.css b/src/components/employeeMy/EmployeeMyInfo.module.css
index c3fa517..3e37748 100644
--- a/src/components/employeeMy/EmployeeMyInfo.module.css
+++ b/src/components/employeeMy/EmployeeMyInfo.module.css
@@ -52,3 +52,32 @@
font-size: 20px;
text-decoration: underline;
}
+
+.storeList {
+ display: flex;
+ flex-direction: column;
+ gap: 10px;
+}
+
+.storeItem {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ font-size: 20px;
+ color: black;
+}
+
+.storeName {
+ flex: 1;
+ word-break: keep-all;
+ text-decoration: none; /* ✅ 밑줄 제거 */
+}
+
+.manageButton {
+ margin-left: 12px;
+ color: #4a90e2;
+ cursor: pointer;
+ font-size: 20px;
+ white-space: nowrap;
+ text-decoration: underline; /* ✅ 밑줄 유지 */
+}
diff --git a/src/components/employeeMy/EmployeeMyInfo.tsx b/src/components/employeeMy/EmployeeMyInfo.tsx
index ff0ce34..549a298 100644
--- a/src/components/employeeMy/EmployeeMyInfo.tsx
+++ b/src/components/employeeMy/EmployeeMyInfo.tsx
@@ -3,21 +3,23 @@ import { useState, useEffect } from "react";
import { useModal } from "../../contexts/ModalContext";
import EditModal from "../Modal/Edit/EditModal";
import DoneModal from "../Modal/Edit/DoneModal";
-import axiosInstance from "../../api/loginAxios"
-import EditableField from "../../components/Modal/Edit/EditableField"
-import EditNameModal from "../Modal/Edit/EditNameModal";
-import EditEmailModal from "../Modal/Edit/EditEmailModal"
-import EditPasswordModal from "../Modal/Edit/EditPasswordModal"
-import EditStoreModal from "../Modal/Edit/EditStoreModal";
+import axiosInstance from "../../api/loginAxios";
+import EditableField from "../../components/Modal/Edit/EditableField";
+import EditNameModal from "../Modal/Edit/EditNameModal";
+import EditEmailModal from "../Modal/Edit/EditEmailModal";
+import EditPasswordModal from "../Modal/Edit/EditPasswordModal";
+import DeleteStoreModal from "../Modal/Edit/DeleteStoreModal";
const EmployeeMyInfo = () => {
const { activeModal, openModal, closeModal } = useModal();
const [isEditing, setIsEditing] = useState(false);
+ const [storeToDelete, setStoreToDelete] = useState<{ id: number; name: string } | null>(null);
const [isEditNameModalOpen, setIsEditNameModalOpen] = useState(false);
const [isEditEmailModalOpen, setIsEditEmailModalOpen] = useState(false);
const [isEditPasswordModalOpen, setIsEditPasswordModalOpen] = useState(false);
const [isEditStoreModalOpen, setIsEditStoreModalOpen] = useState(false);
+
const handleEditField = (field: string) => {
switch (field) {
case "fullName":
@@ -40,7 +42,7 @@ const EmployeeMyInfo = () => {
email: "",
password: "********",
role: "",
- storeNames: [] as string[],
+ stores: [] as { id: number; name: string }[],
});
useEffect(() => {
@@ -49,16 +51,24 @@ const EmployeeMyInfo = () => {
const response = await axiosInstance.get("/user/me");
console.log("🔍 유저 정보:", response.data);
+ // user/me에는 storeNames(string[])만 있으므로 storeId가 필요한 경우 /store/me 추가 호출 필요
+ const storeResponse = await axiosInstance.get("/store/me");
+ const storeData = storeResponse.data || [];
+
+ const formattedStores = storeData.map((store: any) => ({
+ id: store.storeId,
+ name: store.name,
+ }));
+
setUserInfo({
fullName: response.data.fullName || "",
email: response.data.email || "",
- password: "********", // 실제 비번은 보여주지 않음
+ password: "********",
role: response.data.role || "",
- storeNames: response.data.storeNames || [],
- });
+ stores: formattedStores,
+ });
} catch (error: any) {
console.error("유저 정보 불러오기 실패:", error);
-
if (error.response?.status === 401) {
localStorage.removeItem("accessToken");
window.location.href = "/login";
@@ -66,8 +76,8 @@ const EmployeeMyInfo = () => {
}
};
- fetchUserInfo();
-}, []);
+ fetchUserInfo();
+ }, []);
return (
@@ -76,17 +86,13 @@ const EmployeeMyInfo = () => {
{
- if (isEditing) {
- openModal("done");
- console.log("수정 완료 버튼 클릭됨");
- } else {
- openModal("edit"); // 비밀번호 확인 모달 열기
- }
+ isEditing ? openModal("done") : openModal("edit");
}}
>
{isEditing ? "수정 완료" : "내 정보 수정하기"}
+
{
isEditable={true}
onClick={handleEditField}
/>
-
+ >
+
+ {userInfo.stores.map((store) => (
+
+ {store.name}
+ {isEditing && (
+ {
+ console.log("🧩 매장 관리 클릭됨:", store);
+ setStoreToDelete({ id: store.id, name: store.name });
+ }}
+ >
+ 매장 관리
+
+ )}
+
+ ))}
+
+
- {/* activeModal이 "edit"일 때 EditModal 렌더링 */}
- {activeModal === "edit" &&
setIsEditing(true)}/>}
- {activeModal === "done" && setIsEditing(false)}/>}
- {isEditNameModalOpen && (
- setIsEditNameModalOpen(false)}
- onSave={(newFullName) => {
- setUserInfo((prev) => ({ ...prev, fullName: newFullName }));
- setIsEditNameModalOpen(false);
- }}
- />
- )}
- {isEditEmailModalOpen && (
- setIsEditEmailModalOpen(false)}
- onSuccess={(email) => {
- setUserInfo((prev) => ({ ...prev, email: email }));
- setIsEditEmailModalOpen(false);
- }}
- />
- )}
- {isEditPasswordModalOpen && (
- setIsEditPasswordModalOpen(false)}
- onSuccess={() => {
- setUserInfo((prev) => ({ ...prev, password:"********" }));
- setIsEditPasswordModalOpen(false);
- }}
- />
- )}
-
- {/* {isEditStoreModalOpen && (
- setIsEditStoreModalOpen(false)}
- onSave={(storeNames) => {
- setUserInfo((prev) => ({ ...prev, storeNames }));
- setIsEditStoreModalOpen(false);
- }}
- />
- )} */}
+ {/* ✅ 모달들 */}
+ {activeModal === "edit" && (
+ setIsEditing(true)} />
+ )}
+ {activeModal === "done" && (
+ setIsEditing(false)} />
+ )}
+ {isEditNameModalOpen && (
+ setIsEditNameModalOpen(false)}
+ onSave={(newFullName) => {
+ setUserInfo((prev) => ({ ...prev, fullName: newFullName }));
+ setIsEditNameModalOpen(false);
+ }}
+ />
+ )}
+
+ {isEditEmailModalOpen && (
+ setIsEditEmailModalOpen(false)}
+ onSuccess={(email) => {
+ setUserInfo((prev) => ({ ...prev, email }));
+ setIsEditEmailModalOpen(false);
+ }}
+ />
+ )}
+
+ {isEditPasswordModalOpen && (
+ setIsEditPasswordModalOpen(false)}
+ onSuccess={() => {
+ setUserInfo((prev) => ({ ...prev, password: "********" }));
+ setIsEditPasswordModalOpen(false);
+ }}
+ />
+ )}
+
+ {/* ✅ 삭제 모달 */}
+ {storeToDelete && (
+ setStoreToDelete(null)}
+ onSuccess={() => {
+ setUserInfo((prev) => ({
+ ...prev,
+ stores: prev.stores.filter((s) => s.id !== storeToDelete.id),
+ }));
+ setStoreToDelete(null);
+ // ❌ setIsEditing(false) 제거 => 수정모드 유지!
+ }}
+ />
+ )}
);
};
diff --git a/src/contexts/EmployeeScheduleContext.tsx b/src/contexts/EmployeeScheduleContext.tsx
index 5416bda..d776030 100644
--- a/src/contexts/EmployeeScheduleContext.tsx
+++ b/src/contexts/EmployeeScheduleContext.tsx
@@ -22,11 +22,17 @@ interface EmployeeSchedule {
}
interface Store {
+ id: number | null;
storeId: number;
- name: string;
storeCode: string;
+ businessNumber: string | null;
+ name: string;
+ location: string;
+ requireApproval: boolean | null;
+ createdAt: string;
}
+
/* 공유할 context type */
interface EmployeeScheduleContextType {
stores: Store[]; // 전체 매장 목록 -> 나중에 사용자 따라서 다른 걸 받아오도록 해야 됨!
@@ -64,6 +70,7 @@ interface EmployeeScheduleContextType {
selectedName: string;
setSelectedName: React.Dispatch