fix: 国际进港原始舱单与装机单未选航班时不再请求列表接口

- 原始舱单、装机单搜索时校验航班号必填,为空提示「请输入航班号」
- 装机单仅在父页面传入 fid 时才初始加载,否则等待手动查询
- 进港舱单、装机单 getData 在 fid 为空时直接清空列表与汇总,不发请求;
  修复装机单编辑保存后广播刷新事件,导致未选航班的父页面请求接口
  并报「业务异常:请先选择航班」

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
2026-09-16 12:11:23 +08:00
parent 74cf1346a6
commit 52d1527121
4 changed files with 54 additions and 2 deletions

View File

@@ -68,8 +68,11 @@ class IntImpLoadingListActivity :
viewModel.onFlightNoInputComplete() viewModel.onFlightNoInputComplete()
} }
// 初始加载数据 // 列表/汇总接口必须带航班fid仅在父页面已选航班并传入 fid 时才初始加载
viewModel.refresh() // 否则等用户输入航班号后手动查询,避免后端返回「请先选择航班」
if (viewModel.fid.isNotEmpty()) {
viewModel.refresh()
}
} }
/** /**

View File

@@ -63,8 +63,13 @@ class IntArrAirManifestViewModel : BasePageViewModel() {
/** /**
* 搜索按钮点击 * 搜索按钮点击
* 航班号必填,校验通过后再请求列表与汇总(与国际进港舱单页面交互一致)
*/ */
fun searchClick() { fun searchClick() {
if (flightNo.value.isNullOrEmpty()) {
showToast("请输入航班号")
return
}
refresh() refresh()
} }

View File

@@ -139,6 +139,13 @@ class IntImpLoadingListViewModel : BasePageViewModel(), IOnItemClickListener {
fun searchClick() { fun searchClick() {
val fdate = flightDate.value val fdate = flightDate.value
val fno = flightNo.value val fno = flightNo.value
// 校验航班号必填(与国际进港舱单页面交互一致)
if (fno.isNullOrEmpty()) {
showToast("请输入航班号")
return
}
if (!fdate.isNullOrEmpty() && !fno.isNullOrEmpty()) { if (!fdate.isNullOrEmpty() && !fno.isNullOrEmpty()) {
val key = "$fdate-$fno" val key = "$fdate-$fno"
if (key != lastQueriedFlight || fid.isEmpty()) { if (key != lastQueriedFlight || fid.isEmpty()) {
@@ -299,6 +306,12 @@ class IntImpLoadingListViewModel : BasePageViewModel(), IOnItemClickListener {
* 查询参数与父页面国际进港舱单保持一致使用FID和FDGP * 查询参数与父页面国际进港舱单保持一致使用FID和FDGP
*/ */
override fun getData() { override fun getData() {
// 接口必须带航班fid未选航班时不请求直接清空列表与汇总
if (fid.isEmpty()) {
clearListAndTotal()
return
}
// 构建搜索条件与父页面一致fid + fdep + wbNo // 构建搜索条件与父页面一致fid + fdep + wbNo
val filterParams = mapOf( val filterParams = mapOf(
"fid" to fid.ifEmpty { null }, "fid" to fid.ifEmpty { null },
@@ -332,4 +345,16 @@ class IntImpLoadingListViewModel : BasePageViewModel(), IOnItemClickListener {
} }
} }
} }
/**
* 无航班信息时清空列表与底部汇总,并结束刷新状态
*/
private fun clearListAndTotal() {
pageModel.handleDataList(emptyList())
pageModel.haveMore.postValue(false)
totalCount.value = "0"
totalPc.value = "0"
totalWeight.value = "0"
isAllChecked.value = false
}
} }

View File

@@ -586,6 +586,13 @@ class IntImpManifestViewModel : BasePageViewModel() {
* 通过FID查询列表而不是直接通过航班号和航班日期 * 通过FID查询列表而不是直接通过航班号和航班日期
*/ */
override fun getData() { override fun getData() {
// 接口必须带航班fid未选航班时不请求直接清空列表与汇总
// (如子页面装机单修改成功后广播 EVENT_REFRESH本页尚未查航班也会被触发刷新
if (fid.isEmpty()) {
clearListAndTotal()
return
}
// 构建搜索条件使用FID代替fdate/fno // 构建搜索条件使用FID代替fdate/fno
val filterParams = mapOf( val filterParams = mapOf(
"fid" to fid.ifEmpty { null }, "fid" to fid.ifEmpty { null },
@@ -620,6 +627,18 @@ class IntImpManifestViewModel : BasePageViewModel() {
} }
} }
/**
* 无航班信息时清空列表与底部汇总,并结束刷新状态
*/
private fun clearListAndTotal() {
pageModel.handleDataList(emptyList())
pageModel.haveMore.postValue(false)
totalCount.value = "0"
totalPc.value = "0"
totalWeight.value = "0"
isAllChecked.value = false
}
/** /**
* 加载主单下的分单列表(按需加载,加载完成后自动展开) * 加载主单下的分单列表(按需加载,加载完成后自动展开)
*/ */