package com.leap.mes.ui.page
import android.widget.Toast
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Add
import androidx.compose.material.icons.filled.ArrowBack
import androidx.compose.material3.AlertDialog
import androidx.compose.material3.Button
import androidx.compose.material3.Card
import androidx.compose.material3.CardDefaults
import androidx.compose.material3.Divider
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.material3.TextField
import androidx.compose.material3.TopAppBar
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.lifecycle.viewmodel.compose.viewModel
import androidx.navigation.NavHostController
import androidx.navigation.compose.rememberNavController
import com.leap.mes.logic.entity.WorkInfo
import com.leap.mes.logic.viewModel.AppViewModelProvider
import com.leap.mes.logic.viewModel.ScbgViewModel
import com.leap.mes.ui.theme.MesTheme
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun Scbg(
navHostController: NavHostController,
viewModel: ScbgViewModel = viewModel(factory = AppViewModelProvider.Factory),
){
var openCamera by remember { mutableStateOf(false) }
val context = LocalContext.current // 获取上下文
if(viewModel.showDialog) {
dialog1(viewModel)
}
if(viewModel.showDialog2) {
dialog2(viewModel)
}
if(viewModel.showDialog3){
dialog3(viewModel)
}
if (viewModel.status == "信息不全") {
LaunchedEffect(Unit) {
Toast.makeText(context, "信息不全!", Toast.LENGTH_SHORT).show()
viewModel.status = ""
}
} else if (viewModel.status == "未押平") {
LaunchedEffect(Unit) {
Toast.makeText(context, "未押平!", Toast.LENGTH_SHORT).show()
viewModel.status = ""
}
}
Scaffold(
topBar = {
TopAppBar(
title = {
Box(modifier = Modifier.fillMaxWidth()) {
Text(
text = "生产报工",
color = Color.White,
modifier = Modifier.align(Alignment.Center) // 让标题居中
)
}
},
navigationIcon = {
IconButton(
onClick = {navHostController.navigate("lqrw") } //do something
) {
Icon(Icons.Filled.ArrowBack, "返回",tint = Color.White )
}
},
colors = TopAppBarDefaults.topAppBarColors(
containerColor = MaterialTheme.colorScheme.primary
),
actions ={
Icon(imageVector = Icons.Default.Add, contentDescription = null,tint = Color.White)
}
)
},
content = {paddingValues->
Column(
modifier = Modifier
.fillMaxSize()
.padding(16.dp)
.padding(top = paddingValues.calculateTopPadding()),
horizontalAlignment = Alignment.CenterHorizontally
) {
CameraArea(openCamera,onCameraStateChange = { newState -> openCamera = newState} )
Spacer(modifier = Modifier.height(16.dp))
WorkInfoCard(viewModel.workInfo!!)
Spacer(modifier = Modifier.height(20.dp))
Button(
onClick = {openCamera= true},
shape = RoundedCornerShape(15),
modifier = Modifier.width(400.dp)
) {
Text("点击扫码", fontSize = 18.sp)
}
}
}
)
}
@Composable
fun dialog1(viewModel:ScbgViewModel){
AlertDialog(
onDismissRequest = { viewModel.showDialog = false },
title = { Text("提示") },
text = {
Card(
modifier = Modifier.fillMaxWidth(),
shape = RoundedCornerShape(8.dp),
elevation = CardDefaults.cardElevation(4.dp)
) {
Column(modifier = Modifier.padding(16.dp)) {
Text("总数量:${viewModel.workInfo?.quantity}", fontSize = 18.sp)
Text("合格数量:${viewModel.workInfo?.qualified}", fontSize = 18.sp)
Text("废品数量:${viewModel.workInfo?.waste}", fontSize = 18.sp)
Text("丢失数量:${viewModel.workInfo?.lose}", fontSize = 18.sp)
}
}
},
confirmButton = {
Button(onClick = { viewModel.showDialog = false }) {
Text("不接收")
}
Button(onClick = { viewModel.showDialog = false }) {
Text("接收")
}
}
)
}
@Composable
fun dialog2(viewModel:ScbgViewModel){
var qualified by remember { mutableStateOf("") }
var lose by remember { mutableStateOf("") }
var waste by remember { mutableStateOf("") }
AlertDialog(
onDismissRequest = { viewModel.showDialog2 = false },
text = {
Card(
modifier = Modifier.fillMaxWidth(),
shape = RoundedCornerShape(8.dp),
elevation = CardDefaults.cardElevation(4.dp)
) {
Column(modifier = Modifier.padding(16.dp)) {
Text("请输入数量信息", fontSize = 18.sp)
TextField(
value = qualified,
onValueChange = { input ->
qualified = input // 更新 qualified 的值
viewModel.workInfo?.qualified = input.toIntOrNull() ?: 0
},
label = { Text("合格数量") },
modifier = Modifier.fillMaxWidth(),
keyboardOptions = KeyboardOptions.Default.copy(keyboardType = KeyboardType.Number)
)
TextField(
value = waste,
onValueChange = { input ->
waste = input
viewModel.workInfo?.waste = input.toIntOrNull() ?: 0 },
label = { Text("废品数量") },
modifier = Modifier.fillMaxWidth(),
keyboardOptions = KeyboardOptions.Default.copy(keyboardType = KeyboardType.Number)
)
TextField(
value = lose,
onValueChange = {input ->
lose = input
viewModel.workInfo?.lose = input.toIntOrNull() ?: 0 },
label = { Text("丢失数量") },
modifier = Modifier.fillMaxWidth(),
keyboardOptions = KeyboardOptions.Default.copy(keyboardType = KeyboardType.Number)
)
}
}
},
confirmButton = {
Button(onClick = { viewModel.updateWorkInfo()}) {
Text("提交")
}
Button(onClick = { viewModel.showDialog2 = false }) {
Text("取消")
}
}
)
}
@Composable
fun dialog3(viewModel:ScbgViewModel){
AlertDialog(
onDismissRequest = { viewModel.showDialog3 = false },
text={
Column(modifier = Modifier.padding(16.dp)) {
Text("计件工资:${viewModel.wages?.numWages}元", fontSize = 18.sp)
Text("计时工资:${viewModel.wages?.timeWages}元", fontSize = 18.sp)
Text("总工资:${viewModel.general}元", fontSize = 18.sp)
}
},
confirmButton = {
Button(onClick = { viewModel.showDialog3 = false }) {
Text("确定")
}
}
)
}
@Composable
fun CameraArea(openCamera:Boolean, onCameraStateChange: (Boolean) -> Unit){
Box(
modifier = Modifier
.fillMaxWidth()
.height(250.dp) // 设置高度
.clip(RoundedCornerShape(8.dp))
) {
if (openCamera) {
CameraPreviewScreen{
onCameraStateChange(false)
}
} else {
Text("请点击下方按钮开始扫描", modifier = Modifier.align(Alignment.Center))
}
}
}
@Composable
fun WorkInfoCard(workInfo:WorkInfo){
Card(
modifier = Modifier.fillMaxWidth(),
shape = RoundedCornerShape(8.dp),
elevation = CardDefaults.cardElevation(4.dp)
) {
Column(modifier = Modifier.padding(16.dp)) {
Row(modifier = Modifier.fillMaxWidth(), verticalAlignment = Alignment.CenterVertically) {
Text("工号:${workInfo.id}", fontSize = 18.sp, modifier = Modifier.weight(1f))
Text("姓名:${workInfo.name}", fontSize = 18.sp, modifier = Modifier.weight(1f))
}
Divider(modifier = Modifier.padding(vertical = 8.dp))
Text("模具号:${workInfo.dieId?:' '}", fontSize = 18.sp)
Text("设备号:${workInfo.machineId?:' '}", fontSize = 18.sp)
Text("物料号:${workInfo.materialId?:' '}", fontSize = 18.sp)
Text("开始时间:${workInfo.startTime?:' '}", fontSize = 18.sp)
Text("结束时间:${workInfo.endTime?:' '}", fontSize = 18.sp)
Divider(modifier = Modifier.padding(vertical = 8.dp))
}
}
}
@Preview(showBackground = true)
@Composable
fun Preview() {
}