feat: 国际进港电报解析接口对接及仓库/提取记录页面
- 电报解析:航班级联查询(自动填充目的站、始发站下拉) - 电报解析:修复接口返回格式(PageInfo 非 BaseResultBean) - 电报解析:报文类型必选校验 - 新增进港仓库、提取记录页面及菜单入口 - 修复 Spinner 空列表时 hint 不显示的问题 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
package com.lukouguoji.gjj.dialog
|
||||
|
||||
import android.content.Context
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import com.lukouguoji.gjj.R
|
||||
import com.lukouguoji.gjj.databinding.DialogIntImpInStorageBinding
|
||||
import com.lukouguoji.module_base.base.BaseDialogModel
|
||||
import com.lukouguoji.module_base.http.net.NetApply
|
||||
import com.lukouguoji.module_base.ktx.launchCollect
|
||||
import com.lukouguoji.module_base.ktx.showToast
|
||||
import com.lukouguoji.module_base.ktx.verifyNullOrEmpty
|
||||
import dev.utils.app.info.KeyValue
|
||||
|
||||
/**
|
||||
* 国际进港仓库 - 入库操作对话框
|
||||
*/
|
||||
class IntImpInStorageDialogModel(
|
||||
private val callback: (IntImpInStorageDialogModel) -> Unit
|
||||
) : BaseDialogModel<DialogIntImpInStorageBinding>(DIALOG_TYPE_CENTER) {
|
||||
|
||||
// 库位列表
|
||||
val locationList = MutableLiveData<List<KeyValue>>()
|
||||
|
||||
// 选中的库位(存储的是code)
|
||||
val selectedLocationCode = MutableLiveData("")
|
||||
|
||||
// 库位ID (后端需要的code)
|
||||
var locationId: String = ""
|
||||
|
||||
// 库位名称 (后端需要的name)
|
||||
var locationName: String = ""
|
||||
|
||||
override fun layoutId(): Int {
|
||||
return R.layout.dialog_int_imp_in_storage
|
||||
}
|
||||
|
||||
override fun onDialogCreated(context: Context) {
|
||||
binding.model = this
|
||||
loadLocationList()
|
||||
|
||||
// 监听选择变化,更新locationId和locationName
|
||||
selectedLocationCode.observeForever { code ->
|
||||
val selectedItem = locationList.value?.find { it.value == code }
|
||||
locationId = selectedItem?.value ?: ""
|
||||
locationName = selectedItem?.key ?: ""
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 加载库位列表
|
||||
*/
|
||||
private fun loadLocationList() {
|
||||
launchCollect({ NetApply.api.getLocationList(flag = 4) }) {
|
||||
onSuccess = { result ->
|
||||
val list = result.data?.map { it.toKeyValue() } ?: emptyList()
|
||||
locationList.value = list
|
||||
}
|
||||
onFailed = { _, msg ->
|
||||
showToast(msg ?: "加载库位列表失败")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存按钮点击
|
||||
*/
|
||||
fun onSaveClick() {
|
||||
if (selectedLocationCode.value.verifyNullOrEmpty("请选择库位")) {
|
||||
return
|
||||
}
|
||||
dismiss()
|
||||
callback(this)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
package com.lukouguoji.gjj.dialog
|
||||
|
||||
import android.content.Context
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import com.lukouguoji.gjj.R
|
||||
import com.lukouguoji.gjj.databinding.DialogIntImpModifyStorageBinding
|
||||
import com.lukouguoji.module_base.base.BaseDialogModel
|
||||
import com.lukouguoji.module_base.http.net.NetApply
|
||||
import com.lukouguoji.module_base.ktx.launchCollect
|
||||
import com.lukouguoji.module_base.ktx.showToast
|
||||
import com.lukouguoji.module_base.ktx.verifyNullOrEmpty
|
||||
import dev.utils.app.info.KeyValue
|
||||
|
||||
/**
|
||||
* 国际进港 - 修改库位对话框
|
||||
*/
|
||||
class IntImpModifyStorageDialogModel(
|
||||
private val callback: (IntImpModifyStorageDialogModel) -> Unit
|
||||
) : BaseDialogModel<DialogIntImpModifyStorageBinding>(DIALOG_TYPE_CENTER) {
|
||||
|
||||
// 库位列表
|
||||
val locationList = MutableLiveData<List<KeyValue>>()
|
||||
|
||||
// 选中的库位(存储的是code)
|
||||
val selectedLocationCode = MutableLiveData("")
|
||||
|
||||
// 库位ID (后端需要的code)
|
||||
var locationId: String = ""
|
||||
|
||||
// 库位名称 (后端需要的name)
|
||||
var locationName: String = ""
|
||||
|
||||
override fun layoutId(): Int {
|
||||
return R.layout.dialog_int_imp_modify_storage
|
||||
}
|
||||
|
||||
override fun onDialogCreated(context: Context) {
|
||||
binding.model = this
|
||||
loadLocationList()
|
||||
|
||||
// 监听选择变化,更新locationId和locationName
|
||||
selectedLocationCode.observeForever { code ->
|
||||
val selectedItem = locationList.value?.find { it.value == code }
|
||||
locationId = selectedItem?.value ?: ""
|
||||
locationName = selectedItem?.key ?: ""
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 加载库位列表
|
||||
*/
|
||||
private fun loadLocationList() {
|
||||
launchCollect({ NetApply.api.getLocationList(flag = 4) }) {
|
||||
onSuccess = { result ->
|
||||
val list = result.data?.map { it.toKeyValue() } ?: emptyList()
|
||||
locationList.value = list
|
||||
}
|
||||
onFailed = { _, msg ->
|
||||
showToast(msg ?: "加载库位列表失败")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存按钮点击
|
||||
*/
|
||||
fun onSaveClick() {
|
||||
if (selectedLocationCode.value.verifyNullOrEmpty("请选择库位")) {
|
||||
return
|
||||
}
|
||||
dismiss()
|
||||
callback(this)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
package com.lukouguoji.gjj.dialog
|
||||
|
||||
import android.content.Context
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import com.lukouguoji.gjj.R
|
||||
import com.lukouguoji.gjj.databinding.DialogIntImpMoveClearBinding
|
||||
import com.lukouguoji.module_base.base.BaseDialogModel
|
||||
import com.lukouguoji.module_base.ktx.verifyNullOrEmpty
|
||||
import dev.utils.app.info.KeyValue
|
||||
|
||||
/**
|
||||
* 国际进港移库 - 清仓操作对话框
|
||||
*/
|
||||
class IntImpMoveClearDialogModel(
|
||||
private val callback: (IntImpMoveClearDialogModel) -> Unit
|
||||
) : BaseDialogModel<DialogIntImpMoveClearBinding>(DIALOG_TYPE_CENTER) {
|
||||
|
||||
// 清仓正常(存储的是 code:"0" 或 "1")
|
||||
val clearNormal = MutableLiveData("")
|
||||
|
||||
// 清仓正常选项列表
|
||||
val clearNormalList = MutableLiveData<List<KeyValue>>().apply {
|
||||
value = listOf(
|
||||
KeyValue("是", "1"),
|
||||
KeyValue("否", "0")
|
||||
)
|
||||
}
|
||||
|
||||
override fun layoutId(): Int {
|
||||
return R.layout.dialog_int_imp_move_clear
|
||||
}
|
||||
|
||||
override fun onDialogCreated(context: Context) {
|
||||
binding.model = this
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存按钮点击
|
||||
*/
|
||||
fun onSaveClick() {
|
||||
if (clearNormal.value.verifyNullOrEmpty("请选择清仓正常")) {
|
||||
return
|
||||
}
|
||||
dismiss()
|
||||
callback(this)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user