최정우 최정우 2023-04-11
230411 최정우 대상자 관리 시작
@f7ea5184b89428b9584aa923c8231b94d3cc3b01
client/resources/css/common.css
--- client/resources/css/common.css
+++ client/resources/css/common.css
@@ -6,6 +6,10 @@
   width: unset;}
 /* grid */
 .gap{gap: 1rem;}
+.gap2{gap: 2rem;}
+.gap5{gap: 5rem;}
+.gap10{gap: 10rem;}
+.gap15{gap: 15rem;}
 .main-grid-admin {
   height: 100%;
   display: grid;
client/resources/css/main.css
--- client/resources/css/main.css
+++ client/resources/css/main.css
@@ -1244,7 +1244,7 @@
 }
 
 /* 사용자 관리 */
-.userauthoriylist .left{width: 33%;}
+.userauthoriylist .left{width: 22%; min-width: fit-content;}
  .userauthoriylist .right{width: 100%;}
 .bSXvtB{display: none;}
 .tab-menu .tab-menu-agency {
client/views/component/Modal_Guardian.jsx
--- client/views/component/Modal_Guardian.jsx
+++ client/views/component/Modal_Guardian.jsx
@@ -49,6 +49,39 @@
     setGuardian(newGuardian);
   }
 
+  //아이디 중복 확인
+  const [isIdCheck, setIsIdCheck] = React.useState(false);
+  //로그인 아이디 중복 검사
+  const userIdCheck = () => {
+    if (CommonUtil.isEmpty(guardian['user_phonenumber']) == true) {
+      guardianRef.current['user_phonenumber'].focus();
+      alert("연락처를 입력해 주세요.");
+      return false;
+    }
+
+    guardian['user_id'] = guardian['user_phonenumber'];
+    fetch("/user/userSelectOne.json", {
+      method: "POST",
+      headers: {
+        'Content-Type': 'application/json; charset=UTF-8'
+      },
+      body: JSON.stringify(guardian),
+    }).then((response) => response.json()).then((data) => {
+      console.log("로그인 아이디 중복 검사(아이디를 통한 사용자 조회) : ", data);
+      if (CommonUtil.isEmpty(data) == true) {
+        setIsIdCheck(true);
+        guardianRef.current['user_address'].focus();
+        alert("사용가능한 연락처 입니다.");
+      } else {
+        setIsIdCheck(false);
+        guardianRef.current['user_phonenumber'].focus();
+        alert("이미 존재하는 연락처 입니다.");
+      }
+    }).catch((error) => {
+      console.log('userIdCheck() /user/userSelectOne.json error : ', error);
+    });
+  }
+
   //보호자 등록 유효성 검사
   const guardianInsertValidation = () => {
     if (CommonUtil.isEmpty(guardian['user_name']) == true) {
@@ -69,6 +102,10 @@
     if (CommonUtil.isEmpty(guardian['user_phonenumber']) == true) {
       guardianRef.current['user_phonenumber'].focus();
       alert("연락처를 입력해 주세요.");
+      return false;
+    }
+    if (isIdCheck == false) {
+      alert("연락처 중복확인을 해주세요.");
       return false;
     }
     if (CommonUtil.isEmpty(guardian['user_address']) == true) {
@@ -230,11 +267,14 @@
                 <tr>
                   <th><span style={{color : "red"}}>*</span>연락처</th>
                   <td colSpan={3}>
-                    <input type="number" maxLength="11"
+                    <input type="number" maxLength="11" style={{width: 'calc(100% - 160px)'}}
                       value={guardian['user_phonenumber']}
-                      onChange={(e) => {guardianValueChange('user_phonenumber', e.target.value)}}
+                      onChange={(e) => {guardianValueChange('user_phonenumber', e.target.value); setIsIdCheck(false);}}
                       ref={el => guardianRef.current['user_phonenumber'] = el}
                     />
+                    <button className={"red-btn btn-large"} onClick={userIdCheck}>
+                      중복확인
+                    </button>
                   </td>
                 </tr>
                 <tr>
client/views/component/Modal_SeniorInsert.jsx
--- client/views/component/Modal_SeniorInsert.jsx
+++ client/views/component/Modal_SeniorInsert.jsx
@@ -11,6 +11,7 @@
   /**** 기본 조회 데이터 (시작) ****/
   //전역 변수 저장 객체
   const state = useSelector((state) => {return state});
+  //const defaultGovernmentId = CommonUtil.isEmpty(state.loginUser) ? null : state.loginUser['government_id'];
 
   //기관 계층 구조 목록
   const [orgListOfHierarchy, setOrgListOfHierarchy] = React.useState([]);
@@ -21,7 +22,7 @@
       headers: {
         'Content-Type': 'application/json; charset=UTF-8'
       },
-      body: JSON.stringify({}),
+      body: JSON.stringify({'government_id': defaultGovernmentId}),
     }).then((response) => response.json()).then((data) => {
       console.log("기관(관리, 시행) 계층 구조 목록 조회 : ", data);
       setOrgListOfHierarchy(data);
@@ -346,7 +347,7 @@
                   <td colSpan={3}>
                     <input type="number" maxLength="11" style={{width: 'calc(100% - 160px)'}}
                       value={senior['user_phonenumber']}
-                      onChange={(e) => {seniorValueChange('user_phonenumber', e.target.value)}}
+                      onChange={(e) => {seniorValueChange('user_phonenumber', e.target.value); setIsIdCheck(false);}}
                       ref={el => seniorRef.current['user_phonenumber'] = el}
                     />
                     <button className={"red-btn btn-large"} onClick={userIdCheck}
client/views/pages/App.jsx
--- client/views/pages/App.jsx
+++ client/views/pages/App.jsx
@@ -11,7 +11,7 @@
 import { setLoginUser } from "./AppStore.jsx";
 
 //Application의 Route 정보를 관리하는 Component
-import AllApp, {AdminApp, GovernmentApp, AgencyApp, GuardianApp} from "./AppRoute.jsx";
+import {AdminApp, GovernmentApp, AgencyApp, GuardianApp} from "./AppRoute.jsx";
 
 //Test Layout
 import Header from "../layout/Header.jsx";
client/views/pages/AppRoute.jsx
--- client/views/pages/AppRoute.jsx
+++ client/views/pages/AppRoute.jsx
@@ -16,6 +16,9 @@
 import EqualizerIcon from '@mui/icons-material/Equalizer';
 import ApartmentIcon from '@mui/icons-material/Apartment';
 import LocalHospitalIcon from '@mui/icons-material/LocalHospital';
+import QuestionMarkIcon from '@mui/icons-material/QuestionMark';
+import ContactSupportIcon from '@mui/icons-material/ContactSupport';
+
 
 import Main_government from "./main/Main_government.jsx";
 import Main_guardian from "./main/Main_guardian.jsx";
@@ -54,325 +57,7 @@
 import UserEdit from "./user_management/UserEdit.jsx";
 import AgentSelectOne from "./user_management/AgentSelectOne.jsx";
 
-const AllAppMenuItems = [
-  {
-    title: "올잇메디",
-    path: "/Main",
-    childrens: [
-      {
-        title: "Home",
-        path: "/Main",
-        icon: <HouseIcon sx={{ fontSize: 20, color: "#333333", marginRight: 1 }} />,
-      },
-      {
-        title: "사용자 관리",
-        path: "/UserAuthoriySelect",
-        icon: (
-          <PersonIcon sx={{ fontSize: 20, color: "#333333", marginRight: 1 }} />
-        ),
-      },
-      {
-        title: "건강관리",
-        path: "/Healthcare",
-        icon: (
-          <Diversity1Icon sx={{ fontSize: 20, color: "#333333", marginRight: 1 }} />
-        ),
-      },
-      {
-        title: "진료 관리",
-        path:"/Medicalcare",
-        icon: (
-          <LocalHospitalIcon sx={{ fontSize: 20, color: "#333333", marginRight: 1 }} />
-        ),
-      },
-      {
-        title: "장비 관리",
-        icon: (
-          <ConstructionIcon
-            sx={{ fontSize: 20, color: "#333333", marginRight: 1 }}
-          />
-        ),
-        childrens: [
-          {
-            title: "장비 조회",
-            path: "/EquipmentManagementSelect",
-          },
-          {
-            title: "장비 문의 관리",
-            path: "/QandASelect",
-          },
-        ],
-      },
-    ],
-  },
-  {
-    title: "관리기관",
-    path: "/Main_government",
-    childrens: [
-      {
-        title: "Home",
-        path: "/Main_government",
-        icon: <HouseIcon sx={{ fontSize: 20, color: "#333333", marginRight: 1 }} />,
-      },
-      {
-        title: "기관 관리",
-        icon: (
-          <ApartmentIcon sx={{ fontSize: 20, color: "#333333", marginRight: 1 }} />
-        ),
-        childrens: [
-          {
-            title: "기관 조회",
-            path: "/AgencySelect",
-          },
-          {
-            title: "사용자 계정 승인",
-            path: "/UserSelectOk",
-          },
-        ],
-      },
-      {
-        title: "건강 관리",
-        path: "/Healthcare",
-        icon: (
-          <Diversity1Icon sx={{ fontSize: 20, color: "#333333", marginRight: 1 }} />
-        ),
-      },
-      {
-        title: "진료 관리",
-        path:"/Medicalcare",
-        icon: (
-          <LocalHospitalIcon sx={{ fontSize: 20, color: "#333333", marginRight: 1 }} />
-        ),
-      },
-      {
-        title: "문의 현황 관리",
-        path: "/QandASelect",
-        icon: (
-          <SpeakerPhoneIcon
-            sx={{ fontSize: 20, color: "#333333", marginRight: 1 }}
-          />
-        ),
-      },
-      {
-        title: "설정 관리",
-        icon: (
-          <SettingsIcon sx={{ fontSize: 20, color: "#333333", marginRight: 1 }} />
-        ),
-        childrens: [
-          {
-            title: "위험 기준 관리",
-            path: "/RiskSet",
-          },
-          {
-            title: "사용자 권한 관리",
-            path: "/AuthorityManagement",
-          },
-        ],
-      },
-    ],
-  },
-  {
-    title: "시행기관",
-    path: "/Main_agency",
-    childrens: [
-      {
-        title: "Home",
-        path: "/Main_agency",
-        icon: <HouseIcon sx={{ fontSize: 20, color: "#333333", marginRight: 1 }} />,
-      },
-      {
-        title: "대상자 관리",
-        path: "/UserAuthoriySelect_agency",
-        icon: (
-          <PersonIcon sx={{ fontSize: 20, color: "#333333", marginRight: 1 }} />
-        ),
-      },
-      {
-        title: "건강 관리",
-        path:"/Healthcare",
-        icon: (
-          <Diversity1Icon sx={{ fontSize: 20, color: "#333333", marginRight: 1 }} />
-        ),
-      },
-      {
-        title: "진료 관리",
-        path:"/Medicalcare",
-        icon: (
-          <LocalHospitalIcon sx={{ fontSize: 20, color: "#333333", marginRight: 1 }} />
-        ),
-      },
-      {
-        title: "장비 관리",
-        icon: (
-          <ConstructionIcon sx={{ fontSize: 20, color: "#333333", marginRight: 1 }} />
-        ),
-        childrens: [
-          {
-            title: "장비 대여 관리",
-            path: "/EquipmentManagementSelect",
-          },
-          {
-            title: "문의게시판",
-            path: "/QandASelect",
-          },
-        ]
-      },
-      {
-        title: "Q&A",
-        path: "/QuestionSelect",
-        icon: (
-          <SpeakerPhoneIcon
-            sx={{ fontSize: 20, color: "#333333", marginRight: 1 }}
-          />
-        ),
-      },
-    ],
-  },
-  {
-    title: "보호자",
-    childrens: [
-      {
-        title: "Home",
-        path: "/Main_guardian",
-        icon: <HouseIcon sx={{ fontSize: 20, color: "#333333", marginRight: 1 }} />,
-      },
-      {
-        title: "그래프로 보기",
-        path: "/GuardianStatistics",
-        icon: <EqualizerIcon sx={{ fontSize: 20, color: "#333333", marginRight: 1 }} />,
-      },
-      {
-        title: "Q&A",
-        path: "/QuestionSelect",
-        icon: (
-          <SpeakerPhoneIcon
-            sx={{ fontSize: 20, color: "#333333", marginRight: 1 }}
-          />
-        ),
-      },
-    ],
-  },
-];
-
-function AllAppRoute() {
-  return (
-    <Routes>
-
-      <Route path="/Medicalcare" element={<Medicalcare />}></Route>
-      <Route path="/Healthcare" element={<Healthcare />}></Route>
-      <Route path="/QuestionConfirm/:qnaIdx" element={<QuestionConfirm />}></Route>
-      
-      <Route path="/GuardianStatistics" element={<GuardianStatistics />}></Route>
-      <Route path="/Main_guardian" element={<Main_guardian />}></Route>
-      <Route path="/QuestionSelect" element={<QuestionSelect />}></Route>
-      <Route path="/Join" element={<Join />}></Route>
-      <Route path="/QuestionSelect" element={<QuestionSelect />}></Route>
-      <Route path="/Main_agency" element={<Main_agency />}></Route>
-      <Route path="/UserAuthoriySelect_agency" element={<UserAuthoriySelect_agency />}></Route>
-      <Route path="/SeniorEdit/:seniorId" element={<SeniorEdit />}></Route>
-      <Route path="/SeniorSelectOne/:seniorId" element={<SeniorSelectOne />}></Route>      
-      <Route
-        path="/MedicineCareSelectOne"
-        element={<MedicineCareSelectOne />}
-      ></Route>
-      <Route
-        path="/TemperatureManagementSelectOne"
-        element={<TemperatureManagementSelectOne />}
-      ></Route>
-      <Route path="/VisitInsert" element={<VisitInsert />}></Route>
-      <Route path="/VisitSelectOne" element={<VisitSelectOne />}></Route>
-      <Route
-        path="/EquipmentRentalInsert"
-        element={<EquipmentRentalInsert />}
-      ></Route>
-      <Route
-        path="/EquipmentManagementSelect"
-        element={<EquipmentManagementSelect />}
-      ></Route>
-      <Route
-        path="/EquipmentManagementSelectOne"
-        element={<EquipmentManagementSelectOne />}
-      ></Route>
-      <Route
-        path="/QandASelect"
-        element={<QandASelect />}
-      ></Route>
-      <Route
-        path="/QandAInsert"
-        element={<QandAInsert />}
-      ></Route>
-      <Route
-        path="/QandAConfirm"
-        element={<QandAConfirm />}
-      ></Route>
-      <Route path="/Main_government" element={<Main_government />}></Route>
-      <Route path="/AgencySelect" element={<AgencySelect />}></Route>
-      <Route path="/UserSelectOk" element={<UserSelectOk />}></Route>
-      <Route
-        path="/MedicineCareSelectOne"
-        element={<MedicineCareSelectOne />}
-      ></Route>
-      <Route
-        path="/TemperatureManagementSelectOne"
-        element={<TemperatureManagementSelectOne />}
-      ></Route>
-      <Route
-        path="/MedicineStatistics"
-        element={<MedicineStatistics />}
-      ></Route>
-      <Route path="/VisitInsert" element={<VisitInsert />}></Route>
-      <Route path="/VisitSelectOne" element={<VisitSelectOne />}></Route>
-      <Route
-        path="/UserAuthoriySelect"
-        element={<UserAuthoriySelect />}
-      ></Route>
-      <Route path="/RiskSet" element={<RiskSet />}></Route>
-      <Route path="/AuthorityManagement" element={<AuthorityManagement />}></Route>
-      <Route path="/QandASelect" element={<QandASelect />}></Route>
-      <Route path="/QandAConfirm" element={<QandAConfirm />}></Route>
-      <Route path="/QandAInsert" element={<QandAInsert />}></Route>
-      <Route path="/ProtectorSelect" element={<ProtectorSelect />}></Route>
-      <Route path="/SeniorEdit/:seniorId" element={<SeniorEdit />}></Route>
-      <Route path="/AgencyInsert" element={<AgencyInsert />}></Route>
-      <Route path="/Join" element={<Join />}></Route>
-      <Route path="/Main" element={<Main />}></Route>
-      <Route
-        path="/EquipmentRentalInsert"
-        element={<EquipmentRentalInsert />}
-      ></Route>
-      <Route
-        path="/EquipmentManagementInsert"
-        element={<EquipmentManagementInsert />}
-      ></Route>
-      <Route
-        path="/EquipmentManagementSelect"
-        element={<EquipmentManagementSelect />}
-      ></Route>
-      <Route
-        path="/EquipmentManagementSelectOne"
-        element={<EquipmentManagementSelectOne />}
-      ></Route>
-      <Route
-        path="/MedicineCareSelectOne"
-        element={<MedicineCareSelectOne />}
-      ></Route>
-      <Route
-        path="/TemperatureManagementSelectOne"
-        element={<TemperatureManagementSelectOne />}
-      ></Route>      
-      <Route
-        path="/VisitSelectOne"
-        element={<VisitSelectOne />}
-      ></Route>
-      <Route path="/QandAInsert" element={<QandAInsert />}></Route>
-      <Route path="/QandASelect" element={<QandASelect />}></Route>
-      <Route path="/EquipmentManagementSelectAdd" element={<EquipmentManagementSelectAdd />}></Route>
-      <Route path="/UserAuthoriySelect" element={<UserAuthoriySelect />}></Route>
-      <Route path="/QandAConfirm" element={<QandAConfirm />}></Route>
-    </Routes>
-  );
-}
-
+import OrgSelect from "./org/OrgSelect.jsx";
 
 
 const AdminAppMenuItems = [
@@ -382,44 +67,60 @@
     icon: <HouseIcon sx={{ fontSize: 20, marginRight: 1 }} />,
   },
   {
-    title: "사용자 관리",
-    path: "/UserAuthoriySelect",
+    title: "기관 관리",
     icon: (
-      <PersonIcon sx={{ fontSize: 20, marginRight: 1 }} />
-    ),
-  },
-  {
-    title: "건강 관리",
-    path:"/Healthcare",
-    icon: (
-      <Diversity1Icon sx={{ fontSize: 20, marginRight: 1 }} />
-    ),
-  },
-  {
-    title: "진료 관리",
-    path:"/Medicalcare",
-    icon: (
-      <LocalHospitalIcon sx={{ fontSize: 20, marginRight: 1 }} />
-    ),
-  },
-  {
-    title: "장비 관리",
-    icon: (
-      <ConstructionIcon
+      <PersonIcon
         sx={{ fontSize: 20, marginRight: 1 }}
       />
     ),
     childrens: [
       {
-        title: "장비 조회",
-        path: "/EquipmentManagementSelect",
+        title: "기관 관리",
+        path: "/OrgSelect",
       },
       {
-        title: "장비 문의 관리",
-        path: "/QandASelect",
+        title: "사용자 관리",
+        path: "/UserAuthoriySelect",
       },
     ],
   },
+  {
+    title: "장비 관리",
+    path: "/EquipmentManagementSelect",
+    icon: (
+      <SpeakerPhoneIcon
+        sx={{ fontSize: 20, marginRight: 1 }}
+      />
+    ),
+  },
+  {
+    title: "문의 관리",
+    path: "/QandASelect",
+    icon: (
+      <ContactSupportIcon
+        sx={{ fontSize: 20, marginRight: 1 }}
+      />
+    ),
+  },
+  {
+    title: "대상자 관리",
+    icon: (
+      <Diversity1Icon
+        sx={{ fontSize: 20, marginRight: 1 }}
+      />
+    ),
+    childrens: [
+      {
+        title: "건강 관리",
+        path: "/Healthcare",
+      },
+      {
+        title: "진료 관리",
+        path:"/Medicalcare",
+      },
+    ],
+  },
+
 
 ];
 function AdminAppRoute() {
@@ -429,34 +130,13 @@
       <Route path="/Medicalcare" element={<Medicalcare />}></Route>
       <Route path="/Healthcare" element={<Healthcare />}></Route>
       <Route path="/Main" element={<Main />}></Route>
-      <Route
-        path="/EquipmentRentalInsert"
-        element={<EquipmentRentalInsert />}
-      ></Route>
-      <Route
-        path="/EquipmentManagementInsert"
-        element={<EquipmentManagementInsert />}
-      ></Route>
-      <Route
-        path="/EquipmentManagementSelect"
-        element={<EquipmentManagementSelect />}
-      ></Route>
-      <Route
-        path="/EquipmentManagementSelectOne"
-        element={<EquipmentManagementSelectOne />}
-      ></Route>
-      <Route
-        path="/MedicineCareSelectOne"
-        element={<MedicineCareSelectOne />}
-      ></Route>
-      <Route
-        path="/TemperatureManagementSelectOne"
-        element={<TemperatureManagementSelectOne />}
-      ></Route>      
-      <Route
-        path="/VisitSelectOne"
-        element={<VisitSelectOne />}
-      ></Route>
+      <Route path="/EquipmentRentalInsert" element={<EquipmentRentalInsert />}></Route>
+      <Route path="/EquipmentManagementInsert" element={<EquipmentManagementInsert />}></Route>
+      <Route path="/EquipmentManagementSelect" element={<EquipmentManagementSelect />}></Route>
+      <Route path="/EquipmentManagementSelectOne" element={<EquipmentManagementSelectOne />}></Route>
+      <Route path="/MedicineCareSelectOne" element={<MedicineCareSelectOne />}></Route>
+      <Route path="/TemperatureManagementSelectOne" element={<TemperatureManagementSelectOne />}></Route>      
+      <Route path="/VisitSelectOne" element={<VisitSelectOne />}></Route>
       <Route path="/QandAInsert" element={<QandAInsert />}></Route>
       <Route path="/QandASelect" element={<QandASelect />}></Route>
       <Route path="/EquipmentManagementSelectAdd" element={<EquipmentManagementSelectAdd />}></Route>
@@ -467,6 +147,8 @@
       <Route path="/SeniorSelectOne" element={<SeniorSelectOne />}></Route>
       <Route path="/UserEdit" element={<UserEdit />}></Route>
       <Route path="/AgentSelectOne" element={<AgentSelectOne />}></Route>
+      <Route path="/OrgSelect" element={<OrgSelect />}></Route>
+      <Route path="/MedicineStatistics" element={<MedicineStatistics />}></Route>
       
     </Routes>
   );
@@ -477,51 +159,56 @@
   {
     title: "Home",
     path: "/Main",
-    icon: <HouseIcon sx={{ fontSize: 20, color: "#333333", marginRight: 1 }} />,
+    icon: <HouseIcon sx={{ fontSize: 20, marginRight: 1 }} />,
   },
   {
     title: "기관 관리",
     icon: (
-      <ApartmentIcon sx={{ fontSize: 20, color: "#333333", marginRight: 1 }} />
+      <PersonIcon
+        sx={{ fontSize: 20, marginRight: 1 }}
+      />
     ),
     childrens: [
       {
-        title: "기관 조회",
-        path: "/AgencySelect",
+        title: "기관 관리",
+        path: "/OrgSelect",
       },
       {
-        title: "사용자 계정 승인",
-        path: "/UserSelectOk",
+        title: "사용자 관리",
+        path: "/UserAuthoriySelect",
       },
     ],
   },
   {
-    title: "건강 관리",
-    path:"/Healthcare",
-    icon: (
-      <Diversity1Icon sx={{ fontSize: 20, color: "#333333", marginRight: 1 }} />
-    ),
-  },
-  {
-    title: "진료 관리",
-    path:"/Medicalcare",
-    icon: (
-      <LocalHospitalIcon sx={{ fontSize: 20, color: "#333333", marginRight: 1 }} />
-    ),
-  },
-  {
     title: "문의 현황 관리",
-    path: "/QandASelect",
     icon: (
-      <SpeakerPhoneIcon
-        sx={{ fontSize: 20, color: "#333333", marginRight: 1 }}
+      <ContactSupportIcon
+        sx={{ fontSize: 20, marginRight: 1 }}
       />
     ),
   },
   {
+    title: "대상자 관리",
+    icon: (
+      <Diversity1Icon
+        sx={{ fontSize: 20, marginRight: 1 }}
+      />
+    ),
+    childrens: [
+      {
+        title: "건강 관리",
+        path: "/Healthcare",
+      },
+      {
+        title: "진료 관리",
+        path:"/Medicalcare",
+      },
+    ],
+  },
+  {
     title: "설정 관리",
     icon: (
-      <SettingsIcon sx={{ fontSize: 20, color: "#333333", marginRight: 1 }} />
+      <SettingsIcon sx={{ fontSize: 20, marginRight: 1 }} />
     ),
     childrens: [
       {
@@ -544,24 +231,12 @@
       <Route path="/Main" element={<Main_government />}></Route>
       <Route path="/AgencySelect" element={<AgencySelect />}></Route>
       <Route path="/UserSelectOk" element={<UserSelectOk />}></Route>      
-      <Route
-        path="/MedicineCareSelectOne"
-        element={<MedicineCareSelectOne />}
-      ></Route>      
-      <Route
-        path="/TemperatureManagementSelectOne"
-        element={<TemperatureManagementSelectOne />}
-      ></Route>
-      <Route
-        path="/MedicineStatistics"
-        element={<MedicineStatistics />}
-      ></Route>
+      <Route path="/MedicineCareSelectOne" element={<MedicineCareSelectOne />}></Route>      
+      <Route path="/TemperatureManagementSelectOne" element={<TemperatureManagementSelectOne />}></Route>
+      <Route path="/MedicineStatistics" element={<MedicineStatistics />} ></Route>
       <Route path="/VisitInsert" element={<VisitInsert />}></Route>
       <Route path="/VisitSelectOne" element={<VisitSelectOne />}></Route>
-      <Route
-        path="/UserAuthoriySelect"
-        element={<UserAuthoriySelect />}
-      ></Route>
+      <Route path="/UserAuthoriySelect" element={<UserAuthoriySelect />}></Route>
       <Route path="/RiskSet" element={<RiskSet />}></Route>
       {/* <Route path="/AuthorityManagement" element={<AuthorityManagement />}></Route> */}
       <Route path="/QandASelect" element={<QandASelect />}></Route>
@@ -574,6 +249,8 @@
       <Route path="/SeniorSelectOne" element={<SeniorSelectOne />}></Route>
       <Route path="/UserEdit" element={<UserEdit />}></Route>
       <Route path="/AgentSelectOne" element={<AgentSelectOne />}></Route>
+      <Route path="/OrgSelect" element={<OrgSelect />}></Route>
+      <Route path="/UserAuthoriySelect" element={<UserAuthoriySelect />}></Route>
     </Routes>
   );
 }
@@ -715,11 +392,10 @@
   );
 }
 
-const AllApp = { 'menuItems': AllAppMenuItems, 'AppRoute': AllAppRoute };
 const AdminApp = { 'menuItems': AdminAppMenuItems, 'AppRoute': AdminAppRoute };
 const GovernmentApp = { 'menuItems': GovernmentAppMenuItems, 'AppRoute': GovernmentAppRoute };
 const AgencyApp = { 'menuItems': AgencyAppMenuItems, 'AppRoute': AgencyAppRoute };
 const GuardianApp = { 'menuItems': GuardianAppMenuItems, 'AppRoute': GuardianAppRoute };
 
-export default AllApp;
+export default AdminApp;
 export { AdminApp, GovernmentApp, GuardianApp, AgencyApp };
client/views/pages/equipment/EquipmentManagementSelect.jsx
--- client/views/pages/equipment/EquipmentManagementSelect.jsx
+++ client/views/pages/equipment/EquipmentManagementSelect.jsx
@@ -1,17 +1,23 @@
 import React from "react";
 import { useNavigate } from "react-router";
 import { useSelector } from "react-redux";
+import { useStateWithCallbackLazy } from 'use-state-with-callback';
 import SubTitle from "../../component/SubTitle.jsx";
 import Modal from "../../component/Modal.jsx";
 
 import House from "../../../resources/files/icon/house.png";
 import Arrow from "../../../resources/files/icon/arrow.png";
+import Pagination from "../../component/Pagination.jsx";
+
 import CommonUtil from "../../../resources/js/CommonUtil.js";
 
 export default function EquipmentManagementSelect() {
+	
+	const navigate = useNavigate();
+
 	//전역 변수 저장 객체
 	const state = useSelector((state) => {return state});
-	const navigate = useNavigate();
+	const defaultGovernmentId = CommonUtil.isEmpty(state.loginUser) ? null : state.loginUser['government_id'];
 
 
 	//기관 계층 구조 목록
@@ -23,7 +29,7 @@
 			headers: {
 			'Content-Type': 'application/json; charset=UTF-8'
 			},
-			body: JSON.stringify({}),
+			body: JSON.stringify({'government_id': defaultGovernmentId}),
 		}).then((response) => response.json()).then((data) => {
 			console.log("기관(관리, 시행) 계층 구조 목록 조회 : ", data);
 			setOrgListOfHierarchy(data);
@@ -38,25 +44,27 @@
 	});
 	//올잇메디 선택
 	const adminChange = () => {
-		const newOrg = {...org};
-		newOrg['government_id'] = null;
-		newOrg['agency_id'] = null;
-		setOrg(newOrg);
+		org['government_id'] = null;
+		org['agency_id'] = null;
+		setOrg({...org});
 	}
 	//관리 기관 선택
 	const governmentChange = (government_id) => {
-		const newOrg = {...org};
-		newOrg['government_id'] = government_id;
-		newOrg['agency_id'] = null;
-		setOrg(newOrg);
+		org['government_id'] = government_id;
+		org['agency_id'] = null;
+		setOrg({...org});
 	}
 	//시행 기관 선택
 	const agencyChange = (government_id, agency_id) => {
-		const newOrg = {...org};
-		newOrg['government_id'] = government_id;
-		newOrg['agency_id'] = agency_id;
-		setOrg(newOrg);
+		org['government_id'] = government_id;
+		org['agency_id'] = agency_id;
+		setOrg({...org});
 	}
+	//Mounted
+	React.useEffect(() => {
+		equipmentSearching();
+	}, [org]);
+
 
 	
 	// 시스템 코드 - 장비 상태
@@ -100,7 +108,7 @@
 		'senior_id': null
 	}
 	//장비
-	const [equipment, setEquipment] = React.useState({...equipmentInit});
+	const [equipment, setEquipment] = useStateWithCallbackLazy({...equipmentInit});
 	//각 데이터별로 Dom 정보 담을 Ref 생성
 	const equipmentRef = React.useRef({...equipmentInit});
 	//장비 정보 변경
@@ -137,10 +145,46 @@
 
 		return true;
 	}
+	//시리얼 번호 중복 확인
+	const [isSerialNumberCheck, setIsSerialNumberCheck] = React.useState(false);
+	//시리얼 번호 중복 검사
+	const serialNumberCheck = () => {
+		if (CommonUtil.isEmpty(equipment['equipment_serial_number']) == true) {
+			equipmentRef.current['equipment_serial_number'].focus();
+			alert("모델명을 입력해 주세요.");
+			return false;
+		}
+
+		fetch("/equipment/equipmentSelectOne.json", {
+			method: "POST",
+			headers: {
+				'Content-Type': 'application/json; charset=UTF-8'
+			},
+			body: JSON.stringify(equipment),
+		}).then((response) => response.json()).then((data) => {
+			console.log("시리얼 번호 중복 검사 : ", data);
+			if (CommonUtil.isEmpty(data) == true) {
+				setIsSerialNumberCheck(true);
+				equipmentRef.current['equipment_product_date'].focus();
+				alert("사용가능한 시리얼 번호 입니다.");
+			} else {
+				setIsSerialNumberCheck(false);
+				equipmentRef.current['equipment_serial_number'].focus();
+				alert("이미 존재하는 시리얼 번호 입니다.");
+			}
+		}).catch((error) => {
+			console.log('userIdCheck() /user/equipmentSelectOne.json error : ', error);
+		});
+	}
 	//장비 등록
 	const equipmentInsert = () => {
 		if (equipmentValidation() == false) {
 			return;
+		}
+		if (isSerialNumberCheck == false) {
+			alert("시리얼 번호 중복확인을 해주세요.");
+			equipmentRef.current['equipment_serial_number'].focus();
+      		return;
 		}
 		console.log('equipmentInsert equipment : ', equipment);
 
@@ -163,8 +207,9 @@
 			console.log('equipmentInsert() /equipment/equipmentInsert.json error : ', error);
 		});
 	}
+
 	//장비 수정
-	const equipmentUpdate = (callback) => {
+	const equipmentUpdate = () => {
 		if (equipmentValidation() == false) {
 			return;
 		}
@@ -178,12 +223,40 @@
 		}).then((response) => response.json()).then((data) => {
 			console.log("장비 수정 결과(건수) : ", data);
 			if (data > 0) {
-				callback();
+				alert("수정완료");
+				equipmentSearching();
+				modalEquipmentClose();
 			} else {
 				alert("수정에 실패하였습니다. 관리자에게 문의바랍니다.");
 			}
 		}).catch((error) => {
 			console.log('equipmentUpdate() /equipment/equipmentUpdate.json error : ', error);
+		});
+	}
+
+	//장비 삭제
+	const equipmentDelete = () => {
+		if (confirm('해당 장비를 삭제하시겠습니까?') == false) {
+			return;
+		}
+
+		fetch("/equipment/equipmentDelete.json", {
+			method: "POST",
+			headers: {
+			'Content-Type': 'application/json; charset=UTF-8'
+			},
+			body: JSON.stringify(equipment),
+		}).then((response) => response.json()).then((data) => {
+			console.log("장비 삭제 결과(건수) : ", data);
+			if (data > 0) {
+				alert("삭제완료");
+				equipmentSearching();
+				modalEquipmentClose();
+			} else {
+				alert("삭제에 실패하였습니다. 관리자에게 문의바랍니다.");
+			}
+		}).catch((error) => {
+			console.log('equipmentDelete() /equipment/equipmentDelete.json error : ', error);
 		});
 	}
 
@@ -195,6 +268,8 @@
 	// 장비 관리(등록,수정) 모달창 열기
 	const modalEquipmentOpen = (item) => {
 		if (CommonUtil.isEmpty(item)) {
+			equipment['equipment_insert_datetime'] = null;
+			setIsSerialNumberCheck(false);
 			setEquipment({...equipment});
 		} else {
 			setEquipment(item);
@@ -209,22 +284,115 @@
 	// 장비 납품 모달창
 	const [modalDeliveryIsOpen, setModalDeliveryIsOpen] = React.useState(false);
 	// 장비 납품 모달창 열기
-	const modalDeliveryOpen = (item) => {
-		setEquipment(item);
+	const modalDeliveryOpen = () => {
+		if (CommonUtil.isEmpty(equipmentDelivery.equipmentDeliveryDetailList)) {
+			alert("납품할 장비가 선택되지 않았습니다.");
+			return;
+		}
 		setModalDeliveryIsOpen(true);
 	};
 	// 장비 납품 모달창 닫기
 	const modalDeliveryClose = () => {
 		setModalDeliveryIsOpen(false);
 	};
+	//장비 납품 초기값
+	const equipmentDeliveryInit = {
+		'government_id': null,
+		'delivery_idx': null,
+		'delivery_date': CommonUtil.getDate(),
+		'delivery_total_price': null,
+		'delivery_insert_user_id': null,
+
+		equipmentDeliveryDetailList: [],
+	}
+	//장비 납품 정보
+	const [equipmentDelivery, setEquipmentDelivery] = useStateWithCallbackLazy({...equipmentDeliveryInit});
+	//장비 납품 모드 유무
+	const [isEquipmentDelivery, setIsEquipmentDelivery] = React.useState(false);
+	
+	//장비 납품 선택
+	const equipmentDeliveryAdd = (equipment, isChecked) => {
+		const index = equipmentDelivery.equipmentDeliveryDetailList.findIndex(item => item['equipment_serial_number'] == equipment['equipment_serial_number']);
+		console.log('equipmentDeliveryAdd : ', equipment, isChecked, index);
+		if (isChecked == true && index == -1) {
+			equipmentDelivery.equipmentDeliveryDetailList.push(equipment);
+			setEquipmentDelivery({...equipmentDelivery});
+		} else if (isChecked == false && index > -1) {
+			equipmentDelivery.equipmentDeliveryDetailList.splice(index, 1);
+			setEquipmentDelivery({...equipmentDelivery});
+		} else {
+			return;
+		}
+	}
+	//장비 납품 선택 전체
+	const equipmentDeliveryAddAll = (isChecked) => {
+		if (isChecked) {
+			equipmentDelivery.equipmentDeliveryDetailList = [...stockEquipment.equipmentList];
+			setEquipmentDelivery({...equipmentDelivery});
+		} else {
+			equipmentDelivery.equipmentDeliveryDetailList = [];
+			setEquipmentDelivery({...equipmentDelivery});
+		}
+	}
 
 	//장비 납품
-	const modalDelivery = (governmentId) => {
-		equipment['government_id'] = governmentId;
-		setEquipment({...equipment});
-		equipmentUpdate(() => {
-			alert("납품완료");
-			modalDeliveryClose();
+	const equipmentDeliveryInsert = (governmentId) => {
+		if (CommonUtil.isEmpty(equipmentDelivery['delivery_date'])) {
+			alert("납품일자를 선택해 주세요.");
+			return;
+		}
+		if (CommonUtil.isEmpty(equipmentDelivery.equipmentDeliveryDetailList)) {
+			alert("납품할 장비가 선택되지 않았습니다.");
+			return;
+		}
+
+		equipmentDelivery['government_id'] = governmentId;
+		setEquipmentDelivery({...equipmentDelivery});
+		
+		fetch("/equipment/equipmentDeliveryInsert.json", {
+			method: "POST",
+			headers: {
+				'Content-Type': 'application/json; charset=UTF-8'
+			},
+			body: JSON.stringify(equipmentDelivery),
+		}).then((response) => response.json()).then((data) => {
+			console.log("장비 납품 결과(건수) : ", data);
+			if (data > 0) {
+				modalDeliveryClose()
+				alert("납품완료");
+				equipmentSearching();
+				setIsEquipmentDelivery(false);
+				setTabIndex(1);
+			} else {
+				alert("장비납품에 실패하였습니다. 관리자에게 문의바랍니다.");
+			}
+		}).catch((error) => {
+			console.log('modalDelivery() /equipment/equipmentUpdate.json error : ', error);
+		});
+	}
+	//장비 납품 취소
+	const equipmentDeliveryDetailDeleteByDeliveryCancel = (equipment) => {
+		if (confirm('해당 장비의 납품을 취소하시겠습니까?') == false) {
+			return;
+		}
+
+		fetch("/equipment/equipmentDeliveryDetailDeleteByDeliveryCancel.json", {
+			method: "POST",
+			headers: {
+			'Content-Type': 'application/json; charset=UTF-8'
+			},
+			body: JSON.stringify(equipment),
+		}).then((response) => response.json()).then((data) => {
+			console.log("장비 납품 취소 결과(건수) : ", data);
+			if (data > 0) {
+				alert("삭제완료");
+				equipmentSearching();
+				modalEquipmentClose();
+			} else {
+				alert("삭제에 실패하였습니다. 관리자에게 문의바랍니다.");
+			}
+		}).catch((error) => {
+			console.log('equipmentDelete() /equipment/equipmentDelete.json error : ', error);
 		});
 	}
 
@@ -232,8 +400,6 @@
 	
 	//공통 검색 정보
 	const [equipmentSearch, setEquipmentSearch] = React.useState({
-		'government_id': null,
-		'senior_id': null,
 		'equipment_state': null,
 
 		'searchType': null,
@@ -247,7 +413,17 @@
 	}
 	//장비 검색
 	const equipmentSearching = () => {
+		for (const key in equipmentSearch) {
+			stockEquipmentSearch[key] = equipmentSearch[key];
+			deliveryEquipmentSearch[key] = equipmentSearch[key];
+		}
 		stockEquipmentSelectList(1);
+		deliveryEquipmentSelectList(1);
+
+		const newStockEquipmentSearch = {...stockEquipmentSearch};
+		setStockEquipmentSearch(newStockEquipmentSearch);
+		const newDeliveryEquipmentSearch = {...deliveryEquipmentSearch};
+		setDeliveryEquipmentSearch(newDeliveryEquipmentSearch);
 	}
 	const equipmentSearchingEnter = (key) => {
 		if (key == 'Enter') {
@@ -257,20 +433,18 @@
 		}
 	}
 
-	//재고 검색 정보
+	//재고 장비 검색 정보
 	const [stockEquipmentSearch, setStockEquipmentSearch] = React.useState({
 		'currentPage': 1,
 		'perPage': 10,
 	});
 	//재고 장비 목록
-	const [stockEquipmentList, setStockEquipmentList] = React.useState({equipmentList: [], equipmentListCount: 0});
+	const [stockEquipment, setStockEquipment] = React.useState({equipmentList: [], equipmentListCount: 0});
 	//재고 장비 목록 조회
 	const stockEquipmentSelectList = (currentPage) => {
+		stockEquipmentSearch.currentPage = CommonUtil.isEmpty(currentPage) ? 1 : currentPage;
+		stockEquipmentSearch['government_id'] = null;
 		const newStockEquipmentSearch = {...stockEquipmentSearch};
-		for (const key in equipmentSearch) {
-			newStockEquipmentSearch[key] = equipmentSearch[key];
-		}
-		newStockEquipmentSearch.currentPage = CommonUtil.isEmpty(currentPage) ? 1 : currentPage;
 		setStockEquipmentSearch(newStockEquipmentSearch);
 
 		fetch("/equipment/equipmentSelectList.json", {
@@ -281,25 +455,244 @@
 			body: JSON.stringify(newStockEquipmentSearch)
 		}).then((response) => response.json()).then((data) => {
 			console.log('stockEquipmentSelectList response : ', data);
-			setStockEquipmentList(data);
+			setStockEquipment(data);
 		}).catch((error) => {
 			console.log('stockEquipmentSelectList error : ', error);
 		});
 	}
 
+	//납품 장비 검색 정보
+	const [deliveryEquipmentSearch, setDeliveryEquipmentSearch] = React.useState({
+		'currentPage': 1,
+		'perPage': 10,
+	});
+	//납품 장비 목록
+	const [deliveryEquipment, setDeliveryEquipment] = React.useState({equipmentList: [], equipmentListCount: 0});
+	//납품 장비 목록 조회
+	const deliveryEquipmentSelectList = (currentPage) => {
+		deliveryEquipmentSearch.currentPage = CommonUtil.isEmpty(currentPage) ? 1 : currentPage;
+		deliveryEquipmentSearch['government_id'] = CommonUtil.isEmpty(org['government_id']) ? '' : org['government_id'];
+		deliveryEquipmentSearch['government_id'] = CommonUtil.isEmpty(org['government_id']) ? '' : org['government_id'];
+		const newDeliveryEquipmentSearch = {...deliveryEquipmentSearch};
+		setDeliveryEquipmentSearch(newDeliveryEquipmentSearch);
+
+		fetch("/equipment/equipmentSelectList.json", {
+			method: "POST",
+			headers: {
+				'Content-Type': 'application/json; charset=UTF-8'
+			},
+			body: JSON.stringify(newDeliveryEquipmentSearch)
+		}).then((response) => response.json()).then((data) => {
+			console.log('deliveryEquipmentSelectList response : ', data);
+			setDeliveryEquipment(data);
+		}).catch((error) => {
+			console.log('deliveryEquipmentSelectList error : ', error);
+		});
+	}
+
+	//현재 탭 Index
+	const [tabIndex, setTabIndex] = React.useState(0);
+	//탭 초기화
+	const tab = [{
+		title: `재고 장비 (${stockEquipment.equipmentListCount})`,
+		content: (
+			<div>
+				<div className="flex equip-tab">
+					<SubTitle explanation={"장비 클릭 시 지난 매칭이력을 확인할 수 있습니다."} />
+					<div className="btn-wrap flex-end margin-bottom ">
+						{isEquipmentDelivery
+							? <>
+								<button className={"btn-small green-btn"} onClick={modalDeliveryOpen}>장비납품</button>
+								<button className={"btn-small red-btn"} onClick={() => {setIsEquipmentDelivery(false)}}>납품취소</button>
+							</>
+							: <>
+								<button className={"btn-small gray-btn"} onClick={() => {setIsEquipmentDelivery(true)}}>납품장비선택</button>
+								<button className={"btn-small gray-btn"} onClick={() => {modalEquipmentOpen()}}>등록</button>
+							</>
+						}
+					</div>
+				</div>
+				<table class="caregiver-user protector-user">
+					<thead>
+						<tr>
+							{isEquipmentDelivery == true ?
+								<th>
+									<input type="checkbox"
+										onClick={(e) => equipmentDeliveryAddAll(e.target.checked)}
+										checked={equipmentDelivery.equipmentDeliveryDetailList.length == stockEquipment.equipmentList.length}
+									/>
+								</th>
+							: null}
+							<th>No</th>
+							<th>모델명</th>
+							<th>시리얼넘버</th>
+							<th>생산일자</th>
+							<th>입고일자</th>
+							<th>상태</th>
+							{isEquipmentDelivery == false ? <th>관리</th> : null}
+						</tr>
+					</thead>
+					<tbody>
+						{stockEquipment.equipmentList.map((item, idx) => { return (
+							<tr>
+								{isEquipmentDelivery == true
+									? <td>
+										<input type="checkbox"
+											onClick={(e) => equipmentDeliveryAdd(item, e.target.checked)}
+											checked={equipmentDelivery.equipmentDeliveryDetailList.findIndex(searchItem => searchItem['equipment_serial_number'] == item['equipment_serial_number']) > -1}
+										/>
+									</td>
+								: null}
+								<td data-label="No">{stockEquipment.equipmentListCount - idx - (stockEquipmentSearch.currentPage - 1) * stockEquipmentSearch.perPage}</td>
+								<td data-label="모델명">{item['equipment_name']}</td>
+								<td data-label="시리얼넘버">{item['equipment_serial_number']}</td>
+								<td data-label="생산일자">{item['equipment_product_date']}</td>
+								<td data-label="입고일자">{item['equipment_stock_date']}</td>
+								<td data-label="상태">{equipmentStates[item['equipment_state']]}</td>
+								{isEquipmentDelivery == false ?
+									<td data-label="관리">
+										<button className={"btn-small gray-btn"} onClick={() => modalEquipmentOpen(item)}>정보 수정</button>
+									</td>
+								: null}
+								
+							</tr>
+						)})}
+						{CommonUtil.isEmpty(stockEquipment.equipmentList) ?
+							<tr>
+								<td colSpan={8}>조회된 데이터가 없습니다</td>
+							</tr>
+						: null}
+						
+					</tbody>
+				</table>
+				<Pagination
+					currentPage={stockEquipmentSearch.currentPage}
+					perPage={stockEquipmentSearch.perPage}
+					totalCount={stockEquipment.equipmentListCount}
+					maxRange={5}
+					click={stockEquipmentSelectList}
+				/>
+			</div>
+		)
+	}, {
+		title: `납품 장비 (${deliveryEquipment.equipmentListCount})`,
+		content: (
+			<div>
+
+				<div className="flex-align-start userauthoriylist gap5">
+					<div className="left">
+						<SubTitle explanation={"기관 리스트"}/>
+						<div style={{fontSize: '16px', marginTop: '0px'}} className="category">
+							{state.loginUser['authority'] == 'ROLE_ADMIN' ?
+								<a onClick={adminChange}
+									className={org['government_id'] == null && org['agency_id'] == null ? "active" : ""}>
+									올잇메디
+								</a>
+							: null}
+							<ul style={{marginLeft: '15px'}}>
+							{orgListOfHierarchy.map((item, idx) => { return (
+								<li style={{margin: '10px 0px'}} key={idx}>
+									<span style={{marginRight: '5px'}}><img src={House} alt="" /></span>
+									<a onClick={() => {governmentChange(item['government_id'])}}
+										className={item['government_id'] == org['government_id'] ? "active" : ""}>
+										{item['government_name']}
+									</a>
+									{item['agencyList'] != undefined && item['agencyList'] != null ?
+										<ul style={{marginLeft: '15px'}}>
+										{item['agencyList'].map((item2, idx2) => { return (
+											<li style={{margin: '10px 0px'}} key={idx2}>
+												<span style={{marginRight: '5px'}}><img src={Arrow} alt="" /></span>
+												<a onClick={() => {agencyChange(item['government_id'], item2['agency_id'])}}
+													className={item2['agency_id'] == org['agency_id'] ? "active" : ""}>
+													{item2['agency_name']}
+												</a>
+											</li>
+										)})}
+										</ul>
+										: null
+									}
+								</li>
+							)})}
+							</ul>
+						</div>
+					</div>
+					<div className="right">
+						<div className="flex equip-tab">
+							<SubTitle explanation={"장비 클릭 시 지난 매칭이력을 확인할 수 있습니다."} />
+							<div className="btn-wrap flex-end margin-bottom ">
+								{/* <button className={"btn-small gray-btn"} onClick={() => {modalEquipmentOpen()}}>등록</button> */}
+							</div>
+						</div>
+						<table class="caregiver-user protector-user">
+							<thead>
+								<tr>
+									<th>No </th>
+									<th>납품기관</th>
+									<th>모델명</th>
+									<th>시리얼넘버</th>
+									<th>생산일자</th>
+									<th>입고일자</th>
+									<th>장비상태</th>
+									<th>대여상태</th>
+									<th>납품취소</th>
+									<th>관리</th>
+								</tr>
+							</thead>
+							<tbody>
+								{deliveryEquipment.equipmentList.map((item, idx) => { return (
+									<tr>
+										<td data-label="No">{deliveryEquipment.equipmentListCount - idx - (deliveryEquipmentSearch.currentPage - 1) * deliveryEquipmentSearch.perPage}</td>
+										<td data-label="납품기관">{item['government_name']}</td>
+										<td data-label="모델명">{item['equipment_name']}</td>
+										<td data-label="시리얼넘버">{item['equipment_serial_number']}</td>
+										<td data-label="생산일자">{item['equipment_product_date']}</td>
+										<td data-label="입고일자">{item['equipment_stock_date']}</td>
+										<td data-label="장비상태">{equipmentStates[item['equipment_state']]}</td>
+										<td data-label="대여상태">
+										{CommonUtil.isEmpty(item['senior_id'])
+											? <span className={"red"}>미대여</span>
+											: <span className={"green"}>대여중</span>
+										}
+										</td>
+										<td data-label="납품취소">
+											<button className={"btn-small red-btn"} onClick={() => equipmentDeliveryDetailDeleteByDeliveryCancel(item)}>납품 취소</button>
+										</td>
+										<td data-label="관리">
+											<button className={"btn-small gray-btn"} onClick={() => modalEquipmentOpen(item)}>정보 수정</button>
+										</td>
+									</tr>
+								)})}
+								{CommonUtil.isEmpty(deliveryEquipment.equipmentList) ?
+									<tr>
+										<td colSpan={9}>조회된 데이터가 없습니다</td>
+									</tr>
+								: null}
+							</tbody>
+						</table>
+						<Pagination
+							currentPage={deliveryEquipmentSearch.currentPage}
+							perPage={deliveryEquipmentSearch.perPage}
+							totalCount={deliveryEquipment.equipmentListCount}
+							maxRange={5}
+							click={deliveryEquipmentSelectList}
+						/>
+					</div>
+				</div>
+			</div>
+		)
+	}];
+
 
 	//Mounted
 	React.useEffect(() => {
-		console.log('equipment : ', equipment);
 		orgSelectListOfHierarchy();
 		equipmentStatesSelect();
 		equipmentSearching();
 	}, []);
 
 
-	//시작 탭 설정
-	const [index, setIndex] = React.useState(1);
-
+	
+	
 	return (
 		<main>
 
@@ -330,10 +723,22 @@
 								<tr>
 									<th><span style={{color : "red"}}>*</span>시리얼넘버</th>
 									<td>
-										<input type="text" placeholder="S/N를 입력해 주세요" 
-											value={equipment['equipment_serial_number']}
-											ref={el => equipmentRef.current['equipment_serial_number'] = el}
-											onChange={(e) => equipmentValueChange('equipment_serial_number', e.target.value)}/>
+										
+										{CommonUtil.isEmpty(equipment['equipment_insert_datetime'])
+											? <>
+												<input type="text" placeholder="S/N를 입력해 주세요" 
+													style={{width: 'calc(100% - 110px)'}}
+													value={equipment['equipment_serial_number']}
+													ref={el => equipmentRef.current['equipment_serial_number'] = el}
+													onChange={(e) => {equipmentValueChange('equipment_serial_number', e.target.value); setIsSerialNumberCheck(false);}}
+												/>
+												<button className={"btn-small red-btn"} style={{width:'110px'}} onClick={serialNumberCheck}>중복확인</button>
+											</>
+											: <input type="text"
+												value={equipment['equipment_serial_number']}
+												disabled={true}
+											/>
+										}
 									</td>
 								</tr>
 								<tr>
@@ -354,18 +759,36 @@
 											onChange={(e) => equipmentValueChange('equipment_stock_date', e.target.value)}/>
 									</td>
 								</tr>
+								{CommonUtil.isEmpty(equipment['equipment_insert_datetime']) == false
+									? <tr>
+										<th><span style={{color : "red"}}>*</span>장비상태</th>
+										<td>
+											<div className="gender flex-start gap2">
+												{Object.keys(equipmentStates).map((key, idx) => { return ( 
+													<div className="flex-start">
+														<input type="radio" name="equipment_state" id={key} key={key} value={key}
+															style={{width: '25px'}}
+															checked={equipment['equipment_state'] == key}
+															onChange={(e) => {e.target.checked ? equipmentValueChange('equipment_state', e.target.value) : null}}
+														/>
+														<label for={key}>{equipmentStates[key]}</label>
+													</div>
+												)})}
+											</div>
+										</td>
+									</tr>
+								: null}
 							</tbody>
 						</table>
 					</div>
 					<div className="flex-center">
-						{CommonUtil.isEmpty(equipment.equipment_insert_datetime)
+						{CommonUtil.isEmpty(equipment['equipment_insert_datetime']) 
 							? <button className={"btn-small gray-btn"} onClick={equipmentInsert}>등록</button>
-							: <button className={"btn-small gray-btn"}
-								onClick={() => equipmentUpdate(() => {
-									alert("수정완료");
-									equipmentSearching();
-									modalEquipmentClose();
-								})}>수정</button>
+							: <>
+								<button className={"btn-small gray-btn"}
+									onClick={equipmentUpdate}>수정</button>
+								<button className={"btn-small red-btn"} onClick={equipmentDelete}>삭제</button>
+							</>
 						}
 					</div>
 				</div>
@@ -375,7 +798,15 @@
 				<div className="board-wrap">
 					<div>
 						<div style={{textAlign:'left', fontSize: '16px',margin:'2rem 0'}} className="category">
-							<a>올잇메디</a>
+							<div className="search-management flex-end margin-bottom2 margin-top">						
+								<div style={{width: '90px', fontWeight: '600'}}>납품일자</div>
+								<input type="date"
+									value={equipmentDelivery['delivery_date']}
+									onChange={(e) => {
+										equipmentDelivery['delivery_date'] = e.target.value;
+										setEquipmentDelivery({...equipmentDelivery})}
+									}/>	
+							</div>
 							<ul style={{marginLeft: '15px'}}>
 							{orgListOfHierarchy.map((item, idx) => { return (
 								<li style={{margin: '10px 0px'}} key={idx}>
@@ -383,7 +814,7 @@
 									<a>{item['government_name']}</a>
 									<button onClick={() => {
 										if (confirm(`'${item['government_name']}'에 장비를 납품하시겠습니까?`)) {
-											modalDelivery(item['government_id'])
+											equipmentDeliveryInsert(item['government_id'])
 										} else {
 											return;
 										}
@@ -397,76 +828,43 @@
 			</Modal>
 
 
+			<div className="search-management flex-end margin-bottom2 margin-top gap">						
+				<select style={{maxWidth: '150px'}}
+					onChange={(e) => equipmentSearchChange('equipment_state', e.target.value)}>
+					<option value="">상태</option>
+					{Object.keys(equipmentStates).map((key, idx) => { return ( 
+						<option key={key} value={key}>
+							{equipmentStates[key]}
+						</option>
+					)})}
+				</select>
+				<select style={{maxWidth: '150px'}}
+					onChange={(e) => equipmentSearchChange('searchType', e.target.value)}>
+					<option value="">전체</option>
+					<option value="equipment_name">모델명</option>
+					<option value="equipment_serial_number">시리얼넘버</option>
+				</select>
+				<input type="text"
+					value={equipmentSearch.searchText}
+					onChange={(e) => equipmentSearchChange('searchText', e.target.value)}
+					onKeyUp={(e) => equipmentSearchingEnter(e.key)}
+				/>
+				<button className={"btn-small gray-btn"} style={{maxWidth: '150px'}} onClick={equipmentSearching}>검색</button>
+			</div>
+
 			<div className="tab-container">
 				<ul className="tab-menu flex-start">
-					<li>재고 장비</li>
-					<li>납품 장비</li>
+					{tab.map((item, idx) => { return (
+						<li onClick={() => setTabIndex(idx)} className={idx == tabIndex ? 'active' : null}>
+							{item.title}
+						</li>
+					)})}
 				</ul>
 				<div className="content-wrap">
-					<div className="search-management flex-end margin-bottom2 margin-top gap">						
-						<select style={{maxWidth: 'fit-content'}}
-							onChange={(e) => equipmentSearchChange('searchType', e.target.value)}>
-							<option value="equipment_name">모델명</option>
-							<option value="equipment_serial_number">시리얼넘버</option>
-						</select>
-						<input type="text"
-							value={equipmentSearch.searchText}
-							onChange={(e) => equipmentSearchChange('searchText', e.target.value)}
-							onKeyUp={(e) => equipmentSearchingEnter(e.key)}
-						/>
-						<button className={"btn-small gray-btn"} onClick={equipmentSearching}>검색</button>
-					</div>
-
 					<ul className="tab-content">
 						<li>
-							<div>
-								<div className="flex equip-tab">
-									<SubTitle explanation={"장비 클릭 시 지난 매칭이력을 확인할 수 있습니다."} />
-									<div className="btn-wrap flex-end margin-bottom ">
-										<button className={"btn-small gray-btn"} onClick={() => {modalEquipmentOpen()}}>등록</button>
-									</div>
-								</div>
-								<table class="caregiver-user protector-user">
-									<thead>
-										<tr>
-											<th>No</th>
-											<th>모델명</th>
-											<th>시리얼넘버</th>
-											<th>생산일자</th>
-											<th>입고일자</th>
-											<th>상태</th>
-											<th>납품</th>
-											<th>관리</th>
-										</tr>
-									</thead>
-									<tbody>
-										{stockEquipmentList.equipmentList.map((item, idx) => { return (
-											<tr>
-												<td data-label="No">{stockEquipmentList.equipmentListCount - idx - (stockEquipmentSearch.currentPage - 1) * stockEquipmentSearch.perPage}</td>
-												<td data-label="모델명">{item['equipment_name']}</td>
-												<td data-label="시리얼넘버">{item['equipment_serial_number']}</td>
-												<td data-label="생산일자">{item['equipment_product_date']}</td>
-												<td data-label="입고일자">{item['equipment_stock_date']}</td>
-												<td data-label="상태">{equipmentStates[item['equipment_state']]}</td>
-												<td data-label="납품">
-													<button className={"btn-small gray-btn"} onClick={() => modalDeliveryOpen(item)}>장비 납품</button>
-												</td>
-												<td data-label="관리">
-													<button className={"btn-small gray-btn"} onClick={() => modalEquipmentOpen(item)}>정보 수정</button>
-												</td>
-											</tr>
-										)})}
-										{CommonUtil.isEmpty(stockEquipmentList.equipmentList) ?
-											<tr>
-												<td colSpan={8}>조회된 데이터가 없습니다</td>
-											</tr>
-										: null}
-										
-									</tbody>
-								</table>
-							</div>
+							{tab[tabIndex].content}
 						</li>
-
 					</ul>
 				</div>
 			</div>
client/views/pages/equipment/EquipmentManagementSelect_back_230403.jsx
--- client/views/pages/equipment/EquipmentManagementSelect_back_230403.jsx
+++ client/views/pages/equipment/EquipmentManagementSelect_back_230403.jsx
@@ -969,27 +969,9 @@
 		'currentPage': 1,
 		'perPage': 10,
 	  });
-	//기관 계층 구조 목록
-	const [orgListOfHierarchy, setOrgListOfHierarchy] = React.useState([]);
-	//기관(관리, 시행) 계층 구조 목록 조회
-	const orgSelectListOfHierarchy = () => {
-	fetch("/org/orgSelectListOfHierarchy.json", {
-		method: "POST",
-		headers: {
-		'Content-Type': 'application/json; charset=UTF-8'
-		},
-		body: JSON.stringify({}),
-	}).then((response) => response.json()).then((data) => {
-		console.log("기관(관리, 시행) 계층 구조 목록 조회 : ", data);
-		setOrgListOfHierarchy(data);
-	}).catch((error) => {
-		console.log('orgSelectListOfHierarchy() /org/orgSelectListOfHierarchy.json error : ', error);
-	});
-	};
 	
   //Mounted
   React.useEffect(() => {
-    orgSelectListOfHierarchy();
     // agentSelectList();
     if (state.loginUser['authority'] == 'ROLE_ADMIN' || state.loginUser['authority'] == 'ROLE_GOVERNMENT') {      
     }
@@ -1012,40 +994,7 @@
 		{
 			No: 1,
 			agency: (
-				<div>
-					<div style={{textAlign:'left', fontSize: '16px',margin:'2rem 0'}} className="category">
-                {/* <a className={() => {return "active"}} onClick={adminChange}>올잇메디</a> */}
-                <a onClick={adminChange}
-                   className={userSearch['government_id'] == null && userSearch['agency_id'] == null ? "active" : ""}>
-                  올잇메디
-                </a>
-                <ul style={{marginLeft: '15px'}}>
-                  {orgListOfHierarchy.map((item, idx) => { return (
-                    <li style={{margin: '10px 0px'}} key={idx}>
-                      <span style={{marginRight: '5px'}}><img src={House} alt="" /></span>
-                      <a onClick={() => {governmentChange(item['government_id'])}}
-                         className={item['government_id'] == userSearch['government_id'] ? "active" : ""}>
-                        {item['government_name']}
-                      </a>
-                      {item['agencyList'] != undefined && item['agencyList'] != null ?
-                        <ul style={{marginLeft: '15px'}}>
-                          {item['agencyList'].map((item2, idx2) => { return (
-                            <li style={{margin: '10px 0px'}} key={idx2}>
-                              <span style={{marginRight: '5px'}}><img src={Arrow} alt="" /></span>
-                              <a onClick={() => {agencyChange(item['government_id'], item2['agency_id'])}}
-                                 className={item2['agency_id'] == userSearch['agency_id'] ? "active" : ""}>
-                                {item2['agency_name']}
-                              </a>
-                            </li>
-                          )})}
-                        </ul>
-                        : null
-                      }
-                    </li>
-                  )})}
-                </ul>
-              </div>
-				</div>
+				
 			)
 			,
 			choice: (<Button
client/views/pages/join/Join.jsx
--- client/views/pages/join/Join.jsx
+++ client/views/pages/join/Join.jsx
@@ -8,15 +8,19 @@
 export default function Join() {
   const navigate = useNavigate();
   const location = useLocation();
-  const defaultAuthority = CommonUtil.isEmpty(location.state) ? null : location.state['authority'];
-  const defaultAgencyId = CommonUtil.isEmpty(location.state) ? null : location.state['agency_id'];
-  const defaultGovernmentId = CommonUtil.isEmpty(location.state) ? null :location.state['government_id'];
+  let defaultAuthority = CommonUtil.isEmpty(location.state) ? null : location.state['authority'];
+  let defaultAgencyId = CommonUtil.isEmpty(location.state) ? null : location.state['agency_id'];
+  let defaultGovernmentId = CommonUtil.isEmpty(location.state) ? null :location.state['government_id'];
 
 
 
   /**** 기본 조회 데이터 (시작) ****/
   //전역 변수 저장 객체
   const state = useSelector((state) => {return state});
+  defaultAuthority = CommonUtil.isEmpty(state.loginUser) ? null : state.loginUser['authority'];
+  defaultAgencyId = CommonUtil.isEmpty(state.loginUser) ? null : state.loginUser['agency_id'];
+  defaultGovernmentId = CommonUtil.isEmpty(state.loginUser) ? null :state.loginUser['government_id'];
+  
 
   //권한 타입 종류
   const [authorities, setAuthorities] = React.useState([]);
@@ -44,7 +48,7 @@
       headers: {
         'Content-Type': 'application/json; charset=UTF-8'
       },
-      body: JSON.stringify({}),
+      body: JSON.stringify({'government_id': defaultGovernmentId}),
     }).then((response) => response.json()).then((data) => {
       console.log("기관(관리, 시행) 계층 구조 목록 조회 : ", data);
       setOrgListOfHierarchy(data);
@@ -272,8 +276,12 @@
               <div className="flex-start margin-bottom2">
                 <label className="flex25"><span style={{color : "red"}}>*</span>사용자구분</label>
                 <select name="division" id="section" onChange={(e) => {userAuthorityChange(e.target.value)}}>
-                    <option value="ROLE_ADMIN" selected={user['authority'] == "ROLE_ADMIN"}>시스템 관리자</option>
-                    <option value="ROLE_GOVERNMENT" selected={user['authority'] == "ROLE_GOVERNMENT"}>기관 관리자</option>
+                    {CommonUtil.isEmpty(defaultAuthority) == true || defaultAuthority == 'ROLE_ADMIN' ?
+                      <option value="ROLE_ADMIN" selected={user['authority'] == "ROLE_ADMIN"}>시스템 관리자</option>
+                    : null}
+                    {CommonUtil.isEmpty(defaultAuthority) == true || defaultAuthority == 'ROLE_ADMIN' || defaultAuthority == 'ROLE_GOVERNMENT' ?
+                      <option value="ROLE_GOVERNMENT" selected={user['authority'] == "ROLE_GOVERNMENT"}>기관 관리자</option>
+                    : null}
                     <option value="ROLE_AGENCY" selected={user['authority'] == "ROLE_AGENCY"}>보호사</option>
                 </select>
               </div>
client/views/pages/main/Main_government.jsx
--- client/views/pages/main/Main_government.jsx
+++ client/views/pages/main/Main_government.jsx
@@ -1,4 +1,6 @@
 import React,{useState} from "react";
+import { useSelector } from "react-redux";
+
 import Title from "../../component/Title.jsx";
 import Map from "../../component/chart/Map.jsx";
 import Chart5 from "../../component/chart/Chart5.jsx";
@@ -12,7 +14,16 @@
 import ElderlyIcon from '@mui/icons-material/Elderly';
 
 export default function Main_government() {
+
+  //전역 변수 저장 객체
+  const state = useSelector((state) => {return state});
+
   const [cityName, setCityName] = useState("군위군");
+
+  React.useEffect(() => {
+    setCityName(state.loginUser['government_name']);
+  }, []);
+
   // const tableHead = ["방문날짜", "방문사유", "방문 상세 사유"];
   // const Key = ["date", "reason", "detail_reason"];
   // const content = [
@@ -91,28 +102,28 @@
             <li> 
               <p><ElderlyIcon sx={{ width: "50px", height: "50px", color: "#ffffff", background:"#bf0629", borderRadius:"50px" }}/></p>           
               <p>{cityName} 전체 대상자</p>
-              <p>400</p>
+              <p>30</p>
             </li>
                     </ul>
           <ul className="content-box statistics-govern" background="#8ef3d1">
             <li>
              <p><MedicationIcon sx={{ width: "50px", height: "50px", color: "#ffffff", background:"#076143", borderRadius:"50px" }}/></p>
               <p>{cityName} 미복약 위험 대상자</p>
-              <p>400</p>
+              <p>11</p>
             </li>
           </ul>
           <ul className="content-box statistics-govern" background="#ebe7b9" >
             <li>
                <p><DeviceThermostatIcon sx={{ width: "50px", height: "50px", color: "#ffffff", background:"#f1de05", borderRadius:"50px" }}/></p>
               <p>{cityName} 댁내 온도 위험 대상자</p>
-              <p>400</p>
+              <p>7</p>
             </li>
           </ul>
           <ul className="content-box statistics-govern" background="#5f9af3">
             <li>
               <p><BatteryCharging20Icon sx={{ width: "50px", height: "50px", color: "#ffffff", background:"#5f9af3", borderRadius:"50px" }}/></p>
               <p>{cityName} 배터리 부족 대상자 </p>
-              <p>400</p>
+              <p>13</p>
             </li>
           </ul>
         </div>
 
client/views/pages/org/OrgSelect.jsx (added)
+++ client/views/pages/org/OrgSelect.jsx
@@ -0,0 +1,739 @@
+import React from "react";
+import { useNavigate, useLocation } from "react-router";
+import { useSelector } from "react-redux";
+
+import ContentTitle from "../../component/ContentTitle.jsx";
+import Modal from "../../component/Modal.jsx";
+import SubTitle from "../../component/SubTitle.jsx";
+
+import Pagination from "../../component/Pagination.jsx";
+
+import CommonUtil from "../../../resources/js/CommonUtil.js";
+
+export default function OrgSelect() {
+    const navigate = useNavigate();
+    const location = useLocation();
+
+    //전역 변수 저장 객체
+    const state = useSelector((state) => {return state});
+
+    // 시스템 코드 - 기관 종류
+	const [orgTypes, setOrgTypes] = React.useState({});
+	// 시스템 코드 - 기관 종류 조회
+	const orgTypesSelect = () => {
+		//fetch post
+		fetch("/common/systemCode/orgTypesSelect.json", {
+			method: "POST",
+			headers: {
+				'Content-Type': 'application/json; charset=UTF-8'
+			},
+			body: JSON.stringify({})
+		}).then((response) => response.json()).then((data) => {
+			console.log('orgTypesSelect response : ', data);
+			setOrgTypes(data);
+		}).catch((error) => {
+			console.log('orgTypesSelect error : ', error);
+		});
+	}
+
+    
+
+    //관리기관 모달 오픈 여부
+    const [isGovermentModalOpen, setIsGovermentModalOpen] = React.useState(false);
+    //관리기관 모달 오픈
+    const governmentModalOpen = () => {
+        setIsGovermentModalOpen(true);
+    };
+    //관리기관 모달 닫기
+    const governmentModalClose = () => {
+        setIsGovermentModalOpen(false);
+    };
+
+    //관리기관 초기화 정보
+    const governmentInit = {
+        'government_id': state.loginUser['government_id'],
+        'government_type': 'WELFARE',
+        'government_name': null,
+        'government_address': null,
+        'government_phonenumber': null,
+        'government_insert_datetime': null,
+        'government_insert_user_id': null,
+        'government_update_datetime': null,
+        'government_update_user_id': null,
+    }
+    //관리기관 데이터
+    const [government, setGovernment] = React.useState({
+        search: {currentPage: 1, perPage: 5, 'government_id': state.loginUser['government_id']},
+        government: {...governmentInit},
+        governmentList: [],
+        governmentListCount: 0,
+    })
+    //관리기관 Ref
+    const governmentRef = React.useRef(governmentInit);
+
+    //관리기관 정보 수정
+    const governmentValueChange = (targetKey, value) => {
+        government.government[targetKey] = value;
+        setGovernment({...government});
+    }
+
+    //관리기관 유효성 검사
+    const governmentValidation = () => {
+        const target = government.government;
+        const targetRef = governmentRef;
+
+        if (CommonUtil.isEmpty(target['government_name']) == true) {
+            targetRef.current['government_name'].focus();
+            alert("기관명을 입력해 주세요.");
+            return false;
+        }
+        if (CommonUtil.isEmpty(target['government_phonenumber']) == true) {
+            targetRef.current['government_phonenumber'].focus();
+            alert("대표 연락처를 입력해 주세요.");
+            return false;
+        }
+        if (CommonUtil.isEmpty(target['government_address']) == true) {
+            targetRef.current['government_address'].focus();
+            alert("주소를 입력해 주세요.");
+            return false;
+        }
+
+        return true;
+    }
+
+
+    //관리기관 등록
+    const governmentInsert = () => {
+        if (governmentValidation() == false) {
+            return;
+        }
+
+        fetch("/org/governmentInsert.json", {
+            method: "POST",
+            headers: {
+                'Content-Type': 'application/json; charset=UTF-8'
+            },
+            body: JSON.stringify(government.government),
+        }).then((response) => response.json()).then((data) => {
+            console.log("관리기관 등록 결과 : ", data);
+            if (data > 0) {
+                alert("등록완료");
+                governmentSelectList();
+                governmentModalClose();
+              } else {
+                alert("등록에 실패하였습니다. 관리자에게 문의바랍니다.");
+              }
+        }).catch((error) => {
+            console.log('governmentInsert() /org/governmentInsert.json error : ', error);
+        });
+    }
+
+    //관리기관 수정
+    const governmentUpdate = () => {
+        if (governmentValidation() == false) {
+            return;
+        }
+
+        fetch("/org/governmentUpdate.json", {
+            method: "POST",
+            headers: {
+                'Content-Type': 'application/json; charset=UTF-8'
+            },
+            body: JSON.stringify(government.government),
+        }).then((response) => response.json()).then((data) => {
+            console.log("관리기관 수정 결과 : ", data);
+            if (data > 0) {
+                alert("수정완료");
+                governmentSelectList();
+                governmentModalClose();
+              } else {
+                alert("수정에 실패하였습니다. 관리자에게 문의바랍니다.");
+              }
+        }).catch((error) => {
+            console.log('governmentUpdate() /org/governmentUpdate.json error : ', error);
+        });
+    }
+
+    //관리기관 삭제
+    const governmentDelete = (item) => {
+        if (item['government_user_count'] > 0 || item['agent_user_count'] > 0
+            || item['guardian_user_count'] > 0 || item['senior_user_count'] > 0) {
+            alert('해당 기관에 사용자가 존재합니다. (삭제 불가능)');
+            return;
+        }
+        if (item['equipment_count'] > 0) {
+            alert('해당 기관에 납품된 장비가 존재합니다. (삭제 불가능)');
+            return;
+        }
+        if (item['agency_count'] > 0) {
+            alert('해당 기관의 하위기관이 존재합니다. (삭제 불가능)');
+            return;
+        }
+        if (confirm("해당 기관을 삭제하시겠습니까?") == false) {
+            return;
+        }
+        
+        fetch("/org/governmentDelete.json", {
+            method: "POST",
+            headers: {
+                'Content-Type': 'application/json; charset=UTF-8'
+            },
+            body: JSON.stringify(item),
+        }).then((response) => response.json()).then((data) => {
+            console.log("관리기관 삭제 결과 : ", data);
+            if (data > 0) {
+                alert("삭제완료");
+                governmentSelectList();
+                governmentModalClose();
+            } else {
+                alert("삭제에 실패하였습니다. 관리자에게 문의바랍니다.");
+            }
+        }).catch((error) => {
+            console.log('governmentDelete() /org/governmentDelete.json error : ', error);
+        });
+    }
+
+    //관리기관 목록 조회
+    const governmentSelectList = () => {
+        fetch("/org/governmentSelectList.json", {
+            method: "POST",
+            headers: {
+                'Content-Type': 'application/json; charset=UTF-8'
+            },
+            body: JSON.stringify(government.search),
+        }).then((response) => response.json()).then((data) => {
+            console.log("관리기관 목록 조회 결과 : ", data);
+            government.governmentList = data.governmentList;
+            government.governmentListCount = data.governmentListCount;
+            setGovernment({...government});
+        }).catch((error) => {
+            console.log('governmentSelectList() /org/governmentSelectList.json error : ', error);
+        });
+    }
+
+    
+
+
+
+
+    //시행기관 모달 오픈 여부
+    const [isAgencyModalOpen, setIsAgencyModalOpen] = React.useState(false);
+    //시행기관 모달 오픈
+    const agencyModalOpen = () => {
+        setIsAgencyModalOpen(true);
+    };
+    //시행기관 모달 닫기
+    const agencyModalClose = () => {
+        setIsAgencyModalOpen(false);
+    };
+    //시행기관 초기화 정보
+    const agencyInit = {
+        'government_id': state.loginUser['government_id'],
+        'agency_id': state.loginUser['agency_id'],
+        'agency_type': 'WELFARE',
+        'agency_name': null,
+        'agency_address': null,
+        'agency_phonenumber': null,
+        'agency_insert_datetime': null,
+        'agency_insert_user_id': null,
+        'agency_update_datetime': null,
+        'agency_update_user_id': null
+    }
+    //시행기관 데이터
+    const [agency, setAgency] = React.useState({
+        search: {currentPage: 1, perPage: 5, 'government_id': state.loginUser['government_id'], 'agency_id': state.loginUser['agency_id']},
+        agency: {...agencyInit},
+        agencyList: [],
+        agencyListCount: 0,
+    })
+
+    //시행기관 Ref
+    const agencyRef = React.useRef(agencyInit);
+
+    //시행기관 정보 수정
+    const agencyValueChange = (targetKey, value) => {
+        agency.agency[targetKey] = value;
+
+        //'시행기관 구분' 정보는 '관리기관의 구분'으로 자동 선택
+        if (targetKey == 'government_id') {
+            const findGovernment = government.governmentList.find(item => item['government_id'] == value);
+            if (CommonUtil.isEmpty(findGovernment) == false) {
+                agency.agency['agency_type'] = findGovernment['government_type'];
+            } else {
+                agency.agency['agency_type'] = 'WELFARE';
+            }
+        }
+
+        setAgency({...agency});
+    }
+
+    //시행기관 유효성 검사
+    const agencyValidation = () => {
+        const target = agency.agency;
+        const targetRef = agencyRef;
+
+        if (CommonUtil.isEmpty(target['government_id']) == true) {
+            targetRef.current['government_id'].focus();
+            alert("관리기관을 선택해 주세요.");
+            return false;
+        }
+        if (CommonUtil.isEmpty(target['agency_name']) == true) {
+            targetRef.current['agency_name'].focus();
+            alert("기관명을 입력해 주세요.");
+            return false;
+        }
+        if (CommonUtil.isEmpty(target['agency_phonenumber']) == true) {
+            targetRef.current['agency_phonenumber'].focus();
+            alert("대표 연락처를 입력해 주세요.");
+            return false;
+        }
+        if (CommonUtil.isEmpty(target['agency_address']) == true) {
+            targetRef.current['agency_address'].focus();
+            alert("주소를 입력해 주세요.");
+            return false;
+        }
+
+        return true;
+    }
+
+
+    //시행기관 등록
+    const agencyInsert = () => {
+        if (agencyValidation() == false) {
+            return;
+        }
+
+        fetch("/org/agencyInsert.json", {
+            method: "POST",
+            headers: {
+                'Content-Type': 'application/json; charset=UTF-8'
+            },
+            body: JSON.stringify(agency.agency),
+        }).then((response) => response.json()).then((data) => {
+            console.log("시행기관 등록 결과 : ", data);
+            if (data > 0) {
+                alert("등록완료");
+                agencySelectList();
+                agencyModalClose();
+            } else {
+                alert("등록에 실패하였습니다. 관리자에게 문의바랍니다.");
+            }
+        }).catch((error) => {
+            console.log('agencyInsert() /org/agencyInsert.json error : ', error);
+        });
+    }
+
+    //시행기관 수정
+    const agencyUpdate = () => {
+        if (agencyValidation() == false) {
+            return;
+        }
+
+        fetch("/org/agencyUpdate.json", {
+            method: "POST",
+            headers: {
+                'Content-Type': 'application/json; charset=UTF-8'
+            },
+            body: JSON.stringify(agency.agency),
+        }).then((response) => response.json()).then((data) => {
+            console.log("시행기관 수정 결과 : ", data);
+            if (data > 0) {
+                alert("수정완료");
+                agencySelectList();
+                agencyModalClose();
+            } else {
+                alert("수정에 실패하였습니다. 관리자에게 문의바랍니다.");
+            }
+        }).catch((error) => {
+            console.log('agencyUpdate() /org/agencyUpdate.json error : ', error);
+        });
+    }
+
+    //시행기관 삭제
+    const agencyDelete = (item) => {
+        if (item['agent_user_count'] > 0 || item['guardian_user_count'] > 0
+            || item['senior_user_count'] > 0) {
+            alert('해당 기관에 사용자가 존재합니다. (삭제 불가능)');
+            return;
+        }
+        if (confirm("해당 기관을 삭제하시겠습니까?") == false) {
+            return;
+        }
+        
+        fetch("/org/agencyDelete.json", {
+            method: "POST",
+            headers: {
+                'Content-Type': 'application/json; charset=UTF-8'
+            },
+            body: JSON.stringify(item),
+        }).then((response) => response.json()).then((data) => {
+            console.log("시행기관 삭제 결과 : ", data);
+            if (data > 0) {
+                alert("삭제완료");
+                agencySelectList();
+                agencyModalClose();
+            } else {
+                alert("삭제에 실패하였습니다. 관리자에게 문의바랍니다.");
+            }
+        }).catch((error) => {
+            console.log('agencyDelete() /org/agencyDelete.json error : ', error);
+        });
+    }
+
+    //시행기관 목록 조회
+    const agencySelectList = () => {
+        console.log('government.government : ', government.government);
+        fetch("/org/agencySelectList.json", {
+            method: "POST",
+            headers: {
+                'Content-Type': 'application/json; charset=UTF-8'
+            },
+            body: JSON.stringify(agency.search),
+        }).then((response) => response.json()).then((data) => {
+            console.log("시행기관 목록 조회 결과 : ", data);
+            agency.agencyList = data.agencyList;
+            agency.agencyListCount = data.agencyListCount;
+            setAgency({...agency});
+        }).catch((error) => {
+            console.log('agencySelectList() /org/agencySelectList.json error : ', error);
+        });
+    }
+    
+
+
+    //사용자 관리 페이지 이동
+    const userManagementPage = (governmentId, agencyId, auth) => {
+        navigate("/UserAuthoriySelect", {state: {
+            'government_id': governmentId,
+            'agency_id': agencyId,
+            'tabActiveByRoleType': auth,
+        }})
+    };
+
+
+
+    React.useEffect(() => {
+        orgTypesSelect();
+        governmentSelectList();
+        agencySelectList();
+    }, [])
+
+    return (
+        <main>
+            <Modal open={isGovermentModalOpen} close={governmentModalClose} header={CommonUtil.isEmpty(government.government['government_id']) ? '관리기관 등록' : '관리기관 수정'}>
+                <div className="board-wrap">
+                    <table className="flex70 margin-bottom agency-insert">
+                        <tbody className="">
+                            <tr>
+                                <th><span style={{color : "red"}}>*</span>구분</th>
+                                <td colSpan={5}>
+                                    <select name="division" id="section"
+                                        onChange={(e) => {governmentValueChange('government_type', e.target.value)}}
+                                        ref={el => governmentRef.current['government_type'] = el}>
+                                        {Object.keys(orgTypes).map((key, idx) => { return (
+                                            <option key={key} value={key} selected={key == government.government['government_type']}>
+                                                {orgTypes[key]}
+                                            </option>
+                                        )})}
+                                    </select>
+                                </td>
+                            </tr>
+                            <tr>
+                                <th><span style={{color : "red"}}>*</span>기관명</th>
+                                <td colSpan={5}>
+                                    <input type="text"
+                                        value={government.government['government_name']}
+                                        onChange={(e) => {governmentValueChange('government_name', e.target.value)}}
+                                        ref={el => governmentRef.current['government_name'] = el}/>
+                                </td>
+                            </tr>
+                            <tr>
+                                <th><span style={{color : "red"}}>*</span>대표 연락처</th>
+                                <td colSpan={5}>
+                                    <input type="number"
+                                        value={government.government['government_phonenumber']}
+                                        onChange={(e) => {governmentValueChange('government_phonenumber', e.target.value)}}
+                                        ref={el => governmentRef.current['government_phonenumber'] = el}/>
+                                </td>
+                            </tr>
+                            <tr>
+                                <th><span style={{color : "red"}}>*</span>주소</th>
+                                <td colSpan={5}>
+                                    <input type="text"
+                                        value={government.government['government_address']}
+                                        onChange={(e) => {governmentValueChange('government_address', e.target.value)}}
+                                        ref={el => governmentRef.current['government_address'] = el}/>
+                                </td>
+                            </tr>
+                        </tbody>
+                    </table>
+                    <div className="btn-wrap flex-center">
+                        {CommonUtil.isEmpty(government.government['government_id'])
+                            ? <button className={"btn-small gray-btn"} onClick={governmentInsert}>등록</button>
+                            : <button className={"btn-small gray-btn"} onClick={governmentUpdate}>수정</button>
+                        }
+                    </div>
+                </div>
+            </Modal>
+
+
+            <Modal open={isAgencyModalOpen} close={agencyModalClose} header={CommonUtil.isEmpty(agency.agency['agency_id']) ? '관리기관 등록' : '관리기관 수정'}>
+                <div className="board-wrap">
+                    <table className="flex70 margin-bottom agency-insert">
+                        <tbody className="">
+                            <tr>
+                                <th><span style={{color : "red"}}>*</span>관리기관</th>
+                                <td colSpan={5}>
+                                    <select name="division" id="section" disabled={CommonUtil.isEmpty(agency.agency['agency_id']) == false}
+                                        onChange={(e) => {agencyValueChange('government_id', e.target.value)}}
+                                        ref={el => agencyRef.current['government_id'] = el}>
+                                            <option value="" selected={agency.agency['government_id'] == null}>관리기관선택</option>
+                                        {government.governmentList.map((item, idx) => { return (
+                                            <option key={idx} value={item['government_id']} selected={item['government_id'] == agency.agency['government_id']}>
+                                                {item['government_name']}
+                                            </option>
+                                        )})}
+                                    </select>
+                                </td>
+                            </tr>
+                            <tr>
+                                <th><span style={{color : "red"}}>*</span>구분</th>
+                                <td colSpan={5}>
+                                    <select name="division" id="section" disabled={true}
+                                        onChange={(e) => {agencyValueChange('agency_type', e.target.value)}}
+                                        ref={el => agencyRef.current['agency_type'] = el}>
+                                        {Object.keys(orgTypes).map((key, idx) => { return (
+                                            <option key={key} value={key} selected={key == agency.agency['agency_type']}>
+                                                {orgTypes[key]}
+                                            </option>
+                                        )})}
+                                    </select>
+                                </td>
+                            </tr>
+                            <tr>
+                                <th><span style={{color : "red"}}>*</span>기관명</th>
+                                <td colSpan={5}>
+                                    <input type="text"
+                                        value={agency.agency['agency_name']}
+                                        onChange={(e) => {agencyValueChange('agency_name', e.target.value)}}
+                                        ref={el => agencyRef.current['agency_name'] = el}/>
+                                </td>
+                            </tr>
+                            <tr>
+                                <th><span style={{color : "red"}}>*</span>대표 연락처</th>
+                                <td colSpan={5}>
+                                    <input type="number"
+                                        value={agency.agency['agency_phonenumber']}
+                                        onChange={(e) => {agencyValueChange('agency_phonenumber', e.target.value)}}
+                                        ref={el => agencyRef.current['agency_phonenumber'] = el}/>
+                                </td>
+                            </tr>
+                            <tr>
+                                <th><span style={{color : "red"}}>*</span>주소</th>
+                                <td colSpan={5}>
+                                    <input type="text"
+                                        value={agency.agency['agency_address']}
+                                        onChange={(e) => {agencyValueChange('agency_address', e.target.value)}}
+                                        ref={el => agencyRef.current['agency_address'] = el}/>
+                                </td>
+                            </tr>
+                        </tbody>
+                    </table>
+                    <div className="btn-wrap flex-center">
+                        {CommonUtil.isEmpty(agency.agency['agency_id'])
+                            ? <button className={"btn-small gray-btn"} onClick={agencyInsert}>등록</button>
+                            : <button className={"btn-small gray-btn"} onClick={agencyUpdate}>수정</button>
+                        }
+                    </div>
+                </div>
+            </Modal>
+
+        
+            <div className="content-wrap">
+                <ContentTitle contentTitle={`관리기관 조회 (${government.governmentListCount})`} />
+                <div className="margin-bottom10">
+                    {/* <div className="search-management flex-start margin-bottom2">
+                        <select id="searchType"  style={{maxWidth: 'fit-content'}} onChange={(e) => {}}>
+                            <option value="">전체</option>
+                            <option value="user_name">기관명</option>
+                            <option value="user_phonenumber">기관연락처</option>
+                        </select>
+                        <input id="searchText"  type="text"         
+                            onChange={(e) => {}}
+                            onKeyUp={(e) => {}}
+                        />
+                        <button className={"btn-small gray-btn"} onClick={() => {}}>검색</button>
+                    </div> */}
+                    <div className="board-wrap">
+                        {/* <SubTitle explanation={"장비 클릭 시 지난 매칭이력을 확인할 수 있습니다."} /> */}
+                        <div className="btn-wrap flex-end margin-bottom ">
+                            {state.loginUser['authority'] == 'ROLE_ADMIN' ?
+                                <button className={"btn-small gray-btn"} onClick={() => {governmentValueChange('government_id', null); governmentModalOpen()}}>등록</button>
+                            : null}
+                        </div>
+                        <table className={"senior-user protector-user"}>
+                            <thead>
+                                <tr>
+                                    <th>No</th>
+                                    <th>구분</th>
+                                    <th>기관명</th>
+                                    <th>관리장비개수</th>
+                                    <th>관리자(명)</th>
+                                    <th>보호사(명)</th>
+                                    <th>관리대상자(명)</th>
+                                    <th>주소</th>
+                                    <th>대표연락처</th>
+                                    <th>시행기관조회</th>
+                                    {/* <th>장비관리</th> */}
+                                    <th>사용자관리</th>
+                                    <th>관리</th>
+                                </tr>
+                            </thead>
+                            <tbody>
+                                {government.governmentList.map((item, idx) => { return (
+                                <tr key={idx}>
+                                    <td data-label="No">{government.governmentListCount - idx - (government.search.currentPage - 1) * government.search.perPage}</td>
+                                    <td data-label="구분">{orgTypes[item['government_type']]}</td>
+                                    <td data-label="기관명">{item['government_name']}</td>
+                                    <td data-label="관리 장비 개수">{item['equipment_count']}</td>
+                                    <td data-label="관리자(명)">{item['government_user_count']}</td>
+                                    <td data-label="보호사(명)">{item['agent_user_count']}</td>
+                                    <td data-label="관리 대상자(명)">{item['senior_user_count']}</td>
+                                    <td data-label="주소">{item['government_address']}</td>
+                                    <td data-label="대표 연락처">{item['government_phonenumber']}</td>
+                                    <td>
+                                        <button className={"btn-small lightgray-btn"} onClick={() => {
+                                            government.government = item;
+                                            setGovernment({...government});
+                                            agency.search['government_id'] = item['government_id'];
+                                            agency.search['ageny_id'] = null;
+                                            setAgency({...agency});
+                                            agencySelectList();
+                                        }}>시행기관조회</button>
+                                    </td>
+                                    {/* <td>
+                                        <button className={"btn-small gray-btn"} onClick={() => {userManagementPage(item['government_id'], null, 'ROLE_GOVERNMENT')}}>장비관리</button>
+                                    </td> */}
+                                    <td>
+                                        <button className={"btn-small gray-btn"} onClick={() => {userManagementPage(item['government_id'], null, 'ROLE_GOVERNMENT')}}>사용자관리</button>
+                                    </td>
+                                    <td data-label="관리">
+                                        <button className={"btn-small lightgray-btn"} onClick={() => {government.government = item; setGovernment({...government}); governmentModalOpen()}}>정보 수정</button>
+                                        {state.loginUser['authority'] == 'ROLE_ADMIN' ?
+                                            <button className={"btn-small red-btn"} onClick={() => {governmentDelete(item)}}>삭제</button>
+                                        : null}
+                                    </td>
+                                </tr>
+                                )})}
+                                {CommonUtil.isEmpty(government.governmentList) ?
+                                <tr>
+                                    <td colSpan={12}>조회된 데이터가 없습니다</td>
+                                </tr>
+                                : null}
+                            </tbody>
+                        </table>
+                        <Pagination
+                            currentPage={government.search.currentPage}
+                            perPage={government.search.perPage}
+                            totalCount={government.governmentListCount}
+                            maxRange={5}
+                            click={governmentSelectList}
+                        />
+                    </div>
+                </div>
+
+
+                {state.loginUser['authority'] == 'ROLE_ADMIN'
+                    ? <ContentTitle contentTitle={government.government['government_id'] != null ? `[${government.government['government_name']}] 시행기관 조회 (${agency.agencyListCount})` : `시행기관 조회 (${agency.agencyListCount})`} />
+                    : <ContentTitle contentTitle={`시행기관 조회 (${agency.agencyListCount})`} />
+                }
+                <div>
+                    {/* <div className="search-management flex-start margin-bottom2">
+                        <select id="searchType"  style={{maxWidth: 'fit-content'}} onChange={(e) => {}}>
+                            <option value="">전체</option>
+                            <option value="user_name">기관명</option>
+                            <option value="user_phonenumber">기관연락처</option>
+                        </select>
+                        <input id="searchText"  type="text"         
+                            onChange={(e) => {}}
+                            onKeyUp={(e) => {}}
+                        />
+                        <button className={"btn-small gray-btn"} onClick={() => {}}>검색</button>
+                    </div> */}
+                    <div className="board-wrap">
+                        {/* <SubTitle explanation={"장비 클릭 시 지난 매칭이력을 확인할 수 있습니다."} /> */}
+                        <div className="btn-wrap flex-end margin-bottom ">
+                            {state.loginUser['authority'] == 'ROLE_ADMIN' || state.loginUser['authority'] == 'ROLE_GOVERNMENT' ?
+                                <button className={"btn-small gray-btn"} onClick={() => {
+                                    agency.agency['agency_id'] = null;
+                                    if (CommonUtil.isEmpty(government.government['government_id']) == false) {
+                                        agency.agency['government_id'] = government.government['government_id'];
+                                        agency.agency['agency_type'] = government.government['government_type'];
+                                    }
+                                    setAgency({...agency});
+                                    agencyModalOpen();
+                                }}>등록</button>
+                            : null}
+                        </div>
+                        <table className={"senior-user protector-user"}>
+                            <thead>
+                                <tr>
+                                    <th>No</th>
+                                    <th>구분</th>
+                                    <th>관리기관명</th>
+                                    <th>기관명</th>
+                                    <th>보호사(명)</th>
+                                    <th>관리대상자(명)</th>
+                                    <th>주소</th>
+                                    <th>대표연락처</th>
+                                    {/* <th>장비관리</th> */}
+                                    <th>사용자관리</th>
+                                    <th>관리</th>
+                                </tr>
+                            </thead>
+                            <tbody>
+                                {agency.agencyList.map((item, idx) => { return (
+                                <tr key={idx}>
+                                    <td data-label="No">{agency.agencyListCount - idx - (agency.search.currentPage - 1) * agency.search.perPage}</td>
+                                    <td data-label="구분">{orgTypes[item['agency_type']]}</td>
+                                    <td data-label="관리기관명">{item['government_name']}</td>
+                                    <td data-label="기관명">{item['agency_name']}</td>
+                                    <td data-label="보호사(명)">{item['agent_user_count']}</td>
+                                    <td data-label="관리 대상자(명)">{item['senior_user_count']}</td>
+                                    <td data-label="주소">{item['agency_address']}</td>
+                                    <td data-label="대표 연락처">{item['agency_phonenumber']}</td>
+                                    {/* <td>
+                                        <button className={"btn-small gray-btn"} onClick={() => {userManagementPage(item['agency_id'], null, 'ROLE_AGENCY')}}>장비관리</button>
+                                    </td> */}
+                                    <td>
+                                        <button className={"btn-small gray-btn"} onClick={() => {userManagementPage(item['government_id'], item['agency_id'], 'ROLE_AGENCY')}}>사용자관리</button>
+                                    </td>
+                                    <td data-label="관리">
+                                        <button className={"btn-small lightgray-btn"} onClick={() => {agency.agency = item; setAgency({...agency}); agencyModalOpen()}}>정보 수정</button>
+                                        {state.loginUser['authority'] == 'ROLE_ADMIN' || state.loginUser['authority'] == 'ROLE_GOVERNMENT' ?
+                                            <button className={"btn-small red-btn"} onClick={() => {agencyDelete(item)}}>삭제</button>
+                                        : null}
+                                    </td>
+                                </tr>
+                                )})}
+                                {CommonUtil.isEmpty(agency.agencyList) ?
+                                <tr>
+                                    <td colSpan={12}>조회된 데이터가 없습니다</td>
+                                </tr>
+                                : null}
+                            </tbody>
+                        </table>
+                        <Pagination
+                            currentPage={agency.search.currentPage}
+                            perPage={agency.search.perPage}
+                            totalCount={agency.agencyListCount}
+                            maxRange={5}
+                            click={agencySelectList}
+                        />
+                    </div>
+                </div>
+
+            </div>
+        </main>
+    );
+}
client/views/pages/senior_management/SeniorEdit.jsx
--- client/views/pages/senior_management/SeniorEdit.jsx
+++ client/views/pages/senior_management/SeniorEdit.jsx
@@ -22,7 +22,7 @@
       headers: {
         'Content-Type': 'application/json; charset=UTF-8'
       },
-      body: JSON.stringify({}),
+      body: JSON.stringify({'government_id': state.loginUser['government_id']}),
     }).then((response) => response.json()).then((data) => {
       console.log("기관(관리, 시행) 계층 구조 목록 조회 : ", data);
       setOrgListOfHierarchy(data);
client/views/pages/user_management/UserAuthoriySelect.jsx
--- client/views/pages/user_management/UserAuthoriySelect.jsx
+++ client/views/pages/user_management/UserAuthoriySelect.jsx
@@ -1,5 +1,5 @@
 import React, { useState } from "react";
-import { useNavigate } from "react-router";
+import { useNavigate, useLocation } from "react-router";
 import { useSelector } from "react-redux";
 
 import ContentTitle from "../../component/ContentTitle.jsx";
@@ -20,9 +20,11 @@
 
 export default function UserAuthoriySelect() {
   const navigate = useNavigate();
+  const location = useLocation();
 
   //전역 변수 저장 객체
   const state = useSelector((state) => {return state});
+  const defaultGovernmentId = CommonUtil.isEmpty(state.loginUser) ? null : state.loginUser['government_id'];
 
   //활성화 탭 (시스템 업무 역할별)
   const [tabActiveByRoleType, setTabActiveByRoleType] = React.useState('ROLE_SENIOR');
@@ -58,7 +60,7 @@
       headers: {
         'Content-Type': 'application/json; charset=UTF-8'
       },
-      body: JSON.stringify({}),
+      body: JSON.stringify({'government_id': defaultGovernmentId}),
     }).then((response) => response.json()).then((data) => {
       console.log("기관(관리, 시행) 계층 구조 목록 조회 : ", data);
       setOrgListOfHierarchy(data);
@@ -312,11 +314,22 @@
   //Mounted
   React.useEffect(() => {
     orgSelectListOfHierarchy();
-    seniorSelectList();
-    agentSelectList();
-    if (state.loginUser['authority'] == 'ROLE_ADMIN' || state.loginUser['authority'] == 'ROLE_GOVERNMENT') {
-      governmentSelectList();
+    
+    if (CommonUtil.isEmpty(location.state) == false) {
+      const param = location.state;
+      if (CommonUtil.isEmpty(param['tabActiveByRoleType']) == false) {
+        setTabActiveByRoleType(param['tabActiveByRoleType']);
+      }
+      governmentChange(param['government_id']);
+      agencyChange(param['government_id'], param['agency_id']);
+    } else {
+      seniorSelectList();
+      agentSelectList();
+      if (state.loginUser['authority'] == 'ROLE_ADMIN' || state.loginUser['authority'] == 'ROLE_GOVERNMENT') {
+        governmentSelectList();
+      }
     }
+
     if (state.loginUser['authority'] == 'ROLE_ADMIN') {
       adminSelectList();
     }
@@ -336,7 +349,7 @@
 
       <ContentTitle explanation={"사용자 관리"} />
       <div className="content-wrap">
-        <div className="flex-align-start userauthoriylist" style={{ height: "calc(100% - 61px)" }}>
+        <div className="flex-align-start userauthoriylist gap5" style={{ height: "calc(100% - 61px)" }}>
           <div className="left" style={{ height: "100%", }}>
             <div style={{ height: "100%" }}>
               <SubTitle
@@ -344,12 +357,13 @@
                 className="margin-bottom"
               />
               {/* 카테고리 디자인 필요 (a.active 클래스 필요) */}
-              <div style={{width: '88%', fontSize: '16px'}} className="category">
-                {/* <a className={() => {return "active"}} onClick={adminChange}>올잇메디</a> */}
-                <a onClick={adminChange}
-                   className={userSearch['government_id'] == null && userSearch['agency_id'] == null ? "active" : ""}>
-                  올잇메디
-                </a>
+              <div style={{fontSize: '16px'}} className="category">
+                {state.loginUser['authority'] == 'ROLE_ADMIN' ?
+                  <a onClick={adminChange}
+                    className={userSearch['government_id'] == null && userSearch['agency_id'] == null ? "active" : ""}>
+                    올잇메디
+                  </a>
+                : null}
                 <ul style={{marginLeft: '15px'}}>
                   {orgListOfHierarchy.map((item, idx) => { return (
                     <li style={{margin: '10px 0px'}} key={idx}>
@@ -388,8 +402,12 @@
                 <ul className="tab-menu flex-end" >
                   <li onClick={() => setTabActiveByRoleType('ROLE_SENIOR')} className={tabActiveByRoleType == 'ROLE_SENIOR' ? "active" : null}>대상자(어르신) ({senior.userListCount})</li>
                   <li onClick={() => setTabActiveByRoleType('ROLE_AGENCY')} className={tabActiveByRoleType == 'ROLE_AGENCY' ? "active" : null}>보호사 ({agent.userListCount})</li>
-                  <li onClick={() => setTabActiveByRoleType('ROLE_GOVERNMENT')} className={tabActiveByRoleType == 'ROLE_GOVERNMENT' ? "active" : null}>기관 관리자 ({government.userListCount})</li>
-                  <li onClick={() => setTabActiveByRoleType('ROLE_ADMIN')} className={tabActiveByRoleType == 'ROLE_ADMIN' ? "active" : null}>시스템 관리자 ({admin.userListCount})</li>
+                  {state.loginUser['authority'] == 'ROLE_ADMIN' || state.loginUser['authority'] == 'ROLE_GOVERNMENT'  ?
+                    <li onClick={() => setTabActiveByRoleType('ROLE_GOVERNMENT')} className={tabActiveByRoleType == 'ROLE_GOVERNMENT' ? "active" : null}>기관 관리자 ({government.userListCount})</li>
+                  : null}
+                  {state.loginUser['authority'] == 'ROLE_ADMIN' ?
+                    <li onClick={() => setTabActiveByRoleType('ROLE_ADMIN')} className={tabActiveByRoleType == 'ROLE_ADMIN' ? "active" : null}>시스템 관리자 ({admin.userListCount})</li>
+                  : null}
                 </ul>
 
                 {/* 탭 내용 */}
client/views/pages/user_management/UserEdit.jsx
--- client/views/pages/user_management/UserEdit.jsx
+++ client/views/pages/user_management/UserEdit.jsx
@@ -11,6 +11,7 @@
   /**** 기본 조회 데이터 (시작) ****/
   //전역 변수 저장 객체
   const state = useSelector((state) => {return state});
+  const defaultGovernmentId = CommonUtil.isEmpty(state.loginUser) ? null : state.loginUser['government_id'];
 
   //권한 타입 종류
   const [authorities, setAuthorities] = React.useState([]);
@@ -38,7 +39,7 @@
       headers: {
         'Content-Type': 'application/json; charset=UTF-8'
       },
-      body: JSON.stringify({}),
+      body: JSON.stringify({'government_id': defaultGovernmentId}),
     }).then((response) => response.json()).then((data) => {
       console.log("기관(관리, 시행) 계층 구조 목록 조회 : ", data);
       setOrgListOfHierarchy(data);
node_modules/.package-lock.json
--- node_modules/.package-lock.json
+++ node_modules/.package-lock.json
@@ -8162,6 +8162,15 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/use-state-with-callback": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/use-state-with-callback/-/use-state-with-callback-3.0.2.tgz",
+      "integrity": "sha512-gs6t5ilsbi2UvoYXdw8+dwQg6yT3QfO/sYhm5Wa3tfwcL6BSad85FiET8ZtTWid4gjul1T1TJ8ReV4Wk1B7UZg==",
+      "peerDependencies": {
+        "react": ">=16.8.0",
+        "react-dom": ">=16.8.0"
+      }
+    },
     "node_modules/use-sync-external-store": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz",
package-lock.json
--- package-lock.json
+++ package-lock.json
@@ -48,6 +48,7 @@
         "topojson": "^3.0.2",
         "topojson-client": "^3.1.0",
         "url-loader": "^4.1.1",
+        "use-state-with-callback": "^3.0.2",
         "webpack": "^5.74.0",
         "webpack-cli": "^4.10.0",
         "yarn": "^1.22.19"
@@ -8264,6 +8265,15 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/use-state-with-callback": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/use-state-with-callback/-/use-state-with-callback-3.0.2.tgz",
+      "integrity": "sha512-gs6t5ilsbi2UvoYXdw8+dwQg6yT3QfO/sYhm5Wa3tfwcL6BSad85FiET8ZtTWid4gjul1T1TJ8ReV4Wk1B7UZg==",
+      "peerDependencies": {
+        "react": ">=16.8.0",
+        "react-dom": ">=16.8.0"
+      }
+    },
     "node_modules/use-sync-external-store": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz",
package.json
--- package.json
+++ package.json
@@ -43,6 +43,7 @@
     "topojson": "^3.0.2",
     "topojson-client": "^3.1.0",
     "url-loader": "^4.1.1",
+    "use-state-with-callback": "^3.0.2",
     "webpack": "^5.74.0",
     "webpack-cli": "^4.10.0",
     "yarn": "^1.22.19"
server/modules/web/Server.js
--- server/modules/web/Server.js
+++ server/modules/web/Server.js
@@ -104,7 +104,8 @@
 + */
 webServer.use('*.json', expressProxy(API_SERVER_HOST, {
     proxyReqPathResolver: function (request) {
-        //console.log('request : ', request.url, request.params[0]);
+        //console.log('API_SERVER_HOST : ', API_SERVER_HOST);
+        //console.log('request : ', request.url, `${request.params['0']}.json`);
         return `${request.params['0']}.json`;
     }
 }));
Add a comment
List