feat: 新增ULD管理功能页面

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-08 18:11:55 +08:00
parent 330b5bc28a
commit ff8185644b
14 changed files with 881 additions and 1 deletions

View File

@@ -0,0 +1,32 @@
package com.lukouguoji.aerologic.page.uld.edit
import android.content.Context
import android.content.Intent
import android.os.Bundle
import com.lukouguoji.aerologic.R
import com.lukouguoji.aerologic.databinding.ActivityUldEditBinding
import com.lukouguoji.module_base.base.BaseBindingActivity
import com.lukouguoji.module_base.common.Constant
class UldEditActivity : BaseBindingActivity<ActivityUldEditBinding, UldEditViewModel>() {
override fun layoutId() = R.layout.activity_uld_edit
override fun viewModelClass() = UldEditViewModel::class.java
override fun initOnCreate(savedInstanceState: Bundle?) {
viewModel.initOnCreate(intent)
setBackArrow("ULD${viewModel.pageType.value!!.title}")
binding.viewModel = viewModel
}
companion object {
@JvmStatic
fun start(context: Context, id: String = "", modify: Boolean = id.isEmpty()) {
val starter = Intent(context, UldEditActivity::class.java)
.putExtra(Constant.Key.ID, id)
.putExtra(Constant.Key.DATA, modify)
context.startActivity(starter)
}
}
}

View File

@@ -0,0 +1,84 @@
package com.lukouguoji.aerologic.page.uld.edit
import android.content.Intent
import androidx.lifecycle.MutableLiveData
import com.lukouguoji.module_base.base.BaseViewModel
import com.lukouguoji.module_base.bean.ULDBean
import com.lukouguoji.module_base.common.Constant
import com.lukouguoji.module_base.common.DetailsPageType
import com.lukouguoji.module_base.http.net.NetApply
import com.lukouguoji.module_base.ktx.launchLoadingCollect
import com.lukouguoji.module_base.ktx.noNull
import com.lukouguoji.module_base.ktx.showToast
import com.lukouguoji.module_base.ktx.toRequestBody
import dev.DevUtils
import dev.utils.app.info.KeyValue
class UldEditViewModel : BaseViewModel() {
var id = ""
val pageType = MutableLiveData(DetailsPageType.Add)
val uldBean = MutableLiveData(ULDBean())
val statusList = MutableLiveData<List<KeyValue>>(
listOf(
KeyValue("正常", "0"),
KeyValue("故障", "1"),
)
)
// 所属航司下拉列表(mock,后续替换为接口)
val carrierList = MutableLiveData<List<KeyValue>>(
listOf(
KeyValue("MU - 东方航空", "MU"),
KeyValue("CA - 国航", "CA"),
KeyValue("CZ - 南方航空", "CZ"),
KeyValue("HO - 吉祥航空", "HO"),
KeyValue("FM - 上海航空", "FM"),
)
)
fun initOnCreate(intent: Intent) {
id = intent.getStringExtra(Constant.Key.ID) ?: ""
val modify = intent.getBooleanExtra(Constant.Key.DATA, false)
pageType.value = if (id.isEmpty()) DetailsPageType.Add
else if (modify) DetailsPageType.Modify else DetailsPageType.Details
getData()
}
private fun getData() {
if (id.isEmpty()) return
launchLoadingCollect({
NetApply.api.queryUldByCode(id)
}) {
onSuccess = {
uldBean.value = it.data ?: ULDBean()
}
}
}
fun onSaveClick() {
val bean = uldBean.value ?: return
if (bean.uld.isBlank()) {
showToast("ULD编号不能为空")
return
}
val isAdd = pageType.value == DetailsPageType.Add
launchLoadingCollect({
if (isAdd) NetApply.api.saveUld(bean.toRequestBody())
else NetApply.api.updateUld(bean.toRequestBody())
}) {
onSuccess = {
showToast(it.msg.noNull(if (isAdd) "新增成功" else "修改成功"))
if (isAdd) uldBean.value = ULDBean() else getData()
}
}
}
fun onCancelClick() {
DevUtils.getTopActivity().finish()
}
}

View File

@@ -0,0 +1,45 @@
package com.lukouguoji.aerologic.page.uld.list
import android.content.Context
import android.content.Intent
import android.os.Bundle
import com.lukouguoji.aerologic.R
import com.lukouguoji.aerologic.databinding.ActivityUldListBinding
import com.lukouguoji.module_base.base.BaseBindingActivity
import com.lukouguoji.module_base.ktx.addOnItemClickListener
import com.lukouguoji.module_base.ktx.getLifecycleOwner
class UldListActivity : BaseBindingActivity<ActivityUldListBinding, UldListViewModel>() {
override fun layoutId(): Int {
return R.layout.activity_uld_list
}
override fun viewModelClass(): Class<UldListViewModel> {
return UldListViewModel::class.java
}
override fun initOnCreate(savedInstanceState: Bundle?) {
setBackArrow("ULD管理")
binding.viewModel = viewModel
viewModel.pageModel.bindSmartRefreshLayout(
binding.srl,
binding.rv,
viewModel,
getLifecycleOwner()
)
binding.rv.addOnItemClickListener(viewModel)
}
override fun onResume() {
super.onResume()
viewModel.refresh()
}
companion object {
@JvmStatic
fun start(context: Context) {
context.startActivity(Intent(context, UldListActivity::class.java))
}
}
}

View File

@@ -0,0 +1,16 @@
package com.lukouguoji.aerologic.page.uld.list
import android.view.View
import com.lukouguoji.aerologic.databinding.ItemUldListBinding
import com.lukouguoji.module_base.base.BaseViewHolder
import com.lukouguoji.module_base.bean.ULDBean
class UldListViewHolder(view: View) : BaseViewHolder<ULDBean, ItemUldListBinding>(view) {
override fun onBind(item: Any?, position: Int) {
val itemBean = getItemBean(item)!!
binding.bean = itemBean
notifyItemClick(position, binding.llContent)
notifyItemClick(position, binding.tvModify)
notifyItemClick(position, binding.tvDelete)
}
}

View File

@@ -0,0 +1,116 @@
package com.lukouguoji.aerologic.page.uld.list
import android.app.Activity
import android.content.Intent
import androidx.lifecycle.MutableLiveData
import com.lukouguoji.aerologic.R
import com.lukouguoji.aerologic.page.uld.edit.UldEditActivity
import com.lukouguoji.module_base.base.BasePageViewModel
import com.lukouguoji.module_base.bean.ULDBean
import com.lukouguoji.module_base.common.Constant
import com.lukouguoji.module_base.http.net.NetApply
import com.lukouguoji.module_base.ktx.commonAdapter
import com.lukouguoji.module_base.ktx.launchLoadingCollect
import com.lukouguoji.module_base.ktx.noNull
import com.lukouguoji.module_base.ktx.showToast
import com.lukouguoji.module_base.model.ConfirmDialogModel
import com.lukouguoji.module_base.ktx.toRequestBody
import com.lukouguoji.module_base.model.ScanModel
import dev.DevUtils
import dev.utils.app.info.KeyValue
class UldListViewModel : BasePageViewModel() {
// 搜索条件
val status = MutableLiveData("")
val uldSuffix = MutableLiveData("")
val uldNo = MutableLiveData("")
// 状态下拉列表
val statusList = MutableLiveData<List<KeyValue>>(
listOf(
KeyValue("全部", ""),
KeyValue("正常", "0"),
KeyValue("故障", "1"),
)
)
// 所属航司下拉列表(mock,后续替换为接口)
val carrierList = MutableLiveData<List<KeyValue>>(
listOf(
KeyValue("全部", ""),
KeyValue("MU - 东方航空", "MU"),
KeyValue("CA - 国航", "CA"),
KeyValue("CZ - 南方航空", "CZ"),
KeyValue("HO - 吉祥航空", "HO"),
KeyValue("FM - 上海航空", "FM"),
)
)
// 合计数量
val count = MutableLiveData(0L)
val itemLayoutId = R.layout.item_uld_list
val itemViewHolder = UldListViewHolder::class.java
override fun getData() {
launchLoadingCollect({
NetApply.api.getUldList(
mapOf(
"pageNum" to pageModel.page,
"pageSize" to pageModel.limit,
"status" to status.value?.ifEmpty { null },
"uldSuffix" to uldSuffix.value?.ifEmpty { null },
"uld" to uldNo.value?.ifEmpty { null },
).toRequestBody()
)
}) {
onSuccess = {
pageModel.handleListBean(it.toBaseListBean())
count.value = it.total
}
}
}
fun onUldScanClick() {
ScanModel.startScan(DevUtils.getTopActivity(), Constant.RequestCode.ULD)
}
fun onAddClick() {
UldEditActivity.start(DevUtils.getTopActivity())
}
override fun onItemClick(position: Int, type: Int) {
val bean = pageModel.rv?.commonAdapter()?.getItem(position) as? ULDBean ?: return
when (type) {
R.id.ll_content -> UldEditActivity.start(DevUtils.getTopActivity(), bean.uld)
R.id.tv_modify -> UldEditActivity.start(DevUtils.getTopActivity(), bean.uld, true)
R.id.tv_delete -> deleteUld(bean.uld)
else -> {}
}
}
private fun deleteUld(uld: String) {
ConfirmDialogModel("是否确定删除该ULD记录?") {
launchLoadingCollect({
NetApply.api.deleteUld(uld)
}) {
onSuccess = {
showToast("删除成功")
refresh()
}
}
}.show()
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (resultCode == Activity.RESULT_OK && data != null) {
when (requestCode) {
Constant.RequestCode.ULD -> {
uldNo.value = data.getStringExtra(Constant.Result.CODED_CONTENT).noNull()
}
else -> {}
}
}
}
}

View File

@@ -30,6 +30,7 @@ import com.lukouguoji.aerologic.page.telegram.list.TelegramListActivity
import com.lukouguoji.aerologic.page.test.PrintActivity
import com.lukouguoji.aerologic.page.transport.GoodsTransportActivity
import com.lukouguoji.aerologic.page.transportLog.list.TransportLogActivity
import com.lukouguoji.aerologic.page.uld.list.UldListActivity
import com.lukouguoji.gnc.page.deposit.list.GncDepositListActivity
import com.lukouguoji.gnc.page.distribution.home.GncDistributionHomeActivity
import com.lukouguoji.gnc.page.fubang.list.GncFuBangListActivity
@@ -548,6 +549,10 @@ class HomeFragment : Fragment() {
Constant.AuthName.ComprehensiveLog -> {
LogListActivity.start(requireContext())
}
// ULD管理
Constant.AuthName.ComprehensiveUld -> {
UldListActivity.start(requireContext())
}
else -> {
Toast.makeText(
@@ -950,6 +955,13 @@ class HomeFragment : Fragment() {
"转运记录"
)
)
list.add(
RightMenu(
Constant.AuthName.ComprehensiveUld,
R.mipmap.cargo,
"ULD管理"
)
)
}
else -> {