feat: opt form

This commit is contained in:
2026-03-18 22:36:05 +08:00
parent aac2c860c6
commit 8b666364ae
5 changed files with 276 additions and 143 deletions

View File

@@ -2,6 +2,7 @@ package com.lukouguoji.gjj.viewModel
import android.content.Intent
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.Observer
import androidx.lifecycle.viewModelScope
import com.google.gson.Gson
import com.lukouguoji.module_base.base.BaseViewModel
@@ -25,10 +26,27 @@ class IntImpPickUpChargeEditViewModel : BaseViewModel() {
// 可编辑费用字段(String 用于双向绑定)
val tranChargeStr = MutableLiveData("") // 信息费
val whsChargeStr = MutableLiveData("") // 仓储费
val drawBillChargeStr = MutableLiveData("") // 抽单费
val efrChargeStr = MutableLiveData("") // 冷藏费
val svlChargeStr = MutableLiveData("") // 铲车费
val drawBillChargeStr = MutableLiveData("") // 文件处理费
val svlChargeStr = MutableLiveData("") // 叉车费
val tallyChargeStr = MutableLiveData("") // 理货费
val precisionChargeStr = MutableLiveData("") // 精密仪器处理费
val animalChargeStr = MutableLiveData("") // 活体动物处理费
val totalAmountStr = MutableLiveData("") // 总费用(实时计算)
// 总费用计算观察者
private val totalCalculator = Observer<String> { calculateTotal() }
private fun calculateTotal() {
val total = (tranChargeStr.value?.toDoubleOrNull() ?: 0.0) +
(whsChargeStr.value?.toDoubleOrNull() ?: 0.0) +
(drawBillChargeStr.value?.toDoubleOrNull() ?: 0.0) +
(svlChargeStr.value?.toDoubleOrNull() ?: 0.0) +
(tallyChargeStr.value?.toDoubleOrNull() ?: 0.0) +
(dataBean.value?.optCharge ?: 0.0) +
(precisionChargeStr.value?.toDoubleOrNull() ?: 0.0) +
(animalChargeStr.value?.toDoubleOrNull() ?: 0.0)
totalAmountStr.value = if (total != 0.0) total.toString() else ""
}
fun initOnCreated(intent: Intent) {
val jsonData = intent.getStringExtra(Constant.Key.DATA) ?: ""
@@ -40,9 +58,22 @@ class IntImpPickUpChargeEditViewModel : BaseViewModel() {
tranChargeStr.value = if (bean.tranCharge != 0.0) bean.tranCharge.toString() else ""
whsChargeStr.value = if (bean.whsCharge != 0.0) bean.whsCharge.toString() else ""
drawBillChargeStr.value = if (bean.drawBillCharge != 0.0) bean.drawBillCharge.toString() else ""
efrChargeStr.value = if (bean.efrCharge != 0.0) bean.efrCharge.toString() else ""
svlChargeStr.value = if (bean.svlCharge != 0.0) bean.svlCharge.toString() else ""
tallyChargeStr.value = if (bean.tallyCharge != 0.0) bean.tallyCharge.toString() else ""
precisionChargeStr.value = if (bean.precisionCharge != 0.0) bean.precisionCharge.toString() else ""
animalChargeStr.value = if (bean.animalCharge != 0.0) bean.animalCharge.toString() else ""
// 注册总费用实时计算
tranChargeStr.observeForever(totalCalculator)
whsChargeStr.observeForever(totalCalculator)
drawBillChargeStr.observeForever(totalCalculator)
svlChargeStr.observeForever(totalCalculator)
tallyChargeStr.observeForever(totalCalculator)
precisionChargeStr.observeForever(totalCalculator)
animalChargeStr.observeForever(totalCalculator)
// 初始计算一次
calculateTotal()
} catch (e: Exception) {
showToast("数据解析失败")
getTopActivity().finish()
@@ -63,9 +94,11 @@ class IntImpPickUpChargeEditViewModel : BaseViewModel() {
bean.tranCharge = tranChargeStr.value?.toDoubleOrNull() ?: 0.0
bean.whsCharge = whsChargeStr.value?.toDoubleOrNull() ?: 0.0
bean.drawBillCharge = drawBillChargeStr.value?.toDoubleOrNull() ?: 0.0
bean.efrCharge = efrChargeStr.value?.toDoubleOrNull() ?: 0.0
bean.svlCharge = svlChargeStr.value?.toDoubleOrNull() ?: 0.0
bean.tallyCharge = tallyChargeStr.value?.toDoubleOrNull() ?: 0.0
bean.precisionCharge = precisionChargeStr.value?.toDoubleOrNull() ?: 0.0
bean.animalCharge = animalChargeStr.value?.toDoubleOrNull() ?: 0.0
bean.amount = totalAmountStr.value?.toDoubleOrNull() ?: 0.0
launchLoadingCollect({
NetApply.api.modifyIntImpPickUpCharge(bean.toRequestBody())
@@ -86,4 +119,15 @@ class IntImpPickUpChargeEditViewModel : BaseViewModel() {
fun cancel() {
getTopActivity().finish()
}
override fun onCleared() {
super.onCleared()
tranChargeStr.removeObserver(totalCalculator)
whsChargeStr.removeObserver(totalCalculator)
drawBillChargeStr.removeObserver(totalCalculator)
svlChargeStr.removeObserver(totalCalculator)
tallyChargeStr.removeObserver(totalCalculator)
precisionChargeStr.removeObserver(totalCalculator)
animalChargeStr.removeObserver(totalCalculator)
}
}