18034727885
2026-04-22 54171abb21ae0a14a94df74b7776e7d36a0f1bd5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
package com.xw.yunwei.ui.work.checkInMission.viewmodel
 
import android.app.Application
import android.content.Context
import android.view.View
import androidx.lifecycle.MutableLiveData
import com.xw.common.base.BasePagingViewModel
import com.xw.common.utils.ToastUtilCommon
import com.xw.yunwei.R
import com.xw.yunwei.model.CheckInMissionPointInfo
import com.xw.yunwei.net.WorkRepository
import com.xw.yunwei.ui.dialog.CruiseCheckInSuccessDialog
import com.xw.yunwei.ui.work.checkInMission.RoutePlanningActivity
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import org.koin.core.component.inject
 
class CheckInMissionPointsListViewModel(application: Application) :
    BasePagingViewModel(application) {
    val workRepository: WorkRepository by inject()
    var id: String = ""
 
    //打卡点列表
    val pointsList = MutableLiveData<List<CheckInMissionPointInfo>>()
 
    var onClick = View.OnClickListener {
        when (it.id) {
            R.id.btn_plan -> routePlanning()
        }
    }
 
    override fun getDataList(index: Int) {
        launchRequest(showLoading = false, error = { code, msg ->
            ToastUtilCommon.showError(msg)
            refreshLiveData.done()
        }) {
            workRepository.getCheckInMissionPointsList(id)?.also {
                pointsList.postValue(it)
                refreshLiveData.first()
            }
        }
    }
 
    //路线规划
    fun routePlanning(position: Int = -1) {
        if (pointsList.value.isNullOrEmpty()) {
            return
        }
        if (position in 0..<(pointsList.value?.size ?: 0)) {
            if (pointsList.value!![position].hadCheckIn()) {
                return
            }
            val list =
                pointsList.value!!.filterIndexed { index, info -> index <= position && !info.hadCheckIn() }
            startActivity(
                RoutePlanningActivity::class.java,
                RoutePlanningActivity.getParams(id, list)
            )
        } else {
            val list = pointsList.value!!.filter { !it.hadCheckIn() }
            startActivity(
                RoutePlanningActivity::class.java,
                RoutePlanningActivity.getParams(id, list)
            )
        }
    }
 
    //显示打卡成功弹窗
    fun showCheckInSuccessDialog(context: Context, info: CheckInMissionPointInfo) {
        launchRequest {
            workRepository.getCruiseCheckInRecordInfo(id, info.locationId!!)?.also {
                withContext(Dispatchers.Main) {
                    CruiseCheckInSuccessDialog.show(context, it, needNext = false)
                }
            }
        }
    }
}