박정하 박정하 2023-09-06
230905 박정하 통계 페이지 작업
@6996616b624327efa08c5269ed2188b632b00f42
client/views/component/chart/Chart11.jsx
--- client/views/component/chart/Chart11.jsx
+++ client/views/component/chart/Chart11.jsx
@@ -10,6 +10,7 @@
 
     let root = am5.Root.new("Chart11");
     root._logo.dispose();
+    
     // Set themes
     // https://www.amcharts.com/docs/v5/concepts/themes/
     root.setThemes([
client/views/pages/equipment/EquipmentData.jsx
--- client/views/pages/equipment/EquipmentData.jsx
+++ client/views/pages/equipment/EquipmentData.jsx
@@ -39,14 +39,25 @@
       console.log('orgSelectListOfHierarchy() /org/orgSelectListOfHierarchy.json error : ', error);
     });
   };
+
+  const [isSelectDate, setIsSelectDate] = React.useState(false);
+
   //검색 변수 (초기화값)
   const [userSearch, setUserSearch] = React.useState({
     'government_id': null,
     'agency_id': null,
 
-    'currentPage': 1,
+    'start_date': null,
+    'end_date': new Date(),
+
+    'currentPage': 0,
     'perPage': 10,
   });
+  const dateSearchChange = (targetKey, value) => {
+    const newUserSearch = JSON.parse(JSON.stringify(userSearch));
+    newUserSearch[targetKey] = value;
+    setUserSearch(newUserSearch);
+  }
 
   //올잇메디 선택
   const adminChange = () => {
@@ -54,7 +65,6 @@
     newUserSearch['government_id'] = null;
     newUserSearch['agency_id'] = null;
     setUserSearch(newUserSearch);
-    equipmentDataList();
   }
 
   //관리 기관 선택
@@ -63,7 +73,6 @@
     newUserSearch['government_id'] = government_id;
     newUserSearch['agency_id'] = null;
     setUserSearch(newUserSearch);
-    equipmentDataList();
   }
 
   //시행 기관 선택
@@ -72,61 +81,33 @@
     newUserSearch['government_id'] = government_id;
     newUserSearch['agency_id'] = agency_id;
     setUserSearch(newUserSearch);
-    equipmentDataList();
   }
-
-  const [isSelectDate, setIsSelectDate] = React.useState(false);
-  const [startDate, setStartDate] = React.useState(new Date('2023-08-01'));
-  const [endDate, setEndDate] = React.useState(new Date());
 
   //통계 자료 데이터
-  const [equipmentData, setEquipmentData] = React.useState([]);
+  const [equipmentData, setEquipmentData] = React.useState({
+    equipmentDataList: [],
+    equipmentDataListCount: 0
+  });
+
   //복약 현황 조회
   const equipmentDataList = () => {
-    console.log("시작날짜 : ", startDate);
-    console.log("끝난날짜 : ", endDate);
-
-    var dateList = [];
-    var curDate = new Date(startDate);
-    while (curDate <= new Date(endDate)) {
-      dateList.push({ government_id: userSearch['government_id'], agency_id: userSearch['agency_id'], receive_datetime: curDate.toISOString().split("T")[0] });
-      curDate.setDate(curDate.getDate() + 1);
-    }
-
-    const reverse = dateList.reverse();
-
-    var dataListArry = [];
-    for (let i = 0; i < reverse.length; i++) {
-      fetch("/stats/equipmentDataList.json", {
-        method: "POST",
-        headers: {
-          'Content-Type': 'application/json; charset=UTF-8'
-        },
-        body: JSON.stringify(reverse[i]),
-      }).then((response) => response.json()).then((data) => {
-        dataListArry[i] = {
-          date: new Date(data['stockList'][0]['datetime']),
-          datetime: data['stockList'][0]['datetime'],
-          delivery_equipment: data['stockList'][0]['delivery_equipment'],
-          register_equipment: data['stockList'][0]['register_equipment'],
-          data_equipment: data['dataList'][0]['data_equipment'],
-          medication_equipment: data['dataList'][0]['medication_equipment'],
-          register_percent: Math.floor((data['stockList'][0]['register_equipment'] / data['stockList'][0]['delivery_equipment']) * 100),
-          data_percent: Math.floor((data['dataList'][0]['data_equipment'] / data['stockList'][0]['delivery_equipment']) * 100),
-          medication_percent: Math.floor((data['dataList'][0]['medication_equipment'] / data['stockList'][0]['delivery_equipment']) * 100)
-        };
-      }).catch((error) => {
-        console.log('equipmentDataList() /stats/equipmentDataList.json error : ', error);
-      });
-    }
-    console.log('dataListArry : ', dataListArry)
-    setEquipmentData(dataListArry);
-    console.log("equipmentData : ", equipmentData)
+    fetch("/stats/equipmentDataList.json", {
+      method: "POST",
+      headers: {
+        'Content-Type': 'application/json; charset=UTF-8'
+      },
+      body: JSON.stringify(userSearch),
+    }).then((response) => response.json()).then((data) => {
+      console.log("equipmentData : ", data);
+      setEquipmentData(data);
+    }).catch((error) => {
+      console.log('equipmentDataList() /stats/equipmentDataList.json error : ', error);
+    });
   };
 
-  const searchData = () => {
+  React.useEffect(() => {
     equipmentDataList();
-  }
+  }, [userSearch.government_id, userSearch.agency_id]);
 
   React.useEffect(() => {
     orgSelectListOfHierarchy();
@@ -146,24 +127,24 @@
           {!isSelectDate ?
             <div className="selectDate" style={{ width: 'calc(100% - 300px)' }}>
               <input type="date"
-                value={endDate}
-                onChange={(e) => { setEndDate(e.target.value) }}
+                value=""
+                onChange={(e) => { dateSearchChange("end_date", e.target.value) }}
                 onKeyDown={function (e) { e.preventDefault() }} />
             </div>
             :
             <div className="selectDatetime flex" style={{ width: 'calc(100% - 300px)' }}>
               <input type="date"
-                value={startDate}
-                onChange={(e) => { setStartDate(e.target.value) }}
+                value=""
+                onChange={(e) => { dateSearchChange("start_date", e.target.value) }}
                 onKeyDown={function (e) { e.preventDefault() }} />
               <input type="date"
-                value={endDate}
-                onChange={(e) => { setEndDate(e.target.value) }}
+                value=""
+                onChange={(e) => { dateSearchChange("end_date", e.target.value) }}
                 onKeyDown={function (e) { e.preventDefault() }} />
             </div>
           }
           <button className={"btn-small gray-btn"} style={{ maxWidth: '150px' }}
-            onClick={() => { searchData(); }}
+            onClick={() => { console.log("userSearch: ", userSearch); equipmentDataList(); }}
           >검색</button>
         </div>
 
@@ -218,11 +199,11 @@
                 <SubTitle explanation={"선택한 기관의 통계 자료입니다."} />
               </div>
 
-              <div style={{ height: '30vh' }}>
-                {equipmentData.length > 0 ?
-                  <Chart11 data={equipmentData} />
+              {/* <div style={{ height: '30vh' }}>
+                {equipmentData['equipmentDataList'].length > 0 ?
+                  <Chart11 data={equipmentData['equipmentDataList']} />
                   : "데이터가 없습니다."}
-              </div>
+              </div> */}
 
               <table class="caregiver-user protector-user">
                 <thead>
@@ -238,10 +219,10 @@
                   </tr>
                 </thead>
                 <tbody>
-                  {equipmentData.map((item, idx) => {
+                  {equipmentData['equipmentDataList'].map((item, idx) => {
                     return (
                       <tr key={idx}>
-                        <td data-label="날짜">{item['datetime']}</td>
+                        <td data-label="날짜">{item['date']}</td>
                         <td data-label="납품기기">{item['delivery_equipment']}</td>
                         <td data-label="등록기기">{item['register_equipment']}</td>
                         <td data-label="데이터수집기기">{item['data_equipment']}</td>
@@ -253,13 +234,20 @@
                     )
                   })
                   }
-                  {equipmentData == null || equipmentData.length == 0 ?
+                  {CommonUtil.isEmpty(equipmentData['equipmentDataList']) ?
                     <tr>
                       <td colSpan={8}>조회된 데이터가 없습니다</td>
                     </tr>
                     : null}
                 </tbody>
               </table>
+              {/* <Pagination
+                currentPage={search.currentPage}
+                perPage={search.perPage}
+                totalCount={equipmentInquiry.equipmentInquiryListCount}
+                maxRange={5}
+                click={equipmentInquirySelectList}
+              /> */}
             </div>
           </div>
         </div>
Add a comment
List