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 a35297f..015bf74 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 @@ -1254,21 +1254,21 @@ interface Api { suspend fun getGjjManifestDetail(@Query("id") id: String): BaseResultBean /** - * 删除-国际进-舱单-列表 + * 批量删除-国际进港舱单(请求体为 mfId 数组,如 [1,2,3]) */ @POST("IntImpManiFest/deleteFestList") - suspend fun gjjManifestDelete(@Body data: RequestBody): BaseResultBean + suspend fun gjjManifestDeleteBatch(@Body data: RequestBody): BaseResultBean /** - * 新增-国际进-舱单 + * 新增-国际进港舱单 */ - @POST("IntImpManiFest/saveFest") + @POST("IntImpManifest/addManifest") suspend fun gjjManifestInsert(@Body data: RequestBody): BaseResultBean /** - * 更新-国际进-舱单 + * 修改-国际进港舱单 */ - @POST("IntImpManiFest/updateFest") + @POST("IntImpManifest/modifyManifest") suspend fun gjjManifestUpdate(@Body data: RequestBody): BaseResultBean /** diff --git a/module_base/src/main/java/com/lukouguoji/module_base/ui/weight/data/layout/PadDataLayoutNew.kt b/module_base/src/main/java/com/lukouguoji/module_base/ui/weight/data/layout/PadDataLayoutNew.kt index b4d8fda..f69a1c0 100644 --- a/module_base/src/main/java/com/lukouguoji/module_base/ui/weight/data/layout/PadDataLayoutNew.kt +++ b/module_base/src/main/java/com/lukouguoji/module_base/ui/weight/data/layout/PadDataLayoutNew.kt @@ -96,6 +96,7 @@ class PadDataLayoutNew : FrameLayout { field = value et.hint = value + tv.hint = value bindAdapter(spinner, list, hint) } diff --git a/module_gjj/src/main/java/com/lukouguoji/gjj/activity/GjjManifestAddActivity.kt b/module_gjj/src/main/java/com/lukouguoji/gjj/activity/GjjManifestAddActivity.kt index d485899..e126413 100644 --- a/module_gjj/src/main/java/com/lukouguoji/gjj/activity/GjjManifestAddActivity.kt +++ b/module_gjj/src/main/java/com/lukouguoji/gjj/activity/GjjManifestAddActivity.kt @@ -11,6 +11,7 @@ import com.lukouguoji.module_base.base.BaseBindingActivity import com.lukouguoji.module_base.common.Constant import com.lukouguoji.module_base.common.DetailsPageType import com.lukouguoji.module_base.ktx.noNull +import com.lukouguoji.module_base.ktx.setUpperCaseAlphanumericFilter class GjjManifestAddActivity : BaseBindingActivity() { @@ -20,15 +21,16 @@ class GjjManifestAddActivity : override fun viewModelClass() = GjjManifestAddViewModel::class.java override fun initOnCreate(savedInstanceState: Bundle?) { - // 动态设置标题 - val title = when { - viewModel.pageType.value == DetailsPageType.Modify -> "国际进港舱单编辑" + binding.viewModel = viewModel + binding.flightNoInput.et.setUpperCaseAlphanumericFilter() + viewModel.initOnCreated(intent) + + // 动态设置标题(必须在 initOnCreated 之后,pageType 已从 Intent 解析) + val title = when (viewModel.pageType.value) { + DetailsPageType.Modify -> "国际进港舱单编辑" else -> "国际进港舱单新增" } setBackArrow(title) - - binding.viewModel = viewModel - viewModel.initOnCreated(intent) } companion object { @@ -49,10 +51,17 @@ class GjjManifestAddActivity : * 编辑舱单(通过Bean对象) */ @JvmStatic - fun startForEdit(context: Context, bean: com.lukouguoji.module_base.bean.GjjManifest) { + fun startForEdit( + context: Context, + bean: com.lukouguoji.module_base.bean.GjjManifest, + flightDate: String = "", + flightNo: String = "" + ) { val starter = Intent(context, GjjManifestAddActivity::class.java) .putExtra(Constant.Key.PAGE_TYPE, DetailsPageType.Modify.name) .putExtra(Constant.Key.BEAN, bean) + .putExtra("flightDate", flightDate) + .putExtra("flightNo", flightNo) context.startActivity(starter) } diff --git a/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/GjjManifestAddViewModel.kt b/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/GjjManifestAddViewModel.kt index d777dda..ce9163d 100644 --- a/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/GjjManifestAddViewModel.kt +++ b/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/GjjManifestAddViewModel.kt @@ -44,6 +44,60 @@ class GjjManifestAddViewModel : BaseViewModel() { // 运单号 val waybillNo = MutableLiveData("") + // ========== 航班级联查询 ========== + private var lastQueriedFlight = "" + + fun onFlightDateInputComplete() { + lastQueriedFlight = "" + queryFlightIfReady() + } + + fun onFlightNoInputComplete() { + queryFlightIfReady() + } + + private fun queryFlightIfReady() { + val fdate = flightDate.value + val fno = flightNo.value + if (fdate.isNullOrEmpty() || fno.isNullOrEmpty()) return + + val key = "$fdate-$fno" + if (key == lastQueriedFlight) return + lastQueriedFlight = key + + launchCollect({ + NetApply.api.getGjFlightBean( + mapOf( + "fdate" to fdate, + "fno" to fno, + "ieFlag" to "I", + ).toRequestBody() + ) + }) { + onSuccess = { + if (it.verifySuccess() && it.data != null) { + val flight = it.data!! + fid = flight.fid.noNull() + departure.value = flight.fdep.noNull() + destination.value = flight.fdest.noNull() + range.value = flight.range.noNull() + } else { + fid = "" + departure.value = "" + destination.value = "" + range.value = "" + showToast(it.msg.noNull("获取航班信息失败")) + } + } + onFailed = { _, _ -> + fid = "" + departure.value = "" + destination.value = "" + range.value = "" + } + } + } + // UN编号 val unNumber = MutableLiveData("") @@ -146,6 +200,10 @@ class GjjManifestAddViewModel : BaseViewModel() { // 编辑模式:从Bean对象加载数据 if (pageType.value == DetailsPageType.Modify) { + // 回填航班日期和航班号(Bean中不包含,从列表页传入) + flightDate.value = intent.getStringExtra("flightDate").noNull() + flightNo.value = intent.getStringExtra("flightNo").noNull() + val bean = intent.getSerializableExtra(Constant.Key.BEAN) if (bean is com.lukouguoji.module_base.bean.GjjManifest) { loadManifestFromBean(bean) @@ -229,15 +287,14 @@ class GjjManifestAddViewModel : BaseViewModel() { "mfId" to if (pageType.value == DetailsPageType.Modify) mfId else null, "fid" to fid, "wbNo" to waybillNo.value, - "agent" to agent.value, + "agentCode" to agent.value, "spCode" to specialCode.value, "businessType" to businessType.value, - "awbpc" to waybillNum.value, + "totalPc" to waybillNum.value, "pc" to actualNum.value, "weight" to actualWeight.value, - "planweight" to billingWeight.value, - "packagecode" to packageType.value, - "dep" to departure.value, + "cashWeight" to billingWeight.value, + "packageType" to packageType.value, "origin" to departure.value, "dest" to destination.value, "goods" to goodsNameEn.value, diff --git a/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/GjjManifestListViewModel.kt b/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/GjjManifestListViewModel.kt index 00954b7..629f6a6 100644 --- a/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/GjjManifestListViewModel.kt +++ b/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/GjjManifestListViewModel.kt @@ -266,7 +266,7 @@ class GjjManifestListViewModel : BasePageViewModel(), IOnItemClickListener { private fun onDelete(list: List) { showLoading() launchCollect({ - NetApply.api.gjjManifestDelete( + NetApply.api.gjjManifestDeleteBatch( list.map { it.mfId }.toRequestBody() ) }) { diff --git a/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/IntImpManifestViewModel.kt b/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/IntImpManifestViewModel.kt index d2ca368..2375450 100644 --- a/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/IntImpManifestViewModel.kt +++ b/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/IntImpManifestViewModel.kt @@ -264,8 +264,12 @@ class IntImpManifestViewModel : BasePageViewModel() { when (type) { 101 -> { - // 编辑(传递整个Bean对象) - GjjManifestAddActivity.startForEdit(getTopActivity(), bean) + // 编辑(传递整个Bean对象 + 当前筛选的航班日期和航班号) + GjjManifestAddActivity.startForEdit( + getTopActivity(), bean, + flightDate = flightDate.value ?: "", + flightNo = flightNo.value ?: "" + ) } 102 -> { // 删除 @@ -279,28 +283,14 @@ class IntImpManifestViewModel : BasePageViewModel() { } /** - * 删除单个舱单 + * 删除单个舱单(通过批量删除接口,传单元素数组) */ private fun deleteManifest(bean: GjjManifest) { ConfirmDialogModel( message = "确定要删除运单号 ${bean.getWaybillNo()} 的舱单吗?", title = "提示" ) { - val params = mapOf("mfId" to bean.mfId).toRequestBody() - - launchLoadingCollect({ NetApply.api.gjjManifestDelete(params) }) { - onSuccess = { - if (it.verifySuccess()) { - showToast("删除成功") - viewModelScope.launch { - FlowBus.with(ConstantEvent.EVENT_REFRESH).emit("refresh") - } - refresh() - } else { - showToast(it.msg.noNull("删除失败")) - } - } - } + doDeleteByIds(listOf(bean.mfId)) }.show() } @@ -316,7 +306,32 @@ class IntImpManifestViewModel : BasePageViewModel() { return } - showToast("删除功能开发中") + ConfirmDialogModel( + message = "确定要删除选中的 ${selectedItems.size} 条舱单吗?", + title = "批量删除确认" + ) { + doDeleteByIds(selectedItems.map { it.mfId }) + }.show() + } + + /** + * 执行批量删除(统一接口,请求体为 mfId 数组) + */ + private fun doDeleteByIds(mfIds: List) { + launchLoadingCollect({ NetApply.api.gjjManifestDeleteBatch(mfIds.toRequestBody()) }) { + onSuccess = { + if (it.verifySuccess()) { + showToast("删除成功") + isAllChecked.value = false + viewModelScope.launch { + FlowBus.with(ConstantEvent.EVENT_REFRESH).emit("refresh") + } + refresh() + } else { + showToast(it.msg.noNull("删除失败")) + } + } + } } /** diff --git a/module_gjj/src/main/res/layout/activity_gjj_manifest_add.xml b/module_gjj/src/main/res/layout/activity_gjj_manifest_add.xml index 10ba9f2..9dedc1a 100644 --- a/module_gjj/src/main/res/layout/activity_gjj_manifest_add.xml +++ b/module_gjj/src/main/res/layout/activity_gjj_manifest_add.xml @@ -44,16 +44,17 @@ android:orientation="vertical" android:padding="8dp"> - + - +