feat: 航班表单三个枚举下拉对接字典接口并补全字段
新增页补上飞行状态输入项;飞行状态、航班服务种类、航班状态三个 下拉改为调用 typeCode 字典接口,替换原有的硬编码选项(旧的航班 状态码值与服务端实际码值完全不同)。详情页加载同一批字典,按值 反查并显示 label。新增页与详情页字段对齐为同一套。 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -7,6 +7,8 @@ import com.lukouguoji.module_base.bean.FlightBean
|
||||
import com.lukouguoji.module_base.common.Constant
|
||||
import com.lukouguoji.module_base.http.net.NetApply
|
||||
import com.lukouguoji.module_base.ktx.launchLoadingCollect
|
||||
import com.lukouguoji.module_base.util.DictUtils
|
||||
import dev.utils.app.info.KeyValue
|
||||
|
||||
class FlightQueryDetailsViewModel : BaseViewModel() {
|
||||
|
||||
@@ -14,9 +16,24 @@ class FlightQueryDetailsViewModel : BaseViewModel() {
|
||||
|
||||
var dataBean = MutableLiveData<FlightBean>()
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// 枚举字段展示文案:接口已返回名称时原样显示,只返回值(code)时按字典反查名称
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
val countryTypeText = MutableLiveData("")
|
||||
val serviceTypeText = MutableLiveData("")
|
||||
val portCodeText = MutableLiveData("")
|
||||
val flightStatusText = MutableLiveData("")
|
||||
|
||||
private var countryTypeDict = emptyList<KeyValue>()
|
||||
private var serviceTypeDict = emptyList<KeyValue>()
|
||||
private var portCodeDict = emptyList<KeyValue>()
|
||||
private var flightStatusDict = emptyList<KeyValue>()
|
||||
|
||||
fun initOnCreated(intent: Intent) {
|
||||
id = intent.getStringExtra(Constant.Key.ID) ?: ""
|
||||
|
||||
loadDictLists()
|
||||
getData()
|
||||
}
|
||||
|
||||
@@ -27,8 +44,52 @@ class FlightQueryDetailsViewModel : BaseViewModel() {
|
||||
onSuccess = {
|
||||
it.data?.let { data ->
|
||||
dataBean.value = data
|
||||
refreshEnumText()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 加载四个枚举字典(与新增/编辑页同源),用于把 code 反查成 label
|
||||
*/
|
||||
private fun loadDictLists() {
|
||||
DictUtils.getCountryTypeList(addAll = false) {
|
||||
countryTypeDict = it
|
||||
refreshEnumText()
|
||||
}
|
||||
DictUtils.getFlightServiceTypeList(addAll = false) {
|
||||
serviceTypeDict = it
|
||||
refreshEnumText()
|
||||
}
|
||||
DictUtils.getFlightPortCodeList(addAll = false) {
|
||||
portCodeDict = it
|
||||
refreshEnumText()
|
||||
}
|
||||
DictUtils.getFlightStatusList(addAll = false) {
|
||||
flightStatusDict = it
|
||||
refreshEnumText()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 数据或字典任一就绪都重算一次,避免两者返回先后顺序影响展示
|
||||
*/
|
||||
private fun refreshEnumText() {
|
||||
val bean = dataBean.value ?: return
|
||||
countryTypeText.value = toLabel(countryTypeDict, bean.countryType)
|
||||
serviceTypeText.value = toLabel(serviceTypeDict, bean.serviceType)
|
||||
portCodeText.value = toLabel(portCodeDict, bean.portCode)
|
||||
flightStatusText.value = toLabel(flightStatusDict, bean.flightStatus)
|
||||
}
|
||||
|
||||
/**
|
||||
* 值转 label:先按 code 反查,命中不了再判断是否本身就是 label,仍不命中则原样返回
|
||||
*/
|
||||
private fun toLabel(dict: List<KeyValue>, raw: String?): String {
|
||||
if (raw.isNullOrEmpty()) return ""
|
||||
dict.firstOrNull { it.value == raw }?.let { return it.key }
|
||||
dict.firstOrNull { it.key == raw }?.let { return it.key }
|
||||
return raw
|
||||
}
|
||||
}
|
||||
@@ -37,7 +37,7 @@
|
||||
android:orientation="vertical"
|
||||
android:padding="15dp">
|
||||
|
||||
<!-- 第1行:航班日期、航班号、航程 -->
|
||||
<!-- 第1行:航班日期、航班号、机型 -->
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
@@ -68,20 +68,69 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
enable="@{false}"
|
||||
title='@{"航程"}'
|
||||
title='@{"机型"}'
|
||||
titleLength="@{4}"
|
||||
type="@{DataLayoutType.INPUT}"
|
||||
value='@{viewModel.dataBean.range}' />
|
||||
value='@{viewModel.dataBean.aircraftCode}' />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<!-- 第2行:地区类型、服务类型、经停站 -->
|
||||
<!-- 第2行:始发港、经停港、目的港 -->
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="8dp"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
enable="@{false}"
|
||||
title='@{"始发港"}'
|
||||
titleLength="@{4}"
|
||||
type="@{DataLayoutType.INPUT}"
|
||||
value='@{viewModel.dataBean.fdep}' />
|
||||
|
||||
<com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
enable="@{false}"
|
||||
title='@{"经停港"}'
|
||||
titleLength="@{4}"
|
||||
type="@{DataLayoutType.INPUT}"
|
||||
value='@{viewModel.dataBean.jtz}' />
|
||||
|
||||
<com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
enable="@{false}"
|
||||
title='@{"目的港"}'
|
||||
titleLength="@{4}"
|
||||
type="@{DataLayoutType.INPUT}"
|
||||
value='@{viewModel.dataBean.fdest}' />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<!-- 第3行:航程、地区类型、服务类型 -->
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="8dp"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
enable="@{false}"
|
||||
title='@{"航程"}'
|
||||
titleLength="@{4}"
|
||||
type="@{DataLayoutType.INPUT}"
|
||||
value='@{viewModel.dataBean.range}' />
|
||||
|
||||
<com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
@@ -90,7 +139,7 @@
|
||||
title='@{"地区类型"}'
|
||||
titleLength="@{4}"
|
||||
type="@{DataLayoutType.INPUT}"
|
||||
value='@{viewModel.dataBean.countryType}' />
|
||||
value='@{viewModel.countryTypeText}' />
|
||||
|
||||
<com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew
|
||||
android:layout_width="0dp"
|
||||
@@ -100,21 +149,50 @@
|
||||
title='@{"服务类型"}'
|
||||
titleLength="@{4}"
|
||||
type="@{DataLayoutType.INPUT}"
|
||||
value='@{viewModel.dataBean.serviceType}' />
|
||||
value='@{viewModel.serviceTypeText}' />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<!-- 第4行:飞行状态、航班状态、延误原因 -->
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="8dp"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
enable="@{false}"
|
||||
title='@{"经停站"}'
|
||||
title='@{"飞行状态"}'
|
||||
titleLength="@{4}"
|
||||
type="@{DataLayoutType.INPUT}"
|
||||
value='@{viewModel.dataBean.jtz}' />
|
||||
value='@{viewModel.portCodeText}' />
|
||||
|
||||
<com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
enable="@{false}"
|
||||
title='@{"航班状态"}'
|
||||
titleLength="@{4}"
|
||||
type="@{DataLayoutType.INPUT}"
|
||||
value='@{viewModel.flightStatusText}' />
|
||||
|
||||
<com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
enable="@{false}"
|
||||
title='@{"延误原因"}'
|
||||
titleLength="@{4}"
|
||||
type="@{DataLayoutType.INPUT}"
|
||||
value='@{viewModel.dataBean.delayFreeText}' />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<!-- 第3行:计划起飞、预计起飞、实际起飞 -->
|
||||
<!-- 第5行:计划起飞、预计起飞、实际起飞 -->
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
@@ -153,7 +231,7 @@
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<!-- 第4行:计划降落、预计降落、实际降落 -->
|
||||
<!-- 第6行:计划降落、预计降落、实际降落 -->
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
@@ -192,72 +270,13 @@
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<!-- 第5行:飞行状态、航班状态、延误原因 -->
|
||||
<!-- 第7行:机位、机号 -->
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="8dp"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
enable="@{false}"
|
||||
title='@{"飞行状态"}'
|
||||
titleLength="@{4}"
|
||||
type="@{DataLayoutType.INPUT}"
|
||||
value='@{viewModel.dataBean.portCode}' />
|
||||
|
||||
<com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
enable="@{false}"
|
||||
title='@{"航班状态"}'
|
||||
titleLength="@{4}"
|
||||
type="@{DataLayoutType.INPUT}"
|
||||
value='@{viewModel.dataBean.flightStatus}' />
|
||||
|
||||
<com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
enable="@{false}"
|
||||
title='@{"延误原因"}'
|
||||
titleLength="@{4}"
|
||||
type="@{DataLayoutType.INPUT}"
|
||||
value='@{viewModel.dataBean.delayFreeText}' />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<!-- 第6行:机号、机型、机位 -->
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="8dp"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
enable="@{false}"
|
||||
title='@{"机号"}'
|
||||
titleLength="@{4}"
|
||||
type="@{DataLayoutType.INPUT}"
|
||||
value='@{viewModel.dataBean.registration}' />
|
||||
|
||||
<com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
enable="@{false}"
|
||||
title='@{"机型"}'
|
||||
titleLength="@{4}"
|
||||
type="@{DataLayoutType.INPUT}"
|
||||
value='@{viewModel.dataBean.aircraftCode}' />
|
||||
|
||||
<com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
@@ -268,6 +287,21 @@
|
||||
type="@{DataLayoutType.INPUT}"
|
||||
value='@{viewModel.dataBean.standId}' />
|
||||
|
||||
<com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
enable="@{false}"
|
||||
title='@{"机号"}'
|
||||
titleLength="@{4}"
|
||||
type="@{DataLayoutType.INPUT}"
|
||||
value='@{viewModel.dataBean.registration}' />
|
||||
|
||||
<Space
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
@@ -312,6 +312,24 @@ interface Api {
|
||||
@POST("typeCode/countryType")
|
||||
suspend fun getCountryTypeList(): DictListBean
|
||||
|
||||
/**
|
||||
* 获取飞行状态
|
||||
*/
|
||||
@POST("typeCode/flightPortCode")
|
||||
suspend fun getFlightPortCodeList(): DictListBean
|
||||
|
||||
/**
|
||||
* 获取航班服务种类
|
||||
*/
|
||||
@POST("typeCode/flightServiceType")
|
||||
suspend fun getFlightServiceTypeList(): DictListBean
|
||||
|
||||
/**
|
||||
* 获取航班状态
|
||||
*/
|
||||
@POST("typeCode/flightStatus")
|
||||
suspend fun getFlightStatusList(): DictListBean
|
||||
|
||||
/**
|
||||
* 获取国家代码
|
||||
*/
|
||||
|
||||
@@ -490,6 +490,60 @@ object DictUtils {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 飞行状态(0:前方起飞 1:过站登机 2:登机结束 6:到达 7:登机 9:正在值机 …)
|
||||
*/
|
||||
fun getFlightPortCodeList(
|
||||
addAll: Boolean = true,
|
||||
checkedValue: String? = null,
|
||||
callBack: (List<KeyValue>) -> Unit
|
||||
) {
|
||||
launchCollect({
|
||||
NetApply.api
|
||||
.getFlightPortCodeList()
|
||||
}) {
|
||||
onSuccess = {
|
||||
handleCallBack(it, checkedValue, addAll, callBack)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 航班服务种类(0:客机 1:货机 2:卡车)
|
||||
*/
|
||||
fun getFlightServiceTypeList(
|
||||
addAll: Boolean = true,
|
||||
checkedValue: String? = null,
|
||||
callBack: (List<KeyValue>) -> Unit
|
||||
) {
|
||||
launchCollect({
|
||||
NetApply.api
|
||||
.getFlightServiceTypeList()
|
||||
}) {
|
||||
onSuccess = {
|
||||
handleCallBack(it, checkedValue, addAll, callBack)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 航班状态(3:返航 4:地面滑回 5:备降 8:取消 12:延误 15:删除 16:未知)
|
||||
*/
|
||||
fun getFlightStatusList(
|
||||
addAll: Boolean = true,
|
||||
checkedValue: String? = null,
|
||||
callBack: (List<KeyValue>) -> Unit
|
||||
) {
|
||||
launchCollect({
|
||||
NetApply.api
|
||||
.getFlightStatusList()
|
||||
}) {
|
||||
onSuccess = {
|
||||
handleCallBack(it, checkedValue, addAll, callBack)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取角色列表
|
||||
*/
|
||||
|
||||
@@ -41,6 +41,7 @@ class HbFlightEditViewModel : BaseViewModel() {
|
||||
val fdest = MutableLiveData("")
|
||||
val countryType = MutableLiveData("")
|
||||
val serviceType = MutableLiveData("")
|
||||
val portCode = MutableLiveData("")
|
||||
val scheduledTackOff = MutableLiveData("")
|
||||
val estimatedTakeOff = MutableLiveData("")
|
||||
val actualTakeOff = MutableLiveData("")
|
||||
@@ -64,42 +65,17 @@ class HbFlightEditViewModel : BaseViewModel() {
|
||||
val countryTypeList = MutableLiveData<List<KeyValue>>(emptyList())
|
||||
val serviceTypeList = MutableLiveData<List<KeyValue>>(emptyList())
|
||||
val flightStatusList = MutableLiveData<List<KeyValue>>(emptyList())
|
||||
val portCodeList = MutableLiveData<List<KeyValue>>(emptyList())
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// 选项定义(服务端入库/过滤用 code,详情接口返回中文名,回填时需反查)
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
private val countryTypeOptions = listOf(
|
||||
KeyValue("国内", "0"),
|
||||
KeyValue("国际", "1"),
|
||||
KeyValue("地区", "2"),
|
||||
KeyValue("混合", "3"),
|
||||
)
|
||||
|
||||
private val serviceTypeOptions = listOf(
|
||||
KeyValue("客机", "0"),
|
||||
KeyValue("货机", "1"),
|
||||
KeyValue("卡车", "2"),
|
||||
)
|
||||
|
||||
private val statusOptions = listOf(
|
||||
KeyValue("出港", "0"),
|
||||
KeyValue("进港", "1"),
|
||||
)
|
||||
|
||||
private val flightStatusOptions = listOf(
|
||||
KeyValue("正常", "0"),
|
||||
KeyValue("登机", "1"),
|
||||
KeyValue("登机结束", "2"),
|
||||
KeyValue("起飞", "3"),
|
||||
KeyValue("到达", "4"),
|
||||
KeyValue("取消", "5"),
|
||||
KeyValue("备降", "6"),
|
||||
KeyValue("删除发布", "7"),
|
||||
KeyValue("延误", "8"),
|
||||
KeyValue("未知", "9"),
|
||||
)
|
||||
|
||||
private val cmFlagOptions = listOf(
|
||||
KeyValue("有货邮", "0"),
|
||||
KeyValue("无货邮", "1"),
|
||||
@@ -138,8 +114,12 @@ class HbFlightEditViewModel : BaseViewModel() {
|
||||
fdep.value = bean.fdep
|
||||
jtz.value = bean.jtz
|
||||
fdest.value = bean.fdest
|
||||
countryType.value = toCode(countryTypeOptions, bean.countryType)
|
||||
serviceType.value = toCode(serviceTypeOptions, bean.serviceType)
|
||||
// 枚举字段(地区类型/服务类型/航班状态/飞行状态)由详情接口返回中文名,
|
||||
// 统一在字典加载回调里转 code,此处先原样存放
|
||||
countryType.value = bean.countryType
|
||||
serviceType.value = bean.serviceType
|
||||
flightStatus.value = bean.flightStatus
|
||||
portCode.value = bean.portCode
|
||||
status = toCode(statusOptions, bean.status)
|
||||
scheduledTackOff.value = bean.scheduledTackOff
|
||||
estimatedTakeOff.value = bean.estimatedTakeOff
|
||||
@@ -150,7 +130,6 @@ class HbFlightEditViewModel : BaseViewModel() {
|
||||
standId.value = bean.standId
|
||||
registration.value = bean.registration
|
||||
prefix = bean.prefix.noNull()
|
||||
flightStatus.value = toCode(flightStatusOptions, bean.flightStatus)
|
||||
cmFlag = toCode(cmFlagOptions, bean.cmFlag)
|
||||
delayFreeText.value = bean.delayFreeText
|
||||
}
|
||||
@@ -161,27 +140,36 @@ class HbFlightEditViewModel : BaseViewModel() {
|
||||
}
|
||||
|
||||
/**
|
||||
* 加载下拉列表(编辑模式传 checkedValue 置顶选中项)
|
||||
* 加载下拉列表(四个数据源均来自 typeCode 字典接口)
|
||||
*/
|
||||
private fun loadDictLists() {
|
||||
val isModify = pageType.value == DetailsPageType.Modify
|
||||
|
||||
DictUtils.getCountryTypeList(
|
||||
addAll = false,
|
||||
checkedValue = if (isModify) countryType.value else null
|
||||
) {
|
||||
countryTypeList.postValue(if (isModify) it else listOf(KeyValue("", "")) + it)
|
||||
}
|
||||
|
||||
serviceTypeList.value =
|
||||
buildStaticList(serviceTypeOptions, if (isModify) serviceType.value else null)
|
||||
|
||||
flightStatusList.value =
|
||||
buildStaticList(flightStatusOptions, if (isModify) flightStatus.value else null)
|
||||
DictUtils.getCountryTypeList(addAll = false) { applyDict(it, countryType, countryTypeList, isModify) }
|
||||
DictUtils.getFlightServiceTypeList(addAll = false) { applyDict(it, serviceType, serviceTypeList, isModify) }
|
||||
DictUtils.getFlightStatusList(addAll = false) { applyDict(it, flightStatus, flightStatusList, isModify) }
|
||||
DictUtils.getFlightPortCodeList(addAll = false) { applyDict(it, portCode, portCodeList, isModify) }
|
||||
}
|
||||
|
||||
/**
|
||||
* 值转 code:详情接口可能返回中文名(如“国际”“客机”),统一转为 code 用于回填与提交
|
||||
* 字典就绪后:编辑模式把详情返回的中文名统一转成 code,再把列表交给下拉框
|
||||
*
|
||||
* 下拉框带 hint,value 为空时自动停在 hint 项,因此新增模式无需补空项
|
||||
*/
|
||||
private fun applyDict(
|
||||
list: List<KeyValue>,
|
||||
field: MutableLiveData<String>,
|
||||
listField: MutableLiveData<List<KeyValue>>,
|
||||
isModify: Boolean,
|
||||
) {
|
||||
if (isModify) {
|
||||
field.value = toCode(list, field.value)
|
||||
}
|
||||
listField.value = list
|
||||
}
|
||||
|
||||
/**
|
||||
* 值转 code:详情接口返回的是中文名(如“国际”“客机”“延误”),统一转为 code 用于回填与提交
|
||||
*/
|
||||
private fun toCode(options: List<KeyValue>, raw: String?): String {
|
||||
if (raw.isNullOrEmpty()) return ""
|
||||
@@ -190,16 +178,6 @@ class HbFlightEditViewModel : BaseViewModel() {
|
||||
?: raw
|
||||
}
|
||||
|
||||
/**
|
||||
* 静态下拉列表:新增模式首位置空项;编辑模式将选中项置顶
|
||||
*/
|
||||
private fun buildStaticList(list: List<KeyValue>, checkedValue: String?): List<KeyValue> {
|
||||
if (checkedValue.isNullOrEmpty()) {
|
||||
return listOf(KeyValue("", "")) + list
|
||||
}
|
||||
return list.filter { it.value == checkedValue } + list.filter { it.value != checkedValue }
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存 点击
|
||||
*/
|
||||
@@ -239,6 +217,7 @@ class HbFlightEditViewModel : BaseViewModel() {
|
||||
"actualArrival" to actualArrival.value,
|
||||
"standId" to standId.value?.trim(),
|
||||
"registration" to registration.value?.trim(),
|
||||
"portCode" to portCode.value,
|
||||
"flightStatus" to flightStatus.value,
|
||||
"delayFreeText" to delayFreeText.value?.trim(),
|
||||
)
|
||||
|
||||
@@ -171,7 +171,50 @@
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<!-- 第4行:计划起飞、预计起飞、实际起飞 -->
|
||||
<!-- 第4行:飞行状态、机位、机号 -->
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="10dp"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew
|
||||
hint='@{"请选择飞行状态"}'
|
||||
list="@{viewModel.portCodeList}"
|
||||
title='@{"飞行状态"}'
|
||||
titleLength="@{4}"
|
||||
type="@{DataLayoutType.SPINNER}"
|
||||
value='@={viewModel.portCode}'
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1" />
|
||||
|
||||
<com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew
|
||||
hint='@{"请输入机位"}'
|
||||
title='@{"机位"}'
|
||||
titleLength="@{4}"
|
||||
type="@{DataLayoutType.INPUT}"
|
||||
value='@={viewModel.standId}'
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="15dp"
|
||||
android:layout_weight="1" />
|
||||
|
||||
<com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew
|
||||
android:id="@+id/registrationInput"
|
||||
hint='@{"请输入机号"}'
|
||||
title='@{"机号"}'
|
||||
titleLength="@{4}"
|
||||
type="@{DataLayoutType.INPUT}"
|
||||
value='@={viewModel.registration}'
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="15dp"
|
||||
android:layout_weight="1" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<!-- 第5行:计划起飞、预计起飞、实际起飞 -->
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
@@ -214,7 +257,7 @@
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<!-- 第5行:计划降落、预计降落、实际降落 -->
|
||||
<!-- 第6行:计划降落、预计降落、实际降落 -->
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
@@ -257,35 +300,13 @@
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<!-- 第6行:机位、机号、延误原因 -->
|
||||
<!-- 第7行:延误原因 -->
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="10dp"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew
|
||||
hint='@{"请输入机位"}'
|
||||
title='@{"机位"}'
|
||||
titleLength="@{4}"
|
||||
type="@{DataLayoutType.INPUT}"
|
||||
value='@={viewModel.standId}'
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1" />
|
||||
|
||||
<com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew
|
||||
android:id="@+id/registrationInput"
|
||||
hint='@{"请输入机号"}'
|
||||
title='@{"机号"}'
|
||||
titleLength="@{4}"
|
||||
type="@{DataLayoutType.INPUT}"
|
||||
value='@={viewModel.registration}'
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="15dp"
|
||||
android:layout_weight="1" />
|
||||
|
||||
<com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew
|
||||
hint='@{"请输入延误原因"}'
|
||||
title='@{"延误原因"}'
|
||||
@@ -294,9 +315,14 @@
|
||||
value='@={viewModel.delayFreeText}'
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="15dp"
|
||||
android:layout_weight="1" />
|
||||
|
||||
<Space
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="15dp"
|
||||
android:layout_weight="2" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
Reference in New Issue
Block a user