diff --git a/app/src/main/java/com/za/sdk/demo/MainActivity.kt b/app/src/main/java/com/za/sdk/demo/MainActivity.kt index 8c360b2..42409d8 100644 --- a/app/src/main/java/com/za/sdk/demo/MainActivity.kt +++ b/app/src/main/java/com/za/sdk/demo/MainActivity.kt @@ -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) } diff --git a/servicing/build.gradle b/servicing/build.gradle index 4a704e7..187dafa 100644 --- a/servicing/build.gradle +++ b/servicing/build.gradle @@ -3,6 +3,8 @@ plugins { alias(libs.plugins.jetbrains.kotlin.android) id 'com.google.devtools.ksp' id 'maven-publish' +// kotlin 序列化注解 + id 'kotlin-parcelize' } android { diff --git a/servicing/src/main/java/com/za/common/GlobalData.kt b/servicing/src/main/java/com/za/common/GlobalData.kt index 481d343..bac37af 100644 --- a/servicing/src/main/java/com/za/common/GlobalData.kt +++ b/servicing/src/main/java/com/za/common/GlobalData.kt @@ -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) } - } \ No newline at end of file diff --git a/servicing/src/main/java/com/za/common/GlobalLocalData.kt b/servicing/src/main/java/com/za/common/GlobalLocalData.kt new file mode 100644 index 0000000..4f5cb27 --- /dev/null +++ b/servicing/src/main/java/com/za/common/GlobalLocalData.kt @@ -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 + } +} + diff --git a/servicing/src/main/java/com/za/common/ZDManager.kt b/servicing/src/main/java/com/za/common/ZDManager.kt index 762e140..6efd24e 100644 --- a/servicing/src/main/java/com/za/common/ZDManager.kt +++ b/servicing/src/main/java/com/za/common/ZDManager.kt @@ -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) diff --git a/servicing/src/main/java/com/za/net/ApiService.kt b/servicing/src/main/java/com/za/net/ApiService.kt index 2bf521c..65aa474 100644 --- a/servicing/src/main/java/com/za/net/ApiService.kt +++ b/servicing/src/main/java/com/za/net/ApiService.kt @@ -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> @POST("/driverApp/v2/user/generalInfo") - fun generalInfo(@Body info : GeneralInfoRequest) : Observable> + fun generalInfo(@Body info : GeneralInfoRequest) : Observable> @POST("/driverApp/base/appVersion") fun getUpdate(@Body versionRequest : UpdateVersionRequest) : Observable> diff --git a/servicing/src/main/java/com/za/net/CommonMethod.kt b/servicing/src/main/java/com/za/net/CommonMethod.kt index 17cf644..9c89c69 100644 --- a/servicing/src/main/java/com/za/net/CommonMethod.kt +++ b/servicing/src/main/java/com/za/net/CommonMethod.kt @@ -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() { - override fun doSuccess(it : GeneralInfo?) { + .subscribe(object : BaseObserver() { + 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()}}") diff --git a/servicing/src/main/java/com/za/room/db/user/DriverInfoBean.kt b/servicing/src/main/java/com/za/room/db/user/DriverInfoBean.kt index c1640db..b6aafe3 100644 --- a/servicing/src/main/java/com/za/room/db/user/DriverInfoBean.kt +++ b/servicing/src/main/java/com/za/room/db/user/DriverInfoBean.kt @@ -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? = 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 { - override fun createFromParcel(parcel : Parcel) : DriverInfoBean { - return DriverInfoBean(parcel) - } - - override fun newArray(size : Int) : Array { - return arrayOfNulls(size) - } - } -} \ No newline at end of file +) : Parcelable \ No newline at end of file diff --git a/servicing/src/main/java/com/za/ui/servicing/order_confirm/ConfirmEleScreen.kt b/servicing/src/main/java/com/za/ui/servicing/order_confirm/ConfirmEleScreen.kt index c2b0f2c..94e4f5e 100644 --- a/servicing/src/main/java/com/za/ui/servicing/order_confirm/ConfirmEleScreen.kt +++ b/servicing/src/main/java/com/za/ui/servicing/order_confirm/ConfirmEleScreen.kt @@ -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)) + } +} \ No newline at end of file diff --git a/servicing/src/main/java/com/za/ui/servicing/verify/VerifyOrderActivity.kt b/servicing/src/main/java/com/za/ui/servicing/verify/VerifyOrderActivity.kt index d233cb9..08e3576 100644 --- a/servicing/src/main/java/com/za/ui/servicing/verify/VerifyOrderActivity.kt +++ b/servicing/src/main/java/com/za/ui/servicing/verify/VerifyOrderActivity.kt @@ -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") diff --git a/servicing/src/main/java/com/za/ui/view/SignatureView.kt b/servicing/src/main/java/com/za/ui/view/SignatureView.kt index 9cb8037..619ab01 100644 --- a/servicing/src/main/java/com/za/ui/view/SignatureView.kt +++ b/servicing/src/main/java/com/za/ui/view/SignatureView.kt @@ -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)