采购单入库商品默认显示采购单信息;采集数据显示优化

This commit is contained in:
2026-03-05 16:26:38 +08:00
parent f219c57fad
commit d50b11c9aa
9 changed files with 321 additions and 274 deletions
@@ -28,6 +28,7 @@ import com.sw.inbound.databinding.LayoutEmptySearchBinding
import com.sw.inbound.dialog.CollectSearchDialog import com.sw.inbound.dialog.CollectSearchDialog
import com.sw.inbound.dialog.CustomDialog import com.sw.inbound.dialog.CustomDialog
import com.sw.inbound.dialog.Loading import com.sw.inbound.dialog.Loading
import com.sw.inbound.dialog.WarnDialog
import com.sw.inbound.model.response.SearchGoodsInfo import com.sw.inbound.model.response.SearchGoodsInfo
import com.sw.inbound.objbox.Food import com.sw.inbound.objbox.Food
import com.sw.inbound.objbox.FoodCollectionBean import com.sw.inbound.objbox.FoodCollectionBean
@@ -182,8 +183,7 @@ class FoodCollectionActivity : ComponentActivity() {
} }
// vectorThread() // vectorThread()
// uploadAllImage() // uploadAllImage()
showUploadDialog()
upload()
} }
binding.btnTakePhoto.clickWithDebounce(800) { binding.btnTakePhoto.clickWithDebounce(800) {
takePhoto() takePhoto()
@@ -224,6 +224,20 @@ class FoodCollectionActivity : ComponentActivity() {
} }
} }
private fun showUploadDialog() {
val goodsName = searchGoodsList[clickIndex].goodsName
WarnDialog(
context = this,
content = "选择错误会影响识别结果,请确认当前采集物品是:${goodsName}",
cancelBlock = {
},
confirmBlock = {
upload()
}
) .show()
}
private var pageNo = 1 private var pageNo = 1
private var clickIndex = -1 private var clickIndex = -1
@@ -38,19 +38,13 @@ import com.sw.inbound.model.request.UploadInfo
import com.sw.inbound.model.response.DictType import com.sw.inbound.model.response.DictType
import com.sw.inbound.model.response.GoodsInfo import com.sw.inbound.model.response.GoodsInfo
import com.sw.inbound.model.response.SearchGoodsInfo import com.sw.inbound.model.response.SearchGoodsInfo
import com.sw.inbound.objbox.Food
import com.sw.inbound.objbox.FoodModule import com.sw.inbound.objbox.FoodModule
import com.sw.inbound.objbox.FoodModule.IdNameScore import com.sw.inbound.objbox.FoodModule.IdNameScore
import com.sw.inbound.objbox.FoodModule.bitmap2FloatArray
import com.sw.inbound.objbox.Food_
import com.sw.inbound.objbox.ObjectBox
import com.sw.inbound.sdk.SensorScaleUtils import com.sw.inbound.sdk.SensorScaleUtils
import com.sw.inbound.utils.AssetsTool
import com.sw.inbound.utils.BitmapCropper import com.sw.inbound.utils.BitmapCropper
import com.sw.inbound.utils.BitmapSaver import com.sw.inbound.utils.BitmapSaver
import com.sw.inbound.utils.CameraUtils import com.sw.inbound.utils.CameraUtils
import com.sw.inbound.utils.DateTimeUtils import com.sw.inbound.utils.DateTimeUtils
import com.sw.inbound.utils.FileUtils
import com.sw.inbound.utils.ImageUtil import com.sw.inbound.utils.ImageUtil
import com.sw.inbound.utils.LogSaveUtil import com.sw.inbound.utils.LogSaveUtil
import com.sw.inbound.utils.PreciseDelayHandler import com.sw.inbound.utils.PreciseDelayHandler
@@ -63,7 +57,6 @@ import com.sw.inbound.utils.ext.toast
import com.sw.inbound.viewmodel.ReceiptViewModel import com.sw.inbound.viewmodel.ReceiptViewModel
import com.sw.inbound.viewmodel.UserViewModel import com.sw.inbound.viewmodel.UserViewModel
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import io.objectbox.query.Query
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking
import okhttp3.RequestBody import okhttp3.RequestBody
@@ -483,7 +476,7 @@ abstract class GoodsListActivity : ComponentActivity() {
context = this, context = this,
list = goodsList.toMutableList(), list = goodsList.toMutableList(),
goodsFile = file, goodsFile = file,
goodsName = name, goodsName = name
) { ) {
GoodsSearchDialog(this).show() GoodsSearchDialog(this).show()
}.apply { }.apply {
@@ -85,6 +85,8 @@ class ReceiptActivity : GoodsListActivity() {
list.forEach { goodsInfo -> list.forEach { goodsInfo ->
goodsInfo.recUnitPriceTaxInBak = goodsInfo.recUnitPriceTaxIn goodsInfo.recUnitPriceTaxInBak = goodsInfo.recUnitPriceTaxIn
goodsInfo.recUnitPriceTaxIn = 0.0 goodsInfo.recUnitPriceTaxIn = 0.0
goodsInfo.recPriceExItemBak = goodsInfo.recPriceExItem
goodsInfo.receiveCountBak = goodsInfo.receiveCount
goodsInfo.unitNameBak = goodsInfo.unitName goodsInfo.unitNameBak = goodsInfo.unitName
goodsInfo.receivedNumBak = goodsInfo.receivedNum goodsInfo.receivedNumBak = goodsInfo.receivedNum
} }
@@ -79,6 +79,7 @@ class CollectSearchDialog(
it.setEnableLoadMore(false) it.setEnableLoadMore(false)
it.setOnRefreshListener { it.setOnRefreshListener {
pageNo = 1 pageNo = 1
this@CollectSearchDialog.clickIndex = -1
val searchName = binding.etInputGoods.text.toString().trim() val searchName = binding.etInputGoods.text.toString().trim()
getCollectGoods(searchName) getCollectGoods(searchName)
} }
@@ -121,17 +122,13 @@ class CollectSearchDialog(
private val searchAdapter by lazy { private val searchAdapter by lazy {
CollectSearchAdapter(list).apply { CollectSearchAdapter(list).apply {
isStateViewEnable = true isStateViewEnable = true
//setOnItemClickListener { _, _, position -> setOnItemClickListener { _, _, position ->
// this@CollectSearchDialog.clickIndex = position activity?.lifecycleScope?.launch {
// if (list[position].isSelected) { val goodsName = list[position].goodsName?:""
// return@setOnItemClickListener val count = ObjectBox.count(goodsName)
// } activity?.toast("已采集数据${count}")
// list.forEach { item -> }
// item.isSelected = false }
// }
// list[position].isSelected = true
// notifyDataSetChanged()
//}
addOnItemChildClickListener(R.id.ivDelete) { _, _, position -> addOnItemChildClickListener(R.id.ivDelete) { _, _, position ->
this@CollectSearchDialog.clickIndex = position this@CollectSearchDialog.clickIndex = position
list.forEach { item -> list.forEach { item ->
@@ -139,7 +136,9 @@ class CollectSearchDialog(
} }
list[position].isSelected = true list[position].isSelected = true
notifyDataSetChanged() notifyDataSetChanged()
showDeleteDialog(position) showDeleteDialog(position) {
this@CollectSearchDialog.clickIndex = -1
}
} }
} }
} }
@@ -147,7 +146,12 @@ class CollectSearchDialog(
private fun showDeleteDialog(position: Int, deleteAction: () -> Unit = {}) { private fun showDeleteDialog(position: Int, deleteAction: () -> Unit = {}) {
WarnDialog( WarnDialog(
context = context, context = context,
content = "请确认是否删除物品:${list[position].goodsName}", content = "请确认是否删除物品:${list[position].goodsName?.split("WP")?.get(0)}",
cancelBlock = {
this@CollectSearchDialog.clickIndex = -1
list[position].isSelected = false
searchAdapter.notifyItemChanged(position)
},
confirmBlock = { confirmBlock = {
// Thread { // Thread {
// }.start() // }.start()
@@ -8,11 +8,9 @@ import androidx.recyclerview.widget.LinearLayoutManager
import com.sw.inbound.activity.GoodsListActivity import com.sw.inbound.activity.GoodsListActivity
import com.sw.inbound.adapter.RecognizeAdapter import com.sw.inbound.adapter.RecognizeAdapter
import com.sw.inbound.databinding.DialogGoodsRecognizeBinding import com.sw.inbound.databinding.DialogGoodsRecognizeBinding
import com.sw.inbound.databinding.LayoutEmptyRecognizeBinding
import com.sw.inbound.model.response.SearchGoodsInfo import com.sw.inbound.model.response.SearchGoodsInfo
import com.sw.inbound.utils.ext.clickWithDebounce import com.sw.inbound.utils.ext.clickWithDebounce
import com.sw.inbound.utils.ext.gone import com.sw.inbound.utils.ext.gone
import com.sw.inbound.utils.ext.toast
import com.sw.inbound.utils.ext.visible import com.sw.inbound.utils.ext.visible
import java.io.File import java.io.File
@@ -114,28 +114,7 @@ class GoodsStoreDialog(
) { dictType -> ) { dictType ->
try { try {
v.hideKeyboard() v.hideKeyboard()
binding.tvProcurementUnit.run { loadDropdownMenu(dictType)
text = dictType.value
tag = dictType.id
}
val unit = dictType.value
binding.tvCountUnit.text = unit
binding.etProcurementCount.let {
//it.isEnabled = true
it.inputType = if (unit == "千克" || unit == "公斤" || unit == "") {
InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL
} else {
InputType.TYPE_CLASS_NUMBER
}
}
val first = goods.unitVoList!!.first { it.businessUnitId == dictType.id }
val stringBuilder =
StringBuilder().append("1").append(dictType.value).append("=")
.append(first.purchaseValue!!.toInt().toString())
.append(goods.kcUnitName).append("").append("1")
.append(goods.kcUnitName).append("=").append(first.consumeValue)
.append("")
binding.tvUnitCalculate.text = stringBuilder.toString()
//val count = getUnitCount(dictType.id!!) //val count = getUnitCount(dictType.id!!)
//if (count.isBlank() || "0" == count) { //if (count.isBlank() || "0" == count) {
// //context.toast("入库数量不能为0") // //context.toast("入库数量不能为0")
@@ -206,9 +185,60 @@ class GoodsStoreDialog(
if (it.isNullOrBlank()) invisible() else visible() if (it.isNullOrBlank()) invisible() else visible()
} }
} }
setPurchaseOrderInfo()
addWeightListener() addWeightListener()
} }
/**
* 加载下拉菜单
*/
private fun loadDropdownMenu(dictType: DictType) {
binding.tvProcurementUnit.run {
text = dictType.value
tag = dictType.id
}
val unit = dictType.value
binding.tvCountUnit.text = unit
binding.etProcurementCount.let {
//it.isEnabled = true
it.inputType = if (unit == "千克" || unit == "公斤" || unit == "") {
InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL
} else {
InputType.TYPE_CLASS_NUMBER
}
}
val first = goods.unitVoList!!.first { it.businessUnitId == dictType.id }
val stringBuilder =
StringBuilder().append("1").append(dictType.value).append("=")
.append(first.purchaseValue!!.toInt().toString())
.append(goods.kcUnitName).append("").append("1")
.append(goods.kcUnitName).append("=").append(first.consumeValue)
.append("")
binding.tvUnitCalculate.text = stringBuilder.toString()
}
/**
* 设置采购单信息
*/
private fun setPurchaseOrderInfo() {
isLoadPurchaseOrderInfo = false
val item = activity?.goodsList?.firstOrNull { it.goodId == goods.id }
if (item == null || dropdownList.isEmpty()) return
val unit = item.unitNameBak
val price = item.recPriceExItemBak
val amount = item.recUnitPriceTaxInBak
val count = item.receiveCountBak
val dictType = dropdownList.firstOrNull { it.value == unit }
if (dictType == null) return
loadDropdownMenu(dictType)
count?.let { binding.etProcurementCount.setText("$count") }
price?.let { binding.tvProcurementPrice.text = "$price" }
amount?.let { binding.etProcurementAmount.setText("$amount") }
isLoadPurchaseOrderInfo = true
}
private var isLoadPurchaseOrderInfo = true
private fun addWeightListener() { private fun addWeightListener() {
activity?.readWeightInfo { weight -> activity?.readWeightInfo { weight ->
if (abs(this.realWeight - weight) < 10 && binding.etProcurementCount.text.isNotBlank()) { if (abs(this.realWeight - weight) < 10 && binding.etProcurementCount.text.isNotBlank()) {
@@ -217,7 +247,7 @@ class GoodsStoreDialog(
} }
this.realWeight = weight this.realWeight = weight
binding.tvTotalWeight.text = getSpannable(weight) binding.tvTotalWeight.text = getSpannable(weight)
if (binding.etProcurementCount.isFocused) { if (isLoadPurchaseOrderInfo || binding.etProcurementCount.isFocused) {
return@readWeightInfo return@readWeightInfo
} }
val unitTag = binding.tvProcurementUnit.tag val unitTag = binding.tvProcurementUnit.tag
@@ -334,10 +364,10 @@ class GoodsStoreDialog(
collectGoodsVector(uri) { collectGoodsVector(uri) {
activity?.uploadImage(goods.id!!, goods.goodsName!!, imageFile) activity?.uploadImage(goods.id!!, goods.goodsName!!, imageFile)
} }
binding.root.postDelayed({ binding.root.postDelayed({
Loading.dismiss() Loading.dismiss()
confirm(unitName, count, price, totalPrice) confirm(unitName, count, price, totalPrice)
}, 500) }, 500)
} }
cameraUtils.addFailCallback { cameraUtils.addFailCallback {
binding.root.postDelayed({ binding.root.postDelayed({
@@ -350,7 +380,7 @@ class GoodsStoreDialog(
} }
} }
private fun confirm(unitName:String, count:Double, price:Double, totalPrice:Double?) { private fun confirm(unitName: String, count: Double, price: Double, totalPrice: Double?) {
val id = binding.tvProcurementUnit.tag.toString() val id = binding.tvProcurementUnit.tag.toString()
val unitVo = goods.unitVoList!!.first { it.businessUnitId == id } val unitVo = goods.unitVoList!!.first { it.businessUnitId == id }
confirmBlock( confirmBlock(
@@ -464,7 +494,7 @@ class GoodsStoreDialog(
private var imageFile: File? = null private var imageFile: File? = null
// private var box: Box<Food>? = null // private var box: Box<Food>? = null
private fun collectGoodsVector(imageUri:Uri, block: ()-> Unit = {}) { private fun collectGoodsVector(imageUri: Uri, block: () -> Unit = {}) {
try { try {
ImageUtil.uriToBitmap(context, imageUri)?.let { bitmap -> ImageUtil.uriToBitmap(context, imageUri)?.let { bitmap ->
val cropBitmap = BitmapCropper.cropCenter( val cropBitmap = BitmapCropper.cropCenter(
@@ -54,13 +54,15 @@ data class GoodsInfo(
* 采购数量 * 采购数量
*/ */
var receiveCount: Double? = null, var receiveCount: Double? = null,
var receiveCountBak: Double? = null,
/** /**
* 金额 * 金额
*/ */
var recPriceExItem: Double? = null, var recPriceExItem: Double? = null,
var recPriceExItemBak: Double? = null,
// 金额 界面显示 // 金额 界面显示
var recPriceExItemTemp: String = "", // var recPriceExItemTemp: String = "",
/** /**
* 仓库id * 仓库id
*/ */
@@ -144,16 +146,16 @@ data class GoodsInfo(
return receivedNum?.toSafeString(unitName) ?: "0" return receivedNum?.toSafeString(unitName) ?: "0"
} }
val dualCountStr: String // val dualCountStr: String
get() { // get() {
return if (receivedNum != null && receivedNum != 0.toDouble() && receiveCount != null && receiveCount != 0.toDouble()) { // return if (receivedNum != null && receivedNum != 0.toDouble() && receiveCount != null && receiveCount != 0.toDouble()) {
"${receivedNum.toSafeString(unitName)}/${receiveCount.toSafeString(unitName)}" // "${receivedNum.toSafeString(unitName)}/${receiveCount.toSafeString(unitName)}"
} else if (receivedNum != null && receivedNum != 0.toDouble()) { // } else if (receivedNum != null && receivedNum != 0.toDouble()) {
"${receivedNum.toSafeString(unitName)}/-" // "${receivedNum.toSafeString(unitName)}/-"
} else { // } else {
receiveCountListStr // receiveCountListStr
} // }
} // }
val recUnitPriceTaxInStr: String val recUnitPriceTaxInStr: String
get() { get() {
@@ -167,11 +169,11 @@ data class GoodsInfo(
return recUnitPriceTaxIn?.toFormattedString() ?: "-" return recUnitPriceTaxIn?.toFormattedString() ?: "-"
} }
val newRecUnitPriceTaxInListStr: String // val newRecUnitPriceTaxInListStr: String
get() { // get() {
if (newRecUnitPriceTaxIn == 0.toDouble()) return "-" // if (newRecUnitPriceTaxIn == 0.toDouble()) return "-"
return newRecUnitPriceTaxIn?.toFormattedString() ?: "-" // return newRecUnitPriceTaxIn?.toFormattedString() ?: "-"
} // }
val receiveCountStr: String val receiveCountStr: String
get() { get() {
@@ -180,13 +182,13 @@ data class GoodsInfo(
else -> receiveCount?.toSafeString(unitName) ?: "" else -> receiveCount?.toSafeString(unitName) ?: ""
} }
} }
val receiveCountListStr: String // val receiveCountListStr: String
get() { // get() {
return when (receiveCount) { // return when (receiveCount) {
0.toDouble() -> "-" // 0.toDouble() -> "-"
else -> receiveCount?.toSafeString(unitName) ?: "-" // else -> receiveCount?.toSafeString(unitName) ?: "-"
} // }
} // }
val recPriceExItemStr: String val recPriceExItemStr: String
get() { get() {
@@ -195,13 +197,13 @@ data class GoodsInfo(
else -> recPriceExItem?.toFormattedString() ?: "" else -> recPriceExItem?.toFormattedString() ?: ""
} }
} }
val recPriceExItemListStr: String // val recPriceExItemListStr: String
get() { // get() {
return when (recPriceExItem) { // return when (recPriceExItem) {
0.toDouble() -> "-" // 0.toDouble() -> "-"
else -> recPriceExItem?.toFormattedString() ?: "-" // else -> recPriceExItem?.toFormattedString() ?: "-"
} // }
} // }
val unitNameStr: String val unitNameStr: String
get() { get() {
@@ -220,14 +222,14 @@ data class GoodsInfo(
return goodsWeight?.toFormattedString() ?: "" return goodsWeight?.toFormattedString() ?: ""
} }
val goodsWeightUnitStr: String // val goodsWeightUnitStr: String
get() { // get() {
return if (goodsWeight == null || goodsWeight!!.toInt() < 1) { // return if (goodsWeight == null || goodsWeight!!.toInt() < 1) {
"" // "克"
} else { // } else {
"千克" // "千克"
} // }
} // }
var purchaseUnitIdStr: String var purchaseUnitIdStr: String
@@ -238,30 +240,30 @@ data class GoodsInfo(
return GlobalData.unitTypeList.find { it.id == purchaseUnitId.toString() }?.value ?: "" return GlobalData.unitTypeList.find { it.id == purchaseUnitId.toString() }?.value ?: ""
} }
val warehouseNameStr: String // val warehouseNameStr: String
get() { // get() {
if (warehouseName == null) { // if (warehouseName == null) {
return "" // return ""
} // }
return warehouseName!! // return warehouseName!!
} // }
fun hasNullField(): String? { // fun hasNullField(): String? {
if (warehouseId.isNullOrBlank()) { // if (warehouseId.isNullOrBlank()) {
return "请选择仓库" // return "请选择仓库"
} // }
if (receivedNum == null || receivedNum == 0.toDouble()) { // if (receivedNum == null || receivedNum == 0.toDouble()) {
return "请输入收货数量或进行称重" // return "请输入收货数量或进行称重"
} // }
if (newRecUnitPriceTaxIn == null || newRecUnitPriceTaxIn == 0.toDouble()) { // if (newRecUnitPriceTaxIn == null || newRecUnitPriceTaxIn == 0.toDouble()) {
return "请输入收货单价" // return "请输入收货单价"
} // }
if (recPriceExItem == null || recPriceExItem == 0.toDouble()) { // if (recPriceExItem == null || recPriceExItem == 0.toDouble()) {
return "请输入收货金额" // return "请输入收货金额"
} // }
if (goodsWeight == null || goodsWeight!!.toFloat() <= 0) { // if (goodsWeight == null || goodsWeight!!.toFloat() <= 0) {
return "请放入要称重的物品" // return "请放入要称重的物品"
} // }
return null // return null
} // }
} }
@@ -183,6 +183,10 @@ object ObjectBox {
box?.put(entities) box?.put(entities)
} }
suspend fun count(name: String) = safeDbOp {
getBox<Food>()?.all?.count() { it.name == name }
} ?: 0
suspend fun filter(name: String?) = safeDbOp { suspend fun filter(name: String?) = safeDbOp {
val list = getBox<Food>()?.all?.distinctBy { it.name } val list = getBox<Food>()?.all?.distinctBy { it.name }
if (name.isNullOrBlank().not()) { if (name.isNullOrBlank().not()) {
@@ -1,157 +1,157 @@
package com.sw.inbound.ui.weight //package com.sw.inbound.ui.weight
//
import androidx.compose.foundation.Image //import androidx.compose.foundation.Image
import androidx.compose.foundation.background //import androidx.compose.foundation.background
import androidx.compose.foundation.clickable //import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Column //import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row //import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer //import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth //import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height //import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding //import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size //import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width //import androidx.compose.foundation.layout.width
import androidx.compose.foundation.lazy.LazyColumn //import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.itemsIndexed //import androidx.compose.foundation.lazy.itemsIndexed
import androidx.compose.material3.HorizontalDivider //import androidx.compose.material3.HorizontalDivider
import androidx.compose.runtime.Composable //import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue //import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableIntStateOf //import androidx.compose.runtime.mutableIntStateOf
import androidx.compose.runtime.remember //import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue //import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment //import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier //import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color //import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.colorResource //import androidx.compose.ui.res.colorResource
import androidx.compose.ui.res.painterResource //import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.style.TextAlign //import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp //import androidx.compose.ui.unit.dp
import com.sw.inbound.R //import com.sw.inbound.R
import com.sw.inbound.ext.bold //import com.sw.inbound.ext.bold
import com.sw.inbound.model.response.GoodsInfo //import com.sw.inbound.model.response.GoodsInfo
import com.sw.inbound.ui.theme.AppTypography //import com.sw.inbound.ui.theme.AppTypography
import com.sw.inbound.ui.theme.Gray_DCDCF0 //import com.sw.inbound.ui.theme.Gray_DCDCF0
//
/** ///**
* 收货-未调整列表 // * 收货-未调整列表
*/ // */
@Composable //@Composable
fun ReceiptUnadjustedListView( //fun ReceiptUnadjustedListView(
modifier: Modifier = Modifier, // modifier: Modifier = Modifier,
productList: List<GoodsInfo>, // productList: List<GoodsInfo>,
checkedItem: GoodsInfo? = null, // checkedItem: GoodsInfo? = null,
onItemCheckedClick: (Int, GoodsInfo) -> Unit = { _, _ -> }, // onItemCheckedClick: (Int, GoodsInfo) -> Unit = { _, _ -> },
showClose: Boolean = false, // showClose: Boolean = false,
onCloseClick: (GoodsInfo) -> Unit = {}, // onCloseClick: (GoodsInfo) -> Unit = {},
) { //) {
var selectIndex by remember { mutableIntStateOf(-1) } // var selectIndex by remember { mutableIntStateOf(-1) }
//
Column( // Column(
modifier = modifier // modifier = modifier
// .padding(horizontal = 30.dp) //// .padding(horizontal = 30.dp)
) { // ) {
// 左侧列表标题 // // 左侧列表标题
Row( // Row(
modifier = Modifier // modifier = Modifier
.fillMaxWidth() // .fillMaxWidth()
.padding(horizontal = 60.dp) // .padding(horizontal = 60.dp)
.height(84.dp), // .height(84.dp),
verticalAlignment = Alignment.CenterVertically // verticalAlignment = Alignment.CenterVertically
) { // ) {
CustomSingleRightText( // CustomSingleRightText(
modifier = Modifier.weight(1f), // modifier = Modifier.weight(1f),
text = "名称", // text = "名称",
style = AppTypography.gray96a0aaTextStyle.bold(), // style = AppTypography.gray96a0aaTextStyle.bold(),
textAlign = TextAlign.Start // textAlign = TextAlign.Start
) // )
Spacer(modifier = Modifier.width(10.dp)) // Spacer(modifier = Modifier.width(10.dp))
CustomSingleRightText( // CustomSingleRightText(
modifier = Modifier.width(120.dp), // modifier = Modifier.width(120.dp),
text = "单价(元)", // text = "单价(元)",
style = AppTypography.gray96a0aaTextStyle.bold() // style = AppTypography.gray96a0aaTextStyle.bold()
) // )
Spacer(modifier = Modifier.width(20.dp)) // Spacer(modifier = Modifier.width(20.dp))
CustomSingleRightText( // CustomSingleRightText(
modifier = Modifier.width(200.dp), // modifier = Modifier.width(200.dp),
text = "数量", // text = "数量",
style = AppTypography.gray96a0aaTextStyle.bold() // style = AppTypography.gray96a0aaTextStyle.bold()
) // )
Spacer(modifier = Modifier.width(20.dp)) // Spacer(modifier = Modifier.width(20.dp))
CustomSingleRightText( // CustomSingleRightText(
modifier = Modifier.width(120.dp), // modifier = Modifier.width(120.dp),
text = "金额(元)", // text = "金额(元)",
style = AppTypography.gray96a0aaTextStyle.bold() // style = AppTypography.gray96a0aaTextStyle.bold()
) // )
if (showClose) { // if (showClose) {
Spacer(modifier = Modifier.width(78.dp)) // Spacer(modifier = Modifier.width(78.dp))
} // }
} // }
// Spacer(modifier = Modifier.height(31.dp)) //// Spacer(modifier = Modifier.height(31.dp))
HorizontalDivider(thickness = 1.dp, color = colorResource(R.color.divider)) // HorizontalDivider(thickness = 1.dp, color = colorResource(R.color.divider))
// Spacer(modifier = Modifier.height(31.dp)) //// Spacer(modifier = Modifier.height(31.dp))
// 左侧列表 // // 左侧列表
LazyColumn() { // LazyColumn() {
itemsIndexed( // itemsIndexed(
items = productList, // items = productList,
// key = { index, it -> it.id ?: index }) { index, it -> //// key = { index, it -> it.id ?: index }) { index, it ->
key = { index, it -> index }) { index, it -> // key = { index, it -> index }) { index, it ->
//
val checkedBg = // val checkedBg =
if (/*selectIndex == index ||*/ checkedItem?.id == it.id) Gray_DCDCF0 else Color.Transparent // if (/*selectIndex == index ||*/ checkedItem?.id == it.id) Gray_DCDCF0 else Color.Transparent
Row( // Row(
modifier = Modifier // modifier = Modifier
.background(color = checkedBg) // .background(color = checkedBg)
.height(80.dp) // .height(80.dp)
.padding(horizontal = 60.dp) // .padding(horizontal = 60.dp)
.clickable { // .clickable {
selectIndex = index // selectIndex = index
onItemCheckedClick(index, it) // onItemCheckedClick(index, it)
}, verticalAlignment = Alignment.CenterVertically // }, verticalAlignment = Alignment.CenterVertically
) { // ) {
CustomSingleRightText( // CustomSingleRightText(
modifier = Modifier.weight(1f), // modifier = Modifier.weight(1f),
text = it.goodNameStr, // text = it.goodNameStr,
textAlign = TextAlign.Start // textAlign = TextAlign.Start
) // )
Spacer(modifier = Modifier.width(10.dp)) // Spacer(modifier = Modifier.width(10.dp))
CustomSingleRightText( // CustomSingleRightText(
modifier = Modifier.width(120.dp), // modifier = Modifier.width(120.dp),
text = it.recUnitPriceTaxInListStr, // text = it.recUnitPriceTaxInListStr,
style = AppTypography.blackTextStyle // style = AppTypography.blackTextStyle
) // )
Spacer(modifier = Modifier.width(20.dp)) // Spacer(modifier = Modifier.width(20.dp))
CustomSingleRightText( // CustomSingleRightText(
modifier = Modifier.width(200.dp), // modifier = Modifier.width(200.dp),
text = "${it.dualCountStr}${it.unitNameStr}", // text = "${it.dualCountStr}${it.unitNameStr}",
style = AppTypography.blackTextStyle // style = AppTypography.blackTextStyle
) // )
Spacer(modifier = Modifier.width(20.dp)) // Spacer(modifier = Modifier.width(20.dp))
CustomSingleRightText( // CustomSingleRightText(
modifier = Modifier.width(120.dp), // modifier = Modifier.width(120.dp),
text = it.recPriceExItemListStr, // text = it.recPriceExItemListStr,
style = AppTypography.blackTextStyle // style = AppTypography.blackTextStyle
) // )
if (showClose) { // if (showClose) {
Spacer(modifier = Modifier.width(30.dp)) // Spacer(modifier = Modifier.width(30.dp))
Image( // Image(
modifier = Modifier // modifier = Modifier
.size(48.dp) // .size(48.dp)
.clickable { // .clickable {
onCloseClick(it) // onCloseClick(it)
}, // },
painter = painterResource(R.mipmap.ic_delete), // painter = painterResource(R.mipmap.ic_delete),
contentDescription = "删除" // contentDescription = "删除"
) // )
} // }
} // }
// Spacer(modifier = Modifier.height(33.dp)) //// Spacer(modifier = Modifier.height(33.dp))
// if (productList.indexOf(it) != productList.lastIndex) //// if (productList.indexOf(it) != productList.lastIndex)
HorizontalDivider( // HorizontalDivider(
thickness = 1.dp, // thickness = 1.dp,
color = colorResource(R.color.divider) // color = colorResource(R.color.divider)
) // )
// Spacer(modifier = Modifier.height(33.dp)) //// Spacer(modifier = Modifier.height(33.dp))
} // }
} // }
} // }
} //}