From 3fedef27a7ab651305e3a8c0b59ea18b392bd446 Mon Sep 17 00:00:00 2001 From: YANG JIANKUAN Date: Sat, 20 Jun 2026 12:19:51 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=9B=BD=E9=99=85=E5=87=BA=E6=B8=AF?= =?UTF-8?q?=E8=A3=85=E8=BD=BD=E5=88=97=E8=A1=A8=E9=A1=B9=E5=8A=A0=E8=88=AA?= =?UTF-8?q?=E7=A8=8B=E5=8F=8A=E5=A7=8B=E5=8F=91=E7=AB=99/=E7=9B=AE?= =?UTF-8?q?=E7=9A=84=E7=AB=99=E7=AD=9B=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 列表项改为5列并新增航程(range 为空时回退始发港-目的港拼接); 搜索区参考电报生成接口,填航班日期+号联动查询,始发站可下拉、 目的站自动填充只读,dep/dest 作为筛选传给列表接口。 Co-Authored-By: Claude Opus 4.6 --- .../module_base/bean/GjcCheckInPage.kt | 2 + .../module_base/bean/GjcExportLoad.kt | 12 +++ .../gjc/viewModel/IntExpLoadViewModel.kt | 78 +++++++++++++++++- .../main/res/layout/activity_int_exp_load.xml | 26 +++++- .../src/main/res/layout/item_int_exp_load.xml | 82 +++++++++++++------ 5 files changed, 172 insertions(+), 28 deletions(-) diff --git a/module_base/src/main/java/com/lukouguoji/module_base/bean/GjcCheckInPage.kt b/module_base/src/main/java/com/lukouguoji/module_base/bean/GjcCheckInPage.kt index c8bf648..b902cc4 100644 --- a/module_base/src/main/java/com/lukouguoji/module_base/bean/GjcCheckInPage.kt +++ b/module_base/src/main/java/com/lukouguoji/module_base/bean/GjcCheckInPage.kt @@ -9,6 +9,8 @@ data class GjcCheckInPage( var fno: String? = null, // 航班号 var wbNo: String? = null, // 运单号 var hno: String? = null, // 分单号 + var dep: String? = null, // 始发站 + var dest: String? = null, // 目的站 var pageNum: Int = 1, // 页码 var pageSize: Int = 10 // 每页条数 ) diff --git a/module_base/src/main/java/com/lukouguoji/module_base/bean/GjcExportLoad.kt b/module_base/src/main/java/com/lukouguoji/module_base/bean/GjcExportLoad.kt index df4fcc3..0f2955e 100644 --- a/module_base/src/main/java/com/lukouguoji/module_base/bean/GjcExportLoad.kt +++ b/module_base/src/main/java/com/lukouguoji/module_base/bean/GjcExportLoad.kt @@ -10,6 +10,8 @@ class GjcExportLoad { var activeId: String = "" // 运单活跃号 var by1: String = "" // 第一承运人 var dep: String = "" // 始发港 + var dest: String = "" // 目的港 + var range: String = "" // 航程 var fdate: String = "" // 申报航班日期 var fid: String = "" // 航班主键id var fno: String = "" // 申报航班号 @@ -47,4 +49,14 @@ class GjcExportLoad { fun getFullWaybillNo(): String { return if (prefix.isNotEmpty()) "$prefix$no" else no } + + /** + * 航程 + * 优先取 range;为空时用 始发港-目的港 拼接 + */ + val rangeText: String + get() { + if (range.isNotBlank()) return range + return if (dep.isNotEmpty() && dest.isNotEmpty()) "$dep-$dest" else dep + dest + } } diff --git a/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/IntExpLoadViewModel.kt b/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/IntExpLoadViewModel.kt index d4ce99a..85ad7a4 100644 --- a/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/IntExpLoadViewModel.kt +++ b/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/IntExpLoadViewModel.kt @@ -17,6 +17,7 @@ import com.lukouguoji.module_base.impl.FlowBus import com.lukouguoji.module_base.ktx.commonAdapter import com.lukouguoji.module_base.ktx.launchCollect import com.lukouguoji.module_base.ktx.launchLoadingCollect +import com.lukouguoji.module_base.ktx.noNull import com.lukouguoji.module_base.ktx.showToast import com.lukouguoji.module_base.ktx.toRequestBody import com.lukouguoji.module_base.model.ScanModel @@ -34,6 +35,77 @@ class IntExpLoadViewModel : BasePageViewModel() { val flightDate = MutableLiveData(DateUtils.getCurrentTime().formatDate()) // 航班日期 val flightNo = MutableLiveData("") // 航班号 val waybillNo = MutableLiveData("") // 运单号 + val depPort = MutableLiveData("") // 始发站(下拉选择) + val depPortList = MutableLiveData>(emptyList()) // 始发站下拉列表(始发港 + 经停港) + val destPort = MutableLiveData("") // 目的站(航班查询自动填充,不可编辑) + + // ========== 航班级联查询 ========== + private var lastQueriedFlight = "" // 避免重复查询 + + /** + * 航班日期输入完成回调 + */ + fun onFlightDateInputComplete() { + lastQueriedFlight = "" + queryFlightIfReady() + } + + /** + * 航班号输入完成回调 + */ + fun onFlightNoInputComplete() { + queryFlightIfReady() + } + + /** + * 航班日期 + 航班号 均有值时,查询航班并填充始发站/目的站 + * 参考「电报生成」(/flt/intFlight):始发站下拉(始发港+经停港),目的站自动填充且只读 + */ + 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 "E", // 出港 + ).toRequestBody() + ) + }) { + onSuccess = { + if (it.verifySuccess() && it.data != null) { + val flight = it.data!! + // 目的站:航班查询返回,自动填充 + destPort.value = flight.fdest.noNull() + // 始发站下拉:始发港 + 经停港(可逗号分隔多个) + val list = mutableListOf(KeyValue(flight.fdep.noNull(), flight.fdep.noNull())) + flight.jtz.split(",").forEach { stop -> + val s = stop.trim() + if (s.isNotEmpty()) list.add(KeyValue(s, s)) + } + depPortList.value = list + depPort.value = flight.fdep.noNull() + } else { + depPortList.value = emptyList() + depPort.value = "" + destPort.value = "" + } + } + + onFailed = { _, _ -> + depPortList.value = emptyList() + depPort.value = "" + destPort.value = "" + } + } + } // ========== 统计信息 ========== val totalCount = MutableLiveData("0") // 合计票数 @@ -199,6 +271,8 @@ class IntExpLoadViewModel : BasePageViewModel() { fdate = flightDate.value?.ifEmpty { null }, fno = flightNo.value?.ifEmpty { null }, wbNo = waybillNo.value?.ifEmpty { null }, + dep = depPort.value?.ifEmpty { null }, + dest = destPort.value?.ifEmpty { null }, pageNum = pageModel.page, pageSize = pageModel.limit ) @@ -210,7 +284,9 @@ class IntExpLoadViewModel : BasePageViewModel() { val totalParams = GjcCheckInPage( fdate = flightDate.value?.ifEmpty { null }, fno = flightNo.value?.ifEmpty { null }, - wbNo = waybillNo.value?.ifEmpty { null } + wbNo = waybillNo.value?.ifEmpty { null }, + dep = depPort.value?.ifEmpty { null }, + dest = destPort.value?.ifEmpty { null } ).toRequestBody() // 获取列表 (带Loading) diff --git a/module_gjc/src/main/res/layout/activity_int_exp_load.xml b/module_gjc/src/main/res/layout/activity_int_exp_load.xml index a3fac6d..eca34ac 100644 --- a/module_gjc/src/main/res/layout/activity_int_exp_load.xml +++ b/module_gjc/src/main/res/layout/activity_int_exp_load.xml @@ -37,6 +37,7 @@ android:layout_weight="1" hint='@{"请选择航班日期"}' icon="@{@drawable/img_date}" + setRefreshCallBack="@{viewModel::onFlightDateInputComplete}" type="@{SearchLayoutType.DATE}" value="@={viewModel.flightDate}" /> @@ -46,10 +47,31 @@ android:layout_height="wrap_content" android:layout_weight="1" hint='@{"请输入航班号"}' + setRefreshCallBack="@{viewModel::onFlightNoInputComplete}" type="@{SearchLayoutType.INPUT}" value="@={viewModel.flightNo}" setUpperCaseAlphanumeric="@{true}" /> + + + + + + + android:paddingHorizontal="12dp"> - + @@ -63,7 +63,7 @@ android:text="运单号:" android:textColor="@color/text_normal" android:textSize="15sp" - completeSpace="@{4}" /> + completeSpace="@{5}" /> @@ -89,7 +89,7 @@ android:text="状态:" android:textColor="@color/text_normal" android:textSize="15sp" - completeSpace="@{5}" /> + completeSpace="@{4}" /> @@ -114,7 +114,7 @@ android:text="件数:" android:textColor="@color/text_normal" android:textSize="15sp" - completeSpace="@{4}" /> + completeSpace="@{3}" /> @@ -139,7 +139,7 @@ android:text="重量:" android:textColor="@color/text_normal" android:textSize="15sp" - completeSpace="@{5}" /> + completeSpace="@{6}" /> - - - - - @@ -174,7 +164,7 @@ android:text="特码:" android:textColor="@color/text_normal" android:textSize="15sp" - completeSpace="@{4}" /> + completeSpace="@{3}" /> + + + + + @@ -214,7 +214,7 @@ @@ -235,11 +235,36 @@ + + + + + + + + + @@ -249,7 +274,7 @@ android:text="品名(中):" android:textColor="@color/text_normal" android:textSize="15sp" - completeSpace="@{5}" /> + completeSpace="@{6}" /> + + +