refactor(servicing): 重构司机信息获取逻辑

- 更新 Api 定义,将 GeneralInfo 请求的返回类型改为 DriverInfoBean- 重构 GlobalData 类,使用 GlobalLocalData 类封装本地数据操作
- 优化 ConfirmEleScreen组件,增加 ConfirmEleCheckBoxItem复用组件
- 调整签名视图的字体大小- 移除 VerifyOrderActivity 中的冗余代码
- 更新 ZDManager 中的 MMKV 初始化逻辑
This commit is contained in:
songzhiling
2025-04-23 10:02:11 +08:00
parent f0f6810efd
commit c606ed95cd
11 changed files with 195 additions and 273 deletions

View File

@ -27,7 +27,7 @@ class MainActivity : ComponentActivity() {
.fillMaxSize()
.clickable {
val uri =
"zd.assist://app?taskCode=ZD250417100404&driverName=宋志领&driverPhone=17630035658&rescueVehicle=沪88888".toUri()
"zd.assist://app?taskCode=ZD250422100056&driverName=宋志领&driverPhone=17630035658&rescueVehicle=沪88888".toUri()
val intent = Intent(Intent.ACTION_VIEW, uri)
startActivity(intent)
}

View File

@ -3,6 +3,8 @@ plugins {
alias(libs.plugins.jetbrains.kotlin.android)
id 'com.google.devtools.ksp'
id 'maven-publish'
// kotlin 序列化注解
id 'kotlin-parcelize'
}
android {

View File

@ -9,7 +9,7 @@ import com.za.common.log.LogUtil
import com.za.room.RoomHelper
import com.za.room.db.user.DriverInfoBean
object GlobalData {
object GlobalData : GlobalLocalData() {
lateinit var application : Application
private val mmkv : MMKV by lazy { MMKV.defaultMMKV() }
var activityCount : Int = 0
@ -45,26 +45,21 @@ object GlobalData {
//新订单是否已经被处理
var isHandlerNewOrder : Boolean? = false
private val lock = Any()
var driverInfoBean : DriverInfoBean?
var driverInfoBean : DriverInfoBean? = null
get() {
synchronized(lock) {
val driverInfoBean =
mmkv.decodeParcelable("driverInfoBean", DriverInfoBean::class.java)
LogUtil.print("driverInfo get", "driverInfoBean = $driverInfoBean")
return driverInfoBean
if (field == null) {
field = localDriverInfoBean
}
LogUtil.print("get driverInfoBean", "获取司机信息: $field")
return field
}
set(value) {
synchronized(lock) {
mmkv.encode("driverInfoBean", value)
if (value != null) {
lastLoginBean = value
}
LogUtil.print("driverInfo set", "driverInfoBean = $value")
}
localDriverInfoBean = value
field = value
LogUtil.print("set driverInfoBean", "司机信息: $field")
}
var lastLoginBean : DriverInfoBean? = null
get() {
val driverInfoBean = mmkv.decodeParcelable("lastLoginBean", DriverInfoBean::class.java)
@ -85,17 +80,16 @@ object GlobalData {
field = value
}
var currentOrder : OrderInfo? = null
get() {
return mmkv.decodeParcelable("currentOrder", OrderInfo::class.java)
if (field == null) {
field = localCurrentOrder
}
return field
}
set(value) {
mmkv.encode("currentOrder", value)
if (RoomHelper.db?.orderDao()?.getCurrentOrder() == null && value != null) {
RoomHelper.db?.orderDao()?.insertOrder(value)
} else if (value != null) {
RoomHelper.db?.orderDao()?.update(value)
}
localCurrentOrder = value
field = value
}
@ -133,5 +127,4 @@ object GlobalData {
fun clearOrderCache(taskId : Int) {
RoomHelper.clearOrderFromTaskCode(taskId = taskId)
}
}

View File

@ -0,0 +1,49 @@
package com.za.common
import com.tencent.mmkv.MMKV
import com.za.bean.db.order.OrderInfo
import com.za.common.GlobalData.lastLoginBean
import com.za.common.log.LogUtil
import com.za.room.RoomHelper
import com.za.room.db.user.DriverInfoBean
open class GlobalLocalData {
var localDriverInfoBean : DriverInfoBean?
get() {
return try {
val driverInfo = MMKV.defaultMMKV()
.decodeParcelable("driverInfoBean", DriverInfoBean::class.java)
LogUtil.print("local_driverInfoBean", "获取司机信息: $driverInfo")
driverInfo
} catch (e : Exception) {
LogUtil.print("local_driverInfoBean", "获取司机信息失败: ${e.message}")
null
}
}
set(value) {
try {
MMKV.defaultMMKV().encode("driverInfoBean", value)
if (value != null) {
lastLoginBean = value
}
LogUtil.print("set local_driverInfoBean", "保存司机信息: $value")
} catch (e : Exception) {
LogUtil.print("set local_driverInfoBean", "保存司机信息失败: ${e.message}")
}
}
var localCurrentOrder : OrderInfo? = null
get() {
return MMKV.defaultMMKV().decodeParcelable("currentOrder", OrderInfo::class.java)
}
set(value) {
MMKV.defaultMMKV().encode("currentOrder", value)
if (RoomHelper.db?.orderDao()?.getCurrentOrder() == null && value != null) {
RoomHelper.db?.orderDao()?.insertOrder(value)
} else if (value != null) {
RoomHelper.db?.orderDao()?.update(value)
}
field = value
}
}

View File

@ -23,8 +23,7 @@ object ZDManager {
AppConfig.crm1()
}
GlobalData.application = application // 在 Application 中初始化 MMKV所有进程共享同一存储路径
val rootDir = application.filesDir.absolutePath + "/mmkv"
MMKV.initialize(application, rootDir)
MMKV.initialize(application)
Bugly.init(application, "6972a6b56d", true)
LogUtil.init(application)
RoomHelper.init(application)

View File

@ -80,6 +80,7 @@ import com.za.bean.request.VehicleRepairPointMatcherListRequest
import com.za.bean.request.VerifyCodeRequest
import com.za.bean.request.VerifyCodeResponse
import com.za.call.ContactRecordRequest
import com.za.room.db.user.DriverInfoBean
import com.za.water_marker.bean.MyWaterMarkerTemplateBean
import com.za.water_marker.bean.WaterMarkerRequestBean
import io.reactivex.rxjava3.core.Observable
@ -100,7 +101,7 @@ interface ApiService {
fun newUpdateVehicleState(@Body info : UpdateVehicleStateRequest) : Observable<BaseResponse<String>>
@POST("/driverApp/v2/user/generalInfo")
fun generalInfo(@Body info : GeneralInfoRequest) : Observable<BaseResponse<GeneralInfo>>
fun generalInfo(@Body info : GeneralInfoRequest) : Observable<BaseResponse<DriverInfoBean>>
@POST("/driverApp/base/appVersion")
fun getUpdate(@Body versionRequest : UpdateVersionRequest) : Observable<BaseResponse<UpdateVersionBean>>

View File

@ -5,7 +5,6 @@ import android.graphics.BitmapFactory
import com.blankj.utilcode.util.ActivityUtils
import com.blankj.utilcode.util.ImageUtils
import com.za.base.Const
import com.za.bean.GeneralInfo
import com.za.bean.ImageBean
import com.za.bean.JpushBean
import com.za.bean.NewOrderRequestBean
@ -118,7 +117,7 @@ object CommonMethod {
private var lastFetchGenerateInfoTime : Long = 0L
fun getGenerateInfo(vehicleId : Int? = null,
userId : Int? = null,
success : (GeneralInfo) -> Unit = {},
success : (DriverInfoBean) -> Unit = {},
failed : (String?) -> Unit = {}) {
val generalInfoRequest =
GeneralInfoRequest(vehicleId = vehicleId ?: GlobalData.driverInfoBean?.vehicleId,
@ -126,52 +125,20 @@ object CommonMethod {
deviceId = DeviceUtil.getAndroidId(ActivityUtils.getTopActivity()))
RetrofitHelper.getDefaultService().generalInfo(generalInfoRequest)
.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
.subscribe(object : BaseObserver<GeneralInfo>() {
override fun doSuccess(it : GeneralInfo?) {
.subscribe(object : BaseObserver<DriverInfoBean>() {
override fun doSuccess(it : DriverInfoBean?) {
if (it == null) {
failed("获取车辆信息失败")
LogUtil.print("getGenerateInfo", "获取车辆信息失败")
return
}
if (GlobalData.driverInfoBean != null && (System.currentTimeMillis() - lastFetchGenerateInfoTime < 1000 * 10)) {
LogUtil.print("getGenerateInfo", "获取车辆信息成功但是时间间隔小于10秒不更新车辆信息")
LogUtil.print("getGenerateInfo",
"获取车辆信息成功但是时间间隔小于10秒不更新车辆信息")
success(it)
return
}
if (GlobalData.driverInfoBean == null) {
GlobalData.driverInfoBean = DriverInfoBean(vehicleId = it.vehicleId,
vehicleName = it.vehicleName,
userName = it.userName,
loginLogId = it.loginLogId,
userPhone = it.userPhone,
plateNumber = it.plateNumber,
vehicleState = it.vehicleState,
supplierType = it.supplierType,
userPortrait = it.userPortrait,
userId = it.userId,
supplierId = it.supplierId,
deviceId = it.deviceId,
supplierName = it.supplierName,
authStatus = it.authStatus,
serviceList = it.serviceList?.toString())
} else {
GlobalData.driverInfoBean =
GlobalData.driverInfoBean?.copy(vehicleId = it.vehicleId,
vehicleName = it.vehicleName,
userName = it.userName,
userPhone = it.userPhone,
plateNumber = it.plateNumber,
vehicleState = it.vehicleState,
supplierType = it.supplierType,
userPortrait = it.userPortrait,
userId = it.userId,
loginLogId = it.loginLogId,
supplierId = it.supplierId,
deviceId = it.deviceId,
supplierName = it.supplierName,
authStatus = it.authStatus,
serviceList = it.serviceList?.toString())
}
GlobalData.driverInfoBean=it
lastFetchGenerateInfoTime = System.currentTimeMillis()
LogUtil.print("GlobalData.driverInfoBean",
"${GlobalData.driverInfoBean?.toJson()}}")

View File

@ -1,8 +1,9 @@
package com.za.room.db.user
import android.os.Parcel
import android.os.Parcelable
import kotlinx.parcelize.Parcelize
@Parcelize
data class DriverInfoBean(
val userId : Int? = null, //用户id
val userName : String? = null, //用户姓名
@ -14,7 +15,7 @@ data class DriverInfoBean(
val supplierName : String? = null, //经销商名称
val supplierType : Int? = null, //经销商类型 1子公司 2供应商
val loginLogId : Int? = null,
val serviceList : String? = null, //车辆服务列表
val serviceList : List<String>? = null, //车辆服务列表
val assistUserCode : String? = null,
val authStatus : Int? = null, // 0 未认证 1 已认证
val vehicleId : Int? = null,
@ -22,59 +23,4 @@ data class DriverInfoBean(
val vehicleState : Int? = null, //车辆状态 0 空闲 1 忙碌
val plateNumber : String? = null, //车牌号
val deviceId : String? = null,
) : Parcelable {
constructor(parcel : Parcel) : this(parcel.readValue(Int::class.java.classLoader) as? Int,
parcel.readString(),
parcel.readString(),
parcel.readString(),
parcel.readString(),
parcel.readString(),
parcel.readValue(Int::class.java.classLoader) as? Int,
parcel.readString(),
parcel.readValue(Int::class.java.classLoader) as? Int,
parcel.readValue(Int::class.java.classLoader) as? Int,
parcel.readString(),
parcel.readString(),
parcel.readValue(Int::class.java.classLoader) as? Int,
parcel.readValue(Int::class.java.classLoader) as? Int,
parcel.readString(),
parcel.readValue(Int::class.java.classLoader) as? Int,
parcel.readString(),
parcel.readString()) {
}
override fun writeToParcel(parcel : Parcel, flags : Int) {
parcel.writeValue(userId)
parcel.writeString(userName)
parcel.writeString(userPhone)
parcel.writeString(userPortrait)
parcel.writeString(rongyunToken)
parcel.writeString(logTime)
parcel.writeValue(supplierId)
parcel.writeString(supplierName)
parcel.writeValue(supplierType)
parcel.writeValue(loginLogId)
parcel.writeString(serviceList)
parcel.writeString(assistUserCode)
parcel.writeValue(authStatus)
parcel.writeValue(vehicleId)
parcel.writeString(vehicleName)
parcel.writeValue(vehicleState)
parcel.writeString(plateNumber)
parcel.writeString(deviceId)
}
override fun describeContents() : Int {
return 0
}
companion object CREATOR : Parcelable.Creator<DriverInfoBean> {
override fun createFromParcel(parcel : Parcel) : DriverInfoBean {
return DriverInfoBean(parcel)
}
override fun newArray(size : Int) : Array<DriverInfoBean?> {
return arrayOfNulls(size)
}
}
}
) : Parcelable

View File

@ -4,12 +4,12 @@ import androidx.compose.animation.AnimatedVisibility
import androidx.compose.foundation.background
import androidx.compose.foundation.basicMarquee
import androidx.compose.foundation.border
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
@ -24,14 +24,19 @@ import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.Checkbox
import androidx.compose.material3.CheckboxDefaults
import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.OutlinedTextFieldDefaults
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.material3.VerticalDivider
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.alpha
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalContext
@ -39,6 +44,7 @@ import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.text.style.TextDecoration
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.lifecycle.compose.collectAsStateWithLifecycle
@ -48,7 +54,9 @@ import com.blankj.utilcode.util.FileUtils
import com.blankj.utilcode.util.TimeUtils
import com.blankj.utilcode.util.ToastUtils
import com.za.base.Const
import com.za.base.theme.black10
import com.za.base.theme.black65
import com.za.base.theme.buttonBgColor
import com.za.base.theme.headBgColor
import com.za.base.view.CommonButton
import com.za.base.view.CommonDialog
@ -65,6 +73,7 @@ import com.za.ui.view.SignatureView
import java.io.File
import kotlin.math.ceil
@Preview
@Composable
fun ConfirmEleScreen(vm : ConfirmEleVm = viewModel()) {
val context = LocalContext.current
@ -133,12 +142,14 @@ fun ConfirmEleScreen(vm : ConfirmEleVm = viewModel()) {
confirm = {
if (uiState.value.eleWorkOrderBean?.localServicePeopleSignPath.isNullOrEmpty()) {
ToastUtils.showShort("请先进行签名")
vm.dispatch(ConfirmEleVm.Action.UpdateState(uiState.value.copy(showServicePeopleSignDialog = false)))
vm.dispatch(ConfirmEleVm.Action.UpdateState(uiState.value.copy(
showServicePeopleSignDialog = false)))
return@CommonDialog
}
File(uiState.value.eleWorkOrderBean?.localServicePeopleSignPath ?: "").copyTo(File(
AppFileManager.getDriverSignPath(context)), true)
vm.dispatch(ConfirmEleVm.Action.UpdateState(uiState.value.copy(showServicePeopleSignDialog = false)))
vm.dispatch(ConfirmEleVm.Action.UpdateState(uiState.value.copy(
showServicePeopleSignDialog = false)))
})
}
@ -162,9 +173,8 @@ fun ConfirmEleScreen(vm : ConfirmEleVm = viewModel()) {
Column(modifier = Modifier
.fillMaxWidth()
.background(Color.White)
.padding(horizontal = 16.dp, vertical = 10.dp)) {
Row(verticalAlignment = Alignment.CenterVertically,
modifier = Modifier.padding(bottom = 8.dp)) {
.padding(horizontal = 16.dp)) {
Row(verticalAlignment = Alignment.CenterVertically) {
Text(text = "*",
fontWeight = FontWeight.Bold,
color = Color.Red,
@ -174,46 +184,23 @@ fun ConfirmEleScreen(vm : ConfirmEleVm = viewModel()) {
fontWeight = FontWeight.Medium,
color = Color.Black,
fontSize = 15.sp)
}
Row(modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.spacedBy(24.dp)) {
Box(modifier = Modifier
.weight(1f)
.clickable {
Spacer(modifier = Modifier.width(15.dp))
ConfirmEleCheckBoxItem(modifier = Modifier.fillMaxWidth(),
confirmText = "成功",
cancelText = "失败",
confirmValue = uiState.value.eleWorkOrderBean?.isSuccess == 1,
cancelValue = uiState.value.eleWorkOrderBean?.isSuccess == 2,
confirmCheckedChange = {
vm.dispatch(ConfirmEleVm.Action.UpdateServiceSuccessState(1))
}
.border(width = 1.dp,
color = Color.Gray,
shape = RoundedCornerShape(2.dp))
.background(color = headBgColor.takeIf { uiState.value.eleWorkOrderBean?.isSuccess == 1 }
?: Color.White, shape = RoundedCornerShape(2.dp))
.padding(vertical = 5.dp), contentAlignment = Alignment.Center) {
Text("成功",
fontSize = 14.sp,
fontWeight = FontWeight.SemiBold,
color = Color.White.takeIf { uiState.value.eleWorkOrderBean?.isSuccess == 1 }
?: Color.Black)
}
Box(modifier = Modifier
.weight(1f)
.clickable {
},
cancelCheckedChange = {
vm.dispatch(ConfirmEleVm.Action.UpdateServiceSuccessState(2))
}
.border(width = 1.dp,
color = Color.Gray,
shape = RoundedCornerShape(2.dp))
.background(color = headBgColor.takeIf { uiState.value.eleWorkOrderBean?.isSuccess == 2 }
?: Color.White, shape = RoundedCornerShape(2.dp))
.padding(vertical = 5.dp), contentAlignment = Alignment.Center) {
Text("失败",
fontSize = 14.sp,
fontWeight = FontWeight.SemiBold,
color = Color.White.takeIf { uiState.value.eleWorkOrderBean?.isSuccess == 2 }
?: Color.Black)
}
})
}
HorizontalDivider(modifier = Modifier.padding(vertical = 8.dp),
color = black10)
}
}
@ -223,9 +210,8 @@ fun ConfirmEleScreen(vm : ConfirmEleVm = viewModel()) {
Column(modifier = Modifier
.fillMaxWidth()
.background(Color.White)
.padding(horizontal = 16.dp, vertical = 10.dp)) {
Row(verticalAlignment = Alignment.CenterVertically,
modifier = Modifier.padding(bottom = 8.dp)) {
.padding(horizontal = 16.dp)) {
Row(verticalAlignment = Alignment.CenterVertically) {
Text(text = "*",
fontWeight = FontWeight.Bold,
color = Color.Red,
@ -235,56 +221,35 @@ fun ConfirmEleScreen(vm : ConfirmEleVm = viewModel()) {
fontWeight = FontWeight.Medium,
color = Color.Black,
fontSize = 15.sp)
}
Row(modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.spacedBy(24.dp)) {
Box(modifier = Modifier
.weight(1f)
.clickable {
Spacer(modifier = Modifier.width(15.dp))
ConfirmEleCheckBoxItem(modifier = Modifier.fillMaxWidth(),
confirmText = "更换",
cancelText = "不更换",
confirmValue = uiState.value.eleWorkOrderBean?.changeBattery == true,
cancelValue = uiState.value.eleWorkOrderBean?.changeBattery == false,
confirmCheckedChange = {
vm.dispatch(ConfirmEleVm.Action.IsChangeBattery(true))
}
.border(width = 1.dp,
color = Color.Gray,
shape = RoundedCornerShape(2.dp))
.background(color = headBgColor.takeIf { uiState.value.eleWorkOrderBean?.changeBattery == true }
?: Color.White, shape = RoundedCornerShape(2.dp))
.padding(vertical = 5.dp), contentAlignment = Alignment.Center) {
Text("更换",
fontSize = 14.sp,
fontWeight = FontWeight.SemiBold,
color = Color.White.takeIf { uiState.value.eleWorkOrderBean?.changeBattery == true }
?: Color.Black)
}
Box(modifier = Modifier
.weight(1f)
.clickable {
},
cancelCheckedChange = {
vm.dispatch(ConfirmEleVm.Action.IsChangeBattery(false))
}
.border(width = 1.dp,
color = Color.Gray,
shape = RoundedCornerShape(2.dp))
.background(color = headBgColor.takeIf { uiState.value.eleWorkOrderBean?.changeBattery == false }
?: Color.White, shape = RoundedCornerShape(2.dp))
.padding(vertical = 5.dp), contentAlignment = Alignment.Center) {
Text("不更换",
fontSize = 14.sp,
fontWeight = FontWeight.SemiBold,
color = Color.White.takeIf { uiState.value.eleWorkOrderBean?.changeBattery == false }
?: Color.Black)
}
})
}
HorizontalDivider(modifier = Modifier.padding(vertical = 8.dp),
color = black10)
}
}
if (uiState.value.orderInfo?.flowType == Const.TUO_CHE) {
Column(modifier = Modifier
.fillMaxWidth()
.height(86.dp)
.background(Color.White)
.padding(horizontal = 16.dp, vertical = 10.dp)) {
.padding(horizontal = 16.dp)) {
Spacer(modifier = Modifier.height(10.dp))
Row(verticalAlignment = Alignment.CenterVertically,
modifier = Modifier.padding(bottom = 8.dp)) {
modifier = Modifier.fillMaxHeight().fillMaxWidth()) {
Text(text = "*",
fontWeight = FontWeight.Bold,
color = Color.Red,
@ -294,75 +259,49 @@ fun ConfirmEleScreen(vm : ConfirmEleVm = viewModel()) {
fontWeight = FontWeight.Medium,
color = Color.Black,
fontSize = 15.sp)
}
Row(modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.spacedBy(24.dp)) {
Box(modifier = Modifier
.weight(1f)
.clickable {
Spacer(modifier = Modifier.width(5.dp))
ConfirmEleCheckBoxItem(confirmText = "",
cancelText = "",
confirmValue = uiState.value.isAddSmallWheel == true,
cancelValue = uiState.value.isAddSmallWheel == false,
confirmCheckedChange = {
vm.dispatch(ConfirmEleVm.Action.UpdateState(uiState.value.copy(
isAddSmallWheel = true)))
}
.border(width = 1.dp,
color = Color.Gray,
shape = RoundedCornerShape(2.dp))
.background(color = headBgColor.takeIf { uiState.value.isAddSmallWheel == true }
?: Color.White, shape = RoundedCornerShape(2.dp))
.padding(vertical = 5.dp), contentAlignment = Alignment.Center) {
Text("",
fontSize = 14.sp,
fontWeight = FontWeight.SemiBold,
color = Color.White.takeIf { uiState.value.isAddSmallWheel == true }
?: Color.Black)
}
Box(modifier = Modifier
.weight(1f)
.clickable {
},
cancelCheckedChange = {
vm.dispatch(ConfirmEleVm.Action.UpdateState(uiState.value.copy(
isAddSmallWheel = false)))
}
.border(width = 1.dp,
color = Color.Gray,
shape = RoundedCornerShape(2.dp))
.background(color = headBgColor.takeIf { uiState.value.isAddSmallWheel == false }
?: Color.White, shape = RoundedCornerShape(2.dp))
.padding(vertical = 5.dp), contentAlignment = Alignment.Center) {
Text("",
fontSize = 14.sp,
fontWeight = FontWeight.SemiBold,
color = Color.White.takeIf { uiState.value.isAddSmallWheel == false }
?: Color.Black)
})
AnimatedVisibility(uiState.value.isAddSmallWheel == true,
modifier = Modifier.fillMaxWidth()) {
OutlinedTextField(
value = "${uiState.value.wheelNum ?: ""}",
onValueChange = { wheel ->
if ((wheel.toIntOrNull() ?: 0) > 4) {
ToastUtils.showShort("小轮个数不能超过4个")
return@OutlinedTextField
}
vm.dispatch(ConfirmEleVm.Action.UpdateState(uiState.value.copy(
wheelNum = wheel.toIntOrNull())))
},
label = { Text("小轮个数", fontSize = 10.sp) },
modifier = Modifier
.fillMaxWidth()
.height(67.dp),
maxLines = 1,
keyboardOptions = KeyboardOptions.Default.copy(keyboardType = KeyboardType.Number),
textStyle = TextStyle.Default.copy(fontSize = 16.sp,
color = Color.Black),
shape = RoundedCornerShape(6.dp),
colors = OutlinedTextFieldDefaults.colors(focusedBorderColor = headBgColor,
unfocusedBorderColor = Color.Gray.copy(alpha = 0.5f),
focusedLabelColor = headBgColor,
unfocusedLabelColor = Color.Gray),
)
}
}
Spacer(Modifier.height(5.dp))
AnimatedVisibility(uiState.value.isAddSmallWheel == true) {
OutlinedTextField(
value = "${uiState.value.wheelNum ?: ""}",
onValueChange = { wheel ->
if ((wheel.toIntOrNull() ?: 0) > 4) {
ToastUtils.showShort("小轮个数不能超过4个")
return@OutlinedTextField
}
vm.dispatch(ConfirmEleVm.Action.UpdateState(uiState.value.copy(
wheelNum = wheel.toIntOrNull())))
},
label = { Text("小轮个数") },
modifier = Modifier.fillMaxWidth(),
maxLines = 1,
keyboardOptions = KeyboardOptions.Default.copy(keyboardType = KeyboardType.Number),
textStyle = TextStyle.Default.copy(fontSize = 16.sp,
color = Color.Black),
shape = RoundedCornerShape(6.dp),
colors = OutlinedTextFieldDefaults.colors(focusedBorderColor = headBgColor,
unfocusedBorderColor = Color.Gray.copy(alpha = 0.5f),
focusedLabelColor = headBgColor,
unfocusedLabelColor = Color.Gray),
)
}
}
}
@ -669,3 +608,32 @@ private fun EleWorkOrderDetailView(eleWorkOrderBean : EleWorkOrderBean?,
}
}
}
@Composable
private fun ConfirmEleCheckBoxItem(modifier : Modifier = Modifier,
confirmText : String,
cancelText : String,
confirmValue : Boolean,
cancelValue : Boolean,
confirmCheckedChange : (Boolean) -> Unit,
cancelCheckedChange : (Boolean) -> Unit) {
Row(modifier = modifier
.height(30.dp)
.background(color = Color.White),
verticalAlignment = Alignment.CenterVertically) {
Text(confirmText, color = Color.Black, fontWeight = FontWeight.SemiBold, fontSize = 15.sp)
Checkbox(checked = confirmValue, onCheckedChange = {
confirmCheckedChange(it)
})
VerticalDivider(modifier = Modifier
.padding(horizontal = 5.dp, vertical = 5.dp)
.alpha(0.5f))
Text(cancelText, color = Color.Black, fontWeight = FontWeight.SemiBold, fontSize = 15.sp)
Checkbox(checked = cancelValue, onCheckedChange = {
cancelCheckedChange(it)
}, colors = CheckboxDefaults.colors().copy(checkedBoxColor = buttonBgColor))
}
}

View File

@ -277,9 +277,6 @@ private fun VerifyTipView(arriveRemind: String, arriveRemindUrl: String) {
}
HorizontalDivider(modifier = Modifier.alpha(0.2f))
Spacer(modifier = Modifier.height(10.dp))
Text(text = arriveRemindUrl, fontWeight = FontWeight.Medium, fontSize = 16.sp, color = Color.Blue)
Spacer(modifier = Modifier.height(10.dp))
if (arriveRemindUrl.endsWith("png")
|| arriveRemindUrl.endsWith("jpg")

View File

@ -46,7 +46,7 @@ fun SignatureView(modifier: Modifier = Modifier, success: (String?) -> Unit, ser
val intent = Intent(context, GridPaintActivity::class.java)
intent.putExtra("background", android.graphics.Color.WHITE)
intent.putExtra("crop", true)
intent.putExtra("fontSize", 50) //手写字体大小
intent.putExtra("fontSize", 30) //手写字体大小
intent.putExtra("format", PenConfig.FORMAT_PNG)
intent.putExtra("lineLength", 10) //每行显示字数(超出屏幕支持横向滚动)
signatureLauncher.launch(intent)