박정하 박정하 2023-11-07
231107 박정하 기기데이터 정보 조회 작업중
@97293e56e15a426de3a04c45f071f970f3447a2e
client/resources/css/main.css
--- client/resources/css/main.css
+++ client/resources/css/main.css
@@ -436,6 +436,7 @@
   position: relative;
   padding-left: 5rem;
   text-align: center;
+  cursor: pointer;
 }
 
 .statistics-govern li p:nth-of-type(1) {
@@ -492,6 +493,7 @@
 
 .statistics-agency li {
   padding: 0 2rem;
+  cursor: pointer;
 }
 
 .statistics-agency li .text {
 
client/views/component/Calendar_admin.jsx (added)
+++ client/views/component/Calendar_admin.jsx
@@ -0,0 +1,39 @@
+import React, { useState } from "react";
+import { useNavigate, useLocation } from "react-router";
+import { useSelector } from "react-redux";
+
+import Calendar from "react-calendar";
+import "react-calendar/dist/Calendar.css";
+import Modal from "./Modal.jsx";
+import moment from "moment";
+
+import CommonUtil from "../../resources/js/CommonUtil.js";
+
+export default function CalendarComponent({ data }) {
+  const navigate = useNavigate();
+  const location = useLocation();
+
+  //전역 변수 저장 객체
+  const state = useSelector((state) => { return state });
+  
+  const [value, setValue] = useState(new Date());
+
+  return (
+    <>
+      <Calendar
+        onChange={setValue}
+        value={value}
+        tileContent={({ date, view }) => {
+          return (
+            <>
+              <div className="calendar-data">
+                <div>3/5</div>
+                <div>30℃</div>
+              </div>
+            </>
+          );
+        }}
+      />
+    </>
+  );
+}
client/views/component/chart/Chart10.jsx
--- client/views/component/chart/Chart10.jsx
+++ client/views/component/chart/Chart10.jsx
@@ -50,6 +50,7 @@
     }));
 
     let yAxis = chart.yAxes.push(am5xy.ValueAxis.new(root, {
+      min: 0,
       renderer: am5xy.AxisRendererY.new(root, {})
     }));
 
@@ -70,13 +71,6 @@
       strokeWidth: 2,
       strokeDasharray: [3, 3],
     });
-
-
-    // Add scrollbar
-    // https://www.amcharts.com/docs/v5/charts/xy-chart/scrollbars/
-    chart.set("scrollbarX", am5.Scrollbar.new(root, {
-      orientation: "horizontal"
-    }));
 
 
     // Set data
client/views/component/chart/Chart2_govern.jsx
--- client/views/component/chart/Chart2_govern.jsx
+++ client/views/component/chart/Chart2_govern.jsx
@@ -50,6 +50,7 @@
     }));
 
     let yAxis = chart.yAxes.push(am5xy.ValueAxis.new(root, {
+      min:0,
       renderer: am5xy.AxisRendererY.new(root, {})
     }));
 
@@ -70,13 +71,6 @@
       strokeWidth: 2,
       strokeDasharray: [3, 3],
     });
-
-
-    // Add scrollbar
-    // https://www.amcharts.com/docs/v5/charts/xy-chart/scrollbars/
-    chart.set("scrollbarX", am5.Scrollbar.new(root, {
-      orientation: "horizontal"
-    }));
 
 
     // Set data
client/views/component/chart/Chart9.jsx
--- client/views/component/chart/Chart9.jsx
+++ client/views/component/chart/Chart9.jsx
@@ -74,13 +74,6 @@
     });
 
 
-    // Add scrollbar
-    // https://www.amcharts.com/docs/v5/charts/xy-chart/scrollbars/
-    chart.set("scrollbarX", am5.Scrollbar.new(root, {
-      orientation: "horizontal"
-    }));
-
-
     // Set data
     series.data.setAll(data);
 
client/views/pages/AppRoute.jsx
--- client/views/pages/AppRoute.jsx
+++ client/views/pages/AppRoute.jsx
@@ -37,6 +37,7 @@
 import EquipmentRentalInsert from "./equipment/EquipmentRentalInsert.jsx";
 import EquipmentSelect from "./equipment/EquipmentSelect.jsx";
 import EquipmentData from "./equipment/EquipmentData.jsx";
+import EquipmentDataSelect from "./equipment/EquipmentDataSelect.jsx";
 import GovernmentEquipmentSelect from "./equipment/GovernmentEquipmentSelect.jsx";
 import AgencyEquipmentSelect from "./equipment/AgencyEquipmentSelect.jsx";
 import EquipmentManagementSelectOne from "./equipment/EquipmentManagementSelectOne.jsx";
@@ -146,6 +147,7 @@
       <Route path="/EquipmentManagementInsert" element={<EquipmentManagementInsert />}></Route>
       <Route path="/EquipmentSelect" element={<EquipmentSelect />}></Route>
       <Route path="/EquipmentData" element={<EquipmentData />}></Route>
+      <Route path="/EquipmentDataSelect" element={<EquipmentDataSelect />}></Route>
       <Route path="/EquipmentManagementSelectOne" element={<EquipmentManagementSelectOne />}></Route>
       <Route path="/MedicineCareSelectOne" element={<MedicineCareSelectOne />}></Route>
       <Route path="/TemperatureManagementSelectOne" element={<TemperatureManagementSelectOne />}></Route>
 
client/views/pages/equipment/EquipmentDataSelect.jsx (added)
+++ client/views/pages/equipment/EquipmentDataSelect.jsx
@@ -0,0 +1,174 @@
+import React from "react";
+import { useNavigate, useLocation } from "react-router";
+import { useSelector } from "react-redux";
+
+import 'react-datepicker/dist/react-datepicker.css';
+
+import Title from "../../component/Title.jsx";
+import DetailTitle from "../../component/DetailTitle.jsx";
+import Modal from "../../component/Modal.jsx";
+import CalendarAdmin from "../../component/Calendar_admin.jsx";
+import Chart9 from "../../component/chart/Chart9.jsx";
+import Senior from '../../../resources/files/images/senior.png';
+
+export default function EquipmentDataSelect() {
+  const navigate = useNavigate();
+  const location = useLocation();
+
+  //전역 변수 저장 객체
+  const state = useSelector((state) => { return state });
+  console.log("state: ", state);
+
+  //장비 초기값
+  const equipment = useLocation()['state']['equipment'];
+
+  //장비 데이터 조회
+  const equipmentDataSelect = () => {
+    fetch("/user/equipmentDataSelect.json", {
+      method: "POST",
+      headers: {
+        'Content-Type': 'application/json; charset=UTF-8'
+      },
+      body: JSON.stringify(equipment),
+    }).then((response) => response.json()).then((data) => {
+      console.log("equipmentDataSelect data : ", data);
+    }).catch((error) => {
+      console.log('equipmentDataSelect() /user/equipmentDataSelect.json error : ', error);
+    });
+  };
+
+  const [modalOpen, setModalOpen] = React.useState(false);
+  const openModal = () => {
+    setModalOpen(true);
+  };
+  const closeModal = () => {
+    setModalOpen(false);
+  };
+
+  const calerndarClick = (data) => {
+    console.log("calerndarClick - date, visitRecord", data);
+    openModal();
+  }
+
+  const DateMedication = () => {
+    return (
+      <>
+        <tr>
+          <th rowSpan={2}>복약량</th>
+          <th>식전</th>
+          <th>아침</th>
+          <th>점심</th>
+          <th>저녁</th>
+          <th>취침</th>
+        </tr>
+        <tr>
+          <td colSpan={5}>정보가 없습니다.</td>
+        </tr>
+      </>
+    )
+  }
+
+  const DateTemperature = () => {
+    return (
+      <>
+        <tr>
+          <th rowSpan={2}>온도</th>
+          <th>02:00</th>
+          <th>10:00</th>
+          <th>14:00</th>
+          <th>23:00</th>
+        </tr>
+        <tr>
+          <td colSpan={4}>정보가 없습니다.</td>
+        </tr>
+      </>
+    )
+  }
+
+  const DateBattery = () => {
+    return (
+      <tr>
+        <th>배터리</th>
+        <td colSpan={5}>정보가 없습니다.</td>
+      </tr>
+    )
+  }
+
+
+  return (
+    <>
+      <main className="pink">
+        <div className="flex-start main-guardian"><img src={Senior} alt="" />
+          <Title title={equipment['equipment_serial_number']} explanation={"복약, 온도, 배터리 현황을 확인하세요."} />
+        </div>
+
+        <CalendarAdmin data={{ onClick: calerndarClick }} />
+
+        <div className="content-wrap margin-top">
+          <div className="margin-top">
+            <table>
+              <thead>
+                <tr>
+                  <th rowSpan={2}>날짜</th>
+                  <th colSpan={5}>복약량</th>
+                  <th colSpan={4}>온도</th>
+                  <th rowSpan={2}>배터리</th>
+                </tr>
+                <tr>
+                  <th>식전</th>
+                  <th>아침</th>
+                  <th>점심</th>
+                  <th>저녁</th>
+                  <th>취침</th>
+                  <th>02:00</th>
+                  <th>10:00</th>
+                  <th>14:00</th>
+                  <th>23:00</th>
+                </tr>
+              </thead>
+
+              <tbody>
+                <tr>
+                  <td>2023-11-07</td>
+                  <td>0</td>
+                  <td>1</td>
+                  <td>1</td>
+                  <td>1</td>
+                  <td>0</td>
+                  <td>20℃</td>
+                  <td>25℃</td>
+                  <td>30℃</td>
+                  <td>20℃</td>
+                  <td>99%</td>
+                </tr>
+              </tbody>
+            </table>
+          </div>
+        </div>
+
+        <div className="content-wrap margin-top">
+          <DetailTitle contentTitle={"대상자의 복약률을 확인 할 수 있습니다."} />
+          <div className="main-guardian-chart margin-top">
+            <Chart9 />
+          </div>
+        </div>
+
+        <div className="btn-wrap flex-center">
+          <button className="btn-large gray-btn" onClick={() => { navigate(-1) }}>이전</button>
+        </div>
+
+        <Modal open={modalOpen} close={closeModal} header="시니어 정보 관리">
+          <div className="modal-visit board-wrap">
+            <table className="margin-bottom">
+              <tbody>
+                <DateMedication />
+                <DateTemperature />
+                <DateBattery />
+              </tbody>
+            </table>
+          </div>
+        </Modal>
+      </main>
+    </>
+  );
+}(No newline at end of file)
client/views/pages/equipment/EquipmentSelect.jsx
--- client/views/pages/equipment/EquipmentSelect.jsx
+++ client/views/pages/equipment/EquipmentSelect.jsx
@@ -574,6 +574,7 @@
           </thead>
           <tbody>
             {newEquipment.equipmentList.map((item, idx) => {
+              { console.log("item: ", item) }
               return (
                 <tr>
                   <td data-label="No">{newEquipment.equipmentListCount - idx - (newEquipmentSearch.currentPage - 1) * newEquipmentSearch.perPage}</td>
@@ -582,6 +583,7 @@
                   <td data-label="상태">{equipmentStates[item['equipment_state']]}</td>
                   <td data-label="관리">
                     <button className={"btn-small gray-btn"} onClick={() => modalEquipmentOpen(item)}>정보 수정</button>
+                    <button className={"btn-small gray-btn"} onClick={() => { navigate("/EquipmentDataSelect", { state: { equipment: item } }) }}>기기데이터 정보 조회</button>
                   </td>
                 </tr>
               )
client/views/pages/main/Main_agency.jsx
--- client/views/pages/main/Main_agency.jsx
+++ client/views/pages/main/Main_agency.jsx
@@ -1,4 +1,5 @@
 import React from "react";
+import { useNavigate, useLocation } from "react-router";
 import { useSelector } from "react-redux";
 import Title from "../../component/Title.jsx";
 import Table from "../../component/Table.jsx";
@@ -25,6 +26,9 @@
 import CommonUtil from "../../../resources/js/CommonUtil.js";
 
 export default function Main2() {
+  const navigate = useNavigate();
+  const location = useLocation();
+
   //전역 변수 저장 객체
   const state = useSelector((state) => { return state });
 
@@ -237,7 +241,7 @@
       <div className="flex-start margin-bottom2"><img src={medicinebox} alt="" /><TitleSmall title={"대상자 현황"} explanation={new Date(new Date().setDate(new Date().getDate() - 1)).toLocaleDateString().replace(/\./g, '').replace(/\s/g, '-') + " 기준"} /></div>
       <div className="main-grid-agency margin-bottom2">
         <ul className="content-box statistics-agency" background="#8ef3d1">
-          <li className="flex-start">
+          <li className="flex-start" onClick={() => { navigate("/Healthcare") }}>
             <img src={medicineAgency} alt="" />
             <div className="text">
               <p>미복약 위험 대상자</p>
@@ -246,7 +250,7 @@
           </li>
         </ul>
         <ul className="content-box statistics-agency" background="#ebe7b9" >
-          <li className="flex-start">
+          <li className="flex-start" onClick={() => { navigate("/Healthcare") }}>
             <img src={temperatureAgency} alt="" />
             <div className="text">
               <p>댁내 온도 위험 대상자</p>
@@ -255,7 +259,7 @@
           </li>
         </ul>
         <ul className="content-box statistics-agency" background="#5f9af3">
-          <li className="flex-start">
+          <li className="flex-start" onClick={() => { navigate("/Healthcare") }}>
             <img src={batteryAgency} alt="" />
             <div className="text">
               <p>배터리 부족 대상자</p>
@@ -264,7 +268,7 @@
           </li>
         </ul>
         <ul className="content-box statistics-agency" background="#8080FF">
-          <li className="flex-start">
+          <li className="flex-start" onClick={() => { navigate("/Healthcare") }}>
             <img src={wifioff} alt="" />
             <div className="text">
               <p>데이터 미확인 대상자</p>
client/views/pages/main/Main_agencyAdmin.jsx
--- client/views/pages/main/Main_agencyAdmin.jsx
+++ client/views/pages/main/Main_agencyAdmin.jsx
@@ -1,4 +1,5 @@
 import React, { useState } from "react";
+import { useNavigate, useLocation } from "react-router";
 import { useSelector } from "react-redux";
 
 
@@ -27,6 +28,8 @@
 import "leaflet/dist/leaflet.css";
 
 export default function Main_agencyAdmin() {
+  const navigate = useNavigate();
+  const location = useLocation();
 
   //전역 변수 저장 객체
   const state = useSelector((state) => { return state });
@@ -232,28 +235,28 @@
       <div className="main-grid-government">
         <div className="sub-grid-government">
           <ul className="content-box statistics-govern" background="#8ef3d1">
-            <li>
+            <li onClick={() => { navigate("/HealthcareAdmin") }}>
               <p><MedicationIcon sx={{ width: "50px", height: "50px", color: "#ffffff", background: "#076143", borderRadius: "50px" }} /></p>
               <p>{cityName} 미복약 위험 대상자</p>
               <p>0</p>
             </li>
           </ul>
           <ul className="content-box statistics-govern" background="#ebe7b9" >
-            <li>
+            <li onClick={() => { navigate("/HealthcareAdmin") }}>
               <p><DeviceThermostatIcon sx={{ width: "50px", height: "50px", color: "#ffffff", background: "#f1de05", borderRadius: "50px" }} /></p>
               <p>{cityName} 댁내 온도 위험 대상자</p>
               <p>{temperatureCount}</p>
             </li>
           </ul>
           <ul className="content-box statistics-govern" background="#5f9af3">
-            <li>
+            <li onClick={() => { navigate("/HealthcareAdmin") }}>
               <p><BatteryCharging20Icon sx={{ width: "50px", height: "50px", color: "#ffffff", background: "#5f9af3", borderRadius: "50px" }} /></p>
               <p>{cityName} 배터리 부족 대상자 </p>
               <p>{batteryCount}</p>
             </li>
           </ul>
           <ul className="content-box statistics-govern" background="#8080FF">
-            <li>
+            <li onClick={() => { navigate("/HealthcareAdmin") }}>
               <p><WifiOffIcon sx={{ width: "50px", height: "50px", padding: "5px", color: "#ffffff", background: "#8080FF", borderRadius: "50px", boxSizing: "border-box" }} /></p>
               <p>{cityName} 데이터 미확인 대상자 </p>
               <p>{batteryCount}</p>
client/views/pages/main/Main_government.jsx
--- client/views/pages/main/Main_government.jsx
+++ client/views/pages/main/Main_government.jsx
@@ -1,4 +1,5 @@
 import React, { useState } from "react";
+import { useNavigate, useLocation } from "react-router";
 import { useSelector } from "react-redux";
 
 
@@ -26,6 +27,8 @@
 import "leaflet/dist/leaflet.css";
 
 export default function Main_government() {
+  const navigate = useNavigate();
+  const location = useLocation();
 
   //전역 변수 저장 객체
   const state = useSelector((state) => { return state });
Add a comment
List