From d0c7207b5ace96f70f5c7e6869215c8585533d1c Mon Sep 17 00:00:00 2001 From: YANGJIANKUAN Date: Fri, 6 Mar 2026 13:35:23 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=9B=BD=E9=99=85=E8=BF=9B=E6=B8=AF?= =?UTF-8?q?=E5=8E=9F=E5=A7=8B=E8=88=B1=E5=8D=95=E8=A1=A5=E5=85=85=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E6=94=B9=E4=B8=BA=E6=89=B9=E9=87=8F=E4=BF=9D=E5=AD=98?= =?UTF-8?q?=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 回滚列表项侧滑菜单,改为多选后点底部按钮进入补充信息页; 表单信息批量复制到所有选中单据后调用 complete 接口提交数组。 Co-Authored-By: Claude Opus 4.6 --- .../lukouguoji/module_base/http/net/Api.kt | 6 + .../activity/IntArrSupplementInfoActivity.kt | 4 +- .../gjj/holder/IntArrAirManifestViewHolder.kt | 1 - .../viewModel/IntArrAirManifestViewModel.kt | 9 +- .../IntArrSupplementInfoViewModel.kt | 106 ++++++++++++++++-- .../activity_int_arr_supplement_info.xml | 12 +- 6 files changed, 119 insertions(+), 19 deletions(-) diff --git a/module_base/src/main/java/com/lukouguoji/module_base/http/net/Api.kt b/module_base/src/main/java/com/lukouguoji/module_base/http/net/Api.kt index d6b1605..6857970 100644 --- a/module_base/src/main/java/com/lukouguoji/module_base/http/net/Api.kt +++ b/module_base/src/main/java/com/lukouguoji/module_base/http/net/Api.kt @@ -1753,6 +1753,12 @@ interface Api { @POST("IntImpAirManifest/deleteDeclare") suspend fun deleteIntArrManifestDeclare(@Body data: RequestBody): BaseResultBean + /** + * 国际进港原始舱单-补充收发货人信息 + */ + @POST("IntImpAirManifest/complete") + suspend fun completeIntArrManifest(@Body data: RequestBody): BaseResultBean + /////////////////////////////////////////////////////////////////////////// // 国际进港-进港舱单 /////////////////////////////////////////////////////////////////////////// diff --git a/module_gjj/src/main/java/com/lukouguoji/gjj/activity/IntArrSupplementInfoActivity.kt b/module_gjj/src/main/java/com/lukouguoji/gjj/activity/IntArrSupplementInfoActivity.kt index df4f2c1..ac6f445 100644 --- a/module_gjj/src/main/java/com/lukouguoji/gjj/activity/IntArrSupplementInfoActivity.kt +++ b/module_gjj/src/main/java/com/lukouguoji/gjj/activity/IntArrSupplementInfoActivity.kt @@ -32,9 +32,9 @@ class IntArrSupplementInfoActivity : companion object { @JvmStatic - fun start(context: Context, manifest: GjjImportManifest) { + fun start(context: Context, manifestList: ArrayList) { val starter = Intent(context, IntArrSupplementInfoActivity::class.java) - .putExtra(Constant.Key.DATA, manifest) + .putExtra(Constant.Key.DATA, manifestList) context.startActivity(starter) } } 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 3343490..e13b94d 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 @@ -1,7 +1,6 @@ package com.lukouguoji.gjj.holder import android.view.View -import com.lukouguoji.gjj.R import com.lukouguoji.gjj.databinding.ItemIntArrAirManifestBinding import com.lukouguoji.module_base.base.BaseViewHolder import com.lukouguoji.module_base.bean.GjjAirManifest 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 368185b..61ec57c 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 @@ -140,13 +140,14 @@ class IntArrAirManifestViewModel : BasePageViewModel() { return } - // 获取第一个选中项的主单数据 - val manifest = selectedItems.firstOrNull()?.maWb ?: return + // 收集所有选中项的主单数据 + val manifestList = ArrayList(selectedItems.mapNotNull { it.maWb }) + if (manifestList.isEmpty()) return - // 跳转到补充信息页面 + // 跳转到补充信息页面(传递完整列表) com.lukouguoji.gjj.activity.IntArrSupplementInfoActivity.start( getTopActivity(), - manifest + manifestList ) } diff --git a/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/IntArrSupplementInfoViewModel.kt b/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/IntArrSupplementInfoViewModel.kt index d983ac1..60c0ed0 100644 --- a/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/IntArrSupplementInfoViewModel.kt +++ b/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/IntArrSupplementInfoViewModel.kt @@ -2,43 +2,133 @@ package com.lukouguoji.gjj.viewModel import android.content.Intent import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.viewModelScope import com.lukouguoji.module_base.base.BaseViewModel import com.lukouguoji.module_base.bean.GjjImportManifest import com.lukouguoji.module_base.common.Constant +import com.lukouguoji.module_base.common.ConstantEvent +import com.lukouguoji.module_base.http.net.NetApply +import com.lukouguoji.module_base.impl.FlowBus +import com.lukouguoji.module_base.ktx.launchCollect +import com.lukouguoji.module_base.ktx.launchLoadingCollect import com.lukouguoji.module_base.ktx.showToast +import com.lukouguoji.module_base.ktx.toRequestBody +import dev.utils.app.info.KeyValue +import kotlinx.coroutines.launch /** * 国际进港补充信息 ViewModel */ class IntArrSupplementInfoViewModel : BaseViewModel() { - // 数据对象 + // 表单编辑用数据对象 val dataBean = MutableLiveData() + // 所有选中的 manifest 列表(用于批量保存) + private var manifestList: List = emptyList() + + // 国家代码下拉列表 + val countryCodeList = MutableLiveData>(emptyList()) + + // 通讯方式下拉列表 + val comTypeList = MutableLiveData>(emptyList()) + /** * 初始化数据 */ + @Suppress("UNCHECKED_CAST") fun initOnCreated(intent: Intent) { - val manifest = intent.getSerializableExtra(Constant.Key.DATA) as? GjjImportManifest - if (manifest != null) { - dataBean.value = manifest + val list = intent.getSerializableExtra(Constant.Key.DATA) as? ArrayList + if (!list.isNullOrEmpty()) { + manifestList = list + // 取首个填充表单,让用户看到已有数据 + dataBean.value = list.first().copy() } else { dataBean.value = GjjImportManifest() } + + // 加载下拉列表 + loadCountryCodeList() + loadComTypeList() + } + + /** + * 加载国家代码下拉列表 + */ + private fun loadCountryCodeList() { + launchCollect({ NetApply.api.getAreaTypeList() }) { + onSuccess = { result -> + val keyValueList = result.data?.mapNotNull { bean -> + if (bean.code != null && bean.name != null) { + KeyValue(bean.name, bean.code) + } else null + } ?: emptyList() + countryCodeList.value = keyValueList + } + } } /** - * 取消按钮点击 - 暂不实现 + * 加载通讯方式下拉列表(本地固定值) + */ + private fun loadComTypeList() { + comTypeList.value = listOf( + KeyValue("电话(TE)", "TE"), + KeyValue("传真(FX)", "FX") + ) + } + + /** + * 取消按钮点击 */ fun cancel() { - showToast("取消功能暂未实现") getTopActivity().finish() } /** - * 保存按钮点击 - 暂不实现 + * 保存按钮点击 - 将表单信息复制到所有选中项,批量提交 */ fun save() { - showToast("保存功能暂未实现") + val formBean = dataBean.value ?: return + + if (manifestList.isEmpty()) { + showToast("无可保存的数据") + return + } + + // 将表单中的收发货人+危险品字段复制到每个 manifest + val updatedList = manifestList.map { manifest -> + manifest.copy( + // 收货人信息 + consigneeName = formBean.consigneeName, + consigneeCountryCode = formBean.consigneeCountryCode, + consigneeComType = formBean.consigneeComType, + consigneePNum = formBean.consigneePNum, + consigneeAddress = formBean.consigneeAddress, + // 发货人信息 + consignorName = formBean.consignorName, + consignorCountryCode = formBean.consignorCountryCode, + consignorComType = formBean.consignorComType, + consignorPNum = formBean.consignorPNum, + consignorAddress = formBean.consignorAddress, + // 危险品信息 + dgrContactMame = formBean.dgrContactMame, + dgrContactNumber = formBean.dgrContactNumber, + unNumber = formBean.unNumber + ) + } + + // 拼装成数组提交 + launchLoadingCollect({ + NetApply.api.completeIntArrManifest(updatedList.toRequestBody()) + }) { + onSuccess = { + showToast("保存成功") + viewModelScope.launch { + FlowBus.with(ConstantEvent.EVENT_REFRESH).emit("refresh") + } + getTopActivity().finish() + } + } } } diff --git a/module_gjj/src/main/res/layout/activity_int_arr_supplement_info.xml b/module_gjj/src/main/res/layout/activity_int_arr_supplement_info.xml index 613ea44..30a8fc1 100644 --- a/module_gjj/src/main/res/layout/activity_int_arr_supplement_info.xml +++ b/module_gjj/src/main/res/layout/activity_int_arr_supplement_info.xml @@ -70,9 +70,10 @@ android:layout_weight="1" enable="@{true}" hint='@{"请选择国家代码"}' + list="@{viewModel.countryCodeList}" title='@{"国家代码"}' titleLength="@{5}" - type="@{DataLayoutType.INPUT}" + type="@{DataLayoutType.SPINNER}" value='@={viewModel.dataBean.consigneeCountryCode}' /> @@ -163,9 +165,10 @@ android:layout_weight="1" enable="@{true}" hint='@{"请选择国家代码"}' + list="@{viewModel.countryCodeList}" title='@{"国家代码"}' titleLength="@{5}" - type="@{DataLayoutType.INPUT}" + type="@{DataLayoutType.SPINNER}" value='@={viewModel.dataBean.consignorCountryCode}' />