From b2a2cce58565b27d5d6ff6bfe5dd3889dbde401c Mon Sep 17 00:00:00 2001 From: YANG JIANKUAN Date: Fri, 31 Jul 2026 21:31:58 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AE=8C=E6=88=90=E6=8F=90=E5=8F=96?= =?UTF-8?q?=E5=87=BA=E5=BA=93=E9=A1=B5=E9=9D=A25.5=E5=AF=B8=E6=89=8B?= =?UTF-8?q?=E6=9C=BA=E7=AB=AF=E9=80=82=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 提取出库(09,module_gjj): - IntImpPickUpDLVActivity 手机布局:搜索行+待出库/已出库状态Tab(outState 为 pageQuery 文档定义入参 0/1,Tab 真实过滤+角标双 pageQueryTotal,抓包证实携带) +双形态卡片(isPickedUp=dlvTime非空:待出库勾选框+橙标签+库位行/已出库绿√+ 出库人·出库时间行)+卡片内 PhoneStatBox 三列+PhoneBottomBar(仅待出库Tab显示, 复用既有 confirmOutbound) - 手机专属新页 IntImpPickUpDetailActivity 运单详情:蓝头运单卡+绿头提货信息卡, Intent 传 Serializable bean 零新增请求 - 筛选弹层 4 项(航班日期为未定义入参预留传参);手机进入时清空平板默认 「当天缴费日期」查全量,平板默认值不变 - IntImpPickUpDLVBean 增加 isPickedUp 计算属性;手机首页「国际」Tab 加入口 修复:checkAllClick 全选后底部「已选 N 项」不更新(批量勾选不走单卡 FlowBus 事件,需自行同步 selectedCountText),实测修复生效 验证:双端 Proxyman Map Local mock 口径验证通过,平板回归一致(含缴费日期默认值), 崩溃 0;后端缺口 2 项登记问题清单 #28~#29(无 fdate 入参、出参无车牌/目的港/ 业务类型;outState 过滤与 dlvName=出库人语义待内网实测) Co-Authored-By: Claude Fable 5 --- .../skills/phone-adapt/references/api-doc.md | 8 + CHANGELOG.md | 24 + CLAUDE.md | 9 + app/src/debug/AndroidManifest.xml | 12 + app/src/main/AndroidManifest.xml | 7 + documents/后端接口对接问题清单.xlsx | Bin 21738 -> 22454 bytes .../module_base/bean/IntImpPickUpDLVBean.kt | 7 + .../gjj/activity/IntImpPickUpDLVActivity.kt | 6 +- .../activity/IntImpPickUpDetailActivity.kt | 45 ++ .../gjj/holder/IntImpPickUpDLVViewHolder.kt | 22 +- .../gjj/viewModel/IntImpPickUpDLVViewModel.kt | 94 +++- .../activity_int_imp_pick_up_dlv.xml | 204 +++++++++ .../item_int_imp_pick_up_dlv.xml | 266 +++++++++++ .../activity_int_imp_pick_up_detail.xml | 340 ++++++++++++++ .../layout/activity_int_imp_pick_up_dlv.xml | 306 ++++++------- .../res/layout/item_int_imp_pick_up_dlv.xml | 422 ++++++++---------- .../sixin/module_p/ui/enter/gj/GjViewModel.kt | 6 + .../res/drawable-xxhdpi/gjj_chu_ku_icon.png | Bin 0 -> 31774 bytes 18 files changed, 1369 insertions(+), 409 deletions(-) create mode 100644 module_gjj/src/main/java/com/lukouguoji/gjj/activity/IntImpPickUpDetailActivity.kt create mode 100644 module_gjj/src/main/res/layout-sw600dp/activity_int_imp_pick_up_dlv.xml create mode 100644 module_gjj/src/main/res/layout-sw600dp/item_int_imp_pick_up_dlv.xml create mode 100644 module_gjj/src/main/res/layout/activity_int_imp_pick_up_detail.xml create mode 100644 module_p/src/main/res/drawable-xxhdpi/gjj_chu_ku_icon.png diff --git a/.claude/skills/phone-adapt/references/api-doc.md b/.claude/skills/phone-adapt/references/api-doc.md index 62c4e22..93a3cb5 100644 --- a/.claude/skills/phone-adapt/references/api-doc.md +++ b/.claude/skills/phone-adapt/references/api-doc.md @@ -101,6 +101,14 @@ curl -s -X POST "$URL" -H "$AUTH" -H "Content-Type: application/json" \ `awbPc`/`awbWeight`/`cashWeight`/`inPc`/`inWeight`/`lockState`(0/1 需转中文)/`mftStatus` 原始舱单/ `tallyStatus` 理货报告/`command` 海关放行/`by1` 承运人/`dlvTime` 出库时间;`dep`/`dest1`/`dest`/ `unNumber`/`opDate` 为按出港推断,待实测 #27) +- `IntImpPickUpDlv`(提取出库,2026-07-31 文档核对):`pageQuery` 入参含 **`outState` + (0 未出库/1 已出库)**——待出库/已出库 Tab 直接真实过滤(抓包证实携带,效果待内网 A/B #29); + 另有 `fno`/`dest`/`origin`/`carrier`/`awbType`/`businessType`/`goods`/`likeNo`/`pkId`/ + `beginDate`/`endDate`+`dateType`(0 入库/1 离港)/`chargeFlag`(0 未提取/1 已提取); + **无 `fdate`(航班日期)入参**(缺口 #28);出参无车牌/目的港/业务类型名称(#28); + 运单号筛选参数名是 **`no`**(平板既有口径);`chargeName`/`chargeTime` = 柜台办理人/缴费(提取)时间, + `dlvTime` = 出库时间,`dlvName` 按提货人语义推断作「出库人」展示(待确认 #29); + 确认出库接口 `pickUpOut` 文档注明**需将全字段传至后端**(平板 `selectedItems.toRequestBody()` 已满足) - `IntExpCheckIn`(出港计重,2026-07-29 内网实测):`likeNo` **并非任意模糊**——按 8 位 `no` 匹配(11 位 wbNo 或部分号均 0 条),11 位全号必须走 `wbNo`;`checkIn`/`checkInList` 文档有定义但 `pageQuery`/`pageQueryTotal` **均静默忽略**(缺口 #12,待计重/计重中计数依赖); diff --git a/CHANGELOG.md b/CHANGELOG.md index a753159..94db5db 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,22 @@ ## [Unreleased] ### 新增 (Added) +- 「提取出库」5.5 寸手机端适配(设计稿 09_提取出库):列表 `IntImpPickUpDLVActivity`(module_gjj) + 手机布局 = PhoneSearchBar(运单号+扫码+筛选)+ **PhoneStatusTab 待出库/已出库**(`outState` + 为 pageQuery 文档定义入参 0/1,Tab 真实过滤 + 角标双 pageQueryTotal,抓包证实携带)+ + 双形态卡片(待出库:圆形勾选框+橙标签+库位行;已出库:绿 √ 标签+出库人·出库时间行, + `isPickedUp` = dlvTime 非空)+ 卡片内 PhoneStatBox 三列(代理人/件数/重量)+「查看详情」链接 + + PhoneBottomBar(全选+已选 N 项+出库,仅待出库 Tab 显示,复用既有 confirmOutbound); + 筛选弹层 4 项(航班日期为 pageQuery 未定义入参预留;航班号 fno;代理人/特码下拉); + 手机端进入时清空平板默认「当天缴费日期」查全量(initPhoneExtras,平板默认值不变) +- 手机专属新页「运单详情」`IntImpPickUpDetailActivity`:蓝头运单卡(红标签国际进港+品名大标题+ + 两列 KV+库位橙标签)+ 绿头提货信息卡(柜台办理人/时间,已出库追加出库人/出库时间行), + 数据直接 Intent 传列表 bean(Serializable),零新增请求 +- `IntImpPickUpDLVBean` 新增 `isPickedUp` 计算属性;手机首页「国际」Tab 增加「提取出库」入口 + (权限 AppIntImpPickUpDLV 对应权限串,图标复用 Pad 端 gjj_chu_ku_icon) +- 后端缺口 2 项登记问题清单 #28~#29(pageQuery 无 fdate 入参、出参无车牌/目的港/业务类型; + outState 过滤与 dlvName=出库人语义待内网实测) + - 「进港仓库」5.5 寸手机端适配(设计稿 08_进港仓库,07 出港仓库的进港镜像 + 进港详情页首次适配): 列表 `IntImpStorageUseActivity`(module_gjj,首页菜单实际跳转页;旧版 `GjjWareHouseActivity` 路由已注释弃用)手机布局 = PhoneSearchBar(placeholder「搜索运单号/航班号」,`phoneSearchClick` @@ -64,12 +80,20 @@ 无已入库/已离港分项统计出参;detail 出参无锁定状态/计费重量字段) ### 修复 (Fixed) +- 提取出库手机版底部条「已选 N 项」在点全选后不更新:`checkAllClick` 只改勾选状态未同步 + `selectedCountText`(卡片单选走 FlowBus→updateCheckAllStatus 正常),补同步后实测「已选 3 项」正确 - **`PhoneFilterPanel` 底部按钮被挤出屏幕**:面板高度 wrap_content 且内容插槽无滚动,筛选项多 (出港查询 9 项)时「重置/确认」按钮直接超出屏幕外且无任何报错。修复:内容插槽外包 ScrollView(weight=1),筛选项少时行为不变,超屏时内容区收缩滚动、按钮始终可见 (已回归出港计重 4 项弹层,行为不变) ### 验证 (Verified) +- 提取出库双端验证通过(2026-07-31,Proxyman Map Local mock 口径):手机端菜单入口、 + Tab 角标(双 total)、双形态卡片(含库位空值兜底)、单选/全选与「已选 N 项」联动、 + 出库 ConfirmDialogModel、待出库/已出库两种详情页形态(出库人行按需显隐)、筛选弹层 4 项、 + Tab 切换请求体抓包证实 outState=1 正确携带、冷启动方向恒竖屏、崩溃 0; + 平板端回归:缴费日期默认当天/5 搜索条/全选/底部统计/确认出库与改造前一致,崩溃 0。 + **待内网补测**:outState 过滤 A/B、dlvName=出库人语义、出库真实提交链路 - 进港仓库双端验证通过(2026-07-31,同出港仓库为 Proxyman Map Local mock 口径): 手机端登录→国际 Tab→进港仓库菜单入口、三格统计、三种卡片形态(含空值 "--" 兜底)、 详情 3 Tab 全字段(锁定状态转中文、库位中文姓名、时间截断、空值兜底)、四操作弹框、 diff --git a/CLAUDE.md b/CLAUDE.md index 0481338..64be4e6 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1134,6 +1134,13 @@ override fun dispatchRestoreInstanceState(container: SparseArray) = `.checked.set(...)` 会崩溃——接收方 `initOnCreated` 必须对列表 `.map { it.copy() }` 补上。 2026-07-30 review 修正:状态重置弹框改手机底部弹层(弹框双变体首例,见改造步骤第 6 条)、 主列表/回执页补空态、分单浮层补「回执」、分单统计加分母、Tab 角标初始 0 + - 「提取出库」`IntImpPickUpDLVActivity`(module_gjj,类型2 多选批量页 + 手机专属详情新页 + `IntImpPickUpDetailActivity`(Intent 传 Serializable bean 零请求)。待出库/已出库 Tab 绑 + **文档定义入参 `outState`**(0/1,抓包证实携带,效果待内网 #29)+ 角标双 pageQueryTotal; + 双形态卡片按 `isPickedUp`(dlvTime 非空)切换;手机进入时清空平板默认「当天缴费日期」查全量; + 缺口 #28:无 fdate 入参、出参无车牌(提货车辆)/目的港/业务类型。 + ⚠️ 踩坑:`checkAllClick` 全选后底部「已选 N 项」不更新——批量勾选不走 FlowBus 单卡事件, + 必须在 checkAllClick 里同步 selectedCountText) - 「进港仓库」`IntImpStorageUseActivity`(module_gjj,07 出港仓库的进港镜像;**首页菜单实际跳转页, 旧版 `GjjWareHouseActivity` 路由已注释弃用**。差异:卡片/筛选用始发站(fdep 入参)替代目的站; 搜索框「运单号/航班号」分流(含字母→fno、其余→wbNo,抓包证实);筛选 5 项无入参(缺口 #25, @@ -1252,6 +1259,8 @@ adb shell am start -n com.lukouguoji.aerologic/com.lukouguoji.gjc.activity.IntEx | 平板先竖屏再转横屏 + 交互后 UI 放大约 1.6 倍 | Manifest 用了 `@integer/screen_orientation` 资源引用;系统解析 Manifest 不套用限定符,全部取到竖屏值,AutoSize 随之选了平板竖屏 720dp 基准 | Manifest 改回 `unspecified`(见「屏幕方向」小节的 ⛔ 说明) | | Tab/分类切换后列表顶部留一大块空白,卡片数量却不对 | 给 item 根节点加了 `visibility="@{tab条件 ? VISIBLE : GONE}"`——RecyclerView/LinearLayoutManager 不会像普通 ViewGroup 那样让 GONE 的子项自动塌陷为 0 高度,仍按测量高度参与滚动区域计算 | 不要用 item 级 visibility 做过滤;在 ViewModel 里自行维护完整列表,Tab 切换时把过滤后的子集整体 `commonAdapter()?.refresh(filteredList)` 给 adapter | | 通过 `Intent.putExtra(Serializable)` 传递的 Bean,切换其 `checked`/`showMore` 等状态时崩溃 `NullPointerException: ... on a null object reference` | 这些字段标了 `@Transient`(= JVM `transient`,本意是避免 Gson 网络请求序列化 `ObservableBoolean`),但 Java 对象序列化(Intent 传递走的机制)会跳过 `transient` 字段的恢复,反序列化后是 null | 接收方 `initOnCreated` 里对列表做 `.map { it.copy() }`——`.copy()` 会重新走一遍类体初始化逻辑,用全新 `ObservableBoolean(false)` 补上 | +| 布局构建报 `Error: The string "--" is not permitted within comments` | XML 注释中出现连续双横线(如写"兜底 \"--\""),XML 规范禁止 | 注释里改用文字描述(如「兜底双横线」),代码绑定表达式中的 `"--"` 不受影响 | +| 多选页手机版点「全选」后底部「已选 N 项」不更新(单卡勾选正常) | 批量勾选在 `checkAllClick` 里直接 set,不走 FlowBus 的单卡 EVENT_CHECK_CHANGED 事件,`selectedCountText` 只在事件回调里更新 | `checkAllClick` 末尾自行同步 `selectedCountText`(平板布局不绑定该字段,无影响) | --- diff --git a/app/src/debug/AndroidManifest.xml b/app/src/debug/AndroidManifest.xml index dcccdf0..543f109 100644 --- a/app/src/debug/AndroidManifest.xml +++ b/app/src/debug/AndroidManifest.xml @@ -140,5 +140,17 @@ android:exported="true" tools:replace="android:exported" /> + + + + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c02e4dd..00d91a6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -558,6 +558,13 @@ android:exported="false" android:screenOrientation="unspecified" /> + + + |+s4M;u>U-6Hx~`s9P1W?& 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 delta 10471 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 CC|zm* diff --git a/module_base/src/main/java/com/lukouguoji/module_base/bean/IntImpPickUpDLVBean.kt b/module_base/src/main/java/com/lukouguoji/module_base/bean/IntImpPickUpDLVBean.kt index c51e8bc..7fcef6a 100644 --- a/module_base/src/main/java/com/lukouguoji/module_base/bean/IntImpPickUpDLVBean.kt +++ b/module_base/src/main/java/com/lukouguoji/module_base/bean/IntImpPickUpDLVBean.kt @@ -74,4 +74,11 @@ class IntImpPickUpDLVBean : Serializable { var isSelected: Boolean get() = checked.get() set(value) = checked.set(value) + + /** + * 5.5寸手机版:是否已出库(出库时间非空)。 + * 卡片按此切两种形态:待出库(勾选框+橙标签+库位行)/已出库(绿标签+出库人行)。 + */ + val isPickedUp: Boolean + get() = dlvTime.isNotEmpty() } diff --git a/module_gjj/src/main/java/com/lukouguoji/gjj/activity/IntImpPickUpDLVActivity.kt b/module_gjj/src/main/java/com/lukouguoji/gjj/activity/IntImpPickUpDLVActivity.kt index c8fe4e8..ff1e14a 100644 --- a/module_gjj/src/main/java/com/lukouguoji/gjj/activity/IntImpPickUpDLVActivity.kt +++ b/module_gjj/src/main/java/com/lukouguoji/gjj/activity/IntImpPickUpDLVActivity.kt @@ -13,6 +13,7 @@ import com.lukouguoji.module_base.common.ConstantEvent import com.lukouguoji.module_base.impl.FlowBus import com.lukouguoji.module_base.impl.observe import com.lukouguoji.module_base.router.ARouterConstants +import com.lukouguoji.module_base.util.DeviceUtil /** * 国际进港-提取出库 @@ -25,9 +26,12 @@ class IntImpPickUpDLVActivity : override fun viewModelClass() = IntImpPickUpDLVViewModel::class.java override fun initOnCreate(savedInstanceState: Bundle?) { - setBackArrow("国际进港出库") + setBackArrow(if (DeviceUtil.isPhone()) "提取出库" else "国际进港出库") binding.viewModel = viewModel + // 手机形态专属:待出库 Tab 默认态 + 角标计数 + 特码字典(平板不调用,行为零变化) + if (DeviceUtil.isPhone()) viewModel.initPhoneExtras() + // 绑定分页 viewModel.pageModel.bindSmartRefreshLayout(binding.srl, binding.rv, viewModel, this) diff --git a/module_gjj/src/main/java/com/lukouguoji/gjj/activity/IntImpPickUpDetailActivity.kt b/module_gjj/src/main/java/com/lukouguoji/gjj/activity/IntImpPickUpDetailActivity.kt new file mode 100644 index 0000000..4a00505 --- /dev/null +++ b/module_gjj/src/main/java/com/lukouguoji/gjj/activity/IntImpPickUpDetailActivity.kt @@ -0,0 +1,45 @@ +package com.lukouguoji.gjj.activity + +import android.content.Context +import android.content.Intent +import android.os.Bundle +import com.lukouguoji.gjj.R +import com.lukouguoji.gjj.databinding.ActivityIntImpPickUpDetailBinding +import com.lukouguoji.module_base.base.BaseBindingActivity +import com.lukouguoji.module_base.base.BaseViewModel +import com.lukouguoji.module_base.bean.IntImpPickUpDLVBean +import com.lukouguoji.module_base.common.Constant + +/** + * 国际进港提取出库-运单详情(5.5 寸手机版专属页面) + * + * 设计稿 09_提取出库「查看详情」内嵌页:蓝头运单卡(品名/件重/特码/代理/港站/航班/库位/提货单号) + * + 绿头提货信息卡(柜台办理人/时间,已出库追加出库人/出库时间)。 + * 数据直接复用列表已加载的 bean(Intent 传 Serializable),零新增请求;平板端无入口不可达。 + */ +class IntImpPickUpDetailActivity : + BaseBindingActivity() { + + override fun layoutId() = R.layout.activity_int_imp_pick_up_detail + override fun viewModelClass() = BaseViewModel::class.java + + override fun initOnCreate(savedInstanceState: Bundle?) { + setBackArrow("运单详情") + val bean = intent.getSerializableExtra(Constant.Key.DATA) as? IntImpPickUpDLVBean + if (bean == null) { + finish() + return + } + binding.bean = bean + } + + companion object { + @JvmStatic + fun start(context: Context, bean: IntImpPickUpDLVBean) { + context.startActivity( + Intent(context, IntImpPickUpDetailActivity::class.java) + .putExtra(Constant.Key.DATA, bean) + ) + } + } +} diff --git a/module_gjj/src/main/java/com/lukouguoji/gjj/holder/IntImpPickUpDLVViewHolder.kt b/module_gjj/src/main/java/com/lukouguoji/gjj/holder/IntImpPickUpDLVViewHolder.kt index 3a28b70..cc1514d 100644 --- a/module_gjj/src/main/java/com/lukouguoji/gjj/holder/IntImpPickUpDLVViewHolder.kt +++ b/module_gjj/src/main/java/com/lukouguoji/gjj/holder/IntImpPickUpDLVViewHolder.kt @@ -1,6 +1,7 @@ package com.lukouguoji.gjj.holder import android.view.View +import com.lukouguoji.gjj.activity.IntImpPickUpDetailActivity import com.lukouguoji.gjj.databinding.ItemIntImpPickUpDlvBinding import com.lukouguoji.module_base.base.BaseViewHolder import com.lukouguoji.module_base.common.ConstantEvent @@ -9,6 +10,9 @@ import com.lukouguoji.module_base.bean.IntImpPickUpDLVBean /** * 国际进港-提取出库 列表项ViewHolder + * + * 双形态布局:平板变体含 iv_icon(多选图标),手机变体含 iv_check(圆形勾选框,仅待出库形态显示) + * 与 tv_detail(查看详情)。单侧独有的 id 在 Binding 基类中为 @Nullable,必须判空访问。 */ class IntImpPickUpDLVViewHolder(view: View) : BaseViewHolder(view) { @@ -19,11 +23,25 @@ class IntImpPickUpDLVViewHolder(view: View) : binding.position = position binding.executePendingBindings() - // 点击图标切换选中状态 - binding.ivIcon.setOnClickListener { + // 平板:点击图标切换选中状态 + binding.ivIcon?.setOnClickListener { bean.checked.set(!bean.checked.get()) FlowBus.with(ConstantEvent.EVENT_CHECK_CHANGED).tryEmit("check_changed") binding.executePendingBindings() } + + // 手机:圆形勾选框(已出库形态隐藏,无勾选语义) + binding.ivCheck?.setOnClickListener { + if (!bean.isPickedUp) { + bean.checked.set(!bean.checked.get()) + FlowBus.with(ConstantEvent.EVENT_CHECK_CHANGED).tryEmit("check_changed") + binding.executePendingBindings() + } + } + + // 手机:查看详情(手机专属新页,数据直接传当前 bean,零新增请求) + binding.tvDetail?.setOnClickListener { + IntImpPickUpDetailActivity.start(itemView.context, bean) + } } } diff --git a/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/IntImpPickUpDLVViewModel.kt b/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/IntImpPickUpDLVViewModel.kt index f5cbe29..ef4d5b4 100644 --- a/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/IntImpPickUpDLVViewModel.kt +++ b/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/IntImpPickUpDLVViewModel.kt @@ -20,6 +20,7 @@ import com.lukouguoji.module_base.ktx.formatDate import com.lukouguoji.module_base.ktx.toRequestBody import com.lukouguoji.module_base.model.ConfirmDialogModel import com.lukouguoji.module_base.model.ScanModel +import com.lukouguoji.module_base.util.DictUtils import dev.utils.app.info.KeyValue import dev.utils.common.DateUtils import kotlinx.coroutines.launch @@ -54,6 +55,68 @@ class IntImpPickUpDLVViewModel : BasePageViewModel() { fun updateCheckAllStatus() { val list = pageModel.rv?.commonAdapter()?.items as? List ?: return isAllChecked.value = list.isNotEmpty() && list.all { it.checked.get() } + selectedCountText.value = "已选 ${list.count { it.checked.get() }} 项" + } + + // ========== 5.5寸手机版专属 ========== + // 状态 Tab:待出库/已出库(outState 为 pageQuery 真实入参,0:未出库,1:已出库;平板恒空不进请求) + val outState = MutableLiveData("") + val tabList = MutableLiveData(listOf(KeyValue("待出库", "0"), KeyValue("已出库", "1"))) + val tabCounts = MutableLiveData(listOf("0", "0")) + + // 底部操作条「已选 N 项」 + val selectedCountText = MutableLiveData("已选 0 项") + + // 筛选弹层显隐 + val filterVisible = MutableLiveData(false) + + // 筛选条件(flightDate 为 pageQuery 未定义入参 fdate,预留传参,见接口问题清单) + val flightDate = MutableLiveData("") + val flightNo = MutableLiveData("") + + // 特码下拉字典(initPhoneExtras 加载,平板为扫码输入不加载) + val specialCodeList = MutableLiveData>(emptyList()) + + private var phoneExtrasEnabled = false + + /** + * 手机形态专属初始化(Activity 在 DeviceUtil.isPhone() 时调用)。 + * 平板端不调用,请求次数与行为零变化。 + */ + fun initPhoneExtras() { + phoneExtrasEnabled = true + // 默认进「待出库」Tab + outState.value = "0" + // 平板默认按当天缴费日期过滤,设计稿无此默认——手机端清空查全量 + paymentDateStart.value = "" + // 特码字典:flag=1 国际;ieFlag 必须留空 + DictUtils.getSpecialCodeList(addAll = false, flag = 1, ieFlag = "") { list -> + specialCodeList.postValue(listOf(KeyValue("全部", "")) + list) + } + } + + /** 筛选按钮点击 - 打开筛选面板 */ + fun filterClick() { + filterVisible.value = true + } + + /** 关闭筛选面板 */ + fun closeFilter() { + filterVisible.value = false + } + + /** 重置筛选条件 */ + fun resetFilter() { + flightDate.value = "" + flightNo.value = "" + agentCode.value = "" + spCode.value = "" + } + + /** 确认筛选 - 关闭面板并刷新 */ + fun confirmFilter() { + filterVisible.value = false + refresh() } // ========== 适配器配置 ========== @@ -105,6 +168,8 @@ class IntImpPickUpDLVViewModel : BasePageViewModel() { list.forEach { it.checked.set(shouldCheckAll) } isAllChecked.value = shouldCheckAll pageModel.rv?.commonAdapter()?.notifyDataSetChanged() + // 同步手机版底部条「已选 N 项」(平板布局不绑定该字段,无影响) + selectedCountText.value = "已选 ${list.count { it.checked.get() }} 项" } /** @@ -139,12 +204,17 @@ class IntImpPickUpDLVViewModel : BasePageViewModel() { * 获取列表数据 */ override fun getData() { + // 手机专属 3 项平板恒为空,不进请求;fdate 为 pageQuery 未定义入参 + //(后端静默忽略,补齐后自动生效,见接口问题清单) val filterParams = mapOf( "beginDate" to paymentDateStart.value?.ifEmpty { null }, "endDate" to paymentDateEnd.value?.ifEmpty { null }, "agentCode" to agentCode.value?.ifEmpty { null }, "no" to wbNo.value?.ifEmpty { null }, - "spCode" to spCode.value?.ifEmpty { null } + "spCode" to spCode.value?.ifEmpty { null }, + "outState" to outState.value?.ifEmpty { null }, + "fno" to flightNo.value?.ifEmpty { null }, + "fdate" to flightDate.value?.ifEmpty { null } ) val listParams = (filterParams + mapOf( @@ -169,6 +239,28 @@ class IntImpPickUpDLVViewModel : BasePageViewModel() { totalWeight.value = (data?.totalWeight ?: 0.0).toString() } } + + // 手机专属:Tab 角标计数(同条件 + outState=0/1 各查一次,平板不发) + if (phoneExtrasEnabled) { + val pendingParams = (filterParams + mapOf("outState" to "0")).toRequestBody() + launchCollect({ NetApply.api.getIntImpPickUpDLVTotal(pendingParams) }) { + onSuccess = { result -> + tabCounts.value = listOf( + (result.data?.wbNumber ?: 0).toString(), + tabCounts.value?.getOrNull(1) ?: "0" + ) + } + } + val shippedParams = (filterParams + mapOf("outState" to "1")).toRequestBody() + launchCollect({ NetApply.api.getIntImpPickUpDLVTotal(shippedParams) }) { + onSuccess = { result -> + tabCounts.value = listOf( + tabCounts.value?.getOrNull(0) ?: "0", + (result.data?.wbNumber ?: 0).toString() + ) + } + } + } } /** diff --git a/module_gjj/src/main/res/layout-sw600dp/activity_int_imp_pick_up_dlv.xml b/module_gjj/src/main/res/layout-sw600dp/activity_int_imp_pick_up_dlv.xml new file mode 100644 index 0000000..b50335f --- /dev/null +++ b/module_gjj/src/main/res/layout-sw600dp/activity_int_imp_pick_up_dlv.xml @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/module_gjj/src/main/res/layout-sw600dp/item_int_imp_pick_up_dlv.xml b/module_gjj/src/main/res/layout-sw600dp/item_int_imp_pick_up_dlv.xml new file mode 100644 index 0000000..37fe4b0 --- /dev/null +++ b/module_gjj/src/main/res/layout-sw600dp/item_int_imp_pick_up_dlv.xml @@ -0,0 +1,266 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/module_gjj/src/main/res/layout/activity_int_imp_pick_up_detail.xml b/module_gjj/src/main/res/layout/activity_int_imp_pick_up_detail.xml new file mode 100644 index 0000000..4ee37f8 --- /dev/null +++ b/module_gjj/src/main/res/layout/activity_int_imp_pick_up_detail.xml @@ -0,0 +1,340 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/module_gjj/src/main/res/layout/activity_int_imp_pick_up_dlv.xml b/module_gjj/src/main/res/layout/activity_int_imp_pick_up_dlv.xml index b50335f..1a9be68 100644 --- a/module_gjj/src/main/res/layout/activity_int_imp_pick_up_dlv.xml +++ b/module_gjj/src/main/res/layout/activity_int_imp_pick_up_dlv.xml @@ -1,204 +1,166 @@ + - + + + - + android:background="@color/phone_page_bg"> - - - + android:layout_height="match_parent" + android:orientation="vertical"> - - + + + + android:background="@color/white" + android:orientation="vertical" + android:paddingHorizontal="16dp" + android:paddingTop="16dp" + android:paddingBottom="12dp"> - - + + + + + + counts="@{viewModel.tabCounts}" + setOnTabChanged="@{()-> viewModel.searchClick()}" + tabs="@{viewModel.tabList}" + value="@={viewModel.outState}" /> - - + + + + + + + + + + + + + + + + + + + + + + + title='@{"代理人"}' + type="@{PhoneDataLayoutType.SPINNER}" + value="@={viewModel.agentCode}" /> - - - - - - - - - - - - - - - + - - - - - - - - + hint='@{"请选择特码"}' + list="@{viewModel.specialCodeList}" + title='@{"特码"}' + type="@{PhoneDataLayoutType.SPINNER}" + value="@={viewModel.spCode}" /> - + - - - - - - - - - - - - - - - - - - - - - + diff --git a/module_gjj/src/main/res/layout/item_int_imp_pick_up_dlv.xml b/module_gjj/src/main/res/layout/item_int_imp_pick_up_dlv.xml index 37fe4b0..f18a006 100644 --- a/module_gjj/src/main/res/layout/item_int_imp_pick_up_dlv.xml +++ b/module_gjj/src/main/res/layout/item_int_imp_pick_up_dlv.xml @@ -1,9 +1,27 @@ + + xmlns:tools="http://schemas.android.com/tools"> + + @@ -17,250 +35,188 @@ android:id="@+id/ll" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginHorizontal="15dp" - android:layout_marginVertical="5dp" - android:background="@drawable/bg_item" - android:gravity="center_vertical" - android:orientation="horizontal" - android:paddingVertical="20dp" - android:paddingHorizontal="10dp"> - - + android:layout_marginHorizontal="16dp" + android:layout_marginTop="12dp" + android:background="@drawable/bg_phone_card" + android:orientation="vertical" + android:padding="14dp"> - + + android:gravity="center_vertical" + android:orientation="horizontal"> - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + android:layout_weight="1" + android:text="@{bean.wbNo}" + android:textColor="@{bean.isPickedUp ? @color/phone_text_title : @color/phone_primary}" + android:textSize="16sp" + android:textStyle="bold" + tools:text="78133363573" /> - - + + + + + + + + + android:layout_marginStart="4dp" + android:text="已出库" + android:textColor="@color/phone_text_title" + android:textSize="13sp" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/module_p/src/main/java/com/sixin/module_p/ui/enter/gj/GjViewModel.kt b/module_p/src/main/java/com/sixin/module_p/ui/enter/gj/GjViewModel.kt index 41412d8..d6309af 100644 --- a/module_p/src/main/java/com/sixin/module_p/ui/enter/gj/GjViewModel.kt +++ b/module_p/src/main/java/com/sixin/module_p/ui/enter/gj/GjViewModel.kt @@ -78,6 +78,12 @@ class GjViewModel : BaseViewModel() { Constant.AuthName.GjjWareHouseActivity, ARouterConstants.ACTIVITY_URL_GJJ_WARE_HOUSE ), + ActionBean( + "提取出库", + R.drawable.gjj_chu_ku_icon, + Constant.AuthName.IntImpPickUpDLV, + ARouterConstants.ACTIVITY_URL_INT_IMP_PICK_UP_DLV + ), // ULD管理属综合管理业务(Pad 端在「综合管理」菜单组),手机端首页暂无综合 Tab,挂在国际 Tab 下 ActionBean( "ULD管理", diff --git a/module_p/src/main/res/drawable-xxhdpi/gjj_chu_ku_icon.png b/module_p/src/main/res/drawable-xxhdpi/gjj_chu_ku_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..7cca5d2ce7f14613e08f3b0a779e2fb4b189d765 GIT binary patch literal 31774 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

EeYYuFN=HTq<~JjMK#n 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 R@X$AS>+2Y4r)b%2{U6eGS{eWV literal 0 HcmV?d00001