lscsc/Process_dash_pub
0
1"""2유틸리티 함수 모음3"""4 5import os6import pandas as pd7import streamlit as st8from datetime import datetime9import logging10 11# 로깅 설정12logging.basicConfig(13 level=logging.INFO,14 format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',15 handlers=[16 logging.FileHandler('app.log'),17 logging.StreamHandler()18 ]19)20 21logger = logging.getLogger(__name__)22 23def setup_page():24 """페이지 기본 설정"""25 st.set_page_config(26 page_title="유리 장섬유 생산공정 품질관리 시스템",27 page_icon="🏭",28 layout="wide",29 initial_sidebar_state="expanded"30 )31 32 # 커스텀 CSS 적용33 st.markdown("""34 <style>35 .process-box {36 background-color: #f8f9fa;37 padding: 15px;38 border-radius: 8px;39 margin-bottom: 15px;40 border-left: 4px solid #4285F4;41 }42 43 .issue-box {44 background-color: #fff3e0;45 padding: 15px;46 border-radius: 8px;47 margin-bottom: 15px;48 border-left: 4px solid #ff9800;49 }50 51 .defect-box {52 background-color: #f8f9fa;53 padding: 15px;54 border-radius: 8px;55 margin-bottom: 15px;56 border: 1px solid #e0e0e0;57 }58 59 .stButton>button {60 width: 100%;61 }62 63 .css-1d391kg {64 padding-top: 1rem;65 }66 </style>67 """, unsafe_allow_html=True)68 69def initialize_session_state():70 """세션 상태 초기화"""71 if 'password_correct' not in st.session_state:72 st.session_state.password_correct = False73 74 if 'data_loaded' not in st.session_state:75 st.session_state.data_loaded = False76 77 if 'data_dict' not in st.session_state:78 st.session_state.data_dict = {}79 80 if 'last_data_refresh' not in st.session_state:81 st.session_state.last_data_refresh = None82 83 if 'tab_selection' not in st.session_state:84 st.session_state.tab_selection = "공정 현황"85 86def check_password():87 """비밀번호 확인"""88 if st.session_state.password_correct:89 return True90 91 st.markdown("""92 <style>93 .password-container {94 max-width: 400px;95 margin: 0 auto;96 padding: 20px;97 background-color: #f8f9fa;98 border-radius: 10px;99 box-shadow: 0 2px 4px rgba(0,0,0,0.1);100 }101 </style>102 """, unsafe_allow_html=True)103 104 with st.form("password_form"):105 st.markdown("""106 <div class="password-container">107 <h3>로그인</h3>108 <p>시스템에 접근하려면 비밀번호를 입력하세요.</p>109 </div>110 """, unsafe_allow_html=True)111 112 password = st.text_input("비밀번호", type="password")113 submit = st.form_submit_button("확인")114 115 if submit:116 if password == "1234": # 실제 운영 시에는 보안된 방식으로 변경117 st.session_state.password_correct = True118 return True119 else:120 st.error("비밀번호가 올바르지 않습니다.")121 return False122 123 return False124 125def safe_read_excel(filepath):126 """안전한 Excel 파일 읽기"""127 try:128 if os.path.exists(filepath):129 return pd.read_excel(filepath)130 else:131 logger.warning(f"파일을 찾을 수 없습니다: {filepath}")132 return pd.DataFrame()133 except Exception as e:134 logger.error(f"파일 읽기 오류 ({filepath}): {str(e)}")135 return pd.DataFrame()