최정우 최정우 2023-06-15
230615 최정우 보호자 메인화면 수정중
@640e3d5705757d5ca547284985a1b1ebdc8ae82f
client/views/pages/main/Main_guardian.jsx
--- client/views/pages/main/Main_guardian.jsx
+++ client/views/pages/main/Main_guardian.jsx
@@ -48,33 +48,25 @@
 
   //검색
   const searching = () => {
-    if (CommonUtil.isEmpty(state.loginUser) == false
-      && state.loginUser['authority'] == 'ROLE_GUARDIAN' & isMySenior) {
-      senior['senior_id'] = mySenior;
-      setSenior({ ...senior });
-      seniorSelectOne();
-    } else if (state['seniorList'] != null && state['seniorList'].length > 0) {
-      setSenior(state['seniorList'][0]);
-    }
-    if (CommonUtil.isEmpty(state.loginUser) == false
-      && state.loginUser['authority'] == 'ROLE_SENIOR') {
-      setSenior({ ...senior });
-      seniorSelectOne();
-    }
 
-    seniorMedicationSelectList(senior);
-    seniorTemperatureSelectListByDay(senior);
-    visitRecordSelectList(senior);
+    if (CommonUtil.isEmpty(seniorSearch['senior_id']) == false) {
+      seniorSelectOne();
+      seniorMedicationSelectList();
+      seniorTemperatureSelectListByDay();
+      visitRecordSelectList();
+    } else {
+      return;
+    }
   }
-
-  const [mySenior, setMySenior] = React.useState();
-  const [isMySenior, setIsMySenior] = React.useState(false);
-  React.useEffect(() => {
-    searching();
-  }, [mySenior, isMySenior])
 
   //시니어 정보
   const [senior, setSenior] = React.useState({
+    'user_id': null,
+    'user_name': null,
+    'senior_id':null,
+  });
+
+  const [seniorSearch, setSeniorSearch] = React.useState({
     'user_id': state.loginUser['authority'] == 'ROLE_SENIOR' ? state.loginUser['user_id'] : null,
     'user_name': state.loginUser['authority'] == 'ROLE_SENIOR' ? state.loginUser['user_name'] : null,
     'senior_id': state.loginUser['authority'] == 'ROLE_SENIOR' ? state.loginUser['user_id'] : null,
@@ -87,7 +79,7 @@
       headers: {
         'Content-Type': 'application/json; charset=UTF-8'
       },
-      body: JSON.stringify(senior),
+      body: JSON.stringify(seniorSearch),
     }).then((response) => response.json()).then((data) => {
       console.log("seniorSelectOne data : ", data);
       setSenior(data);
@@ -97,18 +89,18 @@
   };
 
   const handleChangeSelect = (e) => {
-    setMySenior(e.target.value);
-    setIsMySenior(true);
+    console.log('handleChangeSelect : ', e.target.value);
+    setSeniorSearch(e.target.value);
   };
 
   const SelectBox = () => {
     if (CommonUtil.isEmpty(state.loginUser) == false
-    && state.loginUser['authority'] == 'ROLE_GUARDIAN' && state['seniorList'].length > 1) {
+      && state.loginUser['authority'] == 'ROLE_GUARDIAN' && state['seniorList'].length > 1) {
       return (
-        <select className="margin-bottom2" onChange={handleChangeSelect} value={mySenior}>
+        <select className="margin-bottom2" onChange={handleChangeSelect}>
           {state['seniorList'].map((item, idx) => {
             return (
-              <option key={idx} value={item['senior_id']}>{item['user_name']}</option>
+              <option key={idx} value={item}>{item['user_name']}</option>
             )
           })}
         </select>
@@ -121,16 +113,16 @@
   const [seniorMedicationList, setSeniorMedicationList] = React.useState([]);
   const [showMedicationTimeCode, setShowMedicationTimeCode] = React.useState({});
   //특정 대상자의 실제 복약 정보 목록 조회
-  const seniorMedicationSelectList = (seniorNum) => {
+  const seniorMedicationSelectList = () => {
     fetch("/user/seniorMedicationSelectList.json", {
       method: "POST",
       headers: {
         'Content-Type': 'application/json; charset=UTF-8'
       },
-      body: JSON.stringify(seniorNum),
+      body: JSON.stringify(seniorSearch),
     }).then((response) => response.json()).then((data) => {
       setSeniorMedicationList(data);
-      seniorMedicationSelectListByDay(data, seniorNum);
+      seniorMedicationSelectListByDay(data);
     }).catch((error) => {
       console.log('seniorMedicationSelectList() /user/seniorMedicationSelectList.json error : ', error);
     });
@@ -140,13 +132,13 @@
   const [seniorMedicationListByDay, setSeniorMedicationListByDay] = React.useState([]);
   const [stackChartData, setStackChartData] = React.useState([]);
   //특정 대상자의 일별, 복약시간별 복약 목록 조회
-  const seniorMedicationSelectListByDay = (seniorMedicationList, seniorNum) => {
+  const seniorMedicationSelectListByDay = (seniorMedicationList) => {
     fetch("/user/seniorMedicationSelectListByDay.json", {
       method: "POST",
       headers: {
         'Content-Type': 'application/json; charset=UTF-8'
       },
-      body: JSON.stringify(seniorNum),
+      body: JSON.stringify(seniorSearch),
     }).then((response) => response.json()).then((data) => {
       setSeniorMedicationListByDay(data);
       let showMedicationTimeCode = {};
@@ -184,13 +176,13 @@
   const [seniorTemperatureListByDay, setSeniorTemperatureListByDay] = React.useState([]);
   const [stackTemperatureData, setStackTemperatureData] = React.useState([]);
   //특정 대상자의 일별, 시간별 온도 목록 조회
-  const seniorTemperatureSelectListByDay = (seniorNum) => {
+  const seniorTemperatureSelectListByDay = () => {
     fetch("/user/seniorTemperatureSelectListByDay.json", {
       method: "POST",
       headers: {
         'Content-Type': 'application/json; charset=UTF-8'
       },
-      body: JSON.stringify(seniorNum),
+      body: JSON.stringify(seniorSearch),
     }).then((response) => response.json()).then((data) => {
       setSeniorTemperatureListByDay(data);
       if (CommonUtil.isEmpty(data) == false) {
@@ -214,13 +206,13 @@
   //방문 기록 정보
   const [visitRecordList, setVisitRecordList] = React.useState({});
   //방문 기록 목록 조회
-  const visitRecordSelectList = (seniorNum) => {
+  const visitRecordSelectList = () => {
     fetch("/welfare/visitRecordSelectList.json", {
       method: "POST",
       headers: {
         'Content-Type': 'application/json; charset=UTF-8'
       },
-      body: JSON.stringify(seniorNum),
+      body: JSON.stringify(seniorSearch),
     }).then((response) => response.json()).then((data) => {
       console.log("방문 기록 목록 조회 결과(건수) : ", data);
       setVisitRecordList(data['visitRecordList']);
@@ -229,14 +221,39 @@
     });
   }
 
+  // React.useEffect(() => {
+  //   searching();
+  // }, []);
+
   React.useEffect(() => {
     searching();
-  }, []);
+  }, [seniorSearch]);
+
+  React.useEffect(() => {
+    if (CommonUtil.isEmpty(state['seniorList']) == false) {
+      setSeniorSearch(state['seniorList'][0]);
+    } else {
+      return;
+    }
+  }, [state['seniorList']])
 
   return (
     <>
       <main className="pink">
-        <SelectBox />
+        
+      {
+        CommonUtil.isEmpty(state.loginUser) == false
+        && state.loginUser['authority'] == 'ROLE_GUARDIAN' && state['seniorList'].length > 1 ? 
+        <select className="margin-bottom2" onChange={handleChangeSelect}>
+          {state['seniorList'].map((item, idx) => {
+            return (
+              <option key={idx} value={item}>{item['user_name']}</option>
+            )
+          })}
+        </select>
+        : null
+      }
+        
         <div className="flex-start main-guardian"><img src={Senior} alt="" />
           <Title title={`${senior['user_name']} 어르신`} explanation={"방문, 복약, 온도, 배터리 현황을 확인하세요."} />
         </div>
 
client/views/pages/main/Main_guardian.jsx_back_230615 (added)
+++ client/views/pages/main/Main_guardian.jsx_back_230615
@@ -0,0 +1,248 @@
+import React, { useEffect } 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";
+import Calendar from "../../component/Calendar.jsx";
+import TitleSmall from "../../component/TitleSmall.jsx";
+import DateDay from "../../component/DateDay.jsx";
+import DateMonth from "../../component/DateMonth.jsx";
+import Chart6 from "../../component/chart/Chart6.jsx";
+import ClearIcon from '@mui/icons-material/Clear';
+import CheckCircleOutlineIcon from '@mui/icons-material/CheckCircleOutline';
+import ErrorIcon from '@mui/icons-material/Error';
+import Senior from '../../../resources/files/images/senior.png';
+import battery from '../../../resources/files/images/battery.png';
+import zeropercent from '../../../resources/files/images/zeropercent.png';
+import pullpercent from '../../../resources/files/images/pullpercent.png';
+import twentypercent from '../../../resources/files/images/twentypercent.png';
+import fortypercent from '../../../resources/files/images/fortypercent.png';
+import eightytypercent from '../../../resources/files/images/eightypercent.png';
+import sixtytypercent from '../../../resources/files/images/sixtypercent.png';
+import calendar from '../../../resources/files/images/calendar.png';
+import temperature from '../../../resources/files/images/temperature.png';
+import medicine from '../../../resources/files/images/medicine.png';
+import calendarBig from '../../../resources/files/images/calendarBig.png';
+import mornon from '../../../resources/files/images/mornon.png';
+import mornoff from '../../../resources/files/images/mornoff.png';
+import lunchon from '../../../resources/files/images/lunchon.png';
+import lunchoff from '../../../resources/files/images/lunchoff.png';
+import dinneron from '../../../resources/files/images/dinneron.png';
+import dinneroff from '../../../resources/files/images/dinneroff.png';
+import percent_m_0 from '../../../resources/files/images/percent_m_0.png';
+import percent_m_20 from '../../../resources/files/images/percent_m_20.png';
+import percent_m_40 from '../../../resources/files/images/percent_m_40.png';
+import percent_m_60 from '../../../resources/files/images/percent_m_60.png';
+import percent_m_80 from '../../../resources/files/images/percent_m_80.png';
+import percent_m_100 from '../../../resources/files/images/percent_m_100.png';
+
+import CommonUtil from "../../../resources/js/CommonUtil.js";
+
+export default function Main_guardian() {
+  const navigate = useNavigate();
+  const location = useLocation();
+
+  //전역 변수 저장 객체
+  const state = useSelector((state) => { return state });
+
+  //검색
+  const searching = () => {
+    if (CommonUtil.isEmpty(state.loginUser) == false) {
+      if (state.loginUser['authority'] == 'ROLE_GUARDIAN') {
+        if (isMySenior) {
+          senior['senior_id'] = mySenior;
+          setSenior({ ...senior });
+          seniorSelectOne();
+        } else if (state['seniorList'] != null && state['seniorList'].length > 0) {
+          setSenior(state['seniorList'][0]);
+        }
+      } else if (state.loginUser['authority'] == 'ROLE_SENIOR') {
+        setSenior({ ...senior });
+        seniorSelectOne();
+      }
+    }
+
+    seniorMedicationSelectList(senior);
+    seniorTemperatureSelectListByDay(senior);
+    visitRecordSelectList(senior);
+  }
+
+  const [mySenior, setMySenior] = React.useState(null);
+  const [isMySenior, setIsMySenior] = React.useState(false);
+  React.useEffect(() => {
+    searching();
+  }, [mySenior, isMySenior, state['seniorList']])
+
+  //시니어 정보
+  const [senior, setSenior] = React.useState({
+    'user_id': state.loginUser['authority'] == 'ROLE_SENIOR' ? state.loginUser['user_id'] : null,
+    'user_name': state.loginUser['authority'] == 'ROLE_SENIOR' ? state.loginUser['user_name'] : null,
+    'senior_id': state.loginUser['authority'] == 'ROLE_SENIOR' ? state.loginUser['user_id'] : null,
+  });
+
+  //시니어 상세 조회
+  const seniorSelectOne = () => {
+    fetch("/user/seniorSelectOne.json", {
+      method: "POST",
+      headers: {
+        'Content-Type': 'application/json; charset=UTF-8'
+      },
+      body: JSON.stringify(senior),
+    }).then((response) => response.json()).then((data) => {
+      console.log("seniorSelectOne data : ", data);
+      setSenior(data);
+    }).catch((error) => {
+      console.log('seniorSelectOne() /user/seniorSelectOne.json error : ', error);
+    });
+  };
+
+  const handleChangeSelect = (e) => {
+    setMySenior(e.target.value);
+    setIsMySenior(true);
+  };
+
+  const SelectBox = () => {
+    if (CommonUtil.isEmpty(state.loginUser) == false
+      && state.loginUser['authority'] == 'ROLE_GUARDIAN' && state['seniorList'].length > 1) {
+      return (
+        <select className="margin-bottom2" onChange={handleChangeSelect} value={mySenior}>
+          {state['seniorList'].map((item, idx) => {
+            return (
+              <option key={idx} value={item['senior_id']}>{item['user_name']}</option>
+            )
+          })}
+        </select>
+      )
+    }
+  }
+
+
+  //특정 대상자의 실제 복약 정보
+  const [seniorMedicationList, setSeniorMedicationList] = React.useState([]);
+  const [showMedicationTimeCode, setShowMedicationTimeCode] = React.useState({});
+  //특정 대상자의 실제 복약 정보 목록 조회
+  const seniorMedicationSelectList = (seniorNum) => {
+    fetch("/user/seniorMedicationSelectList.json", {
+      method: "POST",
+      headers: {
+        'Content-Type': 'application/json; charset=UTF-8'
+      },
+      body: JSON.stringify(seniorNum),
+    }).then((response) => response.json()).then((data) => {
+      setSeniorMedicationList(data);
+      seniorMedicationSelectListByDay(data, seniorNum);
+    }).catch((error) => {
+      console.log('seniorMedicationSelectList() /user/seniorMedicationSelectList.json error : ', error);
+    });
+  };
+
+  //특정 대상자의 일별, 복약시간별 복약 목록
+  const [seniorMedicationListByDay, setSeniorMedicationListByDay] = React.useState([]);
+  const [stackChartData, setStackChartData] = React.useState([]);
+  //특정 대상자의 일별, 복약시간별 복약 목록 조회
+  const seniorMedicationSelectListByDay = (seniorMedicationList, seniorNum) => {
+    fetch("/user/seniorMedicationSelectListByDay.json", {
+      method: "POST",
+      headers: {
+        'Content-Type': 'application/json; charset=UTF-8'
+      },
+      body: JSON.stringify(seniorNum),
+    }).then((response) => response.json()).then((data) => {
+      setSeniorMedicationListByDay(data);
+      let showMedicationTimeCode = {};
+      for (let i = 0; i < seniorMedicationList.length; i++) {
+        showMedicationTimeCode[seniorMedicationList[i]] = true;
+      }
+      setShowMedicationTimeCode(showMedicationTimeCode);
+      if (CommonUtil.isEmpty(data) == false) {
+        let _stackChartData = [];
+        for (let i = 0; i < data.length; i++) {
+          let sum = 0;      // 실제 복약량
+          let counter = 0;  // 복약해야하는 양
+          for (let j = 0; j < data[i]['medication_time_code_list'].length; j++) {
+            if (CommonUtil.isEmpty(showMedicationTimeCode[data[i]['medication_time_code_list'][j]]) == false) {
+              counter++;
+              if (i > 0) {
+                sum += data[i]['medication_time_code_count_list'][j];
+              }
+            } else {
+              continue;
+            }
+          }
+          _stackChartData.push({ "xName": data[i]['medication_default_date'], "sum": sum, "total": counter })
+        }
+        setStackChartData(_stackChartData);
+      }
+    }).catch((error) => {
+      console.log('seniorMedicationSelectListByDay() /user/seniorMedicationSelectListByDay.json error : ', error);
+    });
+  };
+
+  const seniorTemperatureList = ['02:00', '10:00', '14:00', '23:00']
+
+  //특정 대상자의 일별, 시간별 온도 목록
+  const [seniorTemperatureListByDay, setSeniorTemperatureListByDay] = React.useState([]);
+  const [stackTemperatureData, setStackTemperatureData] = React.useState([]);
+  //특정 대상자의 일별, 시간별 온도 목록 조회
+  const seniorTemperatureSelectListByDay = (seniorNum) => {
+    fetch("/user/seniorTemperatureSelectListByDay.json", {
+      method: "POST",
+      headers: {
+        'Content-Type': 'application/json; charset=UTF-8'
+      },
+      body: JSON.stringify(seniorNum),
+    }).then((response) => response.json()).then((data) => {
+      setSeniorTemperatureListByDay(data);
+      if (CommonUtil.isEmpty(data) == false) {
+        let _stackTemperatureData = [];
+        let chartData = {};
+        for (let i = 0; i < data.length; i++) {
+          chartData = {
+            xName: data[i]['temperature_date'],
+          };
+          chartData['temperature'] = data[i]['temperature_data'];
+          chartData['time'] = data[i]['temperature_time'];
+          _stackTemperatureData.push(chartData);
+        }
+        setStackTemperatureData(_stackTemperatureData);
+      }
+    }).catch((error) => {
+      console.log('seniorTemperatureSelectListByDay() /user/seniorTemperatureSelectListByDay.json error : ', error);
+    });
+  };
+
+  //방문 기록 정보
+  const [visitRecordList, setVisitRecordList] = React.useState({});
+  //방문 기록 목록 조회
+  const visitRecordSelectList = (seniorNum) => {
+    fetch("/welfare/visitRecordSelectList.json", {
+      method: "POST",
+      headers: {
+        'Content-Type': 'application/json; charset=UTF-8'
+      },
+      body: JSON.stringify(seniorNum),
+    }).then((response) => response.json()).then((data) => {
+      console.log("방문 기록 목록 조회 결과(건수) : ", data);
+      setVisitRecordList(data['visitRecordList']);
+    }).catch((error) => {
+      console.log('visitRecordSelectList() /user/visitRecordSelectList.json error : ', error);
+    });
+  }
+
+  // React.useEffect(() => {
+  //   searching();
+  // }, []);
+
+  return (
+    <>
+      <main className="pink">
+        <SelectBox />
+        <div className="flex-start main-guardian"><img src={Senior} alt="" />
+          <Title title={`${senior['user_name']} 어르신`} explanation={"방문, 복약, 온도, 배터리 현황을 확인하세요."} />
+        </div>
+        <Calendar data={{ senior: senior, medication: stackChartData, temperature: stackTemperatureData, visitRecordList: visitRecordList }} />
+      </main>
+    </>
+  );
+}(No newline at end of file)
Add a comment
List