feat: 实现国际进港电报详情页编辑与报文生成功能

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-05 16:13:30 +08:00
parent 3f56614df8
commit b2cc0059b3
5 changed files with 82 additions and 51 deletions

View File

@@ -4,10 +4,12 @@ import android.content.Context
import android.content.Intent
import android.os.Bundle
import com.alibaba.android.arouter.facade.annotation.Route
import com.google.gson.Gson
import com.lukouguoji.gjj.R
import com.lukouguoji.gjj.databinding.ActivityIntArrTelegramDetailsBinding
import com.lukouguoji.gjj.viewModel.IntArrTelegramDetailsViewModel
import com.lukouguoji.module_base.base.BaseBindingActivity
import com.lukouguoji.module_base.bean.MsgReceivePool
import com.lukouguoji.module_base.common.Constant
import com.lukouguoji.module_base.router.ARouterConstants
@@ -23,8 +25,6 @@ class IntArrTelegramDetailsActivity : BaseBindingActivity<ActivityIntArrTelegram
override fun initOnCreate(savedInstanceState: Bundle?) {
setBackArrow("国际进港电报详情")
binding.viewModel = viewModel
// 初始化数据
viewModel.initOnCreated(intent)
}
@@ -32,14 +32,14 @@ class IntArrTelegramDetailsActivity : BaseBindingActivity<ActivityIntArrTelegram
/**
* 启动电报详情页面
* @param context 上下文
* @param id 电报ID
* @param flow 流向(接收0、发送1)
* @param bean 电报Bean
* @param fid 航班ID
*/
@JvmStatic
fun start(context: Context, id: String, flow: String) {
fun start(context: Context, bean: MsgReceivePool, fid: String) {
val starter = Intent(context, IntArrTelegramDetailsActivity::class.java)
.putExtra(Constant.Key.ID, id)
.putExtra(Constant.Key.FLOW, flow)
.putExtra(Constant.Key.DATA, Gson().toJson(bean))
.putExtra("fid", fid)
context.startActivity(starter)
}
}

View File

@@ -2,55 +2,74 @@ package com.lukouguoji.gjj.viewModel
import android.content.Intent
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.viewModelScope
import com.google.gson.Gson
import com.lukouguoji.module_base.base.BaseViewModel
import com.lukouguoji.module_base.bean.TelegramBean
import com.lukouguoji.module_base.bean.MsgReceivePool
import com.lukouguoji.module_base.common.Constant
import com.lukouguoji.module_base.common.ConstantEvent
import com.lukouguoji.module_base.http.net.NetApply
import com.lukouguoji.module_base.impl.FlowBus
import com.lukouguoji.module_base.ktx.launchLoadingCollect
import com.lukouguoji.module_base.ktx.showToast
import com.lukouguoji.module_base.ktx.toRequestBody
import kotlinx.coroutines.launch
/**
* 国际进港电报详情 ViewModel
*/
class IntArrTelegramDetailsViewModel : BaseViewModel() {
var id = ""
var flow = ""
private var fid = ""
private var msgBean: MsgReceivePool? = null
// 电报内容
val telegramContent = MutableLiveData<String>("")
// 电报内容(双向绑定)
val telegramContent = MutableLiveData("")
// 是否可编辑(未生成时可编辑)
val isEditable = MutableLiveData(false)
/**
* 初始化
*/
fun initOnCreated(intent: Intent) {
id = intent.getStringExtra(Constant.Key.ID) ?: ""
flow = intent.getStringExtra(Constant.Key.FLOW) ?: ""
if (id.isNotEmpty() && flow.isNotEmpty()) {
getData()
fid = intent.getStringExtra("fid") ?: ""
val json = intent.getStringExtra(Constant.Key.DATA) ?: ""
if (json.isNotEmpty()) {
val bean = Gson().fromJson(json, MsgReceivePool::class.java)
msgBean = bean
telegramContent.value = bean.teleContent
isEditable.value = !bean.isGenerated()
}
}
/**
* 获取电报详情
* 修改报文按钮点击 — 调用报文生成接口
*/
private fun getData() {
launchLoadingCollect({ NetApply.api.getTelegramDetails(flow, id) }) {
onSuccess = { result ->
val data = result.data
if (data is TelegramBean) {
telegramContent.value = data.teleContent
} else if (data is Map<*, *>) {
telegramContent.value = data["teleContent"]?.toString() ?: ""
fun onModifyClick() {
val bean = msgBean ?: return
val content = telegramContent.value ?: ""
if (content.isEmpty()) {
showToast("报文内容不能为空")
return
}
// 更新报文内容
bean.teleContent = content
val requestData = mapOf(
"fid" to fid.toLongOrNull(),
"msgList" to listOf(bean)
).toRequestBody()
launchLoadingCollect({ NetApply.api.analyseMsg(requestData) }) {
onSuccess = {
showToast("报文生成成功")
// 更新状态为已生成
bean.anaStatus = "1"
isEditable.value = false
// 通知列表刷新
viewModelScope.launch {
FlowBus.with<String>(ConstantEvent.EVENT_REFRESH).emit("refresh")
}
}
}
}
/**
* 修改报文按钮点击
*/
fun onModifyClick() {
showToast("修改报文功能待实现")
}
}

View File

@@ -5,6 +5,7 @@ import androidx.lifecycle.viewModelScope
import com.lukouguoji.gjj.R
import dev.utils.common.DateUtils
import com.lukouguoji.module_base.ktx.formatDate
import com.lukouguoji.gjj.activity.IntArrTelegramDetailsActivity
import com.lukouguoji.gjj.holder.IntImpMsgParseViewHolder
import com.lukouguoji.module_base.base.BasePageViewModel
import com.lukouguoji.module_base.bean.FlightBean
@@ -215,4 +216,12 @@ class IntImpMsgParseViewModel : BasePageViewModel() {
}
}
}
/**
* 列表项点击 — 跳转电报详情页
*/
override fun onItemClick(position: Int, type: Int) {
val bean = pageModel.rv?.commonAdapter()?.getItem(position) as? MsgReceivePool ?: return
IntArrTelegramDetailsActivity.start(getTopActivity(), bean, fid)
}
}

View File

@@ -19,31 +19,33 @@
<include layout="@layout/title_tool_bar" />
<!-- 电报内容区域 -->
<ScrollView
<EditText
android:id="@+id/etContent"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_margin="20dp"
android:background="@color/white"
android:padding="20dp">
<TextView
android:id="@+id/tvContent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@{viewModel.telegramContent}"
android:textColor="@color/black"
android:textSize="16sp"
android:lineSpacingExtra="4dp" />
</ScrollView>
android:padding="20dp"
android:gravity="top|start"
android:text="@={viewModel.telegramContent}"
android:enabled="@{viewModel.isEditable}"
android:textColor="@color/black"
android:textSize="16sp"
android:lineSpacingExtra="4dp"
android:inputType="textMultiLine"
android:scrollbars="vertical"
android:overScrollMode="always" />
<!-- 底部按钮 -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="20dp"
android:gravity="center">
android:layout_marginStart="20dp"
android:layout_marginEnd="20dp"
android:layout_marginBottom="20dp"
android:gravity="center"
android:visibility="@{viewModel.isEditable ? View.VISIBLE : View.GONE}">
<TextView
android:layout_width="200dp"