From 405f732502a7f858e4e326e91402a8bd81191352 Mon Sep 17 00:00:00 2001
From: songzhiling <17630035658@163.com>
Date: Thu, 29 May 2025 10:29:10 +0800
Subject: [PATCH] =?UTF-8?q?refactor(ui):=20=E9=87=8D=E6=9E=84=E8=AE=A2?=
=?UTF-8?q?=E5=8D=95=E7=9B=B8=E5=85=B3=E7=95=8C=E9=9D=A2=E5=B8=83=E5=B1=80?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 新增 NewOrderItem 组件用于统一订单展示样式
- 优化 GoAccidentSiteActivity、GoToDestinationActivity 和 NewOrderActivity 的界面布局
-移除冗余代码,提高代码复用性
- 调整样式和间距,提升用户体验
---
.../main/java/com/za/sdk/demo/MainActivity.kt | 2 +-
gradle/libs.versions.toml | 3 +-
servicing/build.gradle | 4 +-
.../main/java/com/za/base/view/AppTipsView.kt | 11 +-
.../main/java/com/za/call/CallLogManager.kt | 3 +
.../src/main/java/com/za/ext/ContextExt.kt | 7 +-
.../com/za/ui/new_order/NewOrderActivity.kt | 209 +--------
.../com/za/ui/new_order/NewOrderItemView.kt | 430 ++++++++++++++++++
.../go_accident/GoAccidentSiteActivity.kt | 199 +-------
.../servicing/go_accident/GoAccidentSiteVm.kt | 5 -
.../GoToDestinationActivity.kt | 179 +-------
.../wait_to_start/WaitToStartActivity.kt | 185 +-------
.../src/main/res/drawable/sv_new_copy.xml | 14 +
.../src/main/res/drawable/sv_order_change.xml | 81 ++++
.../src/main/res/drawable/sv_order_ele.xml | 94 ++++
.../src/main/res/drawable/sv_order_photo.xml | 132 ++++++
.../main/res/drawable/sv_order_reserve.xml | 18 +
.../src/main/res/drawable/sv_settle_cash.xml | 18 +
.../src/main/res/drawable/sv_settle_month.xml | 18 +
.../res/layout/sign_activity_grid_paint.xml | 44 +-
20 files changed, 928 insertions(+), 728 deletions(-)
create mode 100644 servicing/src/main/java/com/za/ui/new_order/NewOrderItemView.kt
create mode 100644 servicing/src/main/res/drawable/sv_new_copy.xml
create mode 100644 servicing/src/main/res/drawable/sv_order_change.xml
create mode 100644 servicing/src/main/res/drawable/sv_order_ele.xml
create mode 100644 servicing/src/main/res/drawable/sv_order_photo.xml
create mode 100644 servicing/src/main/res/drawable/sv_order_reserve.xml
create mode 100644 servicing/src/main/res/drawable/sv_settle_cash.xml
create mode 100644 servicing/src/main/res/drawable/sv_settle_month.xml
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 55c89f0..6882ca7 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=ZD250521100797&driverName=宋志领&driverPhone=17630035658&rescueVehicle=沪88888".toUri()
+ "zd.assist://app?taskCode=ZD250521100686&driverName=宋志领&driverPhone=17630035658&rescueVehicle=沪88888".toUri()
val intent = Intent(Intent.ACTION_VIEW, uri)
startActivity(intent)
}
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index a712fe4..d08f376 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -39,7 +39,6 @@ rxjava = "3.1.7"
search = "7.3.0"
tbssdk = "44286"
uiGraphics = "1.7.7"
-uiTooling = "1.7.7"
uiToolingPreview = "1.7.7"
uiVersion = "1.7.7"
utilcodex = "1.31.1"
@@ -61,7 +60,6 @@ androidx-ui = { module = "androidx.compose.ui:ui", version.ref = "uiVersion" }
androidx-ui-graphics = { module = "androidx.compose.ui:ui-graphics", version.ref = "uiGraphics" }
androidx-ui-test-junit4 = { module = "androidx.compose.ui:ui-test-junit4", version.ref = "uiGraphics" }
androidx-ui-test-manifest = { module = "androidx.compose.ui:ui-test-manifest", version.ref = "uiGraphics" }
-androidx-ui-tooling = { module = "androidx.compose.ui:ui-tooling", version.ref = "uiTooling" }
androidx-ui-tooling-preview = { module = "androidx.compose.ui:ui-tooling-preview", version.ref = "uiToolingPreview" }
androidx-work-runtime-ktx = { module = "androidx.work:work-runtime-ktx", version.ref = "workRuntimeKtx" }
coil-compose = { module = "io.coil-kt:coil-compose", version.ref = "coilCompose" }
@@ -101,6 +99,7 @@ xdmap = { module = "com.amap.api:3dmap", version.ref = "xdmap" }
xz = { module = "org.tukaani:xz", version.ref = "xz" }
androidx-exifinterface = { group = "androidx.exifinterface", name = "exifinterface", version.ref = "exifinterface" }
face-detection = { module = "com.google.mlkit:face-detection", version.ref = "faceDetection" }
+ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling", version.ref = "uiToolingPreview" }
[plugins]
android-application = { id = "com.android.application", version.ref = "agp" }
diff --git a/servicing/build.gradle b/servicing/build.gradle
index 817b8fe..8b9f67d 100644
--- a/servicing/build.gradle
+++ b/servicing/build.gradle
@@ -58,7 +58,7 @@ publishing {
release(MavenPublication) {
groupId = 'io.github.szl9'
artifactId = 'zd_servicing'
- version = "1.0.1.9.9.120"
+ version = "1.0.1.9.9.126"
pom {
packaging = "aar"
@@ -149,8 +149,8 @@ dependencies {
androidTestApi libs.androidx.espresso.core
androidTestApi platform(libs.androidx.compose.bom)
androidTestApi libs.androidx.ui.test.junit4
- debugApi libs.androidx.ui.tooling
debugApi libs.androidx.ui.test.manifest
+ debugApi libs.ui.tooling
api libs.coil.compose
api libs.coil.gif
diff --git a/servicing/src/main/java/com/za/base/view/AppTipsView.kt b/servicing/src/main/java/com/za/base/view/AppTipsView.kt
index d497b8a..e2779fc 100644
--- a/servicing/src/main/java/com/za/base/view/AppTipsView.kt
+++ b/servicing/src/main/java/com/za/base/view/AppTipsView.kt
@@ -33,6 +33,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.za.base.NetworkRouteSelectionActivity
@@ -53,16 +54,16 @@ fun AppTipsView() {
when (warnBean) {
is NetWarnBean -> {
- NetworkWeakView(warnBean as NetWarnBean)
+ NetworkWeakView()
}
else -> {}
}
}
-
+@Preview
@Composable
-fun NetworkWeakView(netWarnBean : NetWarnBean) {
+fun NetworkWeakView() {
val context = LocalContext.current
AnimatedVisibility(context !is NetworkRouteSelectionActivity,
@@ -97,10 +98,10 @@ fun NetworkWeakView(netWarnBean : NetWarnBean) {
Spacer(modifier = Modifier.width(5.dp))
- Text(text = "当前网络异常,可以在线路检测中检测线路并切换!",
+ Text(text = "检测线路并切换",
style = MaterialTheme.typography.bodyMedium,
color = Color(0xFF757575),
- fontSize = 12.sp)
+ fontSize = 10.sp)
}
Box(modifier = Modifier
diff --git a/servicing/src/main/java/com/za/call/CallLogManager.kt b/servicing/src/main/java/com/za/call/CallLogManager.kt
index 368970c..4694396 100644
--- a/servicing/src/main/java/com/za/call/CallLogManager.kt
+++ b/servicing/src/main/java/com/za/call/CallLogManager.kt
@@ -30,6 +30,9 @@ object CallLogManager {
var phoneCallContactBean : ContactRecordBean? = null
fun uploadCallLog(context : Context) {
+ if (GlobalData.token.isNullOrEmpty()) {
+ return
+ }
if (ActivityCompat.checkSelfPermission(context,
Manifest.permission.READ_CALL_LOG) != PackageManager.PERMISSION_GRANTED
) {
diff --git a/servicing/src/main/java/com/za/ext/ContextExt.kt b/servicing/src/main/java/com/za/ext/ContextExt.kt
index 9bc740f..2c35d56 100644
--- a/servicing/src/main/java/com/za/ext/ContextExt.kt
+++ b/servicing/src/main/java/com/za/ext/ContextExt.kt
@@ -5,10 +5,9 @@ import android.app.Activity
import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
-import android.net.Uri
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
-import com.blankj.utilcode.util.ActivityUtils
+import androidx.core.net.toUri
import com.blankj.utilcode.util.ToastUtils
import com.za.call.CallLogManager
import com.za.call.ContactRecordBean
@@ -94,6 +93,6 @@ fun Context.callPhone(phone : String?) {
taskCode = GlobalData.currentOrder?.taskCode,
phone = phone)
}
- val intentPhone = Intent(Intent.ACTION_DIAL, Uri.parse("tel:$phone"))
- ActivityCompat.startActivity(this, intentPhone, null)
+ val intentPhone = Intent(Intent.ACTION_DIAL, "tel:$phone".toUri())
+ this.startActivity(intentPhone)
}
\ No newline at end of file
diff --git a/servicing/src/main/java/com/za/ui/new_order/NewOrderActivity.kt b/servicing/src/main/java/com/za/ui/new_order/NewOrderActivity.kt
index 8d28236..231e848 100644
--- a/servicing/src/main/java/com/za/ui/new_order/NewOrderActivity.kt
+++ b/servicing/src/main/java/com/za/ui/new_order/NewOrderActivity.kt
@@ -5,7 +5,6 @@ import android.content.Intent
import android.os.Build
import android.os.Handler
import android.os.Looper
-import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
@@ -19,13 +18,8 @@ import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
-import androidx.compose.foundation.layout.wrapContentHeight
-import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.RoundedCornerShape
-import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.BottomSheetScaffold
-import androidx.compose.material3.Button
-import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.SheetValue
@@ -62,7 +56,6 @@ import com.amap.api.maps.model.LatLngBounds
import com.amap.api.maps.model.MarkerOptions
import com.amap.api.maps.model.PolylineOptions
import com.za.base.BaseActivity
-import com.za.base.theme.headBgColor
import com.za.base.view.CommonDialog
import com.za.base.view.HeadViewNotBack
import com.za.bean.JpushBean
@@ -223,196 +216,18 @@ private fun AcceptOrderScreen(jpushBean : JpushBean?, vm : NewOrderVm = viewMode
BottomSheetScaffold(scaffoldState = scaffoldState,
topBar = { HeadViewNotBack(title = "新订单") },
sheetContent = {
- Column(modifier = Modifier
- .fillMaxWidth()
- .wrapContentHeight()
- .background(Color.White)
- .verticalScroll(rememberScrollState())) { // 滑动指示器
- Box(modifier = Modifier
- .fillMaxWidth()
- .padding(vertical = 8.dp)
- .background(Color.White), contentAlignment = Alignment.Center) {
- Box(modifier = Modifier
- .width(32.dp)
- .height(4.dp)
- .background(color = Color(0xFFE0E0E0), shape = RoundedCornerShape(2.dp)))
- }
-
- // 滑动指示器和订单类型行
- Row(modifier = Modifier
- .fillMaxWidth()
- .padding(horizontal = 16.dp, vertical = 12.dp),
- horizontalArrangement = Arrangement.SpaceBetween,
- verticalAlignment = Alignment.CenterVertically) {
- Text(text = uiState.value.jpushBean?.serviceTypeName ?: "",
- fontSize = 18.sp,
- fontWeight = FontWeight.Bold,
- color = Color.Black)
-
- // 修改倒计时显示
- Text(text = if (uiState.value.isTimeout) "已超时" else "${uiState.value.remainingTime}S",
- color = Color(0xFFFF4D4F),
- fontSize = 20.sp,
- fontWeight = FontWeight.Bold)
- }
-
- // 添加距离和时间信息
- // 距离和时间信息
- Row(modifier = Modifier
- .fillMaxWidth()
- .padding(horizontal = 16.dp, vertical = 12.dp),
- horizontalArrangement = Arrangement.SpaceBetween,
- verticalAlignment = Alignment.CenterVertically) {
- Text(text = if (uiState.value.estimatedArrivalTime.isNotEmpty()) "预计到达: ${uiState.value.estimatedArrivalTime}"
- else "计算中...", color = Color(0xFF666666), fontSize = 14.sp)
-
- Text(text = if (uiState.value.remainingDistance > 0) "距离救援地: %.1fkm".format(
- uiState.value.remainingDistance / 1000f)
- else "计算中...", color = Color(0xFFFF4D4F), fontSize = 14.sp)
- }
-
- HorizontalDivider(modifier = Modifier
- .fillMaxWidth()
- .alpha(0.1f))
-
- // 订单信息
- Column(modifier = Modifier
- .fillMaxWidth()
- .padding(horizontal = 16.dp, vertical = 12.dp)) { // 订单标签
- Text(text = uiState.value.jpushBean?.serviceTypeName ?: "",
- fontSize = 18.sp,
- fontWeight = FontWeight.Bold,
- color = Color.Black)
-
- Spacer(modifier = Modifier.height(8.dp))
-
- // 订单标签
- Row(verticalAlignment = Alignment.CenterVertically,
- horizontalArrangement = Arrangement.spacedBy(8.dp)) {
- Box(modifier = Modifier
- .background(Color(0xFF9BA1B2), RoundedCornerShape(4.dp))
- .padding(horizontal = 6.dp, vertical = 2.dp)) {
- Text(text = "月结".takeIf { uiState.value.jpushBean?.settleType == 1 }
- ?: "现金", color = Color.White, fontSize = 12.sp)
- }
-
- Text(text = uiState.value.jpushBean?.orderSource ?: "",
- color = Color.Black,
- fontSize = 12.sp)
-
- Text(text = uiState.value.jpushBean?.addressProperty ?: "",
- color = Color(0xFFFD8205),
- fontSize = 12.sp,
- fontWeight = FontWeight.Medium)
- }
-
- Spacer(modifier = Modifier.height(12.dp))
-
- // 订单号
- Row(verticalAlignment = Alignment.CenterVertically,
- modifier = Modifier.clickable {
- uiState.value.jpushBean?.taskCode?.copy(context)
- }) {
- Text(text = "单号", color = Color(0xFF999999), fontSize = 13.sp)
-
- Spacer(modifier = Modifier.width(8.dp))
-
- Text(text = uiState.value.jpushBean?.taskCode ?: "",
- color = Color(0xFF666666),
- fontSize = 14.sp)
-
- Spacer(modifier = Modifier.width(8.dp))
-
- AsyncImage(model = R.drawable.sv_copy,
- contentDescription = "copy",
- modifier = Modifier.size(16.dp))
- }
-
- Spacer(modifier = Modifier.height(16.dp))
-
- // 地址信息
- Column(verticalArrangement = Arrangement.spacedBy(16.dp)) { // 救援地
- Row(verticalAlignment = Alignment.Top,
- modifier = Modifier.clickable { // 点击救援地时移动地图到救援位置
- uiState.value.jpushBean?.let { order ->
- if (order.lat != null && order.lat != 0.0 && order.lng != null && order.lng != 0.0) {
- mapView.map.animateCamera(CameraUpdateFactory.newLatLngZoom(
- LatLng(order.lat !!, order.lng !!),
- 16f))
- }
- }
- }) {
- AsyncImage(model = R.drawable.sv_rescuing,
- contentDescription = "rescue",
- modifier = Modifier.size(16.dp))
-
- Spacer(modifier = Modifier.width(8.dp))
-
- Text(text = uiState.value.jpushBean?.address ?: "",
- color = Color.Black,
- fontSize = 15.sp,
- fontWeight = FontWeight.Medium)
- }
-
- // 目的地
- if (! uiState.value.jpushBean?.distAddress.isNullOrBlank()) {
- Row(verticalAlignment = Alignment.Top,
- modifier = Modifier.clickable { // 点击目的地时移动地图到目的地位置
- uiState.value.jpushBean?.let { order ->
- if (order.distLat != null && order.distLat != 0.0 && order.distLng != null && order.distLng != 0.0) {
- mapView.map.animateCamera(CameraUpdateFactory.newLatLngZoom(
- LatLng(order.distLat !!, order.distLng !!),
- 16f))
- }
- }
- }) {
- AsyncImage(model = R.drawable.sv_dist,
- contentDescription = "destination",
- modifier = Modifier.size(16.dp))
-
- Spacer(modifier = Modifier.width(8.dp))
-
- Text(text = uiState.value.jpushBean?.distAddress ?: "",
- color = Color.Black,
- fontSize = 15.sp,
- fontWeight = FontWeight.Medium)
- }
- }
- }
-
- Spacer(modifier = Modifier.height(16.dp))
-
- // 修改按钮状态
- Row(modifier = Modifier
- .fillMaxWidth()
- .padding(horizontal = 16.dp, vertical = 16.dp),
- horizontalArrangement = Arrangement.spacedBy(12.dp)) { // 拒单按钮
- Button(onClick = { vm.dispatch(NewOrderVm.Action.RefuseOrder) },
- modifier = Modifier
- .weight(1f)
- .height(44.dp),
- colors = ButtonDefaults.buttonColors(containerColor = Color.White,
- contentColor = Color(0xFF666666)),
- border = BorderStroke(1.dp, Color(0xFFE5E5E5)),
- shape = RoundedCornerShape(8.dp)) {
- Text(text = "拒绝", fontSize = 16.sp, fontWeight = FontWeight.Medium)
- }
-
- // 接单按钮
- Button(onClick = { vm.dispatch(NewOrderVm.Action.ShowTaskNotes) },
- modifier = Modifier
- .weight(1f)
- .height(44.dp),
- colors = ButtonDefaults.buttonColors(containerColor = headBgColor),
- shape = RoundedCornerShape(8.dp)) {
- Text(text = "接单",
- color = Color.White,
- fontSize = 16.sp,
- fontWeight = FontWeight.Medium)
- }
- }
- }
- }
+ val uiBean = NewOrderItemUIBean(taskCode = uiState.value.jpushBean?.taskCode,
+ addressProperty = uiState.value.jpushBean?.addressProperty,
+ address = uiState.value.jpushBean?.address,
+ distAddress = uiState.value.jpushBean?.distAddress,
+ serviceTypeName = uiState.value.jpushBean?.serviceTypeName,
+ orderSource = uiState.value.jpushBean?.orderSource,
+ settleType = uiState.value.jpushBean?.settleType,
+ bottomTextString = "接单",
+ uiType = NewOrderUiType.ACCEPT)
+ NewOrderItem(uiBean, goAccept = {
+ vm.dispatch(NewOrderVm.Action.ShowTaskNotes)
+ })
},
sheetPeekHeight = 180.dp,
sheetShape = RoundedCornerShape(topStart = 16.dp, topEnd = 16.dp),
diff --git a/servicing/src/main/java/com/za/ui/new_order/NewOrderItemView.kt b/servicing/src/main/java/com/za/ui/new_order/NewOrderItemView.kt
new file mode 100644
index 0000000..ca68b3f
--- /dev/null
+++ b/servicing/src/main/java/com/za/ui/new_order/NewOrderItemView.kt
@@ -0,0 +1,430 @@
+package com.za.ui.new_order
+
+import androidx.compose.foundation.BorderStroke
+import androidx.compose.foundation.background
+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.fillMaxWidth
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.layout.width
+import androidx.compose.foundation.layout.wrapContentSize
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.KeyboardArrowRight
+import androidx.compose.material3.Card
+import androidx.compose.material3.CardDefaults
+import androidx.compose.material3.HorizontalDivider
+import androidx.compose.material3.Icon
+import androidx.compose.material3.Text
+import androidx.compose.material3.VerticalDivider
+import androidx.compose.runtime.Composable
+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.graphics.vector.ImageVector
+import androidx.compose.ui.layout.ContentScale
+import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.res.vectorResource
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.style.TextOverflow
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import coil.compose.AsyncImage
+import com.za.base.theme.bgColor
+import com.za.base.theme.black50
+import com.za.base.theme.black90
+import com.za.base.view.CommonButton
+import com.za.ext.copy
+import com.za.servicing.R
+
+
+object NewOrderUiType {
+ const val SERVICING = 1
+ const val HISTORY = 2
+ const val ACCEPT = 3
+ const val PENDING = 4
+ const val IN_SERVICING_HOME = 5
+}
+
+data class NewOrderItemUIBean(
+ val taskCode : String? = null,
+ val addressProperty : String? = null,
+ val address : String? = null,
+ val distAddress : String? = null,
+ val serviceTypeName : String? = null,
+ val orderSource : String? = null,
+ val settleType : Int? = null,
+ val currentOrderState : String? = null,
+ val supplierAuditStr : String? = null, //审核状态描述
+ val reserveTime : String? = null, //预约时间
+ val expectArriveTime : String? = null, //预计到达时间
+ val auditFailReason : String? = null, //审核失败原因
+ val bottomTextString : String? = null, //底部文字
+ val hasReplaceBatteryCapable : Int? = null, //是否具有更换电瓶的能力
+ val uiType : Int? = 1, //1 服务中 2 历史订单 3 接单页 4 待服务页 5 进行中首页
+)
+
+// 1 服务中 2 历史订单
+@Composable
+fun NewOrderItem(uiBean : NewOrderItemUIBean?,
+ goInServicing : () -> Unit = {},
+ goHistory : () -> Unit = {},
+ goDetail : () -> Unit = {},
+ goNextPage : () -> Unit = {},
+ goAccept : () -> Unit = {},
+ goOrderPhoto : () -> Unit = {},
+ goEle : () -> Unit = {},
+ goChange : () -> Unit = {}) {
+ val context = LocalContext.current
+ val horizontalPadding = 26.dp
+ Card(modifier = Modifier
+ .fillMaxWidth()
+ .clickable {
+ if (uiBean?.uiType == NewOrderUiType.HISTORY) {
+ goHistory()
+ return@clickable
+ }
+ if (uiBean?.uiType == NewOrderUiType.IN_SERVICING_HOME || uiBean?.uiType == NewOrderUiType.PENDING) {
+ goDetail()
+ return@clickable
+ }
+ }
+ .background(color = bgColor),
+ colors = CardDefaults.cardColors().copy(containerColor = Color.White),
+ shape = RoundedCornerShape(8.dp),
+ border = BorderStroke(width = 0.6.dp, color = Color(0xFFE6E6E6))) {
+
+ NewOrderItemHead(uiBean = uiBean, goInServicing = goInServicing, goChange = goChange)
+
+ if (uiBean?.uiType == NewOrderUiType.HISTORY) {
+ Spacer(modifier = Modifier.height(15.dp))
+ Row(modifier = Modifier
+ .fillMaxWidth()
+ .height(20.dp)
+ .padding(horizontal = horizontalPadding),
+ verticalAlignment = Alignment.CenterVertically,
+ horizontalArrangement = Arrangement.Absolute.SpaceBetween) {
+ Text(text = uiBean?.serviceTypeName ?: "",
+ color = black90,
+ fontWeight = FontWeight.SemiBold,
+ fontSize = 17.sp)
+ Text(uiBean?.currentOrderState ?: "",
+ color = Color(0xFFF19028),
+ fontWeight = FontWeight.Medium,
+ fontSize = 13.sp)
+ }
+ } else {
+ Spacer(modifier = Modifier.height(15.dp))
+ Row(modifier = Modifier
+ .fillMaxWidth()
+ .height(20.dp)
+ .clickable { uiBean?.taskCode.copy(context = context) }
+ .padding(horizontal = horizontalPadding),
+ verticalAlignment = Alignment.CenterVertically) {
+ Text("单号", color = black50, fontWeight = FontWeight.Medium, fontSize = 13.sp)
+ Spacer(modifier = Modifier.width(10.dp))
+ Text(uiBean?.taskCode ?: "",
+ color = black90,
+ fontWeight = FontWeight.SemiBold,
+ fontSize = 16.sp,
+ modifier = Modifier.wrapContentSize(align = Alignment.Center))
+ Spacer(modifier = Modifier.width(10.dp))
+ Icon(imageVector = ImageVector.vectorResource(R.drawable.sv_new_copy),
+ contentDescription = null,
+ modifier = Modifier.size(13.dp))
+ }
+ }
+
+ Spacer(modifier = Modifier.height(10.dp))
+ Row(modifier = Modifier
+ .fillMaxWidth()
+ .padding(horizontal = horizontalPadding),
+ verticalAlignment = Alignment.CenterVertically) {
+ AsyncImage(model = R.drawable.sv_settle_month.takeIf { uiBean?.settleType == 1 }
+ ?: R.drawable.sv_settle_cash,
+ contentDescription = null,
+ modifier = Modifier.size(31.dp, 16.dp))
+ Spacer(modifier = Modifier.width(10.dp))
+ Text(uiBean?.orderSource ?: "",
+ color = Color.Black,
+ fontWeight = FontWeight.Medium,
+ fontSize = 12.sp)
+ Spacer(Modifier.weight(1f))
+ Text(uiBean?.addressProperty ?: "",
+ color = Color.Black,
+ fontWeight = FontWeight.SemiBold,
+ fontSize = 14.sp,
+ modifier = Modifier.wrapContentSize(align = Alignment.Center))
+ }
+
+ if (! uiBean?.reserveTime.isNullOrBlank()) {
+ Spacer(modifier = Modifier.height(4.dp))
+ Row(modifier = Modifier
+ .fillMaxWidth()
+ .height(20.dp)
+ .padding(horizontal = horizontalPadding),
+ verticalAlignment = Alignment.CenterVertically) {
+ AsyncImage(model = R.drawable.sv_order_reserve,
+ contentDescription = null,
+ modifier = Modifier.size(31.dp, 16.dp))
+ Spacer(modifier = Modifier.width(10.dp))
+ Text(uiBean?.reserveTime ?: "",
+ color = Color(0xFF354E9E),
+ fontWeight = FontWeight.Medium,
+ fontSize = 12.sp)
+ }
+ }
+
+
+ Spacer(modifier = Modifier.height(10.dp))
+ if (uiBean?.distAddress.isNullOrBlank()) {
+
+ Row(modifier = Modifier
+ .fillMaxWidth()
+ .padding(horizontal = 18.dp)
+ .background(color = Color(0x80F8FBFF), shape = RoundedCornerShape(4.dp))
+ .border(width = 0.3.dp, color = Color(0xFFD8E4F0), shape = RoundedCornerShape(4.dp))
+ .padding(horizontal = 12.dp, vertical = 10.dp),
+ verticalAlignment = Alignment.CenterVertically) {
+
+ AsyncImage(model = R.drawable.sv_rescuing,
+ contentDescription = null,
+ modifier = Modifier.size(16.dp))
+ Spacer(modifier = Modifier.width(10.dp))
+ Text(uiBean?.address ?: "",
+ maxLines = 2,
+ overflow = TextOverflow.Ellipsis,
+ fontSize = 12.5.sp,
+ fontWeight = FontWeight.Medium,
+ color = black90)
+ }
+ } else {
+ Row(modifier = Modifier
+ .fillMaxWidth()
+ .height(140.dp)
+ .padding(horizontal = 18.dp)
+ .background(color = Color(0x80F8FBFF), shape = RoundedCornerShape(4.dp))
+ .border(width = 0.3.dp, color = Color(0xFFD8E4F0), shape = RoundedCornerShape(4.dp))
+ .padding(horizontal = 12.dp, vertical = 5.dp)) {
+
+ Column(horizontalAlignment = Alignment.CenterHorizontally,
+ verticalArrangement = Arrangement.SpaceAround) {
+ Spacer(modifier = Modifier.height(10.dp))
+ AsyncImage(model = R.drawable.sv_rescuing,
+ contentDescription = null,
+ modifier = Modifier.size(16.dp))
+
+ if (! uiBean?.distAddress.isNullOrBlank()) {
+ VerticalDivider(modifier = Modifier.weight(1f), color = Color(0xFFC1C1C1))
+
+ AsyncImage(model = R.drawable.sv_dist,
+ contentDescription = null,
+ modifier = Modifier.size(16.dp))
+ Spacer(modifier = Modifier.height(10.dp))
+ }
+
+ }
+
+ Spacer(modifier = Modifier.width(18.dp))
+
+ Column(verticalArrangement = Arrangement.SpaceAround,
+ modifier = Modifier.fillMaxHeight()) {
+ Text(uiBean?.address ?: "",
+ maxLines = 2,
+ overflow = TextOverflow.Ellipsis,
+ fontSize = 12.5.sp,
+ fontWeight = FontWeight.Medium,
+ color = black90)
+ if (uiBean?.distAddress.isNullOrBlank() == false) {
+ HorizontalDivider(modifier = Modifier
+ .alpha(0.1f)
+ .padding(vertical = 5.dp))
+ Text(uiBean?.distAddress ?: "",
+ maxLines = 2,
+ overflow = TextOverflow.Ellipsis,
+ fontSize = 12.5.sp,
+ fontWeight = FontWeight.Medium,
+ color = black90)
+ }
+ }
+ }
+ }
+
+ if (! uiBean?.auditFailReason.isNullOrBlank()) {
+ Row(modifier = Modifier
+ .fillMaxWidth()
+ .padding(horizontal = 18.dp)
+ .background(color = Color(0xFFFFF7EE), shape = RoundedCornerShape(4.dp))
+ .padding(horizontal = 15.dp, vertical = 10.dp),
+ verticalAlignment = Alignment.CenterVertically) {
+ Icon(imageVector = ImageVector.vectorResource(R.drawable.sv_warn_yellow),
+ contentDescription = "",
+ tint = Color(0xFFFF8F37))
+ Spacer(modifier = Modifier.width(7.dp))
+ Text(uiBean?.auditFailReason ?: "",
+ color = Color(0xFFFF8F37),
+ fontWeight = FontWeight.Medium,
+ fontSize = 12.sp)
+ }
+ }
+
+ if (uiBean?.uiType == NewOrderUiType.HISTORY) {
+ Spacer(modifier = Modifier.height(10.dp))
+
+ Row(modifier = Modifier
+ .fillMaxWidth()
+ .padding(horizontal = 20.dp),
+ horizontalArrangement = Arrangement.SpaceAround) {
+ AsyncImage(model = R.drawable.sv_order_photo,
+ contentDescription = null,
+ modifier = Modifier
+ .size(93.dp, 25.dp)
+ .clickable { goOrderPhoto() },
+ contentScale = ContentScale.None)
+
+ AsyncImage(model = R.drawable.sv_order_ele,
+ contentDescription = null,
+ modifier = Modifier
+ .size(93.dp, 25.dp)
+ .clickable { goEle() },
+ contentScale = ContentScale.None)
+
+ if (uiBean.hasReplaceBatteryCapable == 1) {
+ AsyncImage(model = R.drawable.sv_order_change,
+ contentDescription = null,
+ modifier = Modifier
+ .size(93.dp, 25.dp)
+ .clickable {
+ goChange()
+ },
+ contentScale = ContentScale.None)
+ }
+ }
+ }
+
+
+ if (uiBean?.uiType == NewOrderUiType.SERVICING || uiBean?.uiType == NewOrderUiType.ACCEPT) {
+ Spacer(modifier = Modifier.height(10.dp))
+ CommonButton(text = uiBean?.bottomTextString ?: "") {
+ if (uiBean?.uiType == NewOrderUiType.ACCEPT) {
+ goAccept()
+ return@CommonButton
+ }
+ goNextPage()
+ }
+ }
+
+ Spacer(modifier = Modifier.height(20.dp))
+ }
+}
+
+@Composable
+fun NewOrderItemHead(uiBean : NewOrderItemUIBean?,
+ goInServicing : () -> Unit = {},
+ goChange : () -> Unit = {}) {
+ when (uiBean?.uiType) {
+ NewOrderUiType.IN_SERVICING_HOME, NewOrderUiType.PENDING, NewOrderUiType.SERVICING -> {
+ Row(modifier = Modifier
+ .fillMaxWidth()
+ .clickable {
+ if (uiBean?.uiType == NewOrderUiType.IN_SERVICING_HOME) {
+ goInServicing()
+ return@clickable
+ }
+ if (uiBean?.uiType == NewOrderUiType.PENDING) {
+ goChange()
+ return@clickable
+ }
+ }
+ .padding(horizontal = 5.dp, vertical = 3.dp)
+ .background(color = Color(0xFFF9FDFF),
+ shape = RoundedCornerShape(topStart = 5.dp,
+ topEnd = 5.dp,
+ bottomStart = 0.dp,
+ bottomEnd = 0.dp))
+ .padding(top = 14.dp, bottom = 8.dp, start = 21.dp, end = 16.dp),
+ verticalAlignment = Alignment.CenterVertically) {
+ Text(uiBean.serviceTypeName ?: "",
+ color = black90,
+ fontWeight = FontWeight.Medium,
+ fontSize = 17.sp)
+ Spacer(Modifier.weight(1f))
+
+
+ if (uiBean?.uiType == NewOrderUiType.SERVICING) {
+ Text("预计到达:",
+ color = Color(0xFFF19028),
+ fontWeight = FontWeight.Medium,
+ fontSize = 13.sp)
+ Spacer(modifier = Modifier.width(8.dp))
+ Text("${
+ uiBean.expectArriveTime?.split(" ")?.get(1)
+ }", color = Color(0xFFF19028), fontWeight = FontWeight.Medium, fontSize = 13.sp)
+ } else {
+ Text(uiBean?.currentOrderState ?: "",
+ color = Color(0xFFF19028),
+ fontWeight = FontWeight.Medium,
+ fontSize = 13.sp)
+ Spacer(modifier = Modifier.width(8.dp))
+
+ Icon(Icons.Default.KeyboardArrowRight,
+ contentDescription = null,
+ modifier = Modifier.size(13.dp),
+ tint = Color.Gray)
+ }
+ }
+ }
+
+ NewOrderUiType.HISTORY -> {
+ Row(modifier = Modifier
+ .fillMaxWidth()
+ .padding(horizontal = 5.dp, vertical = 3.dp)
+ .background(color = Color(0xFFF9FDFF),
+ shape = RoundedCornerShape(topStart = 5.dp,
+ topEnd = 5.dp,
+ bottomStart = 0.dp,
+ bottomEnd = 0.dp))
+ .padding(top = 14.dp, bottom = 8.dp, start = 21.dp, end = 16.dp),
+ verticalAlignment = Alignment.CenterVertically) {
+ Text(uiBean?.taskCode ?: "",
+ color = black90,
+ fontWeight = FontWeight.Medium,
+ fontSize = 17.sp)
+ Spacer(modifier = Modifier.width(9.dp))
+ Icon(imageVector = ImageVector.vectorResource(R.drawable.sv_new_copy),
+ contentDescription = null,
+ modifier = Modifier.size(13.dp))
+ Spacer(Modifier.weight(1f))
+ Box(modifier = Modifier
+ .background(color = Color(0x99FFEBEB), shape = RoundedCornerShape(4.dp))
+ .border(width = 0.5.dp,
+ color = Color(0xFFFFC7B8),
+ shape = RoundedCornerShape(4.dp))
+ .padding(horizontal = 4.dp, vertical = 2.dp)) {
+ Text(uiBean?.supplierAuditStr ?: "",
+ color = Color(0xFFFF5656),
+ fontWeight = FontWeight.Normal,
+ fontSize = 10.sp,
+ style = TextStyle.Default.copy())
+ }
+ Spacer(modifier = Modifier.width(8.dp))
+ Icon(Icons.Default.KeyboardArrowRight,
+ contentDescription = null,
+ modifier = Modifier.size(13.dp),
+ tint = Color.Gray)
+ }
+ }
+ }
+
+ HorizontalDivider(modifier = Modifier.alpha(0.1f))
+}
\ No newline at end of file
diff --git a/servicing/src/main/java/com/za/ui/servicing/go_accident/GoAccidentSiteActivity.kt b/servicing/src/main/java/com/za/ui/servicing/go_accident/GoAccidentSiteActivity.kt
index 293444e..9c124bc 100644
--- a/servicing/src/main/java/com/za/ui/servicing/go_accident/GoAccidentSiteActivity.kt
+++ b/servicing/src/main/java/com/za/ui/servicing/go_accident/GoAccidentSiteActivity.kt
@@ -3,50 +3,28 @@ package com.za.ui.servicing.go_accident
import android.os.Bundle
import android.os.Handler
import android.os.Looper
-import androidx.compose.foundation.background
-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.fillMaxSize
-import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
-import androidx.compose.foundation.layout.size
-import androidx.compose.foundation.layout.width
-import androidx.compose.foundation.layout.wrapContentHeight
-import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.RoundedCornerShape
-import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.BottomSheetScaffold
-import androidx.compose.material3.Button
-import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.ExperimentalMaterial3Api
-import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.SheetValue
-import androidx.compose.material3.Text
import androidx.compose.material3.rememberBottomSheetScaffoldState
import androidx.compose.material3.rememberStandardBottomSheetState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.remember
-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.platform.LocalContext
-import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp
-import androidx.compose.ui.unit.sp
import androidx.compose.ui.viewinterop.AndroidView
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleEventObserver
import androidx.lifecycle.compose.LocalLifecycleOwner
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.viewmodel.compose.viewModel
-import coil.compose.AsyncImage
import com.amap.api.location.AMapLocationClient
import com.amap.api.maps.CameraUpdateFactory
import com.amap.api.maps.MapView
@@ -56,14 +34,16 @@ import com.amap.api.maps.model.LatLngBounds
import com.amap.api.maps.model.MarkerOptions
import com.amap.api.maps.model.PolylineOptions
import com.za.base.BaseActivity
-import com.za.base.theme.headBgColor
import com.za.base.view.CommonDialog
import com.za.common.GlobalData
import com.za.common.util.ImageUtil
-import com.za.ext.copy
+import com.za.ext.convertToFlowName
import com.za.ext.finish
import com.za.ext.goNextPage
import com.za.servicing.R
+import com.za.ui.new_order.NewOrderItem
+import com.za.ui.new_order.NewOrderItemUIBean
+import com.za.ui.new_order.NewOrderUiType
import com.za.ui.servicing.view.InServicingHeadView
import com.za.ui.servicing.view.ServiceOperation
@@ -137,163 +117,20 @@ fun GoAccidentSiteScreen(vm : GoAccidentSiteVm = viewModel()) {
orderInfo = uiState.value.orderInfo)
},
sheetContent = {
- Column(modifier = Modifier
- .fillMaxWidth()
- .wrapContentHeight()
- .verticalScroll(rememberScrollState())) {
- Box(modifier = Modifier
- .fillMaxWidth()
- .padding(vertical = 8.dp),
- contentAlignment = Alignment.Center) {
- Box(modifier = Modifier
- .width(32.dp)
- .height(4.dp)
- .background(color = Color(0xFFE0E0E0), shape = RoundedCornerShape(2.dp)))
- }
-
- Row(modifier = Modifier
- .fillMaxWidth()
- .padding(horizontal = 16.dp, vertical = 12.dp),
- horizontalArrangement = Arrangement.SpaceBetween,
- verticalAlignment = Alignment.CenterVertically) {
- Text(text = if (! uiState.value.estimatedArrivalTime.isNullOrBlank()) "预计到达: ${uiState.value.estimatedArrivalTime}"
- else "计算中...", color = Color(0xFF666666), fontSize = 14.sp)
-
- Text(text = if (uiState.value.remainingDistance > 0) "距离救援地: %.1fkm".format(
- uiState.value.remainingDistance / 1000f)
- else "计算中...", color = Color(0xFFFF4D4F), fontSize = 14.sp)
- }
-
- HorizontalDivider(modifier = Modifier
- .fillMaxWidth()
- .alpha(0.1f))
-
- Column(modifier = Modifier
- .fillMaxWidth()
- .padding(horizontal = 16.dp, vertical = 12.dp)) {
-
- Text(text = uiState.value.orderInfo?.serviceTypeName ?: "",
- fontSize = 18.sp,
- fontWeight = FontWeight.Bold,
- color = Color.Black)
-
- Spacer(modifier = Modifier.height(8.dp))
-
- // 订单标签
- Row(verticalAlignment = Alignment.CenterVertically,
- horizontalArrangement = Arrangement.spacedBy(8.dp)) {
- Box(modifier = Modifier
- .background(Color(0xFF9BA1B2), RoundedCornerShape(4.dp))
- .padding(horizontal = 6.dp, vertical = 2.dp)) {
- Text(text = "月结".takeIf { uiState.value.orderInfo?.settleType == 1 }
- ?: "现金", color = Color.White, fontSize = 12.sp)
- }
-
- Text(text = uiState.value.orderInfo?.orderSource ?: "",
- color = Color.Black,
- fontSize = 12.sp)
-
- Text(text = uiState.value.orderInfo?.addressProperty ?: "",
- color = Color(0xFFFD8205),
- fontSize = 12.sp,
- fontWeight = FontWeight.Medium)
- }
- Spacer(modifier = Modifier.height(12.dp))
-
- Row(verticalAlignment = Alignment.CenterVertically,
- modifier = Modifier.clickable {
- uiState.value.orderInfo?.taskCode?.copy(context)
- }) {
- Text(text = "单号", color = Color(0xFF999999), fontSize = 13.sp)
-
- Spacer(modifier = Modifier.width(8.dp))
-
- Text(text = uiState.value.orderInfo?.taskCode ?: "",
- color = Color(0xFF666666),
- fontSize = 14.sp)
-
- Spacer(modifier = Modifier.width(8.dp))
-
- AsyncImage(model = R.drawable.sv_copy,
- contentDescription = "copy",
- modifier = Modifier.size(16.dp))
- }
-
- Spacer(modifier = Modifier.height(12.dp))
-
- Column(verticalArrangement = Arrangement.spacedBy(12.dp)) {
- Row(verticalAlignment = Alignment.Top,
- modifier = Modifier
- .fillMaxWidth()
- .clickable {
- uiState.value.orderInfo?.let { order ->
- if (order.lat != null && order.lat != 0.0 && order.lng != null && order.lng != 0.0) {
- mapView.map.animateCamera(CameraUpdateFactory.newLatLngZoom(
- LatLng(order.lat !!, order.lng !!),
- 16f))
- }
- }
- }) {
- AsyncImage(model = R.drawable.sv_rescuing,
- contentDescription = "rescue",
- modifier = Modifier.size(16.dp))
-
- Spacer(modifier = Modifier.width(8.dp))
-
- Text(text = uiState.value.orderInfo?.address ?: "",
- color = Color.Black,
- fontSize = 15.sp,
- fontWeight = FontWeight.Medium,
- modifier = Modifier.weight(1f))
- }
-
- if (! uiState.value.orderInfo?.distAddress.isNullOrBlank()) {
- Row(verticalAlignment = Alignment.Top,
- modifier = Modifier
- .fillMaxWidth()
- .clickable {
- uiState.value.orderInfo?.let { order ->
- if (order.distLat != null && order.distLat != 0.0 && order.distLng != null && order.distLng != 0.0) {
- mapView.map.animateCamera(CameraUpdateFactory.newLatLngZoom(
- LatLng(order.distLat !!, order.distLng !!),
- 16f))
- }
- }
- }) {
- AsyncImage(model = R.drawable.sv_dist,
- contentDescription = "destination",
- modifier = Modifier.size(16.dp))
-
- Spacer(modifier = Modifier.width(8.dp))
-
- Text(text = uiState.value.orderInfo?.distAddress ?: "",
- color = Color.Black,
- fontSize = 15.sp,
- fontWeight = FontWeight.Medium,
- modifier = Modifier.weight(1f))
- }
- }
- }
- }
-
- Button(onClick = {
- vm.dispatch(GoAccidentSiteVm.Action.UpdateState(uiState.value.copy(
- isGoNextPageDialog = true)))
- },
- modifier = Modifier
- .fillMaxWidth()
- .height(44.dp)
- .padding(horizontal = 16.dp),
- colors = ButtonDefaults.buttonColors(containerColor = headBgColor),
- shape = RoundedCornerShape(8.dp)) {
- Text(text = "到达事发地",
- color = Color.White,
- fontSize = 16.sp,
- fontWeight = FontWeight.Medium)
- }
-
- Spacer(modifier = Modifier.height(16.dp))
- }
+ val uiBean = NewOrderItemUIBean(taskCode = uiState.value.orderInfo?.taskCode,
+ addressProperty = uiState.value.orderInfo?.addressProperty,
+ address = uiState.value.orderInfo?.address,
+ distAddress = uiState.value.orderInfo?.distAddress,
+ serviceTypeName = uiState.value.orderInfo?.serviceTypeName,
+ orderSource = uiState.value.orderInfo?.orderSource,
+ settleType = uiState.value.orderInfo?.settleType,
+ bottomTextString = "到达事发地",
+ expectArriveTime = uiState.value.orderInfo?.expectArriveTime,
+ uiType = NewOrderUiType.SERVICING)
+ NewOrderItem(uiBean, goNextPage = {
+ vm.dispatch(GoAccidentSiteVm.Action.UpdateState(uiState.value.copy(
+ isGoNextPageDialog = true)))
+ })
},
sheetPeekHeight = 180.dp,
sheetShape = RoundedCornerShape(topStart = 12.dp, topEnd = 12.dp),
diff --git a/servicing/src/main/java/com/za/ui/servicing/go_accident/GoAccidentSiteVm.kt b/servicing/src/main/java/com/za/ui/servicing/go_accident/GoAccidentSiteVm.kt
index 9da2acb..0dc6224 100644
--- a/servicing/src/main/java/com/za/ui/servicing/go_accident/GoAccidentSiteVm.kt
+++ b/servicing/src/main/java/com/za/ui/servicing/go_accident/GoAccidentSiteVm.kt
@@ -1,6 +1,5 @@
package com.za.ui.servicing.go_accident
-import androidx.lifecycle.viewModelScope
import com.amap.api.maps.AMapUtils
import com.amap.api.maps.model.BitmapDescriptorFactory
import com.amap.api.maps.model.LatLng
@@ -29,11 +28,7 @@ import com.za.offline.OfflineUpdateTaskBean
import com.za.service.location.ZdLocationManager
import com.za.servicing.R
import kotlinx.coroutines.Job
-import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.MutableStateFlow
-import kotlinx.coroutines.flow.update
-import kotlinx.coroutines.isActive
-import kotlinx.coroutines.launch
import java.text.SimpleDateFormat
import java.util.Calendar
import java.util.Date
diff --git a/servicing/src/main/java/com/za/ui/servicing/go_to_destination/GoToDestinationActivity.kt b/servicing/src/main/java/com/za/ui/servicing/go_to_destination/GoToDestinationActivity.kt
index 135dc0f..3081594 100644
--- a/servicing/src/main/java/com/za/ui/servicing/go_to_destination/GoToDestinationActivity.kt
+++ b/servicing/src/main/java/com/za/ui/servicing/go_to_destination/GoToDestinationActivity.kt
@@ -67,6 +67,10 @@ import com.za.ext.copy
import com.za.ext.finish
import com.za.ext.goNextPage
import com.za.servicing.R
+import com.za.ui.new_order.NewOrderItem
+import com.za.ui.new_order.NewOrderItemUIBean
+import com.za.ui.new_order.NewOrderUiType
+import com.za.ui.new_order.NewOrderVm
import com.za.ui.servicing.view.InServicingHeadView
import com.za.ui.servicing.view.ServiceOperation
@@ -179,168 +183,21 @@ fun GoToDestinationScreen(vm : GoToDestinationVm = viewModel()) {
orderInfo = orderInfo)
},
sheetContent = {
- Column(modifier = Modifier
- .fillMaxWidth()
- .wrapContentHeight()
- .verticalScroll(rememberScrollState())) { // 滑动指示器
- Box(modifier = Modifier
- .fillMaxWidth()
- .padding(vertical = 8.dp),
- contentAlignment = Alignment.Center) {
- Box(modifier = Modifier
- .width(32.dp)
- .height(4.dp)
- .background(color = Color(0xFFE0E0E0), shape = RoundedCornerShape(2.dp)))
- }
+ val uiBean = NewOrderItemUIBean(taskCode = uiState.value.orderInfo?.taskCode,
+ addressProperty = uiState.value.orderInfo?.addressProperty,
+ address = uiState.value.orderInfo?.address,
+ distAddress = uiState.value.orderInfo?.distAddress,
+ serviceTypeName = uiState.value.orderInfo?.serviceTypeName,
+ orderSource = uiState.value.orderInfo?.orderSource,
+ settleType = uiState.value.orderInfo?.settleType,
+ expectArriveTime = uiState.value.orderInfo?.expectArriveTime,
+ bottomTextString = "到达目的地",
+ uiType = NewOrderUiType.SERVICING)
+ NewOrderItem(uiBean, goNextPage = {
+ vm.dispatch(GoToDestinationVm.Action.UpdateState(uiState.value.copy(
+ isGoNextPageDialog = true)))
+ })
- // 距离和时间信息
- Row(modifier = Modifier
- .fillMaxWidth()
- .padding(horizontal = 16.dp, vertical = 12.dp),
- horizontalArrangement = Arrangement.SpaceBetween,
- verticalAlignment = Alignment.CenterVertically) {
- Text(text = if (estimatedTime.isNotEmpty()) "预计到达: $estimatedTime"
- else "计算中...", color = Color(0xFF666666), fontSize = 14.sp)
-
- Text(text = if (remainingDistance > 0) "目的地距离: %.1fkm".format(
- remainingDistance / 1000f)
- else "计算中...", color = Color(0xFFFF4D4F), fontSize = 14.sp)
- }
-
- // 使用 HorizontalDivider 替代 Box
- HorizontalDivider(modifier = Modifier
- .fillMaxWidth()
- .alpha(0.1f))
-
- // 订单信息
- Column(modifier = Modifier
- .fillMaxWidth()
- .padding(horizontal = 16.dp, vertical = 12.dp)) {
- Text(text = uiState.value.orderInfo?.serviceTypeName ?: "",
- fontSize = 18.sp,
- fontWeight = FontWeight.Bold,
- color = Color.Black)
- Spacer(modifier = Modifier.height(8.dp))
- // 订单标签
- Row(verticalAlignment = Alignment.CenterVertically,
- horizontalArrangement = Arrangement.spacedBy(8.dp)) {
- Box(modifier = Modifier
- .background(Color(0xFF9BA1B2), RoundedCornerShape(4.dp))
- .padding(horizontal = 6.dp, vertical = 2.dp)) {
- Text(text = "月结".takeIf { uiState.value.orderInfo?.settleType == 1 }
- ?: "现金", color = Color.White, fontSize = 12.sp)
- }
-
- Text(text = uiState.value.orderInfo?.orderSource ?: "",
- color = Color.Black,
- fontSize = 12.sp)
-
- Text(text = uiState.value.orderInfo?.addressProperty ?: "",
- color = Color(0xFFFD8205),
- fontSize = 12.sp,
- fontWeight = FontWeight.Medium)
- }
-
- Spacer(modifier = Modifier.height(12.dp))
-
- // 订单号
- Row(verticalAlignment = Alignment.CenterVertically,
- modifier = Modifier.clickable {
- uiState.value.orderInfo?.taskCode?.copy(context)
- }) {
- Text(text = "单号", color = Color(0xFF999999), fontSize = 13.sp)
-
- Spacer(modifier = Modifier.width(8.dp))
-
- Text(text = uiState.value.orderInfo?.taskCode ?: "",
- color = Color(0xFF666666),
- fontSize = 14.sp)
-
- Spacer(modifier = Modifier.width(8.dp))
-
- AsyncImage(model = R.drawable.sv_copy,
- contentDescription = "copy",
- modifier = Modifier.size(16.dp))
- }
-
- Spacer(modifier = Modifier.height(12.dp))
-
- // 地址信息
- Column(verticalArrangement = Arrangement.spacedBy(12.dp)) { // 救援地
- Row(verticalAlignment = Alignment.Top,
- modifier = Modifier
- .fillMaxWidth()
- .clickable {
- uiState.value.orderInfo?.let { order ->
- if (order.lat != null && order.lat != 0.0 && order.lng != null && order.lng != 0.0) {
- mapView.map.animateCamera(CameraUpdateFactory.newLatLngZoom(
- LatLng(order.lat !!, order.lng !!),
- 16f))
- }
- }
- }) {
- AsyncImage(model = R.drawable.sv_rescuing,
- contentDescription = "rescue",
- modifier = Modifier.size(16.dp))
-
- Spacer(modifier = Modifier.width(8.dp))
-
- Text(text = uiState.value.orderInfo?.address ?: "",
- color = Color.Black,
- fontSize = 15.sp,
- fontWeight = FontWeight.Medium,
- modifier = Modifier.weight(1f))
- }
-
- // 目的地
- if (! uiState.value.orderInfo?.distAddress.isNullOrBlank()) {
- Row(verticalAlignment = Alignment.Top,
- modifier = Modifier
- .fillMaxWidth()
- .clickable {
- uiState.value.orderInfo?.let { order ->
- if (order.distLat != null && order.distLat != 0.0 && order.distLng != null && order.distLng != 0.0) {
- mapView.map.animateCamera(CameraUpdateFactory.newLatLngZoom(
- LatLng(order.distLat !!, order.distLng !!),
- 16f))
- }
- }
- }) {
- AsyncImage(model = R.drawable.sv_dist,
- contentDescription = "destination",
- modifier = Modifier.size(16.dp))
-
- Spacer(modifier = Modifier.width(8.dp))
-
- Text(text = uiState.value.orderInfo?.distAddress ?: "",
- color = Color.Black,
- fontSize = 15.sp,
- fontWeight = FontWeight.Medium,
- modifier = Modifier.weight(1f))
- }
- }
- }
- }
-
- // 到达按钮 - 移除外层 Column,简化布局
- Button(onClick = {
- vm.dispatch(GoToDestinationVm.Action.UpdateState(uiState.value.copy(
- isGoNextPageDialog = true)))
- },
- modifier = Modifier
- .fillMaxWidth()
- .height(44.dp)
- .padding(horizontal = 16.dp),
- colors = ButtonDefaults.buttonColors(containerColor = headBgColor),
- shape = RoundedCornerShape(8.dp)) {
- Text(text = "到达目的地",
- color = Color.White,
- fontSize = 16.sp,
- fontWeight = FontWeight.Medium)
- }
-
- Spacer(modifier = Modifier.height(16.dp))
- }
},
sheetPeekHeight = 180.dp,
sheetShape = RoundedCornerShape(topStart = 12.dp, topEnd = 12.dp),
diff --git a/servicing/src/main/java/com/za/ui/servicing/wait_to_start/WaitToStartActivity.kt b/servicing/src/main/java/com/za/ui/servicing/wait_to_start/WaitToStartActivity.kt
index f6cd63b..600f041 100644
--- a/servicing/src/main/java/com/za/ui/servicing/wait_to_start/WaitToStartActivity.kt
+++ b/servicing/src/main/java/com/za/ui/servicing/wait_to_start/WaitToStartActivity.kt
@@ -68,6 +68,10 @@ import com.za.ext.finish
import com.za.ext.goNextPage
import com.za.ext.navigationActivity
import com.za.servicing.R
+import com.za.ui.new_order.NewOrderItem
+import com.za.ui.new_order.NewOrderItemUIBean
+import com.za.ui.new_order.NewOrderUiType
+import com.za.ui.servicing.go_to_destination.GoToDestinationVm
import com.za.ui.servicing.inservice_people_confirm.ServicePeopleConfirmActivity
import com.za.ui.servicing.view.InServicingHeadView
import com.za.ui.servicing.view.ServiceOperation
@@ -163,170 +167,25 @@ fun WaitToStartScreen(vm : WaitToStartVm = viewModel()) {
orderInfo = uiState.value.orderInfo)
},
sheetContent = {
- Column(modifier = Modifier
- .fillMaxWidth()
- .wrapContentHeight()
- .verticalScroll(rememberScrollState())) { // 滑动指示器
- Box(modifier = Modifier
- .fillMaxWidth()
- .padding(vertical = 8.dp),
- contentAlignment = Alignment.Center) {
- Box(modifier = Modifier
- .width(32.dp)
- .height(4.dp)
- .background(color = Color(0xFFE0E0E0), shape = RoundedCornerShape(2.dp)))
+
+ val uiBean = NewOrderItemUIBean(taskCode = uiState.value.orderInfo?.taskCode,
+ addressProperty = uiState.value.orderInfo?.addressProperty,
+ address = uiState.value.orderInfo?.address,
+ distAddress = uiState.value.orderInfo?.distAddress,
+ serviceTypeName = uiState.value.orderInfo?.serviceTypeName,
+ orderSource = uiState.value.orderInfo?.orderSource,
+ settleType = uiState.value.orderInfo?.settleType,
+ expectArriveTime = uiState.value.orderInfo?.expectArriveTime,
+ bottomTextString = "发车",
+ uiType = NewOrderUiType.SERVICING)
+ NewOrderItem(uiBean, goNextPage = {
+ if (! GlobalData.isMaster && GlobalData.driverInfoBean != null && GlobalData.driverInfoBean?.authStatus == 1) {
+ vm.dispatch(WaitToStartVm.Action.UpdateState(uiState.value.copy(
+ showServicePeopleConfirmDialog = true)))
+ return@NewOrderItem
}
-
- // 距离和时间信息
- Row(modifier = Modifier
- .fillMaxWidth()
- .padding(horizontal = 16.dp, vertical = 12.dp),
- horizontalArrangement = Arrangement.SpaceBetween,
- verticalAlignment = Alignment.CenterVertically) {
- Text(text = if (uiState.value.estimatedArrivalTime.isNotEmpty()) "预计到达: ${uiState.value.estimatedArrivalTime}"
- else "计算中...", color = Color(0xFF666666), fontSize = 14.sp)
-
- Text(text = if (uiState.value.remainingDistance > 0) "距离救援地: %.1fkm".format(
- uiState.value.remainingDistance / 1000f)
- else "计算中...", color = Color(0xFFFF4D4F), fontSize = 14.sp)
- }
-
- HorizontalDivider(modifier = Modifier
- .fillMaxWidth()
- .alpha(0.1f))
-
- // 订单信息
- Column(modifier = Modifier
- .fillMaxWidth()
- .padding(horizontal = 16.dp, vertical = 12.dp)) { // 订单类型
- Text(text = uiState.value.orderInfo?.serviceTypeName ?: "",
- fontSize = 18.sp,
- fontWeight = FontWeight.Bold,
- color = Color.Black)
-
- Spacer(modifier = Modifier.height(8.dp))
-
- // 订单标签
- Row(verticalAlignment = Alignment.CenterVertically,
- horizontalArrangement = Arrangement.spacedBy(8.dp)) {
- Box(modifier = Modifier
- .background(Color(0xFF9BA1B2), RoundedCornerShape(4.dp))
- .padding(horizontal = 6.dp, vertical = 2.dp)) {
- Text(text = "月结".takeIf { uiState.value.orderInfo?.settleType == 1 }
- ?: "现金", color = Color.White, fontSize = 12.sp)
- }
-
- Text(text = uiState.value.orderInfo?.orderSource ?: "",
- color = Color.Black,
- fontSize = 12.sp)
-
- Text(text = uiState.value.orderInfo?.addressProperty ?: "",
- color = Color(0xFFFD8205),
- fontSize = 12.sp,
- fontWeight = FontWeight.Medium)
- }
-
- Spacer(modifier = Modifier.height(12.dp))
-
- // 订单号
- Row(verticalAlignment = Alignment.CenterVertically,
- modifier = Modifier.clickable {
- uiState.value.orderInfo?.taskCode?.copy(context)
- }) {
- Text(text = "单号", color = Color(0xFF999999), fontSize = 13.sp)
-
- Spacer(modifier = Modifier.width(8.dp))
-
- Text(text = uiState.value.orderInfo?.taskCode ?: "",
- color = Color(0xFF666666),
- fontSize = 14.sp)
-
- Spacer(modifier = Modifier.width(8.dp))
-
- AsyncImage(model = R.drawable.sv_copy,
- contentDescription = "copy",
- modifier = Modifier.size(16.dp))
- }
-
- Spacer(modifier = Modifier.height(16.dp))
-
- // 地址信息
- Column(verticalArrangement = Arrangement.spacedBy(16.dp)) { // 救援地
- Row(verticalAlignment = Alignment.Top,
- modifier = Modifier.clickable { // 点击救援地时移动地图到救援位置
- uiState.value.orderInfo?.let { order ->
- if (order.lat != null && order.lat != 0.0 && order.lng != null && order.lng != 0.0) {
- mapView.map.animateCamera(CameraUpdateFactory.newLatLngZoom(
- LatLng(order.lat !!, order.lng !!),
- 16f))
- }
- }
- }) {
- AsyncImage(model = R.drawable.sv_rescuing,
- contentDescription = "rescue",
- modifier = Modifier.size(16.dp))
-
- Spacer(modifier = Modifier.width(8.dp))
-
- Text(text = uiState.value.orderInfo?.address ?: "",
- color = Color.Black,
- fontSize = 15.sp,
- fontWeight = FontWeight.Medium)
- }
-
- // 目的地
- if (! uiState.value.orderInfo?.distAddress.isNullOrBlank()) {
- Row(verticalAlignment = Alignment.Top,
- modifier = Modifier.clickable { // 点击目的地时移动地图到目的地位置
- uiState.value.orderInfo?.let { order ->
- if (order.distLat != null && order.distLat != 0.0 && order.distLng != null && order.distLng != 0.0) {
- mapView.map.animateCamera(CameraUpdateFactory.newLatLngZoom(
- LatLng(order.distLat !!, order.distLng !!),
- 16f))
- }
- }
- }) {
- AsyncImage(model = R.drawable.sv_dist,
- contentDescription = "destination",
- modifier = Modifier.size(16.dp))
-
- Spacer(modifier = Modifier.width(8.dp))
-
- Text(text = uiState.value.orderInfo?.distAddress ?: "",
- color = Color.Black,
- fontSize = 15.sp,
- fontWeight = FontWeight.Medium)
- }
- }
- }
-
- Spacer(modifier = Modifier.height(16.dp))
-
- // 发车按钮
- Button(onClick = {
- if (! GlobalData.isMaster && GlobalData.driverInfoBean != null && GlobalData.driverInfoBean?.authStatus == 1) {
- vm.dispatch(WaitToStartVm.Action.UpdateState(uiState.value.copy(
- showServicePeopleConfirmDialog = true)))
- return@Button
- }
- vm.dispatch(WaitToStartVm.Action.UpdateState(uiState.value.copy(
- isGoNextPageDialog = true)))
- },
- modifier = Modifier
- .fillMaxWidth()
- .height(44.dp)
- .padding(horizontal = 16.dp),
- colors = ButtonDefaults.buttonColors(containerColor = headBgColor),
- shape = RoundedCornerShape(8.dp)) {
- Text(text = "发车",
- color = Color.White,
- fontSize = 16.sp,
- fontWeight = FontWeight.Medium)
- }
-
- Spacer(modifier = Modifier.height(16.dp))
- }
- }
+ vm.dispatch(WaitToStartVm.Action.UpdateState(uiState.value.copy(isGoNextPageDialog = true)))
+ })
},
sheetPeekHeight = 180.dp,
sheetShape = RoundedCornerShape(topStart = 12.dp, topEnd = 12.dp),
diff --git a/servicing/src/main/res/drawable/sv_new_copy.xml b/servicing/src/main/res/drawable/sv_new_copy.xml
new file mode 100644
index 0000000..bfee90d
--- /dev/null
+++ b/servicing/src/main/res/drawable/sv_new_copy.xml
@@ -0,0 +1,14 @@
+
+
+
diff --git a/servicing/src/main/res/drawable/sv_order_change.xml b/servicing/src/main/res/drawable/sv_order_change.xml
new file mode 100644
index 0000000..4af7ce3
--- /dev/null
+++ b/servicing/src/main/res/drawable/sv_order_change.xml
@@ -0,0 +1,81 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/servicing/src/main/res/drawable/sv_order_ele.xml b/servicing/src/main/res/drawable/sv_order_ele.xml
new file mode 100644
index 0000000..f63531e
--- /dev/null
+++ b/servicing/src/main/res/drawable/sv_order_ele.xml
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/servicing/src/main/res/drawable/sv_order_photo.xml b/servicing/src/main/res/drawable/sv_order_photo.xml
new file mode 100644
index 0000000..65bec8c
--- /dev/null
+++ b/servicing/src/main/res/drawable/sv_order_photo.xml
@@ -0,0 +1,132 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/servicing/src/main/res/drawable/sv_order_reserve.xml b/servicing/src/main/res/drawable/sv_order_reserve.xml
new file mode 100644
index 0000000..312d6b6
--- /dev/null
+++ b/servicing/src/main/res/drawable/sv_order_reserve.xml
@@ -0,0 +1,18 @@
+
+
+
+
diff --git a/servicing/src/main/res/drawable/sv_settle_cash.xml b/servicing/src/main/res/drawable/sv_settle_cash.xml
new file mode 100644
index 0000000..ce49af5
--- /dev/null
+++ b/servicing/src/main/res/drawable/sv_settle_cash.xml
@@ -0,0 +1,18 @@
+
+
+
+
diff --git a/servicing/src/main/res/drawable/sv_settle_month.xml b/servicing/src/main/res/drawable/sv_settle_month.xml
new file mode 100644
index 0000000..ac36941
--- /dev/null
+++ b/servicing/src/main/res/drawable/sv_settle_month.xml
@@ -0,0 +1,18 @@
+
+
+
+
diff --git a/servicing/src/main/res/layout/sign_activity_grid_paint.xml b/servicing/src/main/res/layout/sign_activity_grid_paint.xml
index 120f168..0fa3ff8 100644
--- a/servicing/src/main/res/layout/sign_activity_grid_paint.xml
+++ b/servicing/src/main/res/layout/sign_activity_grid_paint.xml
@@ -41,16 +41,46 @@
-
+ android:orientation="horizontal">
+
+
+
+
+
+
+
+