최정우 최정우 2023-04-04
Merge branch 'front-end' of http://210.180.118.83/yjryu/senior_care_system into front-end
@73673043acc646db0783c644e00873dd0b1ecc0c
Global.js
--- Global.js
+++ Global.js
@@ -5,7 +5,7 @@
 const SERVICE_STATUS = process.env.NODE_ENV;//development, production
 const PORT = 80;
 const SYSTEM_VIEW_TYPE = 'admin';//admin, government, agency, guardian
-const API_SERVER_HOST = 'localhost:8080'
+const API_SERVER_HOST = 'localhost:8081'
 
 module.exports = {
     PROJECT_NAME,
client/resources/css/common.css
--- client/resources/css/common.css
+++ client/resources/css/common.css
@@ -365,7 +365,6 @@
 }
 input[type='radio'],
 input[type='radio']:checked {
-  width: 0.9rem;
   height: 1.5rem;
   border-radius: 100%;
   margin-right: 1rem;
@@ -378,7 +377,7 @@
 input[type='radio']:checked {
   background-color: #f25430;
 }
-
+input[type='date']{width: 24%;}
 /* margin */
 .margin-bottom {
   margin-bottom: 1rem;
client/resources/css/main.css
--- client/resources/css/main.css
+++ client/resources/css/main.css
@@ -57,6 +57,7 @@
 /* .agency-calendar .react-calendar__month-view__days{overflow: hidden;} */
 
 /* Q&A */
+.qnaselect{margin-left: 2rem; width: 15%;}
 .question-select input {
   width: 3%;
 }
@@ -98,8 +99,9 @@
 /* 문진표 */
 .questionnaire-table th {
   display: block;
+  background-color: #f2f0eb;
 }
-
+.questionnaire-table td{padding: 0.5rem;}
 .questionnaire-table tr {
   padding: 1rem;
 }
@@ -111,6 +113,11 @@
 /* 카테고리 기관 추가*/
 .hierarchy-menu p{font-size: 2.4rem;}
 .hierarchy-menu input{width: 30%;}
+.category{background-color: #f2f0eb; box-shadow: 3px -2px 5px -2px rgb(0 0 0 / 20%);     border-radius: 0.5rem 0.5rem 0 0; padding: 2rem; margin-top: 5rem;}
+.category > a{font-size: 1.2em; font-weight: bold;}
+.category img{width: 2rem;}
+.category > ul > li{margin: 2rem 0 !important;}
+.category > ul > li > a{font-size: 1.1em;}
 .categoryitem{
   width: 34%;
   font-size: 2.4rem;
@@ -847,14 +854,14 @@
 
 /* 검색창 */
 .searchselect {
-  width: 25%;
+  width: 30%;
 }
 .search-management button{width: 22%;}
 .searchselect label {
   width: 100%;
   margin-right: 3rem;
 }
-
+.searchselect input{width: auto;}
 .mobile-area-wrap {
   display: none;
 }
@@ -1007,10 +1014,14 @@
   height: 100px;
 }
 .senior-insert .gender{padding-left: 2rem;}
+.senior-insert .gender input{width: auto;}
 .medicationTime-td input{width: 2rem;}
 .medicationTime-td label{}
 /* 노인수정 */
 .senior-edit{border: #d8d3c7 1px solid;}
+.senior-detail input[type='checkbox'],
+.senior-detail input[type='checkbox']:checked{width: 10%;}
+
 .senior-edit th{
   font-size:1.8rem
 }
@@ -1021,7 +1032,7 @@
 .medicationTime-td input{width: 2rem;}
 .medicationTime-td label{}
 /* 노인 상세 정보 */
-.senior-detail{border-top: 2px solid #cccccc; border-bottom: 1px solid #cccccc;}
+.senior-detail{border-top: 2px solid #cccccc; border-bottom: 1px solid #cccccc; background: #ffffffba;}
 .senior-detail tr{height: 4rem; border-bottom: 1px solid #f4f4f2;}
 .senior-detail th {
   text-align: left;
@@ -1078,6 +1089,7 @@
 
 .modal-main table th {
   text-align: center;
+  background-color: #f2f0eb;
 }
 
 .medicine-revise tr:nth-child(3)>td div,
@@ -1159,7 +1171,7 @@
 .equipment-search {
   margin-bottom: 1rem;
 }
-
+.equipment-insert td{text-align: left !important;}
 .select100 {
   width: 100%;
 }
client/resources/css/reset.css
--- client/resources/css/reset.css
+++ client/resources/css/reset.css
@@ -128,8 +128,8 @@
 }
 
 a.active {
-  color: #0089ff;
+  color: #f25430;
   font-weight: bold;
-  font-size: 1.1em;
+  font-size: 1.2em;
 }
-
+.category > ul > li > ul > li a.active{font-size: 1.0em;}
client/resources/css/responsive.css
--- client/resources/css/responsive.css
+++ client/resources/css/responsive.css
@@ -223,6 +223,7 @@
 
 /* 모바일 세로 (해상도 ~ 479px)*/
 @media all and (max-width:479px) {
+  input{width: auto;}
   .menuicon {
     display: block;
     position: fixed;
@@ -353,7 +354,7 @@
   }
 
   .search-management select {
-    width: 75%;
+    width: -webkit-fill-available;
     margin: 0;
   }
   .search-management button{width: 40%;}
@@ -478,6 +479,7 @@
     font-size: 1.4rem;
     width: 50%;
     padding: 1rem 10rem;
+    background-color: #f2f0eb;
   }
 
   .senior-insert td {
 
client/resources/files/icon/arrow.png (Binary) (added)
+++ client/resources/files/icon/arrow.png
Binary file is not shown
 
client/resources/files/icon/dot.png (Binary) (added)
+++ client/resources/files/icon/dot.png
Binary file is not shown
 
client/resources/files/icon/house.png (Binary) (added)
+++ client/resources/files/icon/house.png
Binary file is not shown
client/views/component/Modal_MedicalHistory.jsx
--- client/views/component/Modal_MedicalHistory.jsx
+++ client/views/component/Modal_MedicalHistory.jsx
@@ -39,7 +39,7 @@
             </tr>
             <tr>
               <th>진료 사유</th>
-              <td className="flex-start gender">
+              <td className="flex-start ">
                 <input type="text" />
               </td>              
             </tr>
client/views/component/SubTitle.jsx
--- client/views/component/SubTitle.jsx
+++ client/views/component/SubTitle.jsx
@@ -18,6 +18,7 @@
   color: #733c1d;
 `;
 const Explanation = styled.p`
+  width: max-content;
   font-size: 1.4rem;
   padding: 0.5rem;
   font-weight: bold;
client/views/pages/callcenter/QandAConfirm.jsx
--- client/views/pages/callcenter/QandAConfirm.jsx
+++ client/views/pages/callcenter/QandAConfirm.jsx
@@ -11,7 +11,7 @@
       <div className="content-wrap row">
         <ContentTitle contentTitle={"문의글 작성"} />
         <SubTitle explanation={"담당자 정보"} />
-        <table className="margin-bottom2 senior-insert">
+        <table className="margin-bottom2 senior-detail">
           <tr>
             <th>작성자</th>
             <td>
@@ -43,7 +43,7 @@
           </tr>
         </table>
         <SubTitle explanation={"대상자 정보"} />
-        <table className="margin-bottom2 senior-insert">
+        <table className="margin-bottom2 senior-detail">
           <tr>
             <th>대상자 이름</th>
             <td>
@@ -75,9 +75,9 @@
             </td>
           </tr>
         </table>
-        <div className="flex-start margin-bottom5">
+        <div className="flex-start margin-bottom5 margin-top ">
           <SubTitle explanation={"처리여부"} />
-          <select>
+          <select className="qnaselect">
             <option value="">처리중</option>
             <option value="">처리완료</option>
           </select>
client/views/pages/callcenter/QandAInsert.jsx
--- client/views/pages/callcenter/QandAInsert.jsx
+++ client/views/pages/callcenter/QandAInsert.jsx
@@ -11,7 +11,7 @@
       <div className="content-wrap row">
         <ContentTitle contentTitle={"문의글 작성"} />
         <SubTitle explanation={"작성자 정보"} />
-        <table className="margin-bottom2 qna-insert">
+        <table className="margin-bottom2 qna-insert senior-detail">
           <tr>
             <th>작성자</th>
             <td>
@@ -51,7 +51,7 @@
             </tr>
         </table>
         <SubTitle explanation={"대상자 정보"} />
-        <table className="margin-bottom2 qna-insert">
+        <table className="margin-bottom2 qna-insert senior-detail">
           <tr>
             <th>대상자 선택</th>
             <td colSpan={3} className="flex width">
client/views/pages/equipment/EquipmentManagementSelect.jsx
--- client/views/pages/equipment/EquipmentManagementSelect.jsx
+++ client/views/pages/equipment/EquipmentManagementSelect.jsx
@@ -897,7 +897,73 @@
 	}, [])
 
 	/********************************** 시행기관 장비 (끝) **********************************/
+	//기관 계층 구조 목록
+	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);
+	});
+	};
 
+//관리기관 관리자 목록 및 페이징 정보
+userSearch['authority'] = 'ROLE_GOVERNMENT';
+const [government, setGovernment] = React.useState({userList: [], userListCount: 0, search: JSON.parse(JSON.stringify(userSearch))});
+const governmentSearchChange = (targetKey, value) => {
+  let newGovernment = JSON.parse(JSON.stringify(government));
+  newGovernment.search[targetKey] = value;
+  setGovernment(newGovernment);
+}
+const governmentSelectListEnter = (key) => {
+  if (key == 'Enter') {
+	governmentSelectList();
+  } else {
+	return;
+  }
+}
+//관리기관 담당자 목록 조회
+const governmentSelectList = (currentPage) => {
+  government.search.currentPage = CommonUtil.isEmpty(currentPage) ? 1 : currentPage;
+
+  fetch("/user/userSelectList.json", {
+	method: "POST",
+	headers: {
+	  'Content-Type': 'application/json; charset=UTF-8'
+	},
+	body: JSON.stringify(government.search),
+  }).then((response) => response.json()).then((data) => {
+	data.search = government.search;
+	console.log("관리기관 담당자 목록 조회 : ", data);
+	setGovernment(data);
+  }).catch((error) => {
+	console.log('governmentSelectList() /user/userSelectList.json error : ', error);
+  });
+}
+
+//시스템 관리자 목록 및 페이징 정보
+userSearch['authority'] = 'ROLE_ADMIN';
+const [admin, setAdmin] = React.useState({userList: [], userListCount: 0, search: JSON.parse(JSON.stringify(userSearch))});
+const adminSearchChange = (targetKey, value) => {
+  let newAdmin = JSON.parse(JSON.stringify(admin));
+  newAdmin.search[targetKey] = value;
+  setAdmin(newAdmin);
+}
+const adminSelectListEnter = (key) => {
+  if (key == 'Enter') {
+	adminSelectList();
+  } else {
+	return;
+  }
+}
 	// 장비 납품 모달창 thead, key
 	const thead4 = [
 		"No",
@@ -914,7 +980,38 @@
 			No: 1,
 			agency: (
 				<div>
-					<Category />
+					<div style={{width: '100%', 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>
+                <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>
 			)
 			,
client/views/pages/senior_management/SeniorEdit.jsx
--- client/views/pages/senior_management/SeniorEdit.jsx
+++ client/views/pages/senior_management/SeniorEdit.jsx
@@ -107,7 +107,7 @@
     <main>
       <div className="board-wrap">
           <SubTitle explanation={"수정페이지"} className="margin-bottom" />
-          <table className="margin-bottom2 senior-insert">
+          <table className="margin-bottom2 senior-detail">
             {/* <tr>
               <th>대상자등록번호</th>
               <td colSpan={3} className="flex">
@@ -155,7 +155,7 @@
             <tr>
               <th>필요 복약</th>
               <td>
-                <div className="flex">
+                <div className="flex-start">
                   <input type="checkbox" name="medicationSelect" checked={medicineM} onClick={(e) => { handleMedicineM(e) }} /><label for="medicationTime">아침</label>
                   <input type="checkbox" name="medicationSelect" checked={medicineL} onClick={(e) => { handleMedicineL(e) }} /><label for="medicationTime">점심</label>
                   <input type="checkbox" name="medicationSelect" checked={medicineD} onClick={(e) => { handleMedicineD(e) }} /><label for="medicationTime">저녁</label>
@@ -191,7 +191,7 @@
             />
             <Button
               className={"btn-small gray-btn"}
-              btnName={"수정"}
+              btnName={"저장"}
               onClick={() => {
                 updateSeniorData();
               }}
client/views/pages/senior_management/SeniorSelectOne.jsx
--- client/views/pages/senior_management/SeniorSelectOne.jsx
+++ client/views/pages/senior_management/SeniorSelectOne.jsx
@@ -240,8 +240,7 @@
           </tbody>
         </table>
         <div className="btn-wrap flex-center">
-          <button className={"btn-large gray-btn"} onClick={() => modalGuardianOpen()}>수정</button>
-          
+          <button className={"btn-large gray-btn"} onClick={() => {navigate("/SeniorEdit");}}>수정</button>
           <button className={"btn-large red-btn"} onClick={() => alert("삭제할 수 없습니다.")}>삭제</button>
         </div>
       </div>
client/views/pages/user_management/UserAuthoriySelect.jsx
--- client/views/pages/user_management/UserAuthoriySelect.jsx
+++ client/views/pages/user_management/UserAuthoriySelect.jsx
@@ -12,6 +12,9 @@
 import { width } from "@mui/system";
 import Modal_Guardian from "../../component/Modal_Guardian.jsx";
 import Pagination from "../../component/Pagination.jsx";
+import Dot from "../../../resources/files/icon/dot.png";
+import House from "../../../resources/files/icon/house.png";
+import Arrow from "../../../resources/files/icon/arrow.png";
 
 import CommonUtil from "../../../resources/js/CommonUtil.js";
 
@@ -342,7 +345,7 @@
                 className="margin-bottom"
               />
               {/* 카테고리 디자인 필요 (a.active 클래스 필요) */}
-              <div style={{width: '100%', fontSize: '16px'}}>
+              <div style={{width: '100%', fontSize: '16px'}} className="category">
                 {/* <a className={() => {return "active"}} onClick={adminChange}>올잇메디</a> */}
                 <a onClick={adminChange}
                    className={userSearch['government_id'] == null && userSearch['agency_id'] == null ? "active" : ""}>
@@ -351,7 +354,7 @@
                 <ul style={{marginLeft: '15px'}}>
                   {orgListOfHierarchy.map((item, idx) => { return (
                     <li style={{margin: '10px 0px'}} key={idx}>
-                      <span style={{marginRight: '5px'}}>└</span>
+                      <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']}
@@ -360,7 +363,7 @@
                         <ul style={{marginLeft: '15px'}}>
                           {item['agencyList'].map((item2, idx2) => { return (
                             <li style={{margin: '10px 0px'}} key={idx2}>
-                              <span style={{marginRight: '5px'}}>└</span>
+                              <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']}
@@ -397,7 +400,6 @@
                     ROLE_SENIOR: (
                       <ul className="tab-content">
                         <div>
-
                           <div className="search-management flex-start margin-bottom2">
                             <select id="searchType1" style={{maxWidth: 'fit-content'}} onChange={(e) => {seniorSearchChange("searchType", e.target.value)}}>
                               <option value="" selected={senior.search.searchText == ""}>전체</option>
@@ -413,7 +415,8 @@
                             <button className={"btn-small gray-btn"} onClick={() => {seniorSelectList()}}>검색</button>
                           </div>
 
-                          <div className="btn-wrap flex-end margin-bottom">
+                          <div className="btn-wrap flex margin-bottom">
+                        <SubTitle explanation={"대상자 클릭 시 상세페이지로 이동합니다."} />
                             <button className={"btn-small gray-btn"} onClick={() => modalSeniorInsertOpen()}>등록</button>
                           </div>
 
Add a comment
List