...
This commit is contained in:
@@ -24,13 +24,31 @@ import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.sp
|
||||
import model.ConfigIndex
|
||||
import model.KisSession
|
||||
import service.AutoTradingManager
|
||||
|
||||
@OptIn(ExperimentalMaterialApi::class)
|
||||
@Composable
|
||||
fun TradingDecisionLog() {
|
||||
var searchQuery by remember { mutableStateOf("") }
|
||||
var selectedFilter by remember { mutableStateOf("전체") }
|
||||
val filterOptions = listOf("전체", "BUY", "SELL", "HOLD", "SETTING")
|
||||
val filterOptions = listOf("전체", "BUY", "SELL", "HOLD", "SETTING","ANALYZER")
|
||||
var llmAnalyser by remember { mutableStateOf(AutoTradingManager.llmAnalyser) }
|
||||
LaunchedEffect(AutoTradingManager.llmAnalyser) {
|
||||
llmAnalyser = AutoTradingManager.llmAnalyser
|
||||
}
|
||||
var llmNews by remember { mutableStateOf(AutoTradingManager.llmNews) }
|
||||
LaunchedEffect(AutoTradingManager.llmNews) {
|
||||
llmNews = AutoTradingManager.llmNews
|
||||
}
|
||||
var tradeToken by remember { mutableStateOf(AutoTradingManager.tradeToken) }
|
||||
LaunchedEffect(AutoTradingManager.tradeToken) {
|
||||
tradeToken = AutoTradingManager.tradeToken
|
||||
}
|
||||
var webSocketConnect by remember { mutableStateOf(AutoTradingManager.webSocketConnect) }
|
||||
LaunchedEffect(AutoTradingManager.webSocketConnect) {
|
||||
webSocketConnect = AutoTradingManager.webSocketConnect
|
||||
}
|
||||
|
||||
|
||||
// [핵심] 원본 로그에서 필터 조건에 맞는 리스트만 산출
|
||||
val filteredLogs = TradingLogStore.decisionLogs.filter { log ->
|
||||
@@ -42,8 +60,17 @@ fun TradingDecisionLog() {
|
||||
|
||||
Row(modifier = Modifier.fillMaxSize().background(Color(0xFFF2F2F2))) {
|
||||
Column(modifier = Modifier.weight(0.5f).padding(8.dp).fillMaxHeight().background(Color.White)) {
|
||||
Text("AI 자동매매 실시간 로그", style = MaterialTheme.typography.h6)
|
||||
|
||||
Text("AI 자동매매 실시간 로그", style = MaterialTheme.typography.h6)
|
||||
Row(
|
||||
modifier = Modifier.fillMaxWidth().padding(vertical = 8.dp),
|
||||
horizontalArrangement = Arrangement.Start
|
||||
) {
|
||||
StatusIndicator("주식 분석기",llmAnalyser)
|
||||
StatusIndicator("뉴스 처리기",llmNews)
|
||||
StatusIndicator("한투 인증서",tradeToken)
|
||||
StatusIndicator("실시간 감시",webSocketConnect)
|
||||
}
|
||||
// [추가] 상단 검색 및 필터 UI
|
||||
Column(modifier = Modifier.padding(vertical = 8.dp)) {
|
||||
// 1. 검색창
|
||||
@@ -95,6 +122,7 @@ fun TradingDecisionLog() {
|
||||
"SETTING" -> Color(0xFFFFA500)
|
||||
"SELL" -> Color(0xFF800080)
|
||||
"HOLD" -> Color.Gray
|
||||
"ANALYZER" -> Color.Green
|
||||
else -> Color.Gray
|
||||
},
|
||||
fontWeight = FontWeight.ExtraBold
|
||||
@@ -288,4 +316,29 @@ fun TradingDecisionLog() {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun StatusIndicator(label: String, isActive: Boolean, onRestart: (() -> Unit)? = null) {
|
||||
Row(
|
||||
verticalAlignment = androidx.compose.ui.Alignment.CenterVertically,
|
||||
modifier = Modifier.padding(end = 12.dp)
|
||||
) {
|
||||
Text(text = label, style = MaterialTheme.typography.body2)
|
||||
Spacer(Modifier.width(4.dp))
|
||||
// 상태 아이콘 (초록 O / 빨간 X)
|
||||
Text(
|
||||
text = if (isActive) "●" else "×",
|
||||
color = if (isActive) Color.Green else Color.Red,
|
||||
fontSize = 18.sp,
|
||||
fontWeight = FontWeight.Bold
|
||||
)
|
||||
|
||||
// 문제가 있을 때(false)만 재구동 유도 버튼 표시
|
||||
// if (!isActive && onRestart != null) {
|
||||
// TextButton(onClick = onRestart, contentPadding = PaddingValues(0.dp)) {
|
||||
// Text("재구동", color = Color.Blue, fontSize = 11.sp, textDecoration = androidx.compose.ui.text.style.TextDecoration.Underline)
|
||||
// }
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user