import React from "react"; import { useNavigate } from "react-router"; import { useSelector } from "react-redux"; import { useStateWithCallbackLazy } from 'use-state-with-callback'; import DetailTitle from "../../component/DetailTitle.jsx"; 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 GovernmentEquipmentSelect() { const navigate = useNavigate(); //전역 변수 저장 객체 const state = useSelector((state) => { return state }); const defaultGovernmentId = CommonUtil.isEmpty(state.loginUser) ? null : state.loginUser['government_id']; const defaultAgencyId = CommonUtil.isEmpty(state.loginUser) ? null : state.loginUser['agency_id']; //기관 계층 구조 목록 const [orgListOfHierarchy, setOrgListOfHierarchy] = React.useState([]); //기관(관리, 시행) 계층 구조 목록 조회 const orgSelectListOfHierarchy = () => { fetch("/org/orgSelectListOfHierarchy.json", { method: "POST", headers: { 'Content-Type': 'application/json; charset=UTF-8' }, body: JSON.stringify({ 'government_id': defaultGovernmentId, 'agency_id': defaultAgencyId }), }).then((response) => response.json()).then((data) => { console.log("기관(관리, 시행) 계층 구조 목록 조회 : ", data); setOrgListOfHierarchy(data); }).catch((error) => { console.log('orgSelectListOfHierarchy() /org/orgSelectListOfHierarchy.json error : ', error); }); }; //검색 변수 (초기화값) const [org, setOrg] = React.useState({ 'government_id': defaultGovernmentId, 'agency_id': defaultAgencyId, }); //올잇메디 선택 const adminChange = () => { org['government_id'] = null; org['agency_id'] = null; setOrg({ ...org }); } //관리 기관 선택 const governmentChange = (government_id) => { org['government_id'] = government_id; org['agency_id'] = null; setOrg({ ...org }); rentalEquipmentSelectList(1); } //시행 기관 선택 const agencyChange = (government_id, agency_id) => { org['government_id'] = government_id; org['agency_id'] = agency_id; setOrg({ ...org }); rentalEquipmentSelectList(1); } // 시스템 코드 - 장비 상태 const [equipmentStates, setEquipmentStates] = React.useState({}); // 시스템 코드 - 장비 상태 조회 const equipmentStatesSelect = () => { console.log('equipmentStatesSelect Function Run'); //fetch post fetch("/common/systemCode/equipmentStatesSelect.json", { method: "POST", headers: { 'Content-Type': 'application/json; charset=UTF-8' }, body: JSON.stringify({}) }).then((response) => response.json()).then((data) => { console.log('equipmentStatesSelect response : ', data); setEquipmentStates(data); }).catch((error) => { console.log('equipmentStatesSelect error : ', error); }); } //공통 검색 정보 const [equipmentSearch, setEquipmentSearch] = React.useState({ 'equipment_state': null, 'searchType': null, 'searchText': null, }); //장비 정보 변경 const equipmentSearchChange = (targetKey, value) => { equipmentSearch[targetKey] = value; setEquipmentSearch({ ...equipmentSearch }); } //장비 검색 const equipmentSearching = () => { for (const key in equipmentSearch) { deliveryEquipmentSearch[key] = equipmentSearch[key]; rentalEquipmentSearch[key] = equipmentSearch[key]; } setDeliveryEquipmentSearch({ ...deliveryEquipmentSearch }); setRentalEquipmentSearch({ ...rentalEquipmentSearch }); deliveryEquipmentSelectList(1); rentalEquipmentSelectList(1); } const equipmentSearchingEnter = (key) => { if (key == 'Enter') { equipmentSearching(); } else { return; } } //입고 및 미대여 장비 검색 정보 const [deliveryEquipmentSearch, setDeliveryEquipmentSearch] = React.useState({ 'government_id': defaultGovernmentId, 'senior_id': 'IS_NULL', 'currentPage': 1, 'perPage': 10, }); //입고 및 미대여 목록 const [deliveryEquipment, setDeliveryEquipment] = React.useState({ equipmentList: [], equipmentListCount: 0 }); //입고 및 미대여 목록 조회 const deliveryEquipmentSelectList = (currentPage) => { deliveryEquipmentSearch.currentPage = CommonUtil.isEmpty(currentPage) ? 1 : currentPage; setDeliveryEquipmentSearch({ ...deliveryEquipmentSearch }); fetch("/equipment/equipmentSelectList.json", { method: "POST", headers: { 'Content-Type': 'application/json; charset=UTF-8' }, body: JSON.stringify(deliveryEquipmentSearch) }).then((response) => response.json()).then((data) => { console.log('deliveryEquipmentSelectList response : ', data); setDeliveryEquipment(data); }).catch((error) => { console.log('deliveryEquipmentSelectList error : ', error); }); } //입고 및 미대여 장비 검색 정보 const [rentalEquipmentSearch, setRentalEquipmentSearch] = React.useState({ 'government_id': defaultGovernmentId, 'agency_id': org['agency_id'], 'senior_id': 'IS_NOT_NULL', 'currentPage': 1, 'perPage': 10, }); //입고 및 미대여 목록 const [rentalEquipment, setRentalEquipment] = React.useState({ equipmentList: [], equipmentListCount: 0 }); //입고 및 미대여 목록 조회 const rentalEquipmentSelectList = (currentPage) => { rentalEquipmentSearch.currentPage = CommonUtil.isEmpty(currentPage) ? 1 : currentPage; rentalEquipmentSearch['agency_id'] = org['agency_id']; setRentalEquipmentSearch({ ...rentalEquipmentSearch }); fetch("/equipment/equipmentSelectList.json", { method: "POST", headers: { 'Content-Type': 'application/json; charset=UTF-8' }, body: JSON.stringify(rentalEquipmentSearch) }).then((response) => response.json()).then((data) => { console.log('rentalEquipmentSelectList response : ', data); setRentalEquipment(data); }).catch((error) => { console.log('rentalEquipmentSelectList error : ', error); }); } //장비 초기값 const equipmentInit = { 'equipment_serial_number': null, 'equipment_type': 'SMART_PILLBOX', 'equipment_name': null, 'equipment_state': null, 'equipment_product_date': null, 'equipment_stock_date': null, 'equipment_insert_datetime': null, 'equipment_insert_user_id': null, 'equipment_update_datetime': null, 'equipment_update_user_id': null, 'government_id': defaultGovernmentId, 'agency_id': defaultAgencyId, 'senior_id': null } //장비 const [equipment, setEquipment] = useStateWithCallbackLazy({ ...equipmentInit }); //각 데이터별로 Dom 정보 담을 Ref 생성 const equipmentRef = React.useRef({ ...equipmentInit }); //장비 정보 변경 const equipmentValueChange = (targetKey, value) => { let newEquipment = { ...equipment }; newEquipment[targetKey] = value; setEquipment(newEquipment); } //장비 유효성 검사 const equipmentValidation = () => { const target = equipment; const targetRef = equipmentRef; if (CommonUtil.isEmpty(target['equipment_name']) == true) { targetRef.current['equipment_name'].focus(); alert("모델명을 입력해 주세요."); return false; } if (CommonUtil.isEmpty(target['equipment_serial_number']) == true) { targetRef.current['equipment_serial_number'].focus(); alert("S/N을 입력해 주세요."); return false; } /* if (CommonUtil.isEmpty(target['equipment_product_date']) == true) { targetRef.current['equipment_product_date'].focus(); alert("생산일자를 선택해 주세요."); return false; } */ if (CommonUtil.isEmpty(target['equipment_stock_date']) == true) { targetRef.current['equipment_stock_date'].focus(); alert("입고일자를 선택해 주세요."); return false; } return true; } //시리얼 번호 중복 확인 const [isSerialNumberCheck, setIsSerialNumberCheck] = React.useState(false); const [isEquipmentCheck, setIsEquipmentCheck] = React.useState(false); //시리얼 번호 중복 검사 const serialNumberCheck = () => { if (CommonUtil.isEmpty(equipment['equipment_serial_number']) == true) { equipmentRef.current['equipment_serial_number'].focus(); alert("모델명을 입력해 주세요."); return false; } fetch("/equipment/equipmentSelectSerialNumber.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['equipment']) != false) { setIsSerialNumberCheck(true); if (data['serialNumberChk']['count'] == 1) { setIsEquipmentCheck(true); } else { setIsEquipmentCheck(false); } equipmentRef.current['equipment_product_date'].focus(); alert("사용가능한 시리얼 번호 입니다."); buttonChange(); } else { setIsSerialNumberCheck(false); equipmentRef.current['equipment_serial_number'].focus(); alert("이미 존재하는 시리얼 번호 입니다."); } }).catch((error) => { console.log('userIdCheck() /user/equipmentSelectSerialNumber.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); fetch("/equipment/equipmentInsert.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('equipmentInsert() /equipment/equipmentInsert.json error : ', error); }); } // 미확인 장비 등록 const equipmentInsertUpdate = () => { if (equipmentValidation() == false) { return; } equipment['equipment_state'] = 'AVAILABLE'; fetch("/equipment/equipmentUpdate.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('equipmentUpdate() /equipment/equipmentUpdate.json error : ', error); }); } //장비 수정 const equipmentUpdate = () => { if (equipmentValidation() == false) { return; } fetch("/equipment/equipmentUpdate.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('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); }); } // 장비 관리(등록,수정) 모달창 const [modalEquipmentIsOpen, setModalEquipmentIsOpen] = React.useState(false); // 장비 관리(등록,수정) 모달창 열기 const modalEquipmentOpen = (item) => { if (CommonUtil.isEmpty(item)) { //equipment['equipment_insert_datetime'] = null; /* if (CommonUtil.isEmpty(orgListOfHierarchy[0]['agencyList']) == false) { equipmentInit['agency_id'] = orgListOfHierarchy[0]['agencyList'][0]['agency_id']; } */ setIsSerialNumberCheck(false); setEquipment({ ...equipmentInit }); } else { setEquipment(item); } setModalEquipmentIsOpen(true); }; // 장비 관리(등록,수정) 모달창 닫기 const modalEquipmentClose = () => { setModalEquipmentIsOpen(false); }; //장비 대여 모달 여부 const [modalRentalIsOpen, setModalRentalIsOpen] = React.useState(false); //장비 대여 오픈 const modalRentalOpen = (item) => { setSelectEquipment(item); mySenior['search']['agency_id'] = item['agency_id']; mySeniorSelectList(1); setModalRentalIsOpen(true); }; //장비 대여 닫기 const modalRentalClose = () => { setModalRentalIsOpen(false); }; //장비 대여 등록 정보 const [selectEquipment, setSelectEquipment] = React.useState() //장비 대여 등록 const equipmentRentalInsert = (senior) => { if (confirm('해당 장비를 추가하시겠습니까?') == false) { return; } selectEquipment['agency_id'] = senior['agency_id']; // 장비에 시행기관이 '없음'일 경우 배포한 시니어의 시행기관을 등록 selectEquipment['senior_id'] = senior['senior_id']; selectEquipment['rental_start_date'] = new Date(); fetch("/equipment/equipmentRentalInsert.json", { method: "POST", headers: { 'Content-Type': 'application/json; charset=UTF-8' }, body: JSON.stringify(selectEquipment), }).then((response) => response.json()).then((data) => { console.log("장비 대여 등록 결과(건수) : ", data); if (data > 0) { alert("추가완료"); orgSelectListOfHierarchy(); equipmentStatesSelect(); equipmentSearching(); modalRentalClose(); } else { alert("장비추가에 실패하였습니다. 관리자에게 문의바랍니다."); } }).catch((error) => { console.log('seniorSelectOne() /user/seniorSelectOne.json error : ', error); }); }; // 소속기관 내 시니어 const [mySenior, setMySenior] = React.useState({ seniorList: [], seniorListCount: 0, search: { 'government_id': defaultGovernmentId, 'agency_id': defaultAgencyId, 'user_use': true, 'equipment_search': 'IS_NULL', 'currentPage': 1, 'perPage': 5, } }); // 소속기관 내 시니어 목록 조회 const mySeniorSelectList = (currentPage) => { mySenior.search.currentPage = CommonUtil.isEmpty(currentPage) ? 1 : currentPage; fetch("/user/seniorSelectList.json", { method: "POST", headers: { 'Content-Type': 'application/json; charset=UTF-8' }, body: JSON.stringify(mySenior.search), }).then((response) => response.json()).then((data) => { data.search = mySenior.search; console.log(" 소속기관 내 시니어 목록 조회 : ", data); setMySenior(data); }).catch((error) => { console.log('seniorSelectList() /user/seniorSelectList.json error : ', error); }); } //Mounted React.useEffect(() => { orgSelectListOfHierarchy(); equipmentStatesSelect(); equipmentSearching(); }, []); //대여(사용) 중 장비 목록 내용 const rentalContent = ( <> {rentalEquipment.equipmentList.map((item, idx) => { return ( ) })} {CommonUtil.isEmpty(rentalEquipment.equipmentList) ? : null}
No 모델명 시리얼넘버 입고일자 장비상태 기관 대여시행자 대여일 대여여부 장비사용대상자
{rentalEquipment.equipmentListCount - idx - (rentalEquipmentSearch.currentPage - 1) * rentalEquipmentSearch.perPage} {item['equipment_name']} {item['equipment_serial_number']} {item['equipment_stock_date']} {equipmentStates[item['equipment_state']]} {item['agency_name']} {item['rental_detail_insert_user_name']} ({item['rental_detail_insert_user_id']}) {item['rental_start_date']} {CommonUtil.isEmpty(item['user_name']) == false ? '대여중' : '미대여'} {item['user_name']}
조회된 데이터가 없습니다
); //현재 탭 Index const [tabIndex, setTabIndex] = React.useState(0); //탭 초기화 const tab = [{ title: `사용가능 장비 (${deliveryEquipment.equipmentListCount})`, content: (
{deliveryEquipment.equipmentList.map((item, idx) => { return ( ) })} {CommonUtil.isEmpty(deliveryEquipment.equipmentList) ? : null}
No 모델명 시리얼넘버 입고일자 장비상태 기관 장비대여 관리
{deliveryEquipment.equipmentListCount - idx - (deliveryEquipmentSearch.currentPage - 1) * deliveryEquipmentSearch.perPage} {item['equipment_name']} {item['equipment_serial_number']} {item['equipment_stock_date']} {equipmentStates[item['equipment_state']]} {item['agency_name'] != null ? item['agency_name'] : '없음'}
조회된 데이터가 없습니다
) }, { title: `사용중인 장비 (${rentalEquipment.equipmentListCount})`, content: (
{/* {state.loginUser['authority'] == 'ROLE_ADMIN' ? 올잇메디 : null} */}
{/* */}
{rentalContent}
) }]; return (
{CommonUtil.isEmpty(equipment['equipment_insert_datetime']) == false ? : null} {/* */}
*종류
*모델명 equipmentRef.current['equipment_name'] = el} onChange={(e) => equipmentValueChange('equipment_name', e.target.value)} />
*시리얼넘버 {CommonUtil.isEmpty(equipment['equipment_insert_datetime']) ? <> equipmentRef.current['equipment_serial_number'] = el} onChange={(e) => { equipmentValueChange('equipment_serial_number', e.target.value); setIsSerialNumberCheck(false); }} /> : }
생산일자 equipmentRef.current['equipment_product_date'] = el} onChange={(e) => equipmentValueChange('equipment_product_date', e.target.value)} />
*입고일자 equipmentRef.current['equipment_stock_date'] = el} onChange={(e) => equipmentValueChange('equipment_stock_date', e.target.value)} />
*장비상태
{Object.keys(equipmentStates).map((key, idx) => { return (
{ e.target.checked ? equipmentValueChange('equipment_state', e.target.value) : null }} />
) })}
시행기관 선택 {orgListOfHierarchy.map((item, idx) => { return ( ) })}
{CommonUtil.isEmpty(equipment['equipment_insert_datetime']) ? !isEquipmentCheck ? : : <> }
{mySenior.seniorList.map((item, idx) => { return ( ) })} {CommonUtil.isEmpty(mySenior.seniorList) ? : null}
No 소속기관명 이름 생년월일 성별 배포
{mySenior.seniorListCount - idx - (mySenior.search.currentPage - 1) * mySenior.search.perPage} {item['agency_name']} {item['user_name']} {item['user_birth']} {item['user_gender']}
조회된 데이터가 없습니다
{/*
납품일자
{ equipmentDelivery['delivery_date'] = e.target.value; setEquipmentDelivery({...equipmentDelivery})} }/>
    {orgListOfHierarchy.map((item, idx) => { return (
  • {item['government_name']}
  • )})}
*/}
equipmentSearchChange('searchText', e.target.value)} onKeyUp={(e) => equipmentSearchingEnter(e.key)} />
    {tab.map((item, idx) => { return (
  • setTabIndex(idx)} className={idx == tabIndex ? 'active' : null}> {item.title}
  • ) })}
  • {tab[tabIndex].content}
); }