diff --git a/CLAUDE.md b/CLAUDE.md
index 459b19f..a611653 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -146,6 +146,133 @@ class XxxViewModel : BasePageViewModel() {
**参考文件**: `module_gjc/.../GjcBoxWeighingActivity.kt`、`GjcBoxWeighingViewModel.kt`
+#### 列表项布局规范 (`item_xxx.xml`)
+
+**整体结构**: 水平 LinearLayout → 左侧图标 + 中间内容区(多行 KV)+ 右侧箭头
+
+```xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+**单个 KV 组件模板**:
+```xml
+
+
+
+
+
+
+
+```
+
+**关键对齐规则**:
+
+| 规则 | 说明 | 示例 |
+|------|------|------|
+| **列 weight 一致** | 第一行和第二行**相同位置**的 KV 组件必须使用相同的 `layout_weight` | 第一行第 1 列 `weight=1.0`,第二行第 1 列也必须 `weight=1.0` |
+| **列 completeSpace 取最大值** | 同一列位置的 completeSpace 取两行中**较大**的那个值(1 个汉字 = 1 宽度,1 个标点 = 1 宽度) | 第一行"运单号:"=4,第二行"特码:"=3 → 两行都用 `completeSpace=4` |
+| **右侧箭头统一** | 固定使用 `@drawable/img_pda_right`,尺寸 `30x30dp`,`layout_gravity="center"`,`marginLeft="10dp"` | — |
+
+**completeSpace 计算方法**: 统计 Label 字符数(含冒号),每个汉字算 1,每个标点(:)算 1。示例:
+- "运单号:" = 3字 + 1标点 = 4
+- "运单类型:" = 4字 + 1标点 = 5
+- "状态:" = 2字 + 1标点 = 3
+- "始发站:" = 3字 + 1标点 = 4(注:此处"始发站:"虽然有4个字符位,但":"也要占1个宽度)
+
+同列两行的 completeSpace 统一取 `max(row1, row2)`。例如第 1 列:row1"运单号:"=4,row2"特码:"=3 → 两行都用 4。
+
+**常用字段 weight 参考表**(基于国际出港模块统计):
+
+| 字段类型 | 典型 weight | 常见范围 | 典型 completeSpace |
+|----------|------------|----------|-------------------|
+| 运单号 | 1.0 | 0.9~1.2 | 4 |
+| 件数 | 1.2 | 0.8~1.2 | 3~5 |
+| 重量 | 0.8 | 0.7~1.0 | 3~5 |
+| 状态 | 0.8 | 0.7~0.8 | 3~4 |
+| 代理 | 0.8 | 0.7~0.8 | 3~4 |
+| 特码 | 1.0 | 0.9~1.0 | 3~4 |
+| 始发站/目的站 | 0.8 | 0.7~0.8 | 4 |
+| 运单类型/业务类型 | 1.2 | 1.0~1.2 | 5 |
+| 分单数 | 0.8 | 0.6~0.8 | 4 |
+| 航班号/航班 | 1.0~1.2 | 1.0~1.2 | 4~5 |
+| 时间类(入库/离港/过磅) | 1.0~1.2 | 1.0~1.2 | 5 |
+
+> **原则**: 相同字段在不同页面应使用相近的 weight,优先参照同模块已有布局。若新页面与已有页面**字段完全相同**,应直接复用其 weight 和 completeSpace 配置。
+
+**典型 weight 分布示例**(5列,运单号/状态/代理/件数/重量 + 特码/始发站/目的站/运单类型/分单数):
+
+```
+位置: 第1列 第2列 第3列 第4列 第5列
+weight: 1.0 0.8 0.8 1.2 0.8 ← 第一行
+weight: 1.0 0.8 0.8 1.2 0.8 ← 第二行(必须相同)
+cSpace: 4 4 4 5 4 ← 第一行
+cSpace: 4 4 4 5 4 ← 第二行(必须相同,取 max)
+```
+
+**参考文件**: `module_gjc/.../item_int_exp_tally.xml`(典型)、`item_gjc_query.xml`、`item_gjc_box_weighing.xml`
+
---
### 类型 2:多选列表 + 批量操作页
diff --git a/module_base/src/main/java/com/lukouguoji/module_base/bean/GjjAirManifest.kt b/module_base/src/main/java/com/lukouguoji/module_base/bean/GjjAirManifest.kt
index 8d3f6bb..5eafa3b 100644
--- a/module_base/src/main/java/com/lukouguoji/module_base/bean/GjjAirManifest.kt
+++ b/module_base/src/main/java/com/lukouguoji/module_base/bean/GjjAirManifest.kt
@@ -7,7 +7,7 @@ import androidx.databinding.ObservableBoolean
*/
data class GjjAirManifest(
// 主单原始舱单
- var maWbList: GjjImportManifest? = null,
+ var maWb: GjjImportManifest? = null,
// 分单原始舱单列表
var haWbList: List? = null
) {
@@ -24,6 +24,6 @@ data class GjjAirManifest(
* 获取主单用于显示
*/
fun getMainManifest(): GjjImportManifest {
- return maWbList ?: GjjImportManifest()
+ return maWb ?: GjjImportManifest()
}
}
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 e22c05a..d6b1605 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
@@ -1727,7 +1727,7 @@ interface Api {
* 国际进港原始舱单-分页查询
*/
@POST("IntImpAirManifest/pageQuery")
- suspend fun getIntArrAirManifestList(@Body data: RequestBody): BaseResultBean>
+ suspend fun getIntArrAirManifestList(@Body data: RequestBody): PageInfo
/**
* 国际进港原始舱单-分页合计
diff --git a/module_gjj/src/main/java/com/lukouguoji/gjj/activity/GjjManifestAddActivity.kt b/module_gjj/src/main/java/com/lukouguoji/gjj/activity/GjjManifestAddActivity.kt
index 823794b..d485899 100644
--- a/module_gjj/src/main/java/com/lukouguoji/gjj/activity/GjjManifestAddActivity.kt
+++ b/module_gjj/src/main/java/com/lukouguoji/gjj/activity/GjjManifestAddActivity.kt
@@ -55,5 +55,16 @@ class GjjManifestAddActivity :
.putExtra(Constant.Key.BEAN, bean)
context.startActivity(starter)
}
+
+ /**
+ * 编辑舱单(通过GjjImportManifest对象)
+ */
+ @JvmStatic
+ fun startForEdit(context: Context, bean: com.lukouguoji.module_base.bean.GjjImportManifest) {
+ val starter = Intent(context, GjjManifestAddActivity::class.java)
+ .putExtra(Constant.Key.PAGE_TYPE, DetailsPageType.Modify.name)
+ .putExtra(Constant.Key.BEAN, bean)
+ context.startActivity(starter)
+ }
}
}
\ No newline at end of file
diff --git a/module_gjj/src/main/java/com/lukouguoji/gjj/activity/IntArrAirManifestActivity.kt b/module_gjj/src/main/java/com/lukouguoji/gjj/activity/IntArrAirManifestActivity.kt
index 3e68903..859ba0d 100644
--- a/module_gjj/src/main/java/com/lukouguoji/gjj/activity/IntArrAirManifestActivity.kt
+++ b/module_gjj/src/main/java/com/lukouguoji/gjj/activity/IntArrAirManifestActivity.kt
@@ -45,8 +45,6 @@ class IntArrAirManifestActivity :
viewModel.refresh()
}
- // 初始加载数据
- viewModel.refresh()
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
diff --git a/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/GjjManifestAddViewModel.kt b/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/GjjManifestAddViewModel.kt
index 84fcb0e..d777dda 100644
--- a/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/GjjManifestAddViewModel.kt
+++ b/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/GjjManifestAddViewModel.kt
@@ -146,9 +146,11 @@ class GjjManifestAddViewModel : BaseViewModel() {
// 编辑模式:从Bean对象加载数据
if (pageType.value == DetailsPageType.Modify) {
- val bean = intent.getSerializableExtra(Constant.Key.BEAN) as? com.lukouguoji.module_base.bean.GjjManifest
- if (bean != null) {
+ val bean = intent.getSerializableExtra(Constant.Key.BEAN)
+ if (bean is com.lukouguoji.module_base.bean.GjjManifest) {
loadManifestFromBean(bean)
+ } else if (bean is com.lukouguoji.module_base.bean.GjjImportManifest) {
+ loadManifestFromImportBean(bean)
}
}
}
@@ -183,6 +185,30 @@ class GjjManifestAddViewModel : BaseViewModel() {
waybillType.value = manifest.awbType
}
+ /**
+ * 从GjjImportManifest对象加载数据(编辑模式)
+ */
+ private fun loadManifestFromImportBean(manifest: com.lukouguoji.module_base.bean.GjjImportManifest) {
+ fid = manifest.fid.toString()
+
+ // 填充表单字段
+ waybillNo.value = manifest.wbNo
+ waybillNum.value = manifest.totalPc.toString()
+ actualNum.value = manifest.pc.toString()
+ actualWeight.value = manifest.weight.toString()
+ departure.value = manifest.origin
+ destination.value = manifest.dest
+ goodsNameCn.value = manifest.goodsCn
+ goodsNameEn.value = manifest.goods
+ unNumber.value = manifest.unNumber
+ remark.value = manifest.remark
+
+ // 设置下拉框选中值
+ agent.value = manifest.agentCode
+ specialCode.value = manifest.spCode
+ waybillType.value = manifest.awbType
+ }
+
/**
* 保存点击
*/
diff --git a/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/IntArrAirManifestViewModel.kt b/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/IntArrAirManifestViewModel.kt
index 04e8fd8..368185b 100644
--- a/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/IntArrAirManifestViewModel.kt
+++ b/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/IntArrAirManifestViewModel.kt
@@ -106,7 +106,7 @@ class IntArrAirManifestViewModel : BasePageViewModel() {
val haWbList = mutableListOf()
selectedItems.forEach { airManifest ->
- airManifest.maWbList?.let { maWbList.add(it) }
+ airManifest.maWb?.let { maWbList.add(it) }
airManifest.haWbList?.let { haWbList.addAll(it) }
}
@@ -141,7 +141,7 @@ class IntArrAirManifestViewModel : BasePageViewModel() {
}
// 获取第一个选中项的主单数据
- val manifest = selectedItems.firstOrNull()?.maWbList ?: return
+ val manifest = selectedItems.firstOrNull()?.maWb ?: return
// 跳转到补充信息页面
com.lukouguoji.gjj.activity.IntArrSupplementInfoActivity.start(
@@ -175,7 +175,7 @@ class IntArrAirManifestViewModel : BasePageViewModel() {
val haWbList = mutableListOf()
selectedItems.forEach { airManifest ->
- airManifest.maWbList?.let { maWbList.add(it) }
+ airManifest.maWb?.let { maWbList.add(it) }
airManifest.haWbList?.let { haWbList.addAll(it) }
}
@@ -223,7 +223,7 @@ class IntArrAirManifestViewModel : BasePageViewModel() {
val haWbList = mutableListOf()
selectedItems.forEach { airManifest ->
- airManifest.maWbList?.let { maWbList.add(it) }
+ airManifest.maWb?.let { maWbList.add(it) }
airManifest.haWbList?.let { haWbList.addAll(it) }
}
@@ -264,10 +264,10 @@ class IntArrAirManifestViewModel : BasePageViewModel() {
// 统计参数(无分页)
val totalParams = filterParams.toRequestBody()
- // 获取列表(带Loading)
+ // 获取列表(带Loading,接口直接返回PageInfo,无BaseResultBean包装)
launchLoadingCollect({ NetApply.api.getIntArrAirManifestList(listParams) }) {
onSuccess = { result ->
- pageModel.handleListBean(result.data?.toBaseListBean())
+ pageModel.handleListBean(result.toBaseListBean())
}
}
@@ -290,7 +290,7 @@ class IntArrAirManifestViewModel : BasePageViewModel() {
val airManifest = list.getOrNull(position) ?: return
// 获取主单数据
- val manifest = airManifest.maWbList ?: return
+ val manifest = airManifest.maWb ?: return
// 跳转到详情页
com.lukouguoji.gjj.activity.IntArrAirManifestDetailsActivity.start(
diff --git a/module_gjj/src/main/res/layout/item_int_arr_air_manifest.xml b/module_gjj/src/main/res/layout/item_int_arr_air_manifest.xml
index 113309a..7cc5465 100644
--- a/module_gjj/src/main/res/layout/item_int_arr_air_manifest.xml
+++ b/module_gjj/src/main/res/layout/item_int_arr_air_manifest.xml
@@ -19,14 +19,15 @@
type="Integer" />
-
+ android:padding="10dp">
-
+ android:layout_height="wrap_content">
-
+ android:layout_weight="1.0"
+ android:gravity="center_vertical">
+ completeSpace="@{4}"
+ android:text="运单号:" />
-
+
-
+ android:gravity="center_vertical">
+ completeSpace="@{4}"
+ android:text="状态:" />
+ android:text="@{manifest.mftStatus ?? ``}" />
-
+
-
+ android:gravity="center_vertical">
+ completeSpace="@{4}"
+ android:text="代理:" />
+ android:text="@{manifest.agentCode ?? ``}" />
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ android:layout_weight="1.2"
+ android:gravity="center_vertical">
+ android:text="件数:" />
+ android:text="@{String.valueOf((int)manifest.pc)}" />
-
+
-
-
+
+ android:layout_weight="0.8"
+ android:gravity="center_vertical">
+ android:text="重量:" />
+ android:text="@{String.valueOf((int)manifest.weight)}" />
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+ android:layout_gravity="center"
+ android:layout_marginLeft="10dp"
+ android:src="@drawable/img_pda_right" />
-
+