diff --git a/module_gjj/src/main/java/com/lukouguoji/gjj/holder/IntArrAirManifestSubViewHolder.kt b/module_gjj/src/main/java/com/lukouguoji/gjj/holder/IntArrAirManifestSubViewHolder.kt index da545b2..41c9db8 100644 --- a/module_gjj/src/main/java/com/lukouguoji/gjj/holder/IntArrAirManifestSubViewHolder.kt +++ b/module_gjj/src/main/java/com/lukouguoji/gjj/holder/IntArrAirManifestSubViewHolder.kt @@ -1,10 +1,8 @@ package com.lukouguoji.gjj.holder import android.view.View -import androidx.recyclerview.widget.RecyclerView import com.lukouguoji.gjj.databinding.ItemIntArrAirManifestSubBinding import com.lukouguoji.module_base.base.BaseViewHolder -import com.lukouguoji.module_base.bean.GjjAirManifest import com.lukouguoji.module_base.bean.GjjImportManifest /** @@ -19,18 +17,10 @@ class IntArrAirManifestSubViewHolder(view: View) : binding.position = position binding.executePendingBindings() - // 单选框点击切换选择状态 + // 单选框点击切换选择状态(独立选择,不联动主列表) binding.ivCheckbox.setOnClickListener { - val newCheckedState = !bean.checked.get() - bean.checked.set(newCheckedState) + bean.checked.set(!bean.checked.get()) binding.executePendingBindings() - - // 反向联动主列表项(勾选子项时自动勾选父项) - if (newCheckedState) { - val recyclerView = itemView.parent as? RecyclerView ?: return@setOnClickListener - val parentBean = recyclerView.tag as? GjjAirManifest ?: return@setOnClickListener - parentBean.checked.set(true) - } } } } diff --git a/module_gjj/src/main/java/com/lukouguoji/gjj/holder/IntArrAirManifestViewHolder.kt b/module_gjj/src/main/java/com/lukouguoji/gjj/holder/IntArrAirManifestViewHolder.kt index 1ff4376..4e42c71 100644 --- a/module_gjj/src/main/java/com/lukouguoji/gjj/holder/IntArrAirManifestViewHolder.kt +++ b/module_gjj/src/main/java/com/lukouguoji/gjj/holder/IntArrAirManifestViewHolder.kt @@ -26,14 +26,10 @@ class IntArrAirManifestViewHolder(view: View) : // 整卡点击 - 跳转详情页 notifyItemClick(position, binding.ll) - // 图标点击 - 切换选择状态(联动子列表) + // 图标点击 - 切换选择状态(独立选择,不联动子列表) binding.ivIcon.setOnClickListener { - val newCheckedState = !bean.checked.get() - bean.checked.set(newCheckedState) - // 联动子列表选中状态 - bean.haWbList?.forEach { sub -> sub.checked.set(newCheckedState) } + bean.checked.set(!bean.checked.get()) binding.executePendingBindings() - binding.rvSub.adapter?.notifyDataSetChanged() } // 展开按钮点击事件 @@ -48,7 +44,6 @@ class IntArrAirManifestViewHolder(view: View) : R.layout.item_int_arr_air_manifest_sub ) - // 设置父Bean引用(用于子列表反向联动) binding.rvSub.tag = bean binding.rvSub.refresh(bean.haWbList ?: emptyList()) } diff --git a/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/IntArrAirManifestViewModel.kt b/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/IntArrAirManifestViewModel.kt index 364fe26..13c510c 100644 --- a/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/IntArrAirManifestViewModel.kt +++ b/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/IntArrAirManifestViewModel.kt @@ -113,31 +113,31 @@ class IntArrAirManifestViewModel : BasePageViewModel() { ScanModel.startScan(getTopActivity(), Constant.RequestCode.HNO) } + /** + * 收集选中的主单和分单(独立选择,互不影响) + * @return Pair<主单列表, 分单列表>,如果无任何选中返回 null + */ + private fun getSelectedItems(emptyMsg: String): Pair, List>? { + val list = pageModel.rv?.commonAdapter()?.items as? List ?: return null + val maWbList = list.filter { it.isSelected }.mapNotNull { it.maWb } + val haWbList = list.flatMap { it.haWbList ?: emptyList() }.filter { it.isSelected } + if (maWbList.isEmpty() && haWbList.isEmpty()) { + showToast(emptyMsg) + return null + } + return Pair(maWbList, haWbList) + } + /** * 状态重置按钮点击 */ fun resetStatusClick() { - val list = pageModel.rv?.commonAdapter()?.items as? List ?: return - val selectedItems = list.filter { it.isSelected } - - if (selectedItems.isEmpty()) { - showToast("请选择要重置的舱单") - return - } - - // 提取主单和分单 - val maWbList = mutableListOf() - val haWbList = mutableListOf() - - selectedItems.forEach { airManifest -> - airManifest.maWb?.let { maWbList.add(it) } - airManifest.haWbList?.let { haWbList.addAll(it) } - } + val (maWbList, haWbList) = getSelectedItems("请选择要重置的舱单") ?: return val param = GjjDeclareParam( maWbList = maWbList, haWbList = haWbList, - restStatus = null, // 未申报状态 + restStatus = null, resetReason = "状态重置" ) @@ -153,25 +153,20 @@ class IntArrAirManifestViewModel : BasePageViewModel() { } /** - * 补充信息按钮点击 + * 补充信息按钮点击(只针对主单) */ fun supplementInfoClick() { val list = pageModel.rv?.commonAdapter()?.items as? List ?: return - val selectedItems = list.filter { it.isSelected } + val selectedMainItems = list.filter { it.isSelected }.mapNotNull { it.maWb } - if (selectedItems.isEmpty()) { - showToast("请选择要补充信息的舱单") + if (selectedMainItems.isEmpty()) { + showToast("请选择要补充信息的主单") return } - // 收集所有选中项的主单数据 - val manifestList = ArrayList(selectedItems.mapNotNull { it.maWb }) - if (manifestList.isEmpty()) return - - // 跳转到补充信息页面(传递完整列表) com.lukouguoji.gjj.activity.IntArrSupplementInfoActivity.start( getTopActivity(), - manifestList + ArrayList(selectedMainItems) ) } @@ -179,31 +174,14 @@ class IntArrAirManifestViewModel : BasePageViewModel() { * 删除申报按钮点击 */ fun deleteDeclarationClick() { - val list = pageModel.rv?.commonAdapter()?.items as? List ?: return - val selectedItems = list.filter { it.isSelected } - - if (selectedItems.isEmpty()) { - showToast("请选择要删除申报的舱单") - return - } + val (maWbList, haWbList) = getSelectedItems("请选择要删除申报的舱单") ?: return // 从接口获取删除原因列表 launchLoadingCollect({ NetApply.api.getDelReasonList() }) { onSuccess = { result -> val deleteReasonList = result.data?.map { it.toKeyValue() } ?: emptyList() - // 创建并显示弹框 val dialog = com.lukouguoji.gjj.dialog.IntArrManifestDeleteDialogModel(deleteReasonList) { dialogModel -> - // 弹框确认后的回调 - // 提取主单和分单 - val maWbList = mutableListOf() - val haWbList = mutableListOf() - - selectedItems.forEach { airManifest -> - airManifest.maWb?.let { maWbList.add(it) } - airManifest.haWbList?.let { haWbList.addAll(it) } - } - val param = GjjDeclareParam( dcode = dialogModel.deleteReason.value ?: "", dcontactsName = dialogModel.contactName.value ?: "", @@ -212,10 +190,7 @@ class IntArrAirManifestViewModel : BasePageViewModel() { haWbList = haWbList ) - val requestData = param.toRequestBody() - - // 调用删除接口 - launchLoadingCollect({ NetApply.api.deleteIntArrManifestDeclare(requestData) }) { + launchLoadingCollect({ NetApply.api.deleteIntArrManifestDeclare(param.toRequestBody()) }) { onSuccess = { showToast("删除申报成功") viewModelScope.launch { @@ -235,27 +210,9 @@ class IntArrAirManifestViewModel : BasePageViewModel() { * 舱单申报按钮点击 */ fun declareClick() { - val list = pageModel.rv?.commonAdapter()?.items as? List ?: return - val selectedItems = list.filter { it.isSelected } + val (maWbList, haWbList) = getSelectedItems("请选择要申报的舱单") ?: return - if (selectedItems.isEmpty()) { - showToast("请选择要申报的舱单") - return - } - - // 提取主单和分单 - val maWbList = mutableListOf() - val haWbList = mutableListOf() - - selectedItems.forEach { airManifest -> - airManifest.maWb?.let { maWbList.add(it) } - airManifest.haWbList?.let { haWbList.addAll(it) } - } - - val param = GjjDeclareParam( - maWbList = maWbList, - haWbList = haWbList - ) + val param = GjjDeclareParam(maWbList = maWbList, haWbList = haWbList) launchLoadingCollect({ NetApply.api.declareIntArrManifest(param.toRequestBody()) }) { onSuccess = { diff --git a/module_gjj/src/main/res/layout/activity_int_arr_air_manifest_details.xml b/module_gjj/src/main/res/layout/activity_int_arr_air_manifest_details.xml index 9b6c3c9..23aecf5 100644 --- a/module_gjj/src/main/res/layout/activity_int_arr_air_manifest_details.xml +++ b/module_gjj/src/main/res/layout/activity_int_arr_air_manifest_details.xml @@ -132,7 +132,7 @@ title='@{"品名(中)"}' titleLength="@{5}" type="@{DataLayoutType.INPUT}" - value='@{viewModel.dataBean.goodsCn}' + value='@{viewModel.dataBean.goodsCn != null && !viewModel.dataBean.goodsCn.isEmpty() ? viewModel.dataBean.goodsCn : viewModel.dataBean.goods}' android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" />