18034727885
2026-06-29 626842088516d56729c76d3a42dfa96e515cf804
修复问题
4个文件已删除
6个文件已添加
23个文件已修改
280 ■■■■■ 已修改文件
app/src/main/java/com/xw/yunwei/model/TaskNormalChargeModel.kt 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/xw/yunwei/model/TaskNormalCheckModel.kt 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/xw/yunwei/model/TaskNormalModel.kt 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/xw/yunwei/model/TaskNormalRepairModel.kt 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/xw/yunwei/ui/user/mine/scheduling/SchedulingVM.kt 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/xw/yunwei/ui/user/mine/upload/CertUploadVM.kt 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/xw/yunwei/ui/widget/CustomRefreshLayout.kt 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/xw/yunwei/ui/widget/DirectionRecyclerView.kt 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/xw/yunwei/ui/work/AMapFragment.kt 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/xw/yunwei/ui/work/car/manage/CarManageActivity.kt 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/xw/yunwei/ui/work/checkInMission/CheckInMissionPointsListActivity.kt 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/xw/yunwei/ui/work/site/SiteNavActivity.kt 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/xw/yunwei/ui/work/site/SiteNavVM.kt 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_scheduling.xml 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_site_nav.xml 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/fragment_task_list.xml 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/layout_normal_task_car_charge.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/layout_normal_task_car_clear_detail.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/layout_normal_task_car_nj_or_by_or_bx_detail.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/layout_normal_task_car_repair.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/layout_normal_task_car_repair_detail.xml 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/layout_normal_task_charge_detail.xml 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/layout_normal_task_check_detail.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/mipmap-xhdpi/ic_map_car_g.png 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/mipmap-xhdpi/ic_map_car_r.png 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/mipmap-xhdpi/ic_map_site_g.png 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/mipmap-xhdpi/ic_map_site_r.png 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/mipmap-xhdpi/img_work_report.png 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/mipmap-xxhdpi/ic_map_car_g.png 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/mipmap-xxhdpi/ic_map_car_r.png 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/mipmap-xxhdpi/ic_map_site_g.png 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/mipmap-xxhdpi/ic_map_site_r.png 补丁 | 查看 | 原始文档 | blame | 历史
common/src/main/java/com/xw/common/custom/ShowTextLinearLayout.kt 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/xw/yunwei/model/TaskNormalChargeModel.kt
@@ -1,6 +1,7 @@
package com.xw.yunwei.model
import com.google.gson.annotations.SerializedName
import com.xw.yunwei.extension.dateChangePattern
/**
 * 常规任务任务充电详情
@@ -175,4 +176,13 @@
     */
    @SerializedName("vehicleLocation")
    val vehicleLocation: String? = null
)
){
    //获取显示开始充电时间
    fun getShowStartTime(): String?{
        return startTime?.dateChangePattern("yyyy-MM-dd HH:mm:ss","yyyy/MM/dd HH:mm:ss")
    }
    //获取显示结束充电时间
    fun getShowEndTime(): String?{
        return endTime?.dateChangePattern("yyyy-MM-dd HH:mm:ss","yyyy/MM/dd HH:mm:ss")
    }
}
app/src/main/java/com/xw/yunwei/model/TaskNormalCheckModel.kt
@@ -1,6 +1,7 @@
package com.xw.yunwei.model
import com.google.gson.annotations.SerializedName
import com.xw.yunwei.extension.dateChangePattern
/**
 * 常规任务任务检测详情
@@ -234,4 +235,11 @@
     */
    @SerializedName("versionVerification")
    val versionVerification: Int? = null
)
){
    //获取显示检测时间
    fun getShowCheckTime(): String?{
        return checkTime?.dateChangePattern("yyyy-MM-dd HH:mm:ss","yyyy/MM/dd HH:mm:ss")
    }
}
app/src/main/java/com/xw/yunwei/model/TaskNormalModel.kt
@@ -168,4 +168,9 @@
            }
        } ?: ""
    }
    //获取显示操作时间
    fun getShowHandleTime(): String?{
        return handleTime?.dateChangePattern("yyyy-MM-dd HH:mm:ss","yyyy/MM/dd HH:mm:ss")
    }
}
app/src/main/java/com/xw/yunwei/model/TaskNormalRepairModel.kt
@@ -1,6 +1,7 @@
package com.xw.yunwei.model
import com.google.gson.annotations.SerializedName
import com.xw.yunwei.extension.dateChangePattern
/**
 * 常规任务任务维修详情
@@ -181,4 +182,13 @@
     */
    @SerializedName("vehicleLocation")
    val vehicleLocation: String? = null
)
) {
    //获取显示送修时间
    fun getShowSendTime(): String?{
        return sendTime?.dateChangePattern("yyyy-MM-dd HH:mm:ss","yyyy/MM/dd HH:mm:ss")
    }
    //获取显示取回时间
    fun getShowReturnTime(): String?{
        return returnTime?.dateChangePattern("yyyy-MM-dd HH:mm:ss","yyyy/MM/dd HH:mm:ss")
    }
}
app/src/main/java/com/xw/yunwei/ui/user/mine/scheduling/SchedulingVM.kt
@@ -7,6 +7,7 @@
import androidx.lifecycle.map
import com.xw.common.base.BaseViewModel
import com.xw.yunwei.R
import com.xw.yunwei.extension.dateChangePattern
import com.xw.yunwei.model.ClockInStatusModel
import com.xw.yunwei.net.UserRepository
import com.xw.yunwei.ui.user.mine.checkin.CheckInActivity
@@ -27,7 +28,7 @@
    val clockModel: MutableLiveData<ClockInStatusModel?> = MutableLiveData()
    val clockTime = clockModel.map {
//        "${it?.xpShift?.startTime ?: ""} - ${it?.xpShift?.restStartTime ?: ""}  ${it?.xpShift?.restEndTime ?: ""} - ${it?.xpShift?.endTime ?: ""}"
        "${selectTime.value ?: ""} ${it?.xpShift?.startTime ?: ""}~${it?.xpShift?.endTime ?: ""}"
        "${selectTime.value?.dateChangePattern("yyyy-MM-dd","yyyy/MM/dd") ?: ""} ${it?.xpShift?.startTime ?: ""}~${it?.xpShift?.endTime ?: ""}"
    }
    val onClick = View.OnClickListener {
app/src/main/java/com/xw/yunwei/ui/user/mine/upload/CertUploadVM.kt
@@ -78,7 +78,6 @@
            progress.postValue(CertificateAuditInfo())
            return
        }
        isUploading = true
        urls.forEach {
            if (it.value.isNullOrEmpty()) {
@@ -86,6 +85,7 @@
                return
            }
        }
        isUploading = true
        val files = mutableListOf<FileSelectBean>()
        urls.forEachIndexed { index, it ->
app/src/main/java/com/xw/yunwei/ui/widget/CustomRefreshLayout.kt
New file
@@ -0,0 +1,37 @@
package com.xw.yunwei.ui.widget
import android.content.Context
import android.util.AttributeSet
import android.view.MotionEvent
import com.scwang.smart.refresh.layout.SmartRefreshLayout
//处理viewpager2+fragment+SmartRefreshLayout+recyclerView 手指上下滑动很容易变成触发viewpager2左右滑动
class CustomRefreshLayout @JvmOverloads constructor(
    context: Context,
    attrs: AttributeSet? = null,
) : SmartRefreshLayout(context, attrs) {
    private var startX = 0f
    private var startY = 0f
    override fun onInterceptTouchEvent(e: MotionEvent): Boolean {
        when (e.action) {
            MotionEvent.ACTION_DOWN -> {
                startX = e.x
                startY = e.y
                // DOWN 先让 VP2 能收到,不然后续 MOVE 它连机会都没
                parent.requestDisallowInterceptTouchEvent(false)
            }
            MotionEvent.ACTION_MOVE -> {
                val dx = kotlin.math.abs(e.x - startX)
                val dy = kotlin.math.abs(e.y - startY)
                // 纵向主导 → 锁住,VP2 别抢;横向主导 → 放开给 VP2 翻页
                parent.requestDisallowInterceptTouchEvent(dy > dx/2.5)
            }
            MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> {
                parent.requestDisallowInterceptTouchEvent(false)
            }
        }
        return super.onInterceptTouchEvent(e)
    }
}
app/src/main/java/com/xw/yunwei/ui/widget/DirectionRecyclerView.kt
New file
@@ -0,0 +1,40 @@
package com.xw.yunwei.ui.widget
import android.content.Context
import android.util.AttributeSet
import android.util.Log
import android.view.MotionEvent
import androidx.recyclerview.widget.RecyclerView
//
class DirectionRecyclerView @JvmOverloads constructor(
    context: Context,
    attrs: AttributeSet? = null
) : RecyclerView(context, attrs) {
    private var startX = 0f
    private var startY = 0f
    override fun onInterceptTouchEvent(e: MotionEvent): Boolean {
        when (e.action) {
            MotionEvent.ACTION_DOWN -> {
                startX = e.x
                startY = e.y
                // 先让父 VP2 能拿到 DOWN,否则后续 MOVE 它连机会都没有
                parent.requestDisallowInterceptTouchEvent(false)
            }
            MotionEvent.ACTION_MOVE -> {
                val dx = kotlin.math.abs(e.x - startX)
                val dy = kotlin.math.abs(e.y - startY)
                Log.d("xxx","dx==>$dx")
                Log.d("xxx","dy==>$dy")
                // 纵向主导 → RV 自己吃;横向主导 → 放开给 VP2
                parent.requestDisallowInterceptTouchEvent(dy > dx)
            }
            MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> {
                parent.requestDisallowInterceptTouchEvent(false)
            }
        }
        return super.onInterceptTouchEvent(e)
    }
}
app/src/main/java/com/xw/yunwei/ui/work/AMapFragment.kt
@@ -61,6 +61,9 @@
    private var isMoved = false // 是否已经移动过地图
    private var currentZoom = 14f
    /** Screen-Y ratio used for the initial auto-center on first GPS fix. 0.5 = screen center. */
    var initialLocationScreenYRatio: Float = 0.5f
    private var polygonAreas = mutableListOf<Polygon>() // 面区域s
    var polylines = mutableListOf<Polyline>() // 线s
    var circles = mutableListOf<Circle>() // 圆s
@@ -196,6 +199,7 @@
                view.findViewById<AppCompatTextView>(R.id.name).text = marker.snippet
                return view
            }
            // 定制 InfoWindow 内容(如果 getInfoWindow 返回 null,则使用此方法)
            override fun getInfoContents(marker: Marker): View? {
                return null // 使用上面的 getInfoWindow
@@ -205,7 +209,8 @@
    private fun initSensor() {
        if (needSensor) {
            sensorManager = requireActivity().getSystemService(Context.SENSOR_SERVICE) as SensorManager
            sensorManager =
                requireActivity().getSystemService(Context.SENSOR_SERVICE) as SensorManager
            // 尝试获取方向传感器。TYPE_ORIENTATION已废弃,但兼容性好。
            orientationSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION)
            // 如果设备不支持TYPE_ORIENTATION,可以尝试使用更新的传感器类型,如TYPE_GAME_ROTATION_VECTOR
@@ -273,7 +278,7 @@
            updateLocationMarker(l.latitude, l.longitude)
            if (!isMoved) {
                isMoved = true
                moveToLocation()
                moveToLocation(initialLocationScreenYRatio)
            }
        }
        locationChangeCallback?.invoke(l)
@@ -305,11 +310,11 @@
    }
    /* 移动到当前定位 */
    fun moveToLocation() {
    fun moveToLocation(targetScreenYRatio: Float = 0.5f) {
        locationMarker?.let {
            currentZoom = 16f
            val position = locationMarker!!.position
            moveTo(position.latitude, position.longitude)
            animateTo(position.latitude, position.longitude, currentZoom, targetScreenYRatio)
        } ?: run { ToastUtilCommon.showWarn("未获取到定位信息") }
    }
@@ -324,7 +329,12 @@
        }
    }
    fun animateTo(latitude: Double, longitude: Double, zoom: Float = currentZoom, targetScreenYRatio: Float = 0.5f) {
    fun animateTo(
        latitude: Double,
        longitude: Double,
        zoom: Float = currentZoom,
        targetScreenYRatio: Float = 0.5f
    ) {
        lifecycleScope.launchWhenResumed {
            val map = aMap ?: return@launchWhenResumed
            val height = mapView?.height ?: 0
@@ -336,7 +346,8 @@
            // Analytically compute the camera offset so the marker lands at targetScreenYRatio
            // This avoids depending on current projection which would stack offsets on repeated calls
            val deltaYPixels = height * (0.5f - targetScreenYRatio)
            val metersPerPixel = 156543.03392 * Math.cos(Math.toRadians(latitude)) / Math.pow(2.0, zoom.toDouble())
            val metersPerPixel =
                156543.03392 * Math.cos(Math.toRadians(latitude)) / Math.pow(2.0, zoom.toDouble())
            val deltaLat = deltaYPixels * metersPerPixel / 111320.0
            val targetLatLng = LatLng(latitude + deltaLat, longitude)
            val update = CameraUpdateFactory.newLatLngZoom(targetLatLng, zoom)
@@ -377,7 +388,8 @@
        resId: Int,
        id: String,
        description: String? = null,
        anchorHeightRatio: Float=0.5f,
        anchorHeightRatio: Float = 0.5f,
        infoWindowOffsetY: Int = 0,
    ) {
        lifecycleScope.launchWhenResumed {
            aMap?.let { aMap ->
@@ -389,9 +401,10 @@
                        .icon(centerIcon)
                        .anchor(0.5f, anchorHeightRatio) // 将图标的中心点(而非左下角)设置为锚点,这样旋转更自然
                        .setFlat(true) // 重要:设置为平面模式,Marker可围绕锚点旋转
                        .title(description?:"")
                        .snippet(description?:"")
                        .title(description ?: "")
                        .snippet(description ?: "")
                        .draggable(true)
                        .setInfoWindowOffset(0, infoWindowOffsetY)
                    description?.let { markerOptions.title(tag) }
                    marker = aMap.addMarker(markerOptions)
@@ -422,7 +435,7 @@
        }
    }
    fun clearMarks(){
    fun clearMarks() {
        customMarkers.forEach { it.value.remove() }
        customMarkers.clear()
    }
@@ -480,8 +493,12 @@
        } else {
            marker.showInfoWindow()
        }
        currentBigMarker?.let { setMarkerScaleAnimation(it, 1.5f, 1.0f) }
        currentBigMarker?.let {
            setMarkerScaleAnimation(it, 1.5f, 1.0f)
            it.zIndex = 0f
        }
        setMarkerScaleAnimation(marker, 1.0f, 1.5f)
        marker.zIndex = 1f
        currentBigMarker = marker
    }
app/src/main/java/com/xw/yunwei/ui/work/car/manage/CarManageActivity.kt
@@ -79,6 +79,8 @@
        val transaction = supportFragmentManager.beginTransaction()
        transaction.add(com.xw.yunwei.R.id.map_container, mapFrag)
        transaction.commit()
        // halfExpandedRatio=0.58 → visible map area is top 42% of screen; midpoint = 0.21
        mapFrag.initialLocationScreenYRatio = 0.55f
        initAdapter()
        setBehavior()
        refreshFilterStatus()
@@ -116,7 +118,7 @@
        binding.filter.setOnClickListener {
            viewModel.queryAreas { showFilterDialog() }
        }
        binding.location.setOnClickListener { mapFrag.moveToLocation() }
        binding.location.setOnClickListener { mapFrag.moveToLocation(0.55f) }
        binding.searchEt.setOnKeyListener { _, keyCode, event ->
            if (keyCode == KeyEvent.KEYCODE_ENTER && event.action == KeyEvent.ACTION_UP) {
//                if (viewModel.search.value.isNullOrEmpty()) {
@@ -146,6 +148,10 @@
                adapter.addData(0, it)
                adapter.selectItem = it
                adapter.notifyDataSetChanged()
                animateMapTo(it.latitude ?: 0.0, it.longitude ?: 0.0)
                mapFrag.findMarkerById("${it.id ?: ""}")?.let { marker ->
                    mapFrag.clickMarker(marker)
                }
            }
        }
    }
@@ -169,7 +175,8 @@
                    resId,
                    "${it.id}",
                    it.plateNumber,
                    0.75f
                    1f,
                    (-20).dpToPx(this)
                )
            }
        }
@@ -421,7 +428,7 @@
    override fun onItemClick(item: CarModel) {
        if ((item.latitude ?: 0.0) > 0 && (item.longitude ?: 0.0) > 0) {
            mapFrag.moveTo(item.latitude!!, item.longitude!!)
            animateMapTo(item.latitude!!, item.longitude!!)
            mapFrag.findMarkerById("${item.id ?: ""}")?.let {
                mapFrag.clickMarker(it)
            }
@@ -437,4 +444,9 @@
    private fun jumpToDetail(item: CarModel) {
        startActivity(CarDetailActivity::class.java, bundleOf("carId" to item.id))
    }
    private fun animateMapTo(latitude: Double, longitude: Double) {
        val ratio = if (bottomSheetBehavior.state == BottomSheetBehavior.STATE_HALF_EXPANDED) 0.55f else 0.5f
        mapFrag.animateTo(latitude, longitude, targetScreenYRatio = ratio)
    }
}
app/src/main/java/com/xw/yunwei/ui/work/checkInMission/CheckInMissionPointsListActivity.kt
@@ -59,9 +59,7 @@
        }
        adapter.setOnItemChildClickListener { adapter, view, i ->
            if (viewModel.pointsList.value!![i].hadCheckIn()) {
                //viewModel.showCheckInSuccessDialog(this, viewModel.pointsList.value!![i])
                startActivity(CruiseCheckInOperationActivity::class.java,
                    CruiseCheckInOperationActivity.getParams(viewModel.id,viewModel.pointsList.value!![i],false))
                viewModel.showCheckInSuccessDialog(this, viewModel.pointsList.value!![i])
                return@setOnItemChildClickListener
            }
            viewModel.routePlanning(i)
app/src/main/java/com/xw/yunwei/ui/work/site/SiteNavActivity.kt
@@ -77,6 +77,8 @@
        val transaction = supportFragmentManager.beginTransaction()
        transaction.add(com.xw.yunwei.R.id.map_container, mapFrag)
        transaction.commit()
        // halfExpandedRatio=0.58 → visible map area is top 42% of screen; midpoint = 0.21
        mapFrag.initialLocationScreenYRatio = 0.55f
        initAdapter()
        setBehavior()
//        viewModel.query()
@@ -186,7 +188,7 @@
            // mapFrag.moveToLocation()
            mapFrag.getLocation()?.let { it ->
                mapFrag.setCurrentZoom(16f)
                mapFrag.animateTo(it.latitude, it.longitude)
                mapFrag.animateTo(it.latitude, it.longitude, targetScreenYRatio = 0.55f)
            } ?: run { ToastUtilCommon.showWarn("未获取到定位信息") }
        }
        mapFrag.locationChangeCallback = { location ->
app/src/main/java/com/xw/yunwei/ui/work/site/SiteNavVM.kt
@@ -15,7 +15,7 @@
    val workRepository: WorkRepository by inject()
    val filterStatus = listOf(
        "全部", "启用中", "已停用", "失效"
        "全部", "可运营", "待生效","启用中", "已停用", "失效"
    )
    val selectStatus = mutableListOf<String>(filterStatus[0])
@@ -40,7 +40,7 @@
//            map["operationStatus"] =
//                if (selectStatus.isNotEmpty()) selectStatus.map { filterStatus.indexOf(it) + 1 }
//                    .joinToString(",") else null
            map["operationStatus"] = if(selectStatus.getOrNull(0) == filterStatus[0]) null else "${filterStatus.indexOf(selectStatus.getOrNull(0))+1}"
            map["operationStatus"] = if(selectStatus.getOrNull(0) == filterStatus[0]) null else "${filterStatus.indexOf(selectStatus.getOrNull(0))+3}"
//            map["operationStatus"] = if (selectStatus.isEmpty()) null else filterStatus.indexOf(selectStatus[0]) + 1
//            map["pointType"] = null  // 点位类型1运营点位 2测试点位
            map["queryParams"] = search.value  // 查询参数
app/src/main/res/layout/activity_scheduling.xml
@@ -284,7 +284,7 @@
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="@dimen/dp_8"
                    android:text='@{"打卡时间:"+viewModel.clockModel.xpClockIn.clockInTime}'
                    android:text='@{"打卡时间:"+viewModel.clockModel.xpClockIn.getFormateClockInTime()}'
                    android:textColor="@color/gray_8"
                    android:textSize="@dimen/sp_14"
                    android:textStyle="bold"
@@ -368,7 +368,7 @@
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="@dimen/dp_8"
                    android:text='@{"打卡时间:"+viewModel.clockModel.xpClockIn.clockOutTime}'
                    android:text='@{"打卡时间:"+viewModel.clockModel.xpClockIn.getFormateClockOutTime()}'
                    android:textColor="@color/gray_8"
                    android:textSize="@dimen/sp_14"
                    android:textStyle="bold"
app/src/main/res/layout/activity_site_nav.xml
@@ -278,19 +278,41 @@
                        app:layout_constraintLeft_toLeftOf="parent"
                        app:layout_constraintTop_toTopOf="parent"
                        app:riv_corner_radius="@dimen/dp_5" />
                    <LinearLayout
                        android:id="@+id/nav"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginEnd="@dimen/dp_20"
                        android:gravity="center"
                        android:orientation="vertical"
                        app:layout_constraintTop_toTopOf="@id/icon"
                        app:layout_constraintEnd_toEndOf="parent">
                        <androidx.appcompat.widget.AppCompatImageView
                            android:layout_width="@dimen/dp_10"
                            android:layout_height="@dimen/dp_10"
                            android:src="@mipmap/icon_arrow_blue" />
                        <androidx.appcompat.widget.AppCompatTextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:text="去导航"
                            android:textColor="@color/blue_5"
                            android:textSize="@dimen/sp_12" />
                    </LinearLayout>
                    <androidx.appcompat.widget.AppCompatTextView
                        android:id="@+id/name"
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:layout_marginStart="@dimen/dp_8"
                        android:layout_marginEnd="@dimen/dp_20"
                        android:layout_marginEnd="@dimen/dp_8"
                        android:maxLines="1"
                        android:text="广州市白云机场T2航站楼"
                        android:textColor="@color/gray_9"
                        android:textSize="@dimen/sp_14"
                        android:textStyle="bold"
                        app:layout_constraintEnd_toEndOf="parent"
                        app:layout_constraintEnd_toStartOf="@id/nav"
                        app:layout_constraintStart_toEndOf="@+id/icon"
                        app:layout_constraintTop_toTopOf="@+id/icon" />
@@ -298,13 +320,12 @@
                        android:id="@+id/address"
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="@dimen/dp_4"
                        android:layout_marginRight="@dimen/dp_20"
                        android:layout_marginTop="@dimen/dp_10"
                        android:maxLines="2"
                        android:text="深圳市宝安区西大街阳光绿色温馨家园17号楼313"
                        android:textColor="@color/gray_6"
                        android:textSize="@dimen/sp_12"
                        app:layout_constraintEnd_toEndOf="parent"
                        app:layout_constraintEnd_toEndOf="@id/name"
                        app:layout_constraintStart_toStartOf="@+id/name"
                        app:layout_constraintTop_toBottomOf="@+id/name" />
@@ -338,31 +359,6 @@
                        android:visibility="gone"
                        app:layout_constraintRight_toRightOf="parent"
                        app:layout_constraintTop_toBottomOf="@+id/address" />
                    <LinearLayout
                        android:id="@+id/nav"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginEnd="@dimen/dp_20"
                        android:layout_marginBottom="@dimen/dp_8"
                        android:gravity="center"
                        android:orientation="vertical"
                        app:layout_constraintBottom_toBottomOf="parent"
                        app:layout_constraintEnd_toEndOf="parent">
                        <androidx.appcompat.widget.AppCompatImageView
                            android:layout_width="@dimen/dp_10"
                            android:layout_height="@dimen/dp_10"
                            android:src="@mipmap/icon_arrow_blue" />
                        <androidx.appcompat.widget.AppCompatTextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:text="去导航"
                            android:textColor="@color/blue_5"
                            android:textSize="@dimen/sp_12" />
                    </LinearLayout>
                </androidx.constraintlayout.widget.ConstraintLayout>
app/src/main/res/layout/fragment_task_list.xml
@@ -6,7 +6,7 @@
    </data>
    <com.scwang.smart.refresh.layout.SmartRefreshLayout
    <com.xw.yunwei.ui.widget.CustomRefreshLayout
        android:id="@+id/refreshLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
@@ -17,6 +17,6 @@
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </com.scwang.smart.refresh.layout.SmartRefreshLayout>
    </com.xw.yunwei.ui.widget.CustomRefreshLayout>
</layout>
app/src/main/res/layout/layout_normal_task_car_charge.xml
@@ -82,7 +82,7 @@
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:textColor="@color/gray_7"
                android:text='@{"开始时间:" + viewModel.chargeModel.startTime}'
                android:text='@{"开始时间:" + viewModel.chargeModel.getShowStartTime()}'
                android:textSize="@dimen/sp_12"
                tools:text="开始时间:2026-09-31 11:00:09" />
app/src/main/res/layout/layout_normal_task_car_clear_detail.xml
@@ -84,7 +84,7 @@
                    android:gravity="end"
                    android:maxLines="1"
                    android:singleLine="true"
                    android:text="@{viewModel.taskDetail.handleTime}"
                    android:text="@{viewModel.taskDetail.getShowHandleTime()}"
                    android:textColor="@color/gray_7"
                    android:textSize="@dimen/sp_14"
                    tools:text="2026-1-25 17:43:02" />
app/src/main/res/layout/layout_normal_task_car_nj_or_by_or_bx_detail.xml
@@ -84,7 +84,7 @@
                    android:gravity="end"
                    android:maxLines="1"
                    android:singleLine="true"
                    android:text="@{viewModel.taskDetail.handleTime}"
                    android:text="@{viewModel.taskDetail.getShowHandleTime()}"
                    android:textColor="@color/gray_7"
                    android:textSize="@dimen/sp_14"
                    tools:text="2026-1-25 17:43:02" />
app/src/main/res/layout/layout_normal_task_car_repair.xml
@@ -34,7 +34,7 @@
                android:layout_marginHorizontal="@dimen/dp_8"
                android:layout_weight="1"
                tools:text="送修时间:2026-2-6 16:35:56"
                android:text='@{"送修时间:" + viewModel.repairModel.sendTime}'
                android:text='@{"送修时间:" + viewModel.repairModel.getShowSendTime()}'
                android:textColor="@color/gray_9"
                android:textSize="@dimen/sp_14" />
app/src/main/res/layout/layout_normal_task_car_repair_detail.xml
@@ -101,7 +101,7 @@
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/dp_10"
            tools:text="2026年 xxxxx"
            android:text="@{viewModel.repairModel.sendTime}"
            android:text="@{viewModel.repairModel.getShowSendTime()}"
            android:textColor="@color/gray_7"
            android:textSize="@dimen/sp_14" />
@@ -200,7 +200,7 @@
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/dp_10"
            tools:text="2026年 xxxxx"
            android:text="@{viewModel.repairModel.returnTime}"
            android:text="@{viewModel.repairModel.getShowReturnTime()}"
            android:textColor="@color/gray_7"
            android:textSize="@dimen/sp_14" />
app/src/main/res/layout/layout_normal_task_charge_detail.xml
@@ -93,7 +93,7 @@
                        android:layout_height="wrap_content"
                        android:layout_centerVertical="true"
                        tools:text="2026-09-09 11:09:09"
                        android:text='@{viewModel.chargeModel.startTime}'
                        android:text='@{viewModel.chargeModel.getShowStartTime()}'
                        android:textColor="@color/gray_7"
                        android:textSize="@dimen/sp_12" />
@@ -186,7 +186,7 @@
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_centerVertical="true"
                    android:text='@{viewModel.chargeModel.endTime}'
                    android:text='@{viewModel.chargeModel.getShowEndTime()}'
                    tools:text="2026-09-09 11:09:09"
                    android:textColor="@color/gray_7"
                    android:textSize="@dimen/sp_12" />
app/src/main/res/layout/layout_normal_task_check_detail.xml
@@ -82,7 +82,7 @@
                android:gravity="end"
                android:maxLines="1"
                android:singleLine="true"
                android:text="@{viewModel.checkModel.checkTime}"
                android:text="@{viewModel.checkModel.getShowCheckTime()}"
                tools:text="2026-2-5 17:47:08"
                android:textColor="@color/gray_9"
                android:textSize="@dimen/sp_14" />
app/src/main/res/mipmap-xhdpi/ic_map_car_g.png
Binary files differ
app/src/main/res/mipmap-xhdpi/ic_map_car_r.png
Binary files differ
app/src/main/res/mipmap-xhdpi/ic_map_site_g.png
Binary files differ
app/src/main/res/mipmap-xhdpi/ic_map_site_r.png
Binary files differ
app/src/main/res/mipmap-xhdpi/img_work_report.png

app/src/main/res/mipmap-xxhdpi/ic_map_car_g.png
app/src/main/res/mipmap-xxhdpi/ic_map_car_r.png
app/src/main/res/mipmap-xxhdpi/ic_map_site_g.png
app/src/main/res/mipmap-xxhdpi/ic_map_site_r.png
common/src/main/java/com/xw/common/custom/ShowTextLinearLayout.kt
@@ -469,15 +469,11 @@
                val tv = AppCompatTextView(context!!)
                // 长度限制
                val maxLength = 30
                val displayText = if (name.length > maxLength) {
                    name.take(maxLength) + "…"
                } else {
                    name
                }
                val displayText = name
                tv.text = displayText
                tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, text_size.toFloat()) //设置字体大小 像素单位
                tv.setTextColor(textColor)
                tv.setGravity(Gravity.CENTER)
                tv.setGravity(Gravity.CENTER_VERTICAL)
                tv_list.add(tv)
                tv.tag = tv_list.size - 1