diff --git a/app/src/main/java/com/lukouguoji/aerologic/page/uld/edit/UldEditViewModel.kt b/app/src/main/java/com/lukouguoji/aerologic/page/uld/edit/UldEditViewModel.kt index 5a5ae29..76d5c8c 100644 --- a/app/src/main/java/com/lukouguoji/aerologic/page/uld/edit/UldEditViewModel.kt +++ b/app/src/main/java/com/lukouguoji/aerologic/page/uld/edit/UldEditViewModel.kt @@ -36,7 +36,7 @@ class UldEditViewModel : BaseViewModel() { // ========== 手机版(5.5 寸手持端)专用 ========== - /** 来源选项(本地枚举;后端字段暂不支持,需求已登记 documents/后端接口对接问题清单.xlsx) */ + /** 来源选项(与平板端一致:空运 / 陆运) */ val sourceEditList = MutableLiveData>( listOf( KeyValue("空运", "空运"), @@ -45,8 +45,8 @@ class UldEditViewModel : BaseViewModel() { ) /** - * 手机版状态选项。设计稿为三态(可用/占用/维修),后端枚举当前仅 0/1, - * 按语义映射 可用=0 / 维修=1;「占用」待后端扩展枚举后放开(需求已登记清单)。 + * 手机版状态选项。后端枚举维持两态(0 正常 / 1 故障,不新增「占用」), + * 按设计稿文案映射 可用=0 / 维修=1。 */ val statusPhoneList = listOf( KeyValue("可用", "0"), @@ -64,7 +64,7 @@ class UldEditViewModel : BaseViewModel() { loadCarrierList(null) // 手机版新增默认所在港 HFE(设计稿约定);平板无此预填,行为不变 if (DeviceUtil.isPhone()) { - uldBean.value = uldBean.value?.copy(airport = "HFE") + uldBean.value = uldBean.value?.copy(nowPort = "HFE") } } else { getData() @@ -107,11 +107,15 @@ class UldEditViewModel : BaseViewModel() { showToast("自重不能为空") return } - if (bean.checkInDate.isBlank()) { + if (bean.inStoreTime.isBlank()) { showToast("入库时间不能为空") return } } + // 手机版日期行只产出 yyyy-MM-dd,而 inStoreTime 为 date-time(仅日期后端返回 400),补齐时分秒 + if (DeviceUtil.isPhone() && bean.inStoreTime.length == 10) { + bean.inStoreTime = "${bean.inStoreTime} 00:00:00" + } val isAdd = pageType.value == DetailsPageType.Add launchLoadingCollect({ if (isAdd) NetApply.api.saveUld(bean.toRequestBody()) @@ -121,7 +125,7 @@ class UldEditViewModel : BaseViewModel() { showToast(it.msg.noNull(if (isAdd) "新增成功" else "修改成功")) if (isAdd) { // 清空表单继续录入;手机版保持所在港默认 HFE(与进入页面时一致) - uldBean.value = if (DeviceUtil.isPhone()) ULDBean(airport = "HFE") else ULDBean() + uldBean.value = if (DeviceUtil.isPhone()) ULDBean(nowPort = "HFE") else ULDBean() } else { getData() } diff --git a/app/src/main/java/com/lukouguoji/aerologic/page/uld/list/UldListActivity.kt b/app/src/main/java/com/lukouguoji/aerologic/page/uld/list/UldListActivity.kt index 5d11654..a45b1d8 100644 --- a/app/src/main/java/com/lukouguoji/aerologic/page/uld/list/UldListActivity.kt +++ b/app/src/main/java/com/lukouguoji/aerologic/page/uld/list/UldListActivity.kt @@ -70,13 +70,11 @@ class UldListActivity : BaseBindingActivity>( + /** 手机版状态下拉:文案与卡片标签一致(可用=0 / 维修=1) */ + val statusPhoneFilterList = MutableLiveData>( listOf( KeyValue("全部", ""), - KeyValue("空运", "空运"), - KeyValue("陆运", "陆运"), + KeyValue("可用", "0"), + KeyValue("维修", "1"), ) ) @@ -82,10 +77,6 @@ class UldListViewModel : BasePageViewModel() { "status" to status.value?.ifEmpty { null }, "uldSuffix" to uldSuffix.value?.ifEmpty { null }, "uld" to uldNo.value?.ifEmpty { null }, - // 手机版筛选维度(平板恒空不参与);后端暂不支持这三个入参,已登记清单 - "checkInDate" to checkInDateFilter.value?.ifEmpty { null }, - "ifNo" to ifNoFilter.value?.ifEmpty { null }, - "source" to sourceFilter.value?.ifEmpty { null }, ).toRequestBody() ) }) { @@ -122,10 +113,7 @@ class UldListViewModel : BasePageViewModel() { ?.filter { it.checked.get() } ?: emptyList() /** - * 批量删除选中的 ULD。 - * - * 后端仅有单条删除接口(/eqm/uld/deleteUld,批量接口需求已登记清单), - * 此处按队列逐条串行调用,全部完成后统一刷新;中途失败即停并提示。 + * 批量删除选中的 ULD(/eqm/uld/deleteUldBatch,请求体为 ULD 编号数组,一次调用)。 */ fun deleteSelected() { val ulds = getSelectedItems().map { it.uld } @@ -133,19 +121,9 @@ class UldListViewModel : BasePageViewModel() { showToast("请选择要删除的ULD") return } - deleteQueue(ulds, 0) - } - - private fun deleteQueue(ulds: List, index: Int) { - if (index >= ulds.size) { - showToast("已删除 ${ulds.size} 条") - refresh() - return - } - launchLoadingCollect({ NetApply.api.deleteUld(ulds[index]) }) { - onSuccess = { deleteQueue(ulds, index + 1) } - onFailed = { _, msg -> - showToast("删除 ${ulds[index]} 失败:${msg.noNull("未知错误")}") + launchLoadingCollect({ NetApply.api.deleteUldBatch(ulds.toRequestBody()) }) { + onSuccess = { + showToast("已删除 ${ulds.size} 条") refresh() } } diff --git a/app/src/main/res/layout/activity_uld_edit.xml b/app/src/main/res/layout/activity_uld_edit.xml index 207934f..ef2af3c 100644 --- a/app/src/main/res/layout/activity_uld_edit.xml +++ b/app/src/main/res/layout/activity_uld_edit.xml @@ -14,8 +14,8 @@ · ULD修改(Modify):编号只读,其余可编辑 + 底部保存 · ULD详情(Details):全只读右对齐 + 顶栏右侧铅笔进入修改 + 额外展示最大装载容积/最大载重 - 「来源」「状态三态(占用)」为后端暂不支持的设计稿要求, - 已登记 documents/后端接口对接问题清单.xlsx,UI 先行、后端补齐后自动生效。 + 字段与平板端一致:来源 source(空运/陆运)、入库时间 inStoreTime、所在港 nowPort; + 状态维持两态(0 可用 / 1 维修,后端不新增「占用」)。 --> @@ -119,11 +119,11 @@ @@ -190,7 +190,7 @@ value="@{viewModel.uldBean.maxWeight}" android:visibility="@{viewModel.pageType == DetailsPageType.Details ? View.VISIBLE : View.GONE}" /> - + - + + value="@={viewModel.uldBean.nowPort}" /> - + - + + value="@={viewModel.uldBean.inStoreTime}" /> - + - - - + hint='@{"请选择状态"}' + list="@{viewModel.statusPhoneFilterList}" + title='@{"状态"}' + type="@{PhoneDataLayoutType.SPINNER}" + value="@={viewModel.status}" /> - - - diff --git a/app/src/main/res/layout/item_uld_list.xml b/app/src/main/res/layout/item_uld_list.xml index 9db6602..e0608c9 100644 --- a/app/src/main/res/layout/item_uld_list.xml +++ b/app/src/main/res/layout/item_uld_list.xml @@ -11,8 +11,7 @@ · 平板独有 id(tv_modify / tv_delete / iv_icon)与手机独有 id(iv_check) 在 Binding 基类中自动为 @Nullable,ViewHolder 判空使用 - 状态标签三色(设计稿):可用=浅绿 / 占用=浅橙 / 维修=浅红。 - 后端当前仅两态(0 可用 / 1 维修),「占用」为后端扩展枚举后的预留,见 ULDBean.statusPhoneName。 + 状态标签:可用=浅绿 / 维修=浅红(后端枚举维持两态 0/1,不含「占用」),见 ULDBean.statusPhoneName。 「来源」字段后端暂无(恒空显示 "-"),已登记 documents/后端接口对接问题清单.xlsx。 --> - + diff --git a/module_base/src/main/java/com/lukouguoji/module_base/bean/ULDBean.kt b/module_base/src/main/java/com/lukouguoji/module_base/bean/ULDBean.kt index f197b65..1d122c2 100644 --- a/module_base/src/main/java/com/lukouguoji/module_base/bean/ULDBean.kt +++ b/module_base/src/main/java/com/lukouguoji/module_base/bean/ULDBean.kt @@ -19,18 +19,21 @@ data class ULDBean( var status: String = "", // 备注 var remark: String = "", - // ========== 以下字段接口出参已有(api-doc /eqm/uld/pageQuery),此前 Bean 未解析 ========== - // 进港航班号(语义待后端确认,见 documents/后端接口对接问题清单.xlsx) + // ========== 以下字段接口出参已有(api-doc /eqm/uld/pageQuery) ========== + // 进港航班号 var ifNo: String = "", // 出港航班号 var efNo: String = "", - // 入库时间 var checkInDate: String = "", - // 出库时间 var checkOutDate: String = "", - // ========== 后端暂无对应字段,前端按设计稿预留(提交后端忽略,无副作用) ========== - // 来源:空运 / 陆运(后端字段需求已登记清单) + // 来源(空运、陆运) var source: String = "", + // 入库时间 yyyy-MM-dd HH:mm:ss(后端确认「入库时间」取 inStoreTime,与平板端一致) + var inStoreTime: String = "", + // 所在港 + var nowPort: String = "", + // 位置信息 + var nowPosition: String = "", ){ val checked = ObservableBoolean(false) @@ -40,22 +43,18 @@ data class ULDBean( else -> status } - // ========== 手机版(5.5 寸手持端)三态状态展示 ========== - // 设计稿状态为 可用(绿)/占用(橙)/维修(红) 三态;后端当前仅两态(0/1), - // 按语义映射 0→可用、1→维修,"2"→占用为后端扩展枚举后的预留(需求已登记清单)。 + // ========== 手机版(5.5 寸手持端)状态展示 ========== + // 后端确认状态枚举维持两态(0 正常 / 1 故障),不新增「占用」; + // 手机版按设计稿文案映射 0→可用(绿)、1→维修(红)。 /** 手机版状态文案 */ val statusPhoneName: String get() = when (status) { "0" -> "可用" "1" -> "维修" - "2" -> "占用" else -> statusName() } /** 可用(绿色标签) */ val isStatusAvailable: Boolean get() = status == "0" - - /** 占用(橙色标签,后端扩展枚举后的预留) */ - val isStatusOccupied: Boolean get() = status == "2" } \ No newline at end of file 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 00d6ad5..b1226b9 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 @@ -2091,6 +2091,13 @@ interface Api { @POST("eqm/uld/deleteUld") suspend fun deleteUld(@Query("uld") uld: String): BaseResultBean + /** + * 批量删除-ULD-信息(请求体为 ULD 编号字符串数组) + * 接口路径: /eqm/uld/deleteUldBatch + */ + @POST("eqm/uld/deleteUldBatch") + suspend fun deleteUldBatch(@Body data: RequestBody): BaseResultBean + /////////////////////////////////////////////////////////////////////////// // 冷库登记 ///////////////////////////////////////////////////////////////////////////