添加物品消耗单位输入

This commit is contained in:
zxj
2025-08-21 17:01:52 +08:00
parent 7a80a6053b
commit b44e1a35bb
13 changed files with 171 additions and 32 deletions
@@ -218,7 +218,7 @@ fun ReceiptLeftView(
"采购单号:${currentPurchaseInfo?.purCode ?: "-"}",
style = gray96a0aaTextStyle.copy(fontSize = 20.sp)
)
Spacer(modifier = Modifier.width(120.dp))
Spacer(modifier = Modifier.width(30.dp))
Text(
"收货单号:${currentPurchaseInfo?.receiveCode ?: "-"}",
style = gray96a0aaTextStyle.copy(fontSize = 20.sp)
@@ -266,9 +266,10 @@ fun ProductIdentification(viewModel: SelfProcurementViewModel) {
.fillMaxWidth()
) {
// 菜品识别
IdentityView(showSearchView = true, onOptionSelected = {
viewModel.updateSelectedItemWithSearch(it)
},
IdentityView(
showSearchView = true, onOptionSelected = {
viewModel.updateSelectedItemWithSearch(it)
},
checkedItem = selectedItem,
baseViewModel = viewModel,
pageType = PageType.SELF_PROCUREMENT
@@ -349,14 +350,26 @@ private fun DialogRightEditView(viewModel: SelfProcurementViewModel) {
onValueChange = {
viewModel.updateGoodsAddParam(goodsAddParam.copy(goodName = it))
})
// ColumnInputText(
// modifier = Modifier.width(474.dp),
// label = "物品编码(系统生成)",
// value = "",
// enabled = false,
// onValueChange = {
//// viewModel.updateFormState(formState.copy(goodCode = it))
// })
ColumnInputText(
modifier = Modifier.width(474.dp),
label = "物品编码(系统生成)",
value = "",
enabled = false,
modifier = Modifier
.weight(1f)
.width(474.dp),
label = "净材率",
value = goodsAddParam.netRateStr,
inputType = InputType.Percent,
onValueChange = {
// viewModel.updateFormState(formState.copy(goodCode = it))
})
viewModel.updateGoodsAddParam(goodsAddParam.copy(netRate = it.toSafeFloat()))
}, trailingLabel = "%"
)
}
Row(
modifier = Modifier.fillMaxWidth(),
@@ -397,17 +410,7 @@ private fun DialogRightEditView(viewModel: SelfProcurementViewModel) {
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.spacedBy(60.dp)
) {
ColumnInputText(
modifier = Modifier
.weight(1f)
.width(474.dp),
label = "净材率",
value = goodsAddParam.netRateStr,
inputType = InputType.Percent,
onValueChange = {
viewModel.updateGoodsAddParam(goodsAddParam.copy(netRate = it.toSafeFloat()))
}, trailingLabel = "%"
)
ColumnInputText(
modifier = Modifier.width(474.dp),
value = goodsAddParam.unitIdStr,
@@ -421,6 +424,7 @@ private fun DialogRightEditView(viewModel: SelfProcurementViewModel) {
)
},
)
}
Column {
@@ -477,12 +481,45 @@ private fun DialogRightEditView(viewModel: SelfProcurementViewModel) {
if (it.isValidAmount()) {
viewModel.updateGoodsAddParam(goodsAddParam.copy(purchasePrice = it.toSafeBigDecimal()))
}
}, inputType = InputType.Decimal, hasNext = false
}, inputType = InputType.Decimal, hasNext = true
)
Spacer(modifier = Modifier.width(24.dp))
Text("", style = AppTypography.gray96a0aaTextStyle)
}
}
Column {
Text(text = "消耗单位", style = AppTypography.black141428TextStyle)
Spacer(modifier = Modifier.height(20.dp))
Row(
modifier = Modifier
.height(92.dp)
.fillMaxWidth()
.dashedBorder()
.padding(vertical = 16.dp, horizontal = 26.dp),
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.SpaceBetween
) {
Text("1", style = AppTypography.black141428TextStyle.bold())
Spacer(modifier = Modifier.width(24.dp))
Text(goodsAddParam.unitIdStr, style = AppTypography.gray96a0aaTextStyle)
Spacer(modifier = Modifier.width(24.dp))
Text(text = "=", style = AppTypography.gray96a0aaTextStyle)
Spacer(modifier = Modifier.width(24.dp))
CustomTextField(
modifier = Modifier.width(200.dp),
value = goodsAddParam.consumeValue,
placeholderValue = "请录入",
isInitUpdate = true,
onValueChange = {
viewModel.updateGoodsAddParam(goodsAddParam.copy(consumeValue = it))
}, inputType = InputType.Decimal, hasNext = false
)
Spacer(modifier = Modifier.width(24.dp))
Text("", style = AppTypography.gray96a0aaTextStyle)
}
}
Spacer(modifier = Modifier.height(24.dp))
}
}
@@ -592,6 +629,39 @@ private fun DialogAddPurchaseUnitEditView(viewModel: SelfProcurementViewModel) {
}
}
Column {
Text(text = "消耗单位", style = AppTypography.black141428TextStyle)
Spacer(modifier = Modifier.height(20.dp))
Row(
modifier = Modifier
.height(92.dp)
.fillMaxWidth()
.dashedBorder()
.padding(vertical = 16.dp, horizontal = 26.dp),
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.SpaceBetween
) {
Text("1", style = AppTypography.black141428TextStyle.bold())
Spacer(modifier = Modifier.width(24.dp))
Text(goodsAddUnitParam.unitIdStr, style = AppTypography.gray96a0aaTextStyle)
Spacer(modifier = Modifier.width(24.dp))
Text(text = "=", style = AppTypography.gray96a0aaTextStyle)
Spacer(modifier = Modifier.width(24.dp))
CustomTextField(
modifier = Modifier.width(260.dp),
value = goodsAddUnitParam.consumeValueTempValue,
isInitUpdate = true,
placeholderValue = "请录入",
enabled = goodsAddUnitParam.consumeValue.isEmpty(),
onValueChange = {
viewModel.updateGoodsPurchaseUnit(goodsAddUnitParam.copy(consumeValueTemp = it))
}, inputType = InputType.Decimal, hasNext = false
)
Spacer(modifier = Modifier.width(24.dp))
Text("", style = AppTypography.gray96a0aaTextStyle)
}
}
Column(
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally,
@@ -602,6 +672,7 @@ private fun DialogAddPurchaseUnitEditView(viewModel: SelfProcurementViewModel) {
style = AppTypography.gray999999TextStyle
)
}
Spacer(modifier = Modifier.height(24.dp))
}
}
@@ -734,7 +805,8 @@ private fun SelfProductEditView(
viewModel.updateGoodsPurchaseUnit(
goodsAddUnitParam.copy(
goodsId = selectedItem!!.goodsId,
unitId = selectedItem!!.kcUnitId
unitId = selectedItem!!.kcUnitId,
consumeValue = selectedItem!!.consumeValue
)
)
viewModel.updateAddPurchaseUnitDialog(true)
@@ -30,6 +30,8 @@ import com.sw.inbound.ui.theme.AppTypography
import com.sw.inbound.utils.InteractionUtils.Debouncer
import com.sw.inbound.utils.rememberPhotoCapture
import com.sw.inbound.viewmodel.BaseViewModel
import com.sw.inbound.viewmodel.ReceiptViewModel
import com.sw.inbound.viewmodel.SelfProcurementViewModel
import timber.log.Timber
enum class PageType {
@@ -94,6 +96,11 @@ fun IdentityView(
// 处理拍照成功的逻辑
baseViewModel.updateLastPhotoUri(savedUri)
Timber.d("photoUri = $savedUri")
if (pageType == PageType.SELF_PROCUREMENT) {
(baseViewModel as SelfProcurementViewModel).updateSelectedItem(null)
} else if (pageType == PageType.RECEIPT_PRODUCT) {
(baseViewModel as ReceiptViewModel).updateSelectedItem(null)
}
baseViewModel.getIdentityList(savedUri)
},
onError = { error ->
@@ -113,7 +120,17 @@ fun IdentityView(
Timber.d("LaunchedEffect weightInfo1 = $weightInfo, lastWeight = $lastWeight")
if (weightInfo - lastWeight > 1.0) {
Timber.d("LaunchedEffect pageType = $pageType, receiptList = ${receiptList.size}")
if (pageType == PageType.RECEIPT_PRODUCT && receiptList.isNotEmpty() || pageType == PageType.SELF_PROCUREMENT) {
var canIdentity = false
if (pageType == PageType.RECEIPT_PRODUCT) {
val selectItem = (baseViewModel as ReceiptViewModel).selectedItem.value
canIdentity =
receiptList.isNotEmpty() && (selectItem == null || selectItem.goodId == 0)
} else if (pageType == PageType.SELF_PROCUREMENT) {
val selectItem = (baseViewModel as SelfProcurementViewModel).selectedItem.value
canIdentity = selectItem == null || selectItem.goodsId == 0
}
Timber.d("LaunchedEffect canIdentity = $canIdentity")
if (canIdentity) {
debouncer.debounce {
takePhoto()
}
@@ -137,6 +154,9 @@ fun IdentityView(
if (showSearchView) {
Spacer(modifier = Modifier.height(30.dp))
CustomSearchView(onSearchClick = {
if (pageType == PageType.SELF_PROCUREMENT) {
(baseViewModel as SelfProcurementViewModel).updateSelectedItem(null)
}
searchInfo = it
baseViewModel.searchGoodsInfoList(it)
})
@@ -54,7 +54,6 @@ fun AddProductDialog(
color = Color.White,
shadowElevation = 0.dp
) {
ToastUtils.ToastComposable()
Column(
modifier = Modifier
.fillMaxSize()
@@ -96,6 +95,7 @@ fun AddProductDialog(
)
}
}
ToastUtils.ToastComposable()
}
}
}
@@ -55,7 +55,6 @@ fun AddPurchaseUnitDialog(
color = Color.White,
shadowElevation = 0.dp
) {
ToastUtils.ToastComposable()
Column(
modifier = Modifier
.fillMaxSize()
@@ -98,6 +97,7 @@ fun AddPurchaseUnitDialog(
)
}
}
ToastUtils.ToastComposable()
}
}
}
@@ -69,7 +69,6 @@ fun ReceiptTipDialog(
color = Color.White,
shadowElevation = 0.dp
) {
ToastUtils.ToastComposable()
Column(
modifier = Modifier
.fillMaxSize()
@@ -223,6 +222,7 @@ fun ReceiptTipDialog(
)
}
}
ToastUtils.ToastComposable()
}
}
}