feat: opt ui

This commit is contained in:
2025-12-15 15:59:12 +08:00
parent 0531f5e0c4
commit 7650a835f2
9 changed files with 165 additions and 41 deletions

View File

@@ -41,8 +41,6 @@ class GjcAssembleAllocateViewModel : BasePageViewModel() {
// 统计数据
val totalCount = MutableLiveData("0") // 合计票数
val totalPc = MutableLiveData("0") // 总件数
val totalWeight = MutableLiveData("0") // 总重量
// 全选状态
val isAllChecked = MutableLiveData(false)
@@ -103,8 +101,6 @@ class GjcAssembleAllocateViewModel : BasePageViewModel() {
onSuccess = { result ->
val data = result.data
totalCount.value = (data?.wbNumber ?: 0).toString()
totalPc.value = (data?.totalPc ?: 0).toString()
totalWeight.value = (data?.totalWeight ?: 0.0).toString()
}
}
}

View File

@@ -5,9 +5,11 @@ import android.content.Intent
import androidx.lifecycle.MutableLiveData
import com.lukouguoji.module_base.base.BaseViewModel
import com.lukouguoji.module_base.bean.GjcHandoverSheetBean
import com.lukouguoji.module_base.bean.GjcMaWb
import com.lukouguoji.module_base.common.Constant
import com.lukouguoji.module_base.http.net.NetApply
import com.lukouguoji.module_base.ktx.*
import java.util.Date
/**
* 国际出港货物交接单 ViewModel
@@ -20,6 +22,21 @@ class GjcHandoverViewModel : BaseViewModel() {
// 数据Bean
val dataBean = MutableLiveData(GjcHandoverSheetBean())
// ========== 主单数据持有者 ==========
val maWbData = MutableLiveData<GjcMaWb>(GjcMaWb())
// ========== 计算/格式化字段 ==========
val displayAgentName = MutableLiveData<String>() // 托运人/交货单位/盖章单位
val displayDeliveryDate = MutableLiveData<String>() // 交货日期2025年12月03日
val displayFlightPlan = MutableLiveData<String>() // 计划班期MU5555/2025-12-03/LAX
val displayWaybillNo = MutableLiveData<String>() // 货单号834-91508524
val displayGoods = MutableLiveData<String>() // 品名(优先中文)
val displayPc = MutableLiveData<String>() // 件数
val displayWeight = MutableLiveData<String>() // 重量
val displayVolume = MutableLiveData<String>() // 体积
val displayChargeWeight = MutableLiveData<String>() // 计费重量
val displayRemark = MutableLiveData<String>() // 备注
// ========== 跨境电商单选框 ==========
val cbEcFlag = MutableLiveData("1") // 默认选中"是"
@@ -94,6 +111,12 @@ class GjcHandoverViewModel : BaseViewModel() {
dataBean.value = bean
// 填充主单数据
maWbData.value = maWb ?: GjcMaWb()
// 计算格式化字段
updateDisplayFields(maWb)
// 填充CheckBox状态
updateCheckBoxState(bean)
@@ -302,4 +325,119 @@ class GjcHandoverViewModel : BaseViewModel() {
}
}
}
/**
* 更新格式化/计算字段
*/
private fun updateDisplayFields(maWb: GjcMaWb?) {
if (maWb == null) {
displayAgentName.value = ""
displayDeliveryDate.value = ""
displayFlightPlan.value = ""
displayWaybillNo.value = ""
displayGoods.value = ""
displayPc.value = "0"
displayWeight.value = "0.0"
displayVolume.value = "0.0"
displayChargeWeight.value = "0.0"
displayRemark.value = ""
return
}
// 1. 托运人/交货单位/盖章单位
displayAgentName.value = maWb.agentName ?: ""
// 2. 交货日期格式化Date → "2025年12月03日"
displayDeliveryDate.value = formatDeliveryDate(maWb.opDate)
// 3. 计划班期拼接:航班号/日期/目的地
displayFlightPlan.value = buildFlightPlan(maWb.fno, maWb.fdate, maWb.dest)
// 4. 货单号拼接prefix-no
displayWaybillNo.value = buildWaybillNo(maWb.prefix, maWb.no)
// 5. 品名(优先中文)
displayGoods.value = maWb.goodsCn?.ifEmpty { maWb.goods } ?: maWb.goods ?: ""
// 6. 件数
displayPc.value = (maWb.pc ?: 0L).toString()
// 7. 重量
displayWeight.value = (maWb.weight ?: 0.0).toString()
// 8. 体积
displayVolume.value = (maWb.volume ?: 0.0).toString()
// 9. 计费重量
displayChargeWeight.value = (dataBean.value?.chargeWeight ?: 0.0).toString()
// 10. 备注
displayRemark.value = maWb.remark ?: ""
}
/**
* 格式化交货日期String → "2025年12月03日"
*/
private fun formatDeliveryDate(opDate: String?): String {
if (opDate.isNullOrEmpty()) return ""
try {
// opDate格式: "2025-12-03 19:40:51" 或 "2025-12-03"
val datePart = opDate.split(" ")[0] // 取日期部分
val parts = datePart.split("-")
if (parts.size == 3) {
val year = parts[0]
val month = parts[1]
val day = parts[2]
return "${year}${month}${day}"
}
return ""
} catch (e: Exception) {
e.printStackTrace()
return ""
}
}
/**
* 构建航班计划:航班号/日期/目的地
*/
private fun buildFlightPlan(fno: String?, fdate: Date?, dest: String?): String {
val parts = mutableListOf<String>()
// 航班号
if (!fno.isNullOrEmpty()) {
parts.add(fno)
}
// 日期格式化为yyyy-MM-dd
if (fdate != null) {
try {
val calendar = java.util.Calendar.getInstance()
calendar.time = fdate
val year = calendar.get(java.util.Calendar.YEAR)
val month = calendar.get(java.util.Calendar.MONTH) + 1
val day = calendar.get(java.util.Calendar.DAY_OF_MONTH)
parts.add(String.format("%d-%02d-%02d", year, month, day))
} catch (e: Exception) {
e.printStackTrace()
}
}
// 目的地
if (!dest.isNullOrEmpty()) {
parts.add(dest)
}
return parts.joinToString("/")
}
/**
* 构建货单号prefix-no
*/
private fun buildWaybillNo(prefix: String?, no: String?): String {
return if (!prefix.isNullOrEmpty() && !no.isNullOrEmpty()) {
"$prefix-$no"
} else {
(prefix ?: "") + (no ?: "")
}
}
}

View File

@@ -96,7 +96,7 @@ class GjcQueryDetailsViewModel : BaseViewModel() {
val prefix = maWb["prefix"] as? String ?: ""
val no = maWb["no"] as? String ?: ""
if (prefix.isNotEmpty() || no.isNotEmpty()) {
mergedData["wbNo"] = "$prefix-$no"
mergedData["wbNo"] = "$prefix$no"
}
// 字段映射: cmdStatus -> customsCommand