diff --git a/module_base/src/main/java/com/lukouguoji/module_base/bean/GjcMaWb.kt b/module_base/src/main/java/com/lukouguoji/module_base/bean/GjcMaWb.kt index 6602a4f..683321c 100644 --- a/module_base/src/main/java/com/lukouguoji/module_base/bean/GjcMaWb.kt +++ b/module_base/src/main/java/com/lukouguoji/module_base/bean/GjcMaWb.kt @@ -85,6 +85,7 @@ data class GjcMaWb( var reviewStatus: String? = null, // 审核状态(0:未审核;1:通过;2:退回) var tranFlag: String? = null, // 转运标志 var clearNormal: String? = null, // 清仓正常(0:否,1:是) + var allTally: String? = null, // 运单理货申报全部通过(0:否;1:是),为 1 时才允许全选该主单下的分单 // ==================== 操作信息 ==================== var opDate: String? = null, // 操作时间(入库时间) @@ -132,6 +133,13 @@ data class GjcMaWb( get() = checked.get() set(value) = checked.set(value) + /** + * 是否允许全选该主单下的分单 + * 主单存在分批申报(未全部申报完毕)时接口返回 allTally=0,此时不允许全选其分单 + */ + val canCheckAllHaWb: Boolean + get() = allTally == "1" + // ==================== 状态转换扩展属性 ==================== /** * 计重状态中文 diff --git a/module_gjc/src/main/java/com/lukouguoji/gjc/holder/IntExpTallySubViewHolder.kt b/module_gjc/src/main/java/com/lukouguoji/gjc/holder/IntExpTallySubViewHolder.kt index ab4f946..50d0dd6 100644 --- a/module_gjc/src/main/java/com/lukouguoji/gjc/holder/IntExpTallySubViewHolder.kt +++ b/module_gjc/src/main/java/com/lukouguoji/gjc/holder/IntExpTallySubViewHolder.kt @@ -4,6 +4,8 @@ import android.view.View import com.lukouguoji.gjc.databinding.ItemIntExpTallySubBinding import com.lukouguoji.module_base.base.BaseViewHolder import com.lukouguoji.module_base.bean.GjcHaWb +import com.lukouguoji.module_base.common.ConstantEvent +import com.lukouguoji.module_base.impl.FlowBus /** * 国际出港-出港理货 子订单(分单) ViewHolder @@ -20,6 +22,8 @@ class IntExpTallySubViewHolder(view: View) : // checkbox点击切换选择状态 binding.ivCheckbox.setOnClickListener { bean.checked.set(!bean.checked.get()) + // 通知页面刷新分单全选状态 + FlowBus.with(ConstantEvent.EVENT_CHECK_CHANGED).tryEmit("check_changed") binding.executePendingBindings() } } diff --git a/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/IntExpTallyViewModel.kt b/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/IntExpTallyViewModel.kt index 464afa5..ef80613 100644 --- a/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/IntExpTallyViewModel.kt +++ b/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/IntExpTallyViewModel.kt @@ -42,7 +42,8 @@ class IntExpTallyViewModel : BasePageViewModel() { val totalWeight = MutableLiveData("0") // 总重量 // ========== 全选状态 ========== - val isAllChecked = MutableLiveData(false) + val isAllChecked = MutableLiveData(false) // 主单全选状态 + val isAllHaWbChecked = MutableLiveData(false) // 分单全选状态(仅统计允许全选的主单下的分单) fun onItemCheckChanged() { updateCheckAllStatus() @@ -51,6 +52,10 @@ class IntExpTallyViewModel : BasePageViewModel() { fun updateCheckAllStatus() { val list = pageModel.rv?.commonAdapter()?.items as? List ?: return isAllChecked.value = list.isNotEmpty() && list.all { it.checked.get() } + + // 分单全选状态:只看允许全选的主单下的分单 + val eligibleHaWbList = list.filter { it.canCheckAllHaWb }.flatMap { it.haWbList ?: emptyList() } + isAllHaWbChecked.value = eligibleHaWbList.isNotEmpty() && eligibleHaWbList.all { it.checked.get() } } // ========== 全局展开状态 ========== @@ -86,6 +91,43 @@ class IntExpTallyViewModel : BasePageViewModel() { pageModel.rv?.commonAdapter()?.notifyDataSetChanged() } + /** + * 分单全选按钮点击 (只切换分单的选中状态,主单选择独立) + * 规则:主单存在分批申报(接口 allTally=0)时,不允许选中该主单下的分单; + * 只有主单全部申报完毕(allTally=1)才允许全选其分单。 + */ + fun checkAllHaWbClick() { + val list = pageModel.rv?.commonAdapter()?.items as? List ?: return + + val shouldCheckAll = !isAllHaWbChecked.value!! + var eligibleCount = 0 // 允许全选的分单数 + var skippedMaWbCount = 0 // 因未全部申报而跳过的主单数 + + list.forEach { maWb -> + val haWbList = maWb.haWbList + if (haWbList.isNullOrEmpty()) return@forEach + if (maWb.canCheckAllHaWb) { + eligibleCount += haWbList.size + haWbList.forEach { it.checked.set(shouldCheckAll) } + } else if (shouldCheckAll) { + // 主单未全部申报完毕,跳过其分单(保持原有选中状态不变) + skippedMaWbCount++ + } + } + + isAllHaWbChecked.value = shouldCheckAll && eligibleCount > 0 + + if (shouldCheckAll) { + if (eligibleCount == 0) { + showToast("暂无可全选的分单,主单需全部申报完毕后才可全选其分单") + } else if (skippedMaWbCount > 0) { + showToast("有${skippedMaWbCount}票主单未全部申报完毕,其分单未选中") + } + } + + pageModel.rv?.commonAdapter()?.notifyDataSetChanged() + } + /** * 切换全局展开/收起状态 */ diff --git a/module_gjc/src/main/res/layout/activity_int_exp_tally.xml b/module_gjc/src/main/res/layout/activity_int_exp_tally.xml index f7d1cf4..95a9f3b 100644 --- a/module_gjc/src/main/res/layout/activity_int_exp_tally.xml +++ b/module_gjc/src/main/res/layout/activity_int_exp_tally.xml @@ -167,6 +167,32 @@ + + + + + + + + +