From 89d4812d9fe90af01195c65ef7d5df9f90f0c7f1 Mon Sep 17 00:00:00 2001 From: YANGJIANKUAN Date: Sun, 22 Mar 2026 17:54:26 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=9B=BD=E9=99=85=E8=BF=9B=E6=B8=AF?= =?UTF-8?q?=E8=88=B1=E5=8D=95=E6=96=B0=E5=A2=9E=E9=A1=B5=E9=9D=A2=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E5=8F=8A=E8=8F=9C=E5=8D=95=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 对调首页国际进港模块"原始舱单"和"进港舱单"菜单位置 - 航班日期默认为当天日期 - 运单号增加11位数字及mod7校验位验证 - 业务类型默认选中"普通货物运输" - 件数限制整数输入,重量允许小数输入 Co-Authored-By: Claude Opus 4.6 --- .../aerologic/ui/fragment/HomeFragment.kt | 8 ++-- .../gjj/activity/GjjManifestAddActivity.kt | 10 ++++- .../gjj/viewModel/GjjManifestAddViewModel.kt | 38 ++++++++++++++++++- .../res/layout/activity_gjj_manifest_add.xml | 4 ++ 4 files changed, 53 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/lukouguoji/aerologic/ui/fragment/HomeFragment.kt b/app/src/main/java/com/lukouguoji/aerologic/ui/fragment/HomeFragment.kt index c987cdc..4a8d487 100644 --- a/app/src/main/java/com/lukouguoji/aerologic/ui/fragment/HomeFragment.kt +++ b/app/src/main/java/com/lukouguoji/aerologic/ui/fragment/HomeFragment.kt @@ -825,16 +825,16 @@ class HomeFragment : Fragment() { ) list.add( RightMenu( - Constant.AuthName.IntArrAirManifest, + Constant.AuthName.IntImpManifest, R.mipmap.img_bwjx, - "原始舱单" + "进港舱单" ) ) list.add( RightMenu( - Constant.AuthName.IntImpManifest, + Constant.AuthName.IntArrAirManifest, R.mipmap.img_bwjx, - "进港舱单" + "原始舱单" ) ) list.add( 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 e126413..e2f9424 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 @@ -2,8 +2,8 @@ package com.lukouguoji.gjj.activity import android.content.Context import android.content.Intent -import androidx.appcompat.app.AppCompatActivity import android.os.Bundle +import android.text.InputType import com.lukouguoji.gjj.R import com.lukouguoji.gjj.databinding.ActivityGjjManifestAddBinding import com.lukouguoji.gjj.viewModel.GjjManifestAddViewModel @@ -23,6 +23,14 @@ class GjjManifestAddActivity : override fun initOnCreate(savedInstanceState: Bundle?) { binding.viewModel = viewModel binding.flightNoInput.et.setUpperCaseAlphanumericFilter() + + // 件数只允许输入整数 + binding.waybillNumInput.inputType = InputType.TYPE_CLASS_NUMBER + binding.actualNumInput.inputType = InputType.TYPE_CLASS_NUMBER + // 重量允许输入小数 + binding.actualWeightInput.inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL + binding.billingWeightInput.inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL + viewModel.initOnCreated(intent) // 动态设置标题(必须在 initOnCreated 之后,pageType 已从 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 db5aa35..2609fec 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 @@ -12,6 +12,7 @@ import com.lukouguoji.module_base.common.DetailsPageType import com.lukouguoji.module_base.http.net.NetApply import com.lukouguoji.module_base.impl.FlowBus import com.lukouguoji.module_base.ktx.finish +import com.lukouguoji.module_base.ktx.formatDate import com.lukouguoji.module_base.ktx.launchCollect import com.lukouguoji.module_base.ktx.launchLoadingCollect import com.lukouguoji.module_base.ktx.noNull @@ -20,6 +21,7 @@ import com.lukouguoji.module_base.ktx.toRequestBody import com.lukouguoji.module_base.ktx.verifyNullOrEmpty import com.lukouguoji.module_base.util.DictUtils import dev.utils.app.info.KeyValue +import dev.utils.common.DateUtils import kotlinx.coroutines.launch class GjjManifestAddViewModel : BaseViewModel() { @@ -33,8 +35,8 @@ class GjjManifestAddViewModel : BaseViewModel() { // 航班ID var fid: String = "" - // 航班日期 - val flightDate = MutableLiveData("") + // 航班日期(新增模式默认今天) + val flightDate = MutableLiveData(DateUtils.getCurrentTime().formatDate()) // 航班号 val flightNo = MutableLiveData("") @@ -173,6 +175,12 @@ class GjjManifestAddViewModel : BaseViewModel() { } DictUtils.getBusinessTypeList(addAll = false) { businessTypeList.postValue(it) + // 新增模式下默认选中"普通货物运输" + if (pageType.value == DetailsPageType.Add && businessType.value.isNullOrEmpty()) { + it.find { b -> b.key.contains("普通货物运输") }?.let { b -> + businessType.postValue(b.value) + } + } } DictUtils.getShouYunPackageTypeList { packageTypeList.postValue(listOf(KeyValue("", "")) + it) @@ -273,11 +281,37 @@ class GjjManifestAddViewModel : BaseViewModel() { waybillType.value = manifest.awbType } + /** + * 校验运单号格式 + * 规则:纯数字,固定11位,后8位中前7位 mod 7 == 最后一位 + */ + private fun verifyWaybillNo(wbNo: String?): Boolean { + if (wbNo.isNullOrEmpty()) return false + if (wbNo.length != 11) { + showToast("运单号必须为11位数字") + return true + } + if (!wbNo.all { it.isDigit() }) { + showToast("运单号必须为纯数字") + return true + } + // 后8位:前7位 mod 7 == 最后一位 + val last8 = wbNo.substring(3) // 后8位 + val first7ofLast8 = last8.substring(0, 7).toLong() + val lastDigit = last8.last().toString().toInt() + if (first7ofLast8 % 7 != lastDigit.toLong()) { + showToast("运单号校验位不正确") + return true + } + return false + } + /** * 保存点击 */ fun onSaveClick(view: View) { if ((waybillNo.value.verifyNullOrEmpty("请输入运单号") + || verifyWaybillNo(waybillNo.value) || agent.value.verifyNullOrEmpty("请选择代理") || waybillNum.value.verifyNullOrEmpty("请输入运单件数") || actualNum.value.verifyNullOrEmpty("请输入实到数量") diff --git a/module_gjj/src/main/res/layout/activity_gjj_manifest_add.xml b/module_gjj/src/main/res/layout/activity_gjj_manifest_add.xml index 0fce01a..01d6855 100644 --- a/module_gjj/src/main/res/layout/activity_gjj_manifest_add.xml +++ b/module_gjj/src/main/res/layout/activity_gjj_manifest_add.xml @@ -193,6 +193,7 @@ android:orientation="horizontal">