merge: 手机适配分支 feature/phone-ui-adaptation 合入 main,平板与 5.5 寸手机统一在主干开发

合并原则:业务层以 main 平板为准,手机端只做 UI 适配。
- 冲突布局:平板改动三方合并进 layout-sw600dp/,手机布局保留并补齐主干新增业务
- Bean/ViewModel 冲突取平板业务逻辑(计重托盘联动、开始计重运抵重量自动计算、
  出港查询 dateState、仓库入/出库件数重量、清仓备注等),手机仅保留展示字段
- 主干新功能同步到手机:运抵海关放行/分单号筛选/回执走 getResponse、删除申报;
  出库交接装机状态与允许装机/配运;出港移库详情与编辑共用 IntExpMoveEditActivity;
  出入港仓库清仓备注、出库弹框件数重量、进港仓库 pcLabel;ULD 所在港/位置
- 新增手机变体:出库/入库/清仓/配运/删除申报弹框、移库详情编辑页、海关回执页;
  PhoneBottomBar 增次操作按钮
- 手机对齐平板:去掉 likeNo 与平板没有的筛选入参、恢复平板默认查询日期,
  补齐平板表单/筛选项与操作入口;移除手机专属 IntExpMoveDetailActivity
- CLAUDE.md 记录单分支约定与「业务以平板为准」规则,CHANGELOG 补合并记录

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
YANG JIANKUAN
2026-10-11 21:20:03 -07:00
356 changed files with 44711 additions and 13385 deletions

View File

@@ -1,48 +1,134 @@
package com.sixin.module_p.ui.enter.gj
import com.lukouguoji.module_base.base.BaseViewModel
import com.lukouguoji.module_base.bean.ActionBean
import com.lukouguoji.module_base.common.Constant
import com.lukouguoji.module_base.db.perference.SharedPreferenceUtil
import com.lukouguoji.module_base.ktx.loge
import com.sixin.module_p.R
import com.sixin.module_p.ui.guobang.PdaGuoBangActivity
import com.sixin.module_p.ui.lihuo.PdaLiHuoActivity
import com.sixin.module_p.ui.shouyun.PdaShouYunActivity
import com.sixin.module_p.ui.zuzhuang.PdaZuZhuangActivity
import dev.DevUtils
class GjViewModel : BaseViewModel() {
val actionList = listOf(
ActionBean("普货收运", R.drawable.gjc_shou_yun_icon, Constant.AuthName.GjcAppDomExpCheckin),
ActionBean("板箱组装", R.drawable.img_bxzz, Constant.AuthName.GjcBanXListActivity),
ActionBean("板箱过磅", R.drawable.gjc_fu_bang_icon, Constant.AuthName.GjcFuBangActivity),
ActionBean("进港理货", R.drawable.img_jglh, Constant.AuthName.GjjTallyListActivity),
).filter { SharedPreferenceUtil.getString(Constant.Share.authList).contains(it.key) }
fun onItemClick(position: Int) {
when (val title = actionList[position].title) {
"普货收运" -> {
PdaShouYunActivity.start(DevUtils.getTopActivity())
}
"板箱组装" -> {
PdaZuZhuangActivity.start(DevUtils.getTopActivity())
}
"板箱过磅" -> {
PdaGuoBangActivity.start(DevUtils.getTopActivity())
}
"进港理货" -> {
PdaLiHuoActivity.start(DevUtils.getTopActivity())
}
else -> {
loge("点击事件 $title 未处理")
}
}
}
}
package com.sixin.module_p.ui.enter.gj
import com.alibaba.android.arouter.launcher.ARouter
import com.lukouguoji.module_base.base.BaseViewModel
import com.lukouguoji.module_base.bean.ActionBean
import com.lukouguoji.module_base.common.Constant
import com.lukouguoji.module_base.db.perference.SharedPreferenceUtil
import com.lukouguoji.module_base.ktx.loge
import com.lukouguoji.module_base.router.ARouterConstants
import com.sixin.module_p.R
import com.sixin.module_p.ui.guobang.PdaGuoBangActivity
import com.sixin.module_p.ui.lihuo.PdaLiHuoActivity
import com.sixin.module_p.ui.shouyun.PdaShouYunActivity
import com.sixin.module_p.ui.zuzhuang.PdaZuZhuangActivity
import dev.DevUtils
/**
* 手持端首页「国际业务」Tab
*
* 菜单项是**手写清单**(不是接口下发),只用登录返回的 authList 做权限过滤:
* 某项没配 [ActionBean.key] 对应的权限串时不显示。所以新页面适配完之后
* **必须回来这里加一行**,否则手机端首页根本没有入口。
*
* 两类跳转:
* - 带 [ActionBean.route] → 通用 ARouter 跳转(module_p 不依赖 module_gjc 等业务模块,
* 跨模块只能走路由)。**5.5 寸适配页一律用这种,加一行即可。**
* - 不带 route → 落到 [onItemClick] 的 when 分支(module_p 内部的 PDA 专用页面)
*/
class GjViewModel : BaseViewModel() {
val actionList = listOf(
// ===== module_p 内的 PDA 专用页面(无 route,走 when 分支) =====
ActionBean("普货收运", R.drawable.gjc_shou_yun_icon, Constant.AuthName.GjcAppDomExpCheckin),
ActionBean("板箱组装", R.drawable.img_bxzz, Constant.AuthName.GjcBanXListActivity),
ActionBean("板箱过磅", R.drawable.gjc_fu_bang_icon, Constant.AuthName.GjcFuBangActivity),
ActionBean("进港理货", R.drawable.img_jglh, Constant.AuthName.GjjTallyListActivity),
// ===== 5.5 寸手机版已适配页面(图标复用 Pad 端同款,跳转走 ARouter) =====
ActionBean(
"出港移库",
R.drawable.gjc_yi_ku_icon,
Constant.AuthName.GjcYiKuListActivity,
ARouterConstants.ACTIVITY_URL_INT_EXP_MOVE
),
ActionBean(
"出库交接",
R.drawable.img_gjc_chuku_jiaojie,
Constant.AuthName.GjcIntExpOutHandover,
ARouterConstants.ACTIVITY_URL_INT_EXP_OUT_HANDOVER
),
ActionBean(
"出港计重",
R.drawable.img_gjc_chugangjizhong,
Constant.AuthName.GjcCheckWeighing,
ARouterConstants.ACTIVITY_URL_GJC_WEIGHING_LIST
),
ActionBean(
"出港运抵",
R.drawable.img_gjc_chugang_diyun,
Constant.AuthName.GjcIntExpArrive,
ARouterConstants.ACTIVITY_URL_INT_EXP_ARRIVE
),
ActionBean(
"出港查询",
R.drawable.gjc_query_icon,
Constant.AuthName.GjcQueryListActivity,
ARouterConstants.ACTIVITY_URL_GJC_QUERY_LIST
),
ActionBean(
"出港仓库",
R.drawable.gjc_cang_ku_icon,
Constant.AuthName.GjcIntExpStorageUse,
ARouterConstants.ACTIVITY_URL_INT_EXP_STORAGE_USE
),
ActionBean(
"进港仓库",
R.drawable.gjc_cang_ku_icon, // Pad 端进港仓库菜单同样复用出港仓库图标
Constant.AuthName.GjjWareHouseActivity,
ARouterConstants.ACTIVITY_URL_GJJ_WARE_HOUSE
),
ActionBean(
"进港查询",
R.drawable.gjj_query_icon,
Constant.AuthName.GjjQueryListActivity,
ARouterConstants.ACTIVITY_URL_GJJ_QUERY_LIST
),
ActionBean(
"提取出库",
R.drawable.gjj_chu_ku_icon,
Constant.AuthName.IntImpPickUpDLV,
ARouterConstants.ACTIVITY_URL_INT_IMP_PICK_UP_DLV
),
// ULD管理属综合管理业务(Pad 端在「综合管理」菜单组),手机端首页暂无综合 Tab,挂在国际 Tab 下
ActionBean(
"ULD管理",
com.lukouguoji.module_base.R.mipmap.cargo, // 图标复用 Pad 端同款(在 module_base,直接引用)
Constant.AuthName.ComprehensiveUld, // 权限串与 Pad 端菜单一致
ARouterConstants.ACTIVITY_URL_ULD_LIST
),
).filter { SharedPreferenceUtil.getString(Constant.Share.authList).contains(it.key) }
fun onItemClick(position: Int) {
val bean = actionList.getOrNull(position) ?: return
// 配了路由的直接跳(5.5 寸适配页走这条)
if (bean.route.isNotEmpty()) {
ARouter.getInstance().build(bean.route).navigation()
return
}
when (bean.title) {
"普货收运" -> {
PdaShouYunActivity.start(DevUtils.getTopActivity())
}
"板箱组装" -> {
PdaZuZhuangActivity.start(DevUtils.getTopActivity())
}
"板箱过磅" -> {
PdaGuoBangActivity.start(DevUtils.getTopActivity())
}
"进港理货" -> {
PdaLiHuoActivity.start(DevUtils.getTopActivity())
}
else -> {
loge("点击事件 ${bean.title} 未处理")
}
}
}
}

View File

@@ -1,12 +1,14 @@
package com.sixin.module_p.ui.enter.gn
import android.content.Intent
import com.alibaba.android.arouter.launcher.ARouter
import com.lukouguoji.module_base.base.BaseViewModel
import com.lukouguoji.module_base.bean.ActionBean
import com.lukouguoji.module_base.common.Constant
import com.lukouguoji.module_base.db.perference.SharedPreferenceUtil
import com.lukouguoji.module_base.ktx.logd
import com.lukouguoji.module_base.ktx.loge
import com.lukouguoji.module_base.router.ARouterConstants
import com.sixin.module_p.R
import com.sixin.module_p.ui.enter.gn.document.PdaDocumentHandoverActivity
import com.sixin.module_p.ui.gnc.cunfang.list.PdaGncCunFangListActivity
@@ -57,11 +59,25 @@ class GnViewModel : BaseViewModel() {
R.mipmap.gnc_document_handover,
Constant.AuthName.DocumentHandover
),
ActionBean(
"进港移库",
R.drawable.gnj_yi_ku_icon, // 图标复制自 module_gnj(module_p 看不到业务模块资源)
Constant.AuthName.GnjYiKu, // 权限串与 Pad 端菜单一致(AppDomImpMove)
ARouterConstants.ACTIVITY_URL_GNJ_MOVE_STASH_LIST // 与 Pad 首页菜单同一跳转页(app 模块,走路由)
),
)
.filter { SharedPreferenceUtil.getString(Constant.Share.authList).contains(it.key) }
fun onItemClick(position: Int) {
val bean = actionList.getOrNull(position) ?: return
// 配了路由的直接跳(5.5 寸适配页走这条,与 GjViewModel 同模式)
if (bean.route.isNotEmpty()) {
ARouter.getInstance().build(bean.route).navigation()
return
}
when (val title = actionList[position].title) {
"出港收运" -> {
GncUnShouYunActivity.start(DevUtils.getTopActivity())

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB