From 82fc59349783d5e70877f8feb5c95140a5d40d26 Mon Sep 17 00:00:00 2001 From: YANGJIANKUAN Date: Thu, 11 Dec 2025 19:06:06 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=9B=BD=E9=99=85=E5=87=BA=E6=B8=AF=20?= =?UTF-8?q?=E7=BB=84=E8=A3=85=E5=88=86=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module_base/bean/AssembleCompanyBean.kt | 19 +++++ .../lukouguoji/module_base/http/net/Api.kt | 8 ++ .../activity/GjcAssembleAllocateActivity.kt | 3 + .../dialog/GjcAssembleAllocateDialogModel.kt | 41 +++++++++ .../viewModel/GjcAssembleAllocateViewModel.kt | 71 ++++++++++------ .../activity_int_exp_assemble_start.xml | 2 - .../layout/dialog_gjc_assemble_allocate.xml | 84 +++++++++++++++++++ .../res/layout/item_gjc_assemble_allocate.xml | 9 +- 8 files changed, 205 insertions(+), 32 deletions(-) create mode 100644 module_base/src/main/java/com/lukouguoji/module_base/bean/AssembleCompanyBean.kt create mode 100644 module_gjc/src/main/java/com/lukouguoji/gjc/dialog/GjcAssembleAllocateDialogModel.kt create mode 100644 module_gjc/src/main/res/layout/dialog_gjc_assemble_allocate.xml diff --git a/module_base/src/main/java/com/lukouguoji/module_base/bean/AssembleCompanyBean.kt b/module_base/src/main/java/com/lukouguoji/module_base/bean/AssembleCompanyBean.kt new file mode 100644 index 0000000..e1fec72 --- /dev/null +++ b/module_base/src/main/java/com/lukouguoji/module_base/bean/AssembleCompanyBean.kt @@ -0,0 +1,19 @@ +package com.lukouguoji.module_base.bean + +import dev.utils.app.info.KeyValue + +/** + * 组装公司Bean + * 用于组装分配时选择分配人 + */ +data class AssembleCompanyBean( + val code: String = "", // 公司代码,例如 "ATR" + val name: String = "" // 公司名称,例如 "ATR:马道" +) { + /** + * 转换为 KeyValue 用于下拉列表 + * @return KeyValue(显示文本, 实际值) + * 例如: KeyValue("ATR:马道", "ATR") + */ + fun toKeyValue() = KeyValue(name, code) +} 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 878e019..2217184 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 @@ -5,6 +5,7 @@ import com.lukouguoji.module_base.bean.AccidentVisaBean import com.lukouguoji.module_base.bean.AirportBean import com.lukouguoji.module_base.bean.AppUpdateResponse import com.lukouguoji.module_base.bean.AppUpdateResponseInfo +import com.lukouguoji.module_base.bean.AssembleCompanyBean import com.lukouguoji.module_base.bean.BaseListBean import com.lukouguoji.module_base.bean.BaseResultBean import com.lukouguoji.module_base.bean.BoxDetailsForCarIdBean @@ -496,6 +497,13 @@ interface Api { @POST("IntExpAssemble/allocate") suspend fun allocateAssemble(@Body params: RequestBody): BaseResultBean + /** + * 获取组装公司下拉列表 + * 接口路径: /typeCode/assembleCompany + */ + @POST("typeCode/assembleCompany") + suspend fun getAssembleCompanyList(): BaseResultBean> + /** * 国际出港板箱过磅-分页搜索 * 接口路径: /IntExpWeighting/pageQuery diff --git a/module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcAssembleAllocateActivity.kt b/module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcAssembleAllocateActivity.kt index b0510f4..a2aa49c 100644 --- a/module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcAssembleAllocateActivity.kt +++ b/module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcAssembleAllocateActivity.kt @@ -52,6 +52,9 @@ class GjcAssembleAllocateActivity : binding.checkIcon.alpha = if (isAllChecked) 1.0f else 0.5f } + // 初始化:获取分配人列表 + viewModel.getAssembleCompanyList() + // 初始加载 viewModel.refresh() } diff --git a/module_gjc/src/main/java/com/lukouguoji/gjc/dialog/GjcAssembleAllocateDialogModel.kt b/module_gjc/src/main/java/com/lukouguoji/gjc/dialog/GjcAssembleAllocateDialogModel.kt new file mode 100644 index 0000000..2ea3cd0 --- /dev/null +++ b/module_gjc/src/main/java/com/lukouguoji/gjc/dialog/GjcAssembleAllocateDialogModel.kt @@ -0,0 +1,41 @@ +package com.lukouguoji.gjc.dialog + +import android.content.Context +import androidx.lifecycle.MutableLiveData +import com.lukouguoji.gjc.R +import com.lukouguoji.gjc.databinding.DialogGjcAssembleAllocateBinding +import com.lukouguoji.module_base.base.BaseDialogModel +import com.lukouguoji.module_base.ktx.verifyNullOrEmpty +import dev.utils.app.info.KeyValue + +/** + * 国际出港组装分配 - 分配人选择对话框 + */ +class GjcAssembleAllocateDialogModel( + val flightInfo: String, // 航班信息(用于显示) + val assembleCompanyList: List, // 分配人列表 + private val callback: (GjcAssembleAllocateDialogModel) -> Unit +) : BaseDialogModel(DIALOG_TYPE_CENTER) { + + // 选中的分配人(存储的是 code,例如 "ATR") + val allocator = MutableLiveData("") + + override fun layoutId(): Int { + return R.layout.dialog_gjc_assemble_allocate + } + + override fun onDialogCreated(context: Context) { + binding.model = this + } + + /** + * 确认按钮点击 + */ + fun onConfirmClick() { + if (allocator.value.verifyNullOrEmpty("请选择分配人")) { + return + } + dismiss() + callback(this) + } +} diff --git a/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/GjcAssembleAllocateViewModel.kt b/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/GjcAssembleAllocateViewModel.kt index 083c1fc..79c58be 100644 --- a/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/GjcAssembleAllocateViewModel.kt +++ b/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/GjcAssembleAllocateViewModel.kt @@ -2,11 +2,14 @@ package com.lukouguoji.gjc.viewModel import android.app.AlertDialog import android.widget.EditText +import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.viewModelScope import com.lukouguoji.gjc.R +import com.lukouguoji.gjc.dialog.GjcAssembleAllocateDialogModel import com.lukouguoji.gjc.holder.GjcAssembleAllocateViewHolder import com.lukouguoji.module_base.base.BasePageViewModel +import com.lukouguoji.module_base.bean.AssembleCompanyBean import com.lukouguoji.module_base.bean.GjcAssembleAllocate import com.lukouguoji.module_base.common.ConstantEvent import com.lukouguoji.module_base.http.net.NetApply @@ -17,6 +20,7 @@ import com.lukouguoji.module_base.ktx.launchLoadingCollect import com.lukouguoji.module_base.ktx.showToast import com.lukouguoji.module_base.ktx.toRequestBody import com.lukouguoji.module_base.util.CheckUtil +import dev.utils.app.info.KeyValue import kotlinx.coroutines.launch /** @@ -43,6 +47,10 @@ class GjcAssembleAllocateViewModel : BasePageViewModel() { // 全选状态 val isAllChecked = MutableLiveData(false) + // 分配人列表(从接口获取,存储 KeyValue 格式) + private val _assembleCompanyList = MutableLiveData>(emptyList()) + val assembleCompanyList: LiveData> = _assembleCompanyList + /////////////////////////////////////////////////////////////////////////// // 方法区 /////////////////////////////////////////////////////////////////////////// @@ -129,6 +137,19 @@ class GjcAssembleAllocateViewModel : BasePageViewModel() { updateCheckAllStatus() } + /** + * 获取分配人列表 + * 在 Activity 初始化时调用 + */ + fun getAssembleCompanyList() { + launchCollect({ NetApply.api.getAssembleCompanyList() }) { + onSuccess = { result -> + val list = result.data?.map { it.toKeyValue() } ?: emptyList() + _assembleCompanyList.value = list + } + } + } + /** * 分配按钮点击 */ @@ -141,45 +162,45 @@ class GjcAssembleAllocateViewModel : BasePageViewModel() { return } - // 显示分配人输入对话框 - showAllocatorInputDialog(selectedItems) + // 检查分配人列表是否为空 + if (_assembleCompanyList.value.isNullOrEmpty()) { + showToast("分配人列表为空,请稍后重试") + return + } + + // 显示分配人选择对话框 + showAllocatorSelectDialog(selectedItems) } /** - * 显示分配人输入对话框 + * 显示分配人选择对话框 */ - private fun showAllocatorInputDialog(items: List) { - val activity = getTopActivity() - val editText = EditText(activity) - editText.hint = "请输入分配人姓名" + private fun showAllocatorSelectDialog(items: List) { + // 构建航班信息字符串(例如:CA1234、MU5678) + val flightInfo = items.joinToString("、") { it.fno ?: "" } - AlertDialog.Builder(activity) - .setTitle("分配人员") - .setView(editText) - .setPositiveButton("确定") { dialog, _ -> - val allocatorName = editText.text.toString().trim() - if (allocatorName.isEmpty()) { - showToast("请输入分配人姓名") - } else { - performAllocate(items, allocatorName) - dialog.dismiss() - } - } - .setNegativeButton("取消") { dialog, _ -> - dialog.dismiss() - } - .show() + GjcAssembleAllocateDialogModel( + flightInfo = flightInfo, + assembleCompanyList = _assembleCompanyList.value ?: emptyList() + ) { dialog -> + // 回调:用户点击确定后执行分配操作 + // dialog.allocator.value 存储的是选中的 code(例如 "ATR") + val allocatorCode = dialog.allocator.value ?: "" + performAllocate(items, allocatorCode) + }.show(getTopActivity()) } /** * 执行分配操作 + * @param items 选中的航班列表 + * @param allocatorCode 分配人代码(例如 "ATR",而非 "ATR:马道") */ - private fun performAllocate(items: List, allocatorName: String) { + private fun performAllocate(items: List, allocatorCode: String) { val fidList = items.mapNotNull { it.fid } val requestData = mapOf( "fidList" to fidList, // 航班ID列表 - "acName" to allocatorName // 分配人姓名 + "abId" to allocatorCode // 分配人代码(传递 code 而非 name) ).toRequestBody() launchLoadingCollect({ NetApply.api.allocateAssemble(requestData) }) { diff --git a/module_gjc/src/main/res/layout/activity_int_exp_assemble_start.xml b/module_gjc/src/main/res/layout/activity_int_exp_assemble_start.xml index 139ccfa..1719f73 100644 --- a/module_gjc/src/main/res/layout/activity_int_exp_assemble_start.xml +++ b/module_gjc/src/main/res/layout/activity_int_exp_assemble_start.xml @@ -247,7 +247,6 @@ android:layout_height="wrap_content" android:layout_weight="1" enable="@{true}" - required="@{true}" title='@{"耗材重量:"}' titleLength="@{5}" type="@{DataLayoutType.INPUT}" @@ -351,7 +350,6 @@ android:layout_height="wrap_content" android:layout_weight="1" enable="@{true}" - required="@{true}" title='@{"组装重量:"}' titleLength="@{5}" type="@{DataLayoutType.INPUT}" diff --git a/module_gjc/src/main/res/layout/dialog_gjc_assemble_allocate.xml b/module_gjc/src/main/res/layout/dialog_gjc_assemble_allocate.xml new file mode 100644 index 0000000..0043380 --- /dev/null +++ b/module_gjc/src/main/res/layout/dialog_gjc_assemble_allocate.xml @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/module_gjc/src/main/res/layout/item_gjc_assemble_allocate.xml b/module_gjc/src/main/res/layout/item_gjc_assemble_allocate.xml index c5731ea..0dcd778 100644 --- a/module_gjc/src/main/res/layout/item_gjc_assemble_allocate.xml +++ b/module_gjc/src/main/res/layout/item_gjc_assemble_allocate.xml @@ -58,7 +58,6 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{bean.fdate}" - android:textColor="@color/colorPrimary" tools:text="2025-09-05" /> @@ -73,7 +72,7 @@