fix: 修复意外签注编辑页运单号校验及字段拼写错误
- 修正 GjjImportManifest 中 dgrContactMame 字段名拼写错误为 dgrContactName - 同步修复 IntArrSupplementInfoViewModel 和布局中对应字段引用 - 意外签注编辑页运单号输入改为纯数字模式,并新增11位格式+校验位验证 - 修改航班日期/航班号输入完成时清空始发站和目的站,避免旧数据残留 - 保存前新增始发站/目的站非空校验 - 布局微调:图片上传区域边距和对齐优化 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -44,7 +44,7 @@ data class GjjImportManifest(
|
|||||||
// 目的地
|
// 目的地
|
||||||
var dest: String = "",
|
var dest: String = "",
|
||||||
// 危险品收货人通讯方式
|
// 危险品收货人通讯方式
|
||||||
var dgrContactMame: String = "",
|
var dgrContactName: String = "",
|
||||||
// 危险品收货人通讯方式
|
// 危险品收货人通讯方式
|
||||||
var dgrContactNumber: String = "",
|
var dgrContactNumber: String = "",
|
||||||
// 航班日期
|
// 航班日期
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package com.lukouguoji.gjj.activity
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.text.InputType
|
||||||
import com.lukouguoji.gjj.R
|
import com.lukouguoji.gjj.R
|
||||||
import com.lukouguoji.gjj.databinding.ActivityIntImpAccidentVisaEditBinding
|
import com.lukouguoji.gjj.databinding.ActivityIntImpAccidentVisaEditBinding
|
||||||
import com.lukouguoji.gjj.viewModel.IntImpAccidentVisaEditViewModel
|
import com.lukouguoji.gjj.viewModel.IntImpAccidentVisaEditViewModel
|
||||||
@@ -26,8 +27,8 @@ class IntImpAccidentVisaEditActivity :
|
|||||||
|
|
||||||
// 航班号:大写字母+数字
|
// 航班号:大写字母+数字
|
||||||
binding.fnoInput.et.setUpperCaseAlphanumericFilter()
|
binding.fnoInput.et.setUpperCaseAlphanumericFilter()
|
||||||
// 运单号:大写字母+数字
|
// 运单号:纯数字11位
|
||||||
binding.wbNoInput.et.setUpperCaseAlphanumericFilter()
|
binding.wbNoInput.et.inputType = InputType.TYPE_CLASS_NUMBER
|
||||||
|
|
||||||
viewModel.rv = binding.rv
|
viewModel.rv = binding.rv
|
||||||
binding.rv.addOnItemClickListener(viewModel)
|
binding.rv.addOnItemClickListener(viewModel)
|
||||||
|
|||||||
@@ -129,7 +129,7 @@ class IntArrSupplementInfoViewModel : BaseViewModel() {
|
|||||||
consignorPNum = formBean.consignorPNum,
|
consignorPNum = formBean.consignorPNum,
|
||||||
consignorAddress = formBean.consignorAddress,
|
consignorAddress = formBean.consignorAddress,
|
||||||
// 危险品信息
|
// 危险品信息
|
||||||
dgrContactMame = formBean.dgrContactMame,
|
dgrContactName = formBean.dgrContactName,
|
||||||
dgrContactNumber = formBean.dgrContactNumber,
|
dgrContactNumber = formBean.dgrContactNumber,
|
||||||
unNumber = formBean.unNumber
|
unNumber = formBean.unNumber
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -173,13 +173,23 @@ class IntImpAccidentVisaEditViewModel : BaseViewModel(), IOnItemClickListener {
|
|||||||
|
|
||||||
fun onFlightDateInputComplete() {
|
fun onFlightDateInputComplete() {
|
||||||
lastQueriedFlight = ""
|
lastQueriedFlight = ""
|
||||||
|
clearFlightInfo()
|
||||||
queryFlightIfReady()
|
queryFlightIfReady()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun onFlightNoInputComplete() {
|
fun onFlightNoInputComplete() {
|
||||||
|
lastQueriedFlight = ""
|
||||||
|
clearFlightInfo()
|
||||||
queryFlightIfReady()
|
queryFlightIfReady()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun clearFlightInfo() {
|
||||||
|
val b = dataBean.value ?: GjAccidentVisaEditBean()
|
||||||
|
b.dep = ""
|
||||||
|
b.dest = ""
|
||||||
|
dataBean.value = b
|
||||||
|
}
|
||||||
|
|
||||||
private fun queryFlightIfReady() {
|
private fun queryFlightIfReady() {
|
||||||
val bean = dataBean.value ?: return
|
val bean = dataBean.value ?: return
|
||||||
val fdate = bean.fdate
|
val fdate = bean.fdate
|
||||||
@@ -228,11 +238,39 @@ class IntImpAccidentVisaEditViewModel : BaseViewModel(), IOnItemClickListener {
|
|||||||
// 保存
|
// 保存
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 校验运单号格式
|
||||||
|
* 规则:纯数字,固定11位,后8位中前7位 mod 7 == 最后一位
|
||||||
|
* 返回 true 表示校验失败(有错误)
|
||||||
|
*/
|
||||||
|
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
|
||||||
|
}
|
||||||
|
val last8 = wbNo.substring(3)
|
||||||
|
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() {
|
fun onSaveClick() {
|
||||||
val bean = dataBean.value ?: return
|
val bean = dataBean.value ?: return
|
||||||
if (bean.fdate.verifyNullOrEmpty("请输入航班日期")) return
|
if (bean.fdate.verifyNullOrEmpty("请输入航班日期")) return
|
||||||
if (bean.fno.verifyNullOrEmpty("请输入航班号")) return
|
if (bean.fno.verifyNullOrEmpty("请输入航班号")) return
|
||||||
if (bean.wbNo.verifyNullOrEmpty("请输入运单号")) return
|
if (bean.wbNo.verifyNullOrEmpty("请输入运单号")) return
|
||||||
|
if (verifyWaybillNo(bean.wbNo)) return
|
||||||
|
if (bean.dep.verifyNullOrEmpty("请先填写航班信息(始发站不能为空)")) return
|
||||||
|
if (bean.dest.verifyNullOrEmpty("请先填写航班信息(目的站不能为空)")) return
|
||||||
|
|
||||||
(rv?.commonAdapter()?.items ?: emptyList())
|
(rv?.commonAdapter()?.items ?: emptyList())
|
||||||
.asFlow()
|
.asFlow()
|
||||||
|
|||||||
@@ -260,7 +260,7 @@
|
|||||||
title='@{"名称"}'
|
title='@{"名称"}'
|
||||||
titleLength="@{5}"
|
titleLength="@{5}"
|
||||||
type="@{DataLayoutType.INPUT}"
|
type="@{DataLayoutType.INPUT}"
|
||||||
value='@={viewModel.dataBean.dgrContactMame}' />
|
value='@={viewModel.dataBean.dgrContactName}' />
|
||||||
|
|
||||||
<com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew
|
<com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
|
|||||||
@@ -323,6 +323,7 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="15dp"
|
android:layout_marginTop="15dp"
|
||||||
|
android:layout_marginStart="4dp"
|
||||||
android:orientation="horizontal">
|
android:orientation="horizontal">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
@@ -332,13 +333,14 @@
|
|||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
android:text='@{viewModel.isDetailMode ? "图片" : "上传图像"}'
|
android:text='@{viewModel.isDetailMode ? "图片" : "上传图像"}'
|
||||||
android:textColor="@color/text_gray"
|
android:textColor="@color/text_gray"
|
||||||
completeSpace="@{5}" />
|
completeSpace="@{6}" />
|
||||||
|
|
||||||
<androidx.recyclerview.widget.RecyclerView
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
android:id="@+id/rv"
|
android:id="@+id/rv"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
|
android:layout_marginStart="10dp"
|
||||||
android:overScrollMode="never"
|
android:overScrollMode="never"
|
||||||
itemLayoutId="@{viewModel.itemLayoutId}"
|
itemLayoutId="@{viewModel.itemLayoutId}"
|
||||||
viewHolder="@{viewModel.itemViewHolder}"
|
viewHolder="@{viewModel.itemViewHolder}"
|
||||||
|
|||||||
Reference in New Issue
Block a user