[6.2.0] 运营信息统计开发完成
This commit is contained in:
@@ -7,17 +7,22 @@ import com.mogo.eagle.core.data.BaseData
|
||||
* @date: 2023/11/3
|
||||
*/
|
||||
|
||||
data class QueryTaskRespBean(var data: Result?) : BaseData(){
|
||||
data class QueryTaskRespBean(var data: MutableList<Result>?) : BaseData(){
|
||||
class Result(var startSiteName: String,
|
||||
var endSiteName: String,
|
||||
var startTime: Long,
|
||||
var taskType: Int)
|
||||
}
|
||||
|
||||
data class QueryOrdersRespBean(var data: Result?) : BaseData(){
|
||||
data class QueryOrdersRespBean(var data: MutableList<Result>?) : BaseData(){
|
||||
class Result(var orderNo: String,
|
||||
var payAmount:String,
|
||||
var status: Int, //70已取消 60已完成 51待支付 40服务中
|
||||
var status: Int, //60已完成 51待支付 53待退款
|
||||
var createTime: Long
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
data class QueryServingDurationRespBean(var data: Long) : BaseData()
|
||||
|
||||
data class OrderTaskDetailStationBean(var stationName: String,
|
||||
var stationType: Int) : BaseData() //0: 途经点 1:订单上车点 2:订单下车点
|
||||
@@ -0,0 +1,34 @@
|
||||
package com.mogo.och.taxi.constant
|
||||
|
||||
/**
|
||||
* Created on 2023/11/9
|
||||
* 待出行, 行程中, 待支付, 已完成, 已取消, 已退款
|
||||
* 0 无,
|
||||
* <=30 待出行,
|
||||
* 40 行程中,
|
||||
* 51 待支付,
|
||||
* 53 已退款,
|
||||
* 60 已完成,
|
||||
* 70 已取消
|
||||
*/
|
||||
enum class OperationalOrderStatusEnum(val code: Int, val value: String) {
|
||||
None( 0,"无"),
|
||||
WaitingForTravel( 30,"待出行"), //<=30 待出行
|
||||
DuringTheJourney( 40, "行程中"),
|
||||
Unpaid(51, "待支付"),
|
||||
Refunded(53, "已退款"),
|
||||
JourneyCompleted(60,"已完成"),//行程完成
|
||||
Cancel( 70, "已取消");
|
||||
|
||||
companion object {
|
||||
@JvmStatic
|
||||
fun valueOf(code: Int): OperationalOrderStatusEnum? {
|
||||
for (value in values()) {
|
||||
if (value.code == code) {
|
||||
return value
|
||||
}
|
||||
}
|
||||
return None
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package com.mogo.och.taxi.constant
|
||||
|
||||
import com.mogo.och.taxi.bean.QueryCurrentTaskRespBean
|
||||
|
||||
/**
|
||||
* Created on 2023/11/9
|
||||
* taskType = 1 途经点, = 2 订单上车点, = 3 订单下车点
|
||||
*/
|
||||
enum class StationTypeEnum(val code: Int,val value: String) {
|
||||
None(0,"无"),
|
||||
PathwayStation( 1,"途径点"),
|
||||
OrderStartStation( 2,"上车点"),
|
||||
OrderEndStation( 3,"下车点");
|
||||
|
||||
companion object {
|
||||
@JvmStatic
|
||||
fun valueOf(code: Int): StationTypeEnum? {
|
||||
for (value in values()) {
|
||||
if (value.code == code) {
|
||||
return value
|
||||
}
|
||||
}
|
||||
return None
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,7 @@ import com.mogo.cloud.passport.MoGoAiCloudClientConfig
|
||||
import com.mogo.eagle.core.data.BaseData
|
||||
import com.mogo.och.taxi.bean.QueryTaskRespBean
|
||||
import com.mogo.och.taxi.bean.QueryOrdersRespBean
|
||||
import com.mogo.och.taxi.bean.QueryServingDurationRespBean
|
||||
import io.reactivex.Observable
|
||||
import retrofit2.http.GET
|
||||
import retrofit2.http.Header
|
||||
@@ -14,7 +15,7 @@ import retrofit2.http.Query
|
||||
* @author: wangmingjun
|
||||
* @date: 2023/7/26
|
||||
*/
|
||||
interface TaxiPersonalDataServiceApi {
|
||||
interface TaxiOperationalDataServiceApi {
|
||||
|
||||
/**
|
||||
* 车辆演练任务列表
|
||||
@@ -35,7 +36,7 @@ interface TaxiPersonalDataServiceApi {
|
||||
fun queryServingDuration(@Header("appId") appId: String = MoGoAiCloudClientConfig.getInstance().serviceAppId,
|
||||
@Header("ticket") ticket: String = MoGoAiCloudClientConfig.getInstance().token,
|
||||
@Query("sn") sn: String?
|
||||
):Observable<BaseData>
|
||||
):Observable<QueryServingDurationRespBean>
|
||||
|
||||
/**
|
||||
* 根据订单查询任务列表
|
||||
@@ -45,7 +46,7 @@ interface TaxiPersonalDataServiceApi {
|
||||
fun queryTaskListByOrder(
|
||||
@Header("appId") appId: String = MoGoAiCloudClientConfig.getInstance().serviceAppId,
|
||||
@Header("ticket") ticket: String = MoGoAiCloudClientConfig.getInstance().token,
|
||||
@Query("orderNo")orderNo: Long?
|
||||
@Query("orderNo")orderNo: String?
|
||||
): Observable<QueryTaskRespBean>
|
||||
|
||||
/**
|
||||
@@ -9,16 +9,17 @@ import com.mogo.och.common.module.biz.network.OchCommonServiceCallback
|
||||
import com.mogo.och.common.module.biz.network.OchCommonSubscribeImpl
|
||||
import com.mogo.och.common.module.biz.network.interceptor.transformTry
|
||||
import com.mogo.och.taxi.bean.QueryOrdersRespBean
|
||||
import com.mogo.och.taxi.bean.QueryServingDurationRespBean
|
||||
import com.mogo.och.taxi.bean.QueryTaskRespBean
|
||||
|
||||
/**
|
||||
* Created by pangfan on 2021/8/19
|
||||
*/
|
||||
object TaxiPersonalDataServiceManager {
|
||||
object TaxiOperationalDataServiceManager {
|
||||
|
||||
private var mOCHTaxiPersonalDataServiceApi: TaxiPersonalDataServiceApi =
|
||||
private var mOCHTaxiOperationalDataServiceApi: TaxiOperationalDataServiceApi =
|
||||
MoGoRetrofitFactory.getInstance(OchCommonConst.getBaseUrl()).create(
|
||||
TaxiPersonalDataServiceApi::class.java
|
||||
TaxiOperationalDataServiceApi::class.java
|
||||
)
|
||||
|
||||
/**
|
||||
@@ -28,7 +29,7 @@ object TaxiPersonalDataServiceManager {
|
||||
fun queryCurrentScheduledTaskList(context: Context,
|
||||
callback: OchCommonServiceCallback<QueryTaskRespBean>?
|
||||
) {
|
||||
mOCHTaxiPersonalDataServiceApi.queryCurrentScheduledTaskList(
|
||||
mOCHTaxiOperationalDataServiceApi.queryCurrentScheduledTaskList(
|
||||
sn = MoGoAiCloudClientConfig.getInstance().sn
|
||||
)
|
||||
.transformTry()
|
||||
@@ -39,8 +40,9 @@ object TaxiPersonalDataServiceManager {
|
||||
* 查询车辆服务时长
|
||||
*/
|
||||
@JvmStatic
|
||||
fun queryServingDuration(context: Context, callback: OchCommonServiceCallback<BaseData>?) {
|
||||
mOCHTaxiPersonalDataServiceApi.queryServingDuration(
|
||||
fun queryServingDuration(context: Context,
|
||||
callback: OchCommonServiceCallback<QueryServingDurationRespBean>?) {
|
||||
mOCHTaxiOperationalDataServiceApi.queryServingDuration(
|
||||
sn = MoGoAiCloudClientConfig.getInstance().sn
|
||||
)
|
||||
.transformTry()
|
||||
@@ -52,10 +54,10 @@ object TaxiPersonalDataServiceManager {
|
||||
*/
|
||||
@JvmStatic
|
||||
fun queryTaskListByOrder(
|
||||
context: Context,orderNo: Long,
|
||||
context: Context,orderNo: String,
|
||||
callback: OchCommonServiceCallback<QueryTaskRespBean>?
|
||||
) {
|
||||
mOCHTaxiPersonalDataServiceApi.queryTaskListByOrder(
|
||||
mOCHTaxiOperationalDataServiceApi.queryTaskListByOrder(
|
||||
orderNo = orderNo
|
||||
)
|
||||
.transformTry()
|
||||
@@ -70,7 +72,7 @@ object TaxiPersonalDataServiceManager {
|
||||
context: Context,
|
||||
callback: OchCommonServiceCallback<QueryOrdersRespBean>?
|
||||
) {
|
||||
mOCHTaxiPersonalDataServiceApi.queryCurrentCompleteOrder(
|
||||
mOCHTaxiOperationalDataServiceApi.queryCurrentCompleteOrder(
|
||||
sn = MoGoAiCloudClientConfig.getInstance().sn
|
||||
)
|
||||
.transformTry()
|
||||
@@ -85,7 +87,7 @@ object TaxiPersonalDataServiceManager {
|
||||
context: Context,
|
||||
callback: OchCommonServiceCallback<QueryOrdersRespBean>?
|
||||
) {
|
||||
mOCHTaxiPersonalDataServiceApi.queryCurrentDayOrder(
|
||||
mOCHTaxiOperationalDataServiceApi.queryCurrentDayOrder(
|
||||
sn = MoGoAiCloudClientConfig.getInstance().sn
|
||||
)
|
||||
.transformTry()
|
||||
@@ -20,7 +20,7 @@ import com.mogo.och.taxi.R
|
||||
import com.mogo.och.taxi.constant.TaxiDriverEventConst
|
||||
import com.mogo.och.taxi.constant.TaxiOrderStatusEnum
|
||||
import com.mogo.och.taxi.network.TaxiDriverLoginImpl
|
||||
import com.mogo.och.taxi.ui.personal.TaxiPersonalDialogFragment
|
||||
import com.mogo.och.taxi.ui.operational.TaxiOperationalDialogFragment
|
||||
import com.mogo.och.taxi.ui.task.TaxiTaskModel
|
||||
import com.mogo.och.taxi.ui.task.TaxiTaskTabFragment
|
||||
import com.mogo.och.taxi.utils.TPRouteDataTestUtils
|
||||
@@ -44,7 +44,7 @@ class TaxiFragment : BaseTaxiTabFragment<TaxiFragment, TaxiPresenter>(),
|
||||
}
|
||||
|
||||
private var taskTabFragment: WeakReference<TaxiTaskTabFragment>? = null
|
||||
private var personalDialogFragment: WeakReference<TaxiPersonalDialogFragment>? = null
|
||||
private var personalDialogFragment: WeakReference<TaxiOperationalDialogFragment>? = null
|
||||
private var loginService: LoginService? = null
|
||||
|
||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||
@@ -66,7 +66,7 @@ class TaxiFragment : BaseTaxiTabFragment<TaxiFragment, TaxiPresenter>(),
|
||||
}
|
||||
|
||||
private fun openOperationalInfoView() {
|
||||
personalDialogFragment = WeakReference(TaxiPersonalDialogFragment())
|
||||
personalDialogFragment = WeakReference(TaxiOperationalDialogFragment())
|
||||
activity?.supportFragmentManager?.let {
|
||||
personalDialogFragment!!.get()
|
||||
?.show(it, "service_data")
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
package com.mogo.och.taxi.ui.operational
|
||||
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
import android.view.LayoutInflater
|
||||
import androidx.constraintlayout.widget.ConstraintLayout
|
||||
import com.mogo.eagle.core.utilcode.kotlin.onClick
|
||||
import com.mogo.och.taxi.R
|
||||
import kotlinx.android.synthetic.main.taxi_operational_data_item_view.view.operationDataContent1Tv
|
||||
import kotlinx.android.synthetic.main.taxi_operational_data_item_view.view.operationDataContentTv
|
||||
import kotlinx.android.synthetic.main.taxi_operational_data_item_view.view.operationDataUnit1Tv
|
||||
import kotlinx.android.synthetic.main.taxi_operational_data_item_view.view.operationDataUnitTv
|
||||
import kotlinx.android.synthetic.main.taxi_operational_data_item_view.view.operationalDataTagTv
|
||||
import kotlinx.android.synthetic.main.taxi_operational_data_item_view.view.operationalDataView
|
||||
|
||||
/**
|
||||
* @author: wangmingjun
|
||||
* @date: 2023/11/6
|
||||
*/
|
||||
class OperationalDataItemView @JvmOverloads constructor(
|
||||
context: Context,
|
||||
attrs: AttributeSet? = null
|
||||
) : ConstraintLayout(context, attrs){
|
||||
|
||||
private var mClickListener: DataViewClickListener? = null
|
||||
|
||||
init {
|
||||
LayoutInflater.from(context).inflate(R.layout.taxi_operational_data_item_view,this,true)
|
||||
initViewClick()
|
||||
}
|
||||
|
||||
private fun initViewClick() {
|
||||
operationalDataView.onClick {
|
||||
mClickListener?.onClick()
|
||||
}
|
||||
}
|
||||
|
||||
fun setOperationalDuration(hours: String,unit1: String,minutes: String,unit2:String){
|
||||
operationDataContentTv.text = hours
|
||||
operationDataUnitTv.text = unit1
|
||||
operationDataContent1Tv.text = minutes
|
||||
operationDataUnit1Tv.text = unit2
|
||||
}
|
||||
|
||||
fun setOperationDataContentTv(text: String,unit: String){
|
||||
operationDataContentTv.text = text
|
||||
operationDataUnitTv.text = unit
|
||||
}
|
||||
|
||||
fun setOperationalDataTagTv(text: String){
|
||||
operationalDataTagTv.text = text
|
||||
}
|
||||
|
||||
fun setOperationalDataViewClick(isVisible: Int,clickListener: DataViewClickListener?){
|
||||
operationalDataView.visibility = isVisible
|
||||
mClickListener = clickListener
|
||||
}
|
||||
|
||||
interface DataViewClickListener{
|
||||
fun onClick()
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package com.mogo.och.taxi.ui.operational
|
||||
|
||||
import com.mogo.eagle.core.data.BaseData
|
||||
import com.mogo.och.taxi.base.IUiState
|
||||
import com.mogo.och.taxi.bean.QueryOrdersRespBean
|
||||
import com.mogo.och.taxi.bean.QueryServingDurationRespBean
|
||||
import com.mogo.och.taxi.bean.QueryTaskRespBean
|
||||
|
||||
/**
|
||||
* @author: wangmingjun
|
||||
* @date: 2023/11/2
|
||||
*/
|
||||
data class OperationalDataUIState(val operationalDataUIState: OperationalDataStateUIState) : IUiState
|
||||
sealed class OperationalDataStateUIState{
|
||||
object Init : OperationalDataStateUIState()
|
||||
|
||||
data class ScheduledTaskList(val currentScheduledTaskList : MutableList<QueryTaskRespBean.Result>?)
|
||||
: OperationalDataStateUIState()
|
||||
|
||||
data class OrderTaskList(val currentOrderTaskList : MutableList<QueryTaskRespBean.Result>?)
|
||||
: OperationalDataStateUIState()
|
||||
|
||||
data class TotalOrderList(val totalOrderList : MutableList<QueryOrdersRespBean.Result>?)
|
||||
: OperationalDataStateUIState()
|
||||
|
||||
data class CompletedOrderList(val completedOrderList : MutableList<QueryOrdersRespBean.Result>?)
|
||||
: OperationalDataStateUIState()
|
||||
|
||||
data class ServingDuration(val servingDuration : QueryServingDurationRespBean?)
|
||||
: OperationalDataStateUIState()
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.mogo.och.taxi.ui.operational
|
||||
|
||||
import com.mogo.och.taxi.base.IUiIntent
|
||||
|
||||
/**
|
||||
* @author: wangmingjun
|
||||
* @date: 2023/7/26
|
||||
*/
|
||||
sealed class OperationalDataUiIntent: IUiIntent{
|
||||
//查询车辆演练任务
|
||||
object QueryCurrentScheduledTaskList : OperationalDataUiIntent()
|
||||
|
||||
//查询车辆服务时长
|
||||
object QueryServingDuration : OperationalDataUiIntent()
|
||||
|
||||
//根据订单查询任务列表
|
||||
class QueryTaskListByOrder(val orderNo: String) : OperationalDataUiIntent()
|
||||
|
||||
//查询车辆当天已完成订单
|
||||
object QueryCurrentCompleteOrder: OperationalDataUiIntent()
|
||||
|
||||
//查询车辆当天所有订单
|
||||
object QueryCurrentDayOrder: OperationalDataUiIntent()
|
||||
|
||||
}
|
||||
@@ -0,0 +1,298 @@
|
||||
package com.mogo.och.taxi.ui.operational
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Context
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.Button
|
||||
import androidx.appcompat.widget.AppCompatImageView
|
||||
import androidx.appcompat.widget.AppCompatTextView
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.mogo.eagle.core.utilcode.kotlin.onClick
|
||||
import com.mogo.eagle.core.utilcode.mogo.view.SpacesItemDecoration
|
||||
import com.mogo.och.common.module.utils.DateTimeUtil
|
||||
import com.mogo.och.taxi.R
|
||||
import com.mogo.och.taxi.bean.OrderTaskDetailStationBean
|
||||
import com.mogo.och.taxi.bean.QueryOrdersRespBean
|
||||
import com.mogo.och.taxi.bean.QueryTaskRespBean
|
||||
import com.mogo.och.taxi.constant.OperationalOrderStatusEnum
|
||||
import com.mogo.och.taxi.constant.StationTypeEnum
|
||||
import com.mogo.och.taxi.constant.TaskTypeEnum
|
||||
import com.mogo.och.taxi.constant.TaxiOrderStatusEnum
|
||||
|
||||
/**
|
||||
* @author: wangmingjun
|
||||
* @date: 2023/11/7
|
||||
*/
|
||||
/**
|
||||
* 任务adapter
|
||||
*/
|
||||
class TaskListAdapter(val context: Context,
|
||||
private val dataList: MutableList<QueryTaskRespBean.Result>?)
|
||||
: RecyclerView.Adapter<TaskListAdapter.TaskItemViewHolder>(){
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TaskItemViewHolder {
|
||||
var view = LayoutInflater.from(context).inflate(R.layout.taxi_task_list_item, parent, false)
|
||||
return TaskItemViewHolder(view)
|
||||
}
|
||||
|
||||
override fun getItemCount(): Int {
|
||||
return dataList?.size ?: 0
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: TaskItemViewHolder, position: Int) {
|
||||
dataList?.also {
|
||||
val taskInfo = dataList[holder.bindingAdapterPosition]
|
||||
holder.taskTimeTv.text = "下单时间 " + DateTimeUtil.second2MMSS(taskInfo.startTime)
|
||||
holder.taskTypeBt.text = "演练单"
|
||||
holder.taskStartSiteTv.text = taskInfo.startSiteName
|
||||
holder.taskEndSiteTv.text = taskInfo.endSiteName
|
||||
}
|
||||
}
|
||||
|
||||
class TaskItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView){
|
||||
var taskTimeTv: AppCompatTextView
|
||||
var taskTypeBt: Button
|
||||
var taskStartSiteTv: AppCompatTextView
|
||||
var taskEndSiteTv: AppCompatTextView
|
||||
init {
|
||||
taskTimeTv = itemView.findViewById(R.id.taskTimeTv)
|
||||
taskTypeBt = itemView.findViewById(R.id.taskTypeBt)
|
||||
taskStartSiteTv = itemView.findViewById(R.id.taskStartSiteTv)
|
||||
taskEndSiteTv = itemView.findViewById(R.id.taskEndSiteTv)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单adapter
|
||||
*/
|
||||
class OrderListAdapter(val context: Context,
|
||||
private val dataList: MutableList<QueryOrdersRespBean.Result>?,
|
||||
private val clickViewDetailListener: ClickViewDetailListener?)
|
||||
: RecyclerView.Adapter<OrderListAdapter.OrderItemViewHolder>(){
|
||||
|
||||
private var mOrderTaskStationList: MutableList<OrderTaskDetailStationBean>? = null
|
||||
private var taskDetailListAdapter: OrderTaskDetailListAdapter? = null
|
||||
private var currentViewHolder: OrderItemViewHolder? = null
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): OrderItemViewHolder {
|
||||
val view = LayoutInflater.from(context).inflate(R.layout.taxi_order_list_item, parent, false)
|
||||
return OrderItemViewHolder(view)
|
||||
}
|
||||
|
||||
override fun getItemCount(): Int {
|
||||
return dataList?.size ?: 0
|
||||
}
|
||||
|
||||
@SuppressLint("UseCompatLoadingForDrawables")
|
||||
override fun onBindViewHolder(holder: OrderItemViewHolder, position: Int) {
|
||||
dataList?.also {
|
||||
val orderInfo = it[holder.bindingAdapterPosition]
|
||||
holder.orderTimeTv.text = "下单时间 "+ DateTimeUtil.second2MMSS(orderInfo.createTime)
|
||||
holder.orderNumTv.text = "订单编号: " + orderInfo.orderNo
|
||||
holder.orderPriceTv.text = orderInfo.payAmount
|
||||
holder.orderTypeBt.text = "运营单"
|
||||
|
||||
holder.orderTaskStationView.visibility = View.GONE
|
||||
|
||||
initViewDetailBtn(holder)
|
||||
|
||||
initOrderStatus(holder)
|
||||
|
||||
initClickEvent(holder)
|
||||
}
|
||||
}
|
||||
|
||||
private fun initViewDetailBtn(holder: OrderItemViewHolder) {
|
||||
dataList?.also {
|
||||
val orderInfo = it[holder.bindingAdapterPosition]
|
||||
holder.orderViewDetailBt.text = "详情"
|
||||
holder.orderViewDetailBt.tag = true
|
||||
holder.orderViewDetailBt.setCompoundDrawablesWithIntrinsicBounds(null,null,
|
||||
context.getDrawable(R.drawable.view_detail_arrow),null)
|
||||
when(orderInfo.status){
|
||||
OperationalOrderStatusEnum.Refunded.code,OperationalOrderStatusEnum.Unpaid.code,
|
||||
OperationalOrderStatusEnum.JourneyCompleted.code,
|
||||
TaxiOrderStatusEnum.ArriveAtEnd.code -> {
|
||||
holder.orderViewDetailBt.visibility = View.VISIBLE
|
||||
}
|
||||
else -> {
|
||||
holder.orderViewDetailBt.visibility = View.INVISIBLE
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun initClickEvent(holder: OrderItemViewHolder) {
|
||||
dataList?.also {
|
||||
holder.orderViewDetailBt.onClick {
|
||||
currentViewHolder = holder
|
||||
if (holder.orderViewDetailBt.tag as Boolean){
|
||||
holder.orderViewDetailBt.text = "收起"
|
||||
holder.orderViewDetailBt.tag = false
|
||||
holder.orderViewDetailBt.setCompoundDrawablesWithIntrinsicBounds(null,null,
|
||||
ContextCompat.getDrawable(context,R.drawable.close_detail_arrow),null)
|
||||
clickViewDetailListener?.clickViewOrderDetail(dataList[holder.bindingAdapterPosition].orderNo)
|
||||
}else{
|
||||
holder.orderViewDetailBt.text = "详情"
|
||||
holder.orderViewDetailBt.tag = true
|
||||
holder.orderViewDetailBt.setCompoundDrawablesWithIntrinsicBounds(null,null,
|
||||
ContextCompat.getDrawable(context,R.drawable.view_detail_arrow),null)
|
||||
holder.orderTaskStationView.visibility = View.GONE
|
||||
taskDetailListAdapter = null
|
||||
mOrderTaskStationList = null
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun updateTaskStationView(orderTaskStationList: MutableList<OrderTaskDetailStationBean>?){
|
||||
//RecyclerView 更新
|
||||
orderTaskStationList.also {
|
||||
mOrderTaskStationList = orderTaskStationList
|
||||
taskDetailListAdapter = OrderTaskDetailListAdapter(context,mOrderTaskStationList)
|
||||
currentViewHolder?.orderTaskStationView?.layoutManager =
|
||||
LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)
|
||||
currentViewHolder?.orderTaskStationView?.addItemDecoration(
|
||||
SpacesItemDecoration(
|
||||
-3
|
||||
)
|
||||
)
|
||||
currentViewHolder?.orderTaskStationView?.adapter = taskDetailListAdapter
|
||||
currentViewHolder?.orderTaskStationView?.visibility = View.VISIBLE
|
||||
}
|
||||
}
|
||||
|
||||
private fun initOrderStatus(holder: OrderItemViewHolder) {
|
||||
dataList?.also {
|
||||
val orderInfo = it[holder.bindingAdapterPosition]
|
||||
holder.orderStatusBt.text =
|
||||
if (orderInfo.status <= OperationalOrderStatusEnum.WaitingForTravel.code) {
|
||||
OperationalOrderStatusEnum.valueOf(OperationalOrderStatusEnum.WaitingForTravel.code)?.value
|
||||
} else if (orderInfo.status == TaxiOrderStatusEnum.ArriveAtEnd.code){ // 到达目的地算已完成
|
||||
OperationalOrderStatusEnum.valueOf(OperationalOrderStatusEnum.JourneyCompleted.code)?.value
|
||||
}else OperationalOrderStatusEnum.valueOf(orderInfo.status)?.value
|
||||
|
||||
when (orderInfo.status) {
|
||||
//行程中3BC593、已完成-已取消-已退款364071、待支付-待出行E5902D
|
||||
OperationalOrderStatusEnum.WaitingForTravel.code,
|
||||
OperationalOrderStatusEnum.Unpaid.code -> {
|
||||
holder.orderStatusBt.background =
|
||||
ContextCompat.getDrawable(context, R.drawable.waiting_btn_bg)
|
||||
}
|
||||
|
||||
OperationalOrderStatusEnum.DuringTheJourney.code -> {
|
||||
holder.orderStatusBt.background =
|
||||
ContextCompat.getDrawable(context, R.drawable.traveling_btn_bg)
|
||||
}
|
||||
|
||||
OperationalOrderStatusEnum.Cancel.code, OperationalOrderStatusEnum.JourneyCompleted.code,
|
||||
OperationalOrderStatusEnum.Refunded.code -> {
|
||||
holder.orderStatusBt.background =
|
||||
ContextCompat.getDrawable(context, R.drawable.had_done_btn_bg)
|
||||
}
|
||||
|
||||
else -> {
|
||||
holder.orderStatusBt.background =
|
||||
ContextCompat.getDrawable(context, R.drawable.waiting_btn_bg)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class OrderItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView){
|
||||
var orderTimeTv: AppCompatTextView
|
||||
var orderNumTv: AppCompatTextView
|
||||
var orderPriceTv: AppCompatTextView
|
||||
var orderViewDetailBt: AppCompatTextView
|
||||
var orderTypeBt: AppCompatTextView
|
||||
var orderStatusBt: AppCompatTextView
|
||||
var orderTaskStationView: RecyclerView
|
||||
init {
|
||||
orderTimeTv = itemView.findViewById(R.id.orderTimeTv)
|
||||
orderNumTv = itemView.findViewById(R.id.orderNumTv)
|
||||
orderPriceTv = itemView.findViewById(R.id.orderPriceTv)
|
||||
orderViewDetailBt = itemView.findViewById(R.id.orderViewDetailBt)
|
||||
orderTypeBt = itemView.findViewById(R.id.orderTypeBt)
|
||||
orderStatusBt = itemView.findViewById(R.id.orderStatusBt)
|
||||
orderTaskStationView = itemView.findViewById(R.id.orderTaskStationView)
|
||||
}
|
||||
}
|
||||
|
||||
interface ClickViewDetailListener{
|
||||
fun clickViewOrderDetail(orderNo: String)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单途经点, 上车点, 下车点 adapter
|
||||
*/
|
||||
class OrderTaskDetailListAdapter(val context: Context,
|
||||
private val dataList: MutableList<OrderTaskDetailStationBean>?)
|
||||
:RecyclerView.Adapter<OrderTaskDetailListAdapter.TaskDetailViewHolder>(){
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TaskDetailViewHolder {
|
||||
val view = LayoutInflater.from(context).inflate(R.layout.order_task_detail_list_item, parent, false)
|
||||
return TaskDetailViewHolder(view)
|
||||
}
|
||||
|
||||
override fun getItemCount(): Int {
|
||||
return dataList?.size?:0
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: TaskDetailViewHolder, position: Int) {
|
||||
dataList?.also {
|
||||
when (position) {
|
||||
0 -> {
|
||||
holder.stationLineTopIv.visibility = View.INVISIBLE
|
||||
holder.stationLineBottomIv.visibility = View.VISIBLE
|
||||
}
|
||||
dataList.size-1 -> {
|
||||
holder.stationLineTopIv.visibility = View.VISIBLE
|
||||
holder.stationLineBottomIv.visibility = View.INVISIBLE
|
||||
}
|
||||
else -> {
|
||||
holder.stationLineTopIv.visibility = View.VISIBLE
|
||||
holder.stationLineBottomIv.visibility = View.VISIBLE
|
||||
}
|
||||
}
|
||||
val taskDetail = dataList[holder.bindingAdapterPosition]
|
||||
when (taskDetail.stationType){
|
||||
StationTypeEnum.PathwayStation.code -> {
|
||||
holder.taskStationTagTv.text = "途经:"
|
||||
holder.stationCircleIv.setImageResource(R.drawable.waypoint_circle)
|
||||
}
|
||||
StationTypeEnum.OrderStartStation.code -> {
|
||||
holder.taskStationTagTv.text = "上车:"
|
||||
holder.stationCircleIv.setImageResource(R.drawable.taxi_driver_circle_green_big)
|
||||
}
|
||||
StationTypeEnum.OrderEndStation.code -> {
|
||||
holder.taskStationTagTv.text = "下车:"
|
||||
holder.stationCircleIv.setImageResource(R.drawable.taxi_driver_circle_blue_big)
|
||||
}
|
||||
}
|
||||
holder.taskStationNameTv.text = taskDetail.stationName
|
||||
}
|
||||
}
|
||||
class TaskDetailViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
|
||||
var taskStationTagTv: AppCompatTextView
|
||||
var taskStationNameTv: AppCompatTextView
|
||||
var stationLineTopIv: AppCompatImageView
|
||||
var stationLineBottomIv: AppCompatImageView
|
||||
var stationCircleIv: AppCompatImageView
|
||||
|
||||
init {
|
||||
taskStationTagTv = itemView.findViewById(R.id.taskStationTagTv)
|
||||
taskStationNameTv = itemView.findViewById(R.id.taskStationNameTv)
|
||||
stationLineTopIv = itemView.findViewById(R.id.stationLineTopIv)
|
||||
stationLineBottomIv = itemView.findViewById(R.id.stationLineBottomIv)
|
||||
stationCircleIv = itemView.findViewById(R.id.stationCircleIv)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,225 @@
|
||||
package com.mogo.och.taxi.ui.operational
|
||||
|
||||
import com.mogo.commons.AbsMogoApplication
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
|
||||
import com.mogo.eagle.core.utilcode.util.GsonUtils
|
||||
import com.mogo.eagle.core.utilcode.util.NetworkUtils
|
||||
import com.mogo.eagle.core.utilcode.util.ToastUtils
|
||||
import com.mogo.och.common.module.biz.network.OchCommonServiceCallback
|
||||
import com.mogo.och.taxi.R
|
||||
import com.mogo.och.taxi.base.BaseViewModel
|
||||
import com.mogo.och.taxi.base.IUiIntent
|
||||
import com.mogo.och.taxi.bean.QueryOrdersRespBean
|
||||
import com.mogo.och.taxi.bean.QueryServingDurationRespBean
|
||||
import com.mogo.och.taxi.bean.QueryTaskRespBean
|
||||
import com.mogo.och.taxi.network.TaxiOperationalDataServiceManager
|
||||
|
||||
/**
|
||||
* @author: wangmingjun
|
||||
* @date: 2023/11/2
|
||||
*/
|
||||
class TaxiOperationalDataViewModel : BaseViewModel<OperationalDataUIState, OperationalDataUiIntent>(){
|
||||
|
||||
private val TAG = SceneConstant.M_TAXI + "TaxiOperationalDataViewModel"
|
||||
override fun initUiState(): OperationalDataUIState {
|
||||
return OperationalDataUIState(OperationalDataStateUIState.Init)
|
||||
}
|
||||
|
||||
override fun handleIntent(intent: IUiIntent) {
|
||||
when (intent) {
|
||||
is OperationalDataUiIntent.QueryCurrentScheduledTaskList -> {
|
||||
queryCurrentScheduledTaskList()
|
||||
}
|
||||
is OperationalDataUiIntent.QueryServingDuration -> {
|
||||
queryServingDuration()
|
||||
}
|
||||
is OperationalDataUiIntent.QueryTaskListByOrder -> {
|
||||
queryTaskListByOrderNo(intent.orderNo)
|
||||
}
|
||||
is OperationalDataUiIntent.QueryCurrentCompleteOrder -> {
|
||||
queryCurrentCompleteOrder()
|
||||
}
|
||||
is OperationalDataUiIntent.QueryCurrentDayOrder -> {
|
||||
queryCurrentDayOrder()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 车辆演练任务列表
|
||||
*/
|
||||
private fun queryCurrentScheduledTaskList() {
|
||||
TaxiOperationalDataServiceManager.queryCurrentScheduledTaskList(
|
||||
AbsMogoApplication.getApp().applicationContext,
|
||||
object :OchCommonServiceCallback<QueryTaskRespBean>{
|
||||
override fun onSuccess(data: QueryTaskRespBean?) {
|
||||
CallerLogger.d(TAG, "queryCurrentScheduledTaskList" + GsonUtils.toJson(data))
|
||||
data?.also {
|
||||
sendUiState {
|
||||
copy(
|
||||
operationalDataUIState =
|
||||
OperationalDataStateUIState.ScheduledTaskList(data.data)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onFail(code: Int, msg: String?) {
|
||||
ToastUtils.showShort(msg)
|
||||
}
|
||||
|
||||
override fun onError() {
|
||||
val context = AbsMogoApplication.getApp().applicationContext
|
||||
if (!NetworkUtils.isConnected(context)) {
|
||||
ToastUtils.showShort(context.getString(R.string.network_error_tip))
|
||||
} else {
|
||||
ToastUtils.showShort(context.getString(R.string.request_error_tip))
|
||||
}
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 车辆服务市场列表
|
||||
*/
|
||||
private fun queryServingDuration(){
|
||||
TaxiOperationalDataServiceManager.queryServingDuration(
|
||||
AbsMogoApplication.getApp().applicationContext,
|
||||
object :OchCommonServiceCallback<QueryServingDurationRespBean>{
|
||||
override fun onSuccess(data: QueryServingDurationRespBean) { //服务时长返回 秒
|
||||
CallerLogger.d(TAG, "queryServingDuration" + GsonUtils.toJson(data))
|
||||
sendUiState {
|
||||
copy(
|
||||
operationalDataUIState =
|
||||
OperationalDataStateUIState.ServingDuration(data)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onFail(code: Int, msg: String?) {
|
||||
ToastUtils.showShort(msg)
|
||||
}
|
||||
|
||||
override fun onError() {
|
||||
val context = AbsMogoApplication.getApp().applicationContext
|
||||
if (!NetworkUtils.isConnected(context)) {
|
||||
ToastUtils.showShort(context.getString(R.string.network_error_tip))
|
||||
} else {
|
||||
ToastUtils.showShort(context.getString(R.string.request_error_tip))
|
||||
}
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据订单查询任务列表
|
||||
*/
|
||||
private fun queryTaskListByOrderNo(orderNo: String){
|
||||
TaxiOperationalDataServiceManager.queryTaskListByOrder(
|
||||
AbsMogoApplication.getApp().applicationContext,
|
||||
orderNo,
|
||||
object :OchCommonServiceCallback<QueryTaskRespBean>{
|
||||
override fun onSuccess(data: QueryTaskRespBean?) {
|
||||
CallerLogger.d(TAG, "queryTaskListByOrderNo" + GsonUtils.toJson(data))
|
||||
|
||||
data?.also {
|
||||
sendUiState {
|
||||
copy(
|
||||
operationalDataUIState =
|
||||
OperationalDataStateUIState.OrderTaskList(data.data)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onFail(code: Int, msg: String?) {
|
||||
ToastUtils.showShort(msg)
|
||||
}
|
||||
|
||||
override fun onError() {
|
||||
val context = AbsMogoApplication.getApp().applicationContext
|
||||
if (!NetworkUtils.isConnected(context)) {
|
||||
ToastUtils.showShort(context.getString(R.string.network_error_tip))
|
||||
} else {
|
||||
ToastUtils.showShort(context.getString(R.string.request_error_tip))
|
||||
}
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询车辆当天已完成订单
|
||||
*/
|
||||
private fun queryCurrentCompleteOrder(){
|
||||
TaxiOperationalDataServiceManager.queryCurrentCompleteOrder(
|
||||
AbsMogoApplication.getApp().applicationContext,
|
||||
object :OchCommonServiceCallback<QueryOrdersRespBean>{
|
||||
override fun onSuccess(data: QueryOrdersRespBean?) {
|
||||
CallerLogger.d(TAG, "queryCurrentCompleteOrder" + GsonUtils.toJson(data))
|
||||
|
||||
data?.also {
|
||||
sendUiState {
|
||||
copy(
|
||||
operationalDataUIState =
|
||||
OperationalDataStateUIState.CompletedOrderList(data.data)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onFail(code: Int, msg: String?) {
|
||||
ToastUtils.showShort(msg)
|
||||
}
|
||||
|
||||
override fun onError() {
|
||||
val context = AbsMogoApplication.getApp().applicationContext
|
||||
if (!NetworkUtils.isConnected(context)) {
|
||||
ToastUtils.showShort(context.getString(R.string.network_error_tip))
|
||||
} else {
|
||||
ToastUtils.showShort(context.getString(R.string.request_error_tip))
|
||||
}
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询车辆当天所有订单
|
||||
*/
|
||||
private fun queryCurrentDayOrder(){
|
||||
TaxiOperationalDataServiceManager.queryCurrentDayOrder(
|
||||
AbsMogoApplication.getApp().applicationContext,
|
||||
object :OchCommonServiceCallback<QueryOrdersRespBean>{
|
||||
override fun onSuccess(data: QueryOrdersRespBean?) {
|
||||
CallerLogger.d(TAG, "queryCurrentDayOrder" + GsonUtils.toJson(data))
|
||||
|
||||
data?.also {
|
||||
sendUiState {
|
||||
copy(
|
||||
operationalDataUIState =
|
||||
OperationalDataStateUIState.TotalOrderList(data.data)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onFail(code: Int, msg: String?) {
|
||||
ToastUtils.showShort(msg)
|
||||
}
|
||||
|
||||
override fun onError() {
|
||||
val context = AbsMogoApplication.getApp().applicationContext
|
||||
if (!NetworkUtils.isConnected(context)) {
|
||||
ToastUtils.showShort(context.getString(R.string.network_error_tip))
|
||||
} else {
|
||||
ToastUtils.showShort(context.getString(R.string.request_error_tip))
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,304 @@
|
||||
package com.mogo.och.taxi.ui.operational
|
||||
|
||||
import android.app.Dialog
|
||||
import android.content.Context
|
||||
import android.graphics.Color
|
||||
import android.graphics.Point
|
||||
import android.os.Bundle
|
||||
import android.view.Gravity
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.view.WindowManager
|
||||
import androidx.fragment.app.DialogFragment
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import com.mogo.commons.AbsMogoApplication
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
|
||||
import com.mogo.och.common.module.utils.DateTimeUtil
|
||||
import com.mogo.och.taxi.R
|
||||
import com.mogo.och.taxi.bean.OrderTaskDetailStationBean
|
||||
import com.mogo.och.taxi.ui.common.AvoidLeakDialog
|
||||
import com.mogo.och.taxi.bean.QueryOrdersRespBean
|
||||
import com.mogo.och.taxi.bean.QueryServingDurationRespBean
|
||||
import com.mogo.och.taxi.bean.QueryTaskRespBean
|
||||
import com.mogo.och.taxi.constant.StationTypeEnum
|
||||
import com.mogo.och.taxi.constant.TaskTypeEnum
|
||||
import com.mogo.och.taxi.ui.task.TaxiCurrentTaskFragment
|
||||
import kotlinx.android.synthetic.main.taxi_operational_data_view.dayCompletedOrdersView
|
||||
import kotlinx.android.synthetic.main.taxi_operational_data_view.dayTotalOrdersView
|
||||
import kotlinx.android.synthetic.main.taxi_operational_data_view.itemDayTv
|
||||
import kotlinx.android.synthetic.main.taxi_operational_data_view.operationalDataCloseIv
|
||||
import kotlinx.android.synthetic.main.taxi_operational_data_view.operationDataTitle
|
||||
import kotlinx.android.synthetic.main.taxi_operational_data_view.operationItemRecyclerView
|
||||
import kotlinx.android.synthetic.main.taxi_operational_data_view.operationalDataView
|
||||
import kotlinx.android.synthetic.main.taxi_operational_data_view.operationalDetailView
|
||||
import kotlinx.android.synthetic.main.taxi_operational_data_view.scheduledTasksView
|
||||
import kotlinx.android.synthetic.main.taxi_operational_data_view.servingDurationView
|
||||
import kotlinx.coroutines.flow.map
|
||||
|
||||
/**
|
||||
* @author: wangmingjun
|
||||
* @date: 2023/7/24
|
||||
*/
|
||||
class TaxiOperationalDialogFragment : DialogFragment(),
|
||||
View.OnClickListener {
|
||||
|
||||
private lateinit var mViewModel: TaxiOperationalDataViewModel
|
||||
private var orderListAdapter: OrderListAdapter? = null
|
||||
|
||||
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
||||
val dialog = AvoidLeakDialog(
|
||||
requireContext()
|
||||
)
|
||||
dialog.setHostFragmentReference(this)
|
||||
return dialog
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
mViewModel = ViewModelProvider(
|
||||
this,
|
||||
ViewModelProvider.NewInstanceFactory()
|
||||
)[TaxiOperationalDataViewModel::class.java]
|
||||
}
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
container: ViewGroup?,
|
||||
savedInstanceState: Bundle?
|
||||
): View? {
|
||||
return inflater.inflate(R.layout.taxi_operational_data_view, container, false )
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
initView()
|
||||
initViewModelObserver()
|
||||
}
|
||||
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
isCancelable = false
|
||||
dialog!!.setCanceledOnTouchOutside(true)
|
||||
val window = dialog!!.window
|
||||
//dialog padding 去掉
|
||||
window!!.decorView.setPadding(0, 0, 0, 0)
|
||||
window.setDimAmount(0f)
|
||||
val params = window.attributes
|
||||
params.x = 0
|
||||
params.y = 0
|
||||
val windowManager =
|
||||
requireContext().getSystemService(Context.WINDOW_SERVICE) as WindowManager
|
||||
val point = Point()
|
||||
windowManager.defaultDisplay.getSize(point)
|
||||
params.width = (point.x * 0.375).toInt()
|
||||
params.height = ViewGroup.LayoutParams.MATCH_PARENT
|
||||
d(SceneConstant.M_TAXI + TAG, "width= " + params.width + "height= " + params.height)
|
||||
window.attributes = params
|
||||
window.decorView.setBackgroundColor(Color.parseColor("#00FFFFFF")) //设置背景, 不然显示不全
|
||||
window.setGravity(Gravity.LEFT or Gravity.BOTTOM)
|
||||
}
|
||||
|
||||
private fun initView() {
|
||||
operationalDataCloseIv.setOnClickListener(this)
|
||||
}
|
||||
|
||||
private fun initViewModelObserver() {
|
||||
|
||||
mViewModel.sendUiIntent(OperationalDataUiIntent.QueryServingDuration)
|
||||
mViewModel.sendUiIntent(OperationalDataUiIntent.QueryCurrentCompleteOrder)
|
||||
mViewModel.sendUiIntent(OperationalDataUiIntent.QueryCurrentDayOrder)
|
||||
mViewModel.sendUiIntent(OperationalDataUiIntent.QueryCurrentScheduledTaskList)
|
||||
|
||||
lifecycleScope.launchWhenStarted {
|
||||
mViewModel.uiStateFlow.map { it.operationalDataUIState }.collect { operationalDataUIState ->
|
||||
d(TaxiCurrentTaskFragment.TAG, "uiStateFlow-initViewModelObserver: $operationalDataUIState")
|
||||
when (operationalDataUIState) {
|
||||
is OperationalDataStateUIState.Init -> {
|
||||
}
|
||||
|
||||
is OperationalDataStateUIState.ServingDuration-> { //今日时长
|
||||
updateServingDuration(operationalDataUIState.servingDuration)
|
||||
}
|
||||
|
||||
is OperationalDataStateUIState.CompletedOrderList -> {// 今日订单完成量
|
||||
updateCompletedOrderList(operationalDataUIState.completedOrderList)
|
||||
}
|
||||
|
||||
is OperationalDataStateUIState.TotalOrderList -> { //今日全部订单
|
||||
updateTotalOrderList(operationalDataUIState.totalOrderList)
|
||||
}
|
||||
|
||||
is OperationalDataStateUIState.ScheduledTaskList -> { // 今日演练任务量
|
||||
updateScheduledTaskList(operationalDataUIState.currentScheduledTaskList)
|
||||
}
|
||||
|
||||
is OperationalDataStateUIState.OrderTaskList -> { //订单的详情
|
||||
updateOneOrderTaskList(operationalDataUIState.currentOrderTaskList)
|
||||
}
|
||||
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun updateOneOrderTaskList(currentOrderTaskList: MutableList<QueryTaskRespBean.Result>?) {
|
||||
if (currentOrderTaskList == null) orderListAdapter?.updateTaskStationView(null)
|
||||
else{
|
||||
var orderTaskDetailList = mutableListOf<OrderTaskDetailStationBean>()
|
||||
for (index in currentOrderTaskList.size -1 downTo 0){ //后台给的数据是倒序
|
||||
val taskDetail = currentOrderTaskList[index]
|
||||
when(taskDetail.taskType){
|
||||
TaskTypeEnum.VirtualTask.code,TaskTypeEnum.ToOrderStartTask.code -> {
|
||||
if (index != currentOrderTaskList.size-2){
|
||||
var bean =
|
||||
OrderTaskDetailStationBean(taskDetail.endSiteName,StationTypeEnum.PathwayStation.code)
|
||||
orderTaskDetailList.add(bean)
|
||||
}
|
||||
}
|
||||
TaskTypeEnum.ToOrderEndTask.code -> {
|
||||
var beanStart =
|
||||
OrderTaskDetailStationBean(taskDetail.startSiteName,StationTypeEnum.OrderStartStation.code)
|
||||
orderTaskDetailList.add(beanStart)
|
||||
var beanEnd =
|
||||
OrderTaskDetailStationBean(taskDetail.endSiteName,StationTypeEnum.OrderEndStation.code)
|
||||
orderTaskDetailList.add(beanEnd)
|
||||
}
|
||||
}
|
||||
}
|
||||
orderListAdapter?.updateTaskStationView(orderTaskDetailList)
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
private fun updateScheduledTaskList(currentScheduledTaskList: MutableList<QueryTaskRespBean.Result>?) {
|
||||
var dataContent = "0"
|
||||
if (currentScheduledTaskList != null){
|
||||
dataContent = currentScheduledTaskList.size.toString()
|
||||
}
|
||||
scheduledTasksView.setOperationDataContentTv(dataContent,"个")
|
||||
scheduledTasksView.setOperationalDataTagTv("今日演练任务量")
|
||||
scheduledTasksView.setOperationalDataViewClick(View.VISIBLE,
|
||||
object :OperationalDataItemView.DataViewClickListener{
|
||||
override fun onClick() {
|
||||
currentScheduledTaskList?.also {
|
||||
operationalDataView.visibility = View.INVISIBLE
|
||||
operationalDetailView.visibility = View.VISIBLE
|
||||
operationDataTitle.text = "今日演练任务量列表"
|
||||
itemDayTv.text = DateTimeUtil.getYMDTime(DateTimeUtil.getCurrentTimeStamp())
|
||||
var taskListAdapter = TaskListAdapter(AbsMogoApplication.getApp().applicationContext, it)
|
||||
operationItemRecyclerView.layoutManager =
|
||||
LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)
|
||||
operationItemRecyclerView.adapter = taskListAdapter
|
||||
}
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
private fun updateTotalOrderList(totalOrderList: MutableList<QueryOrdersRespBean.Result>?) {
|
||||
var dataContent = "0"
|
||||
if (totalOrderList != null){
|
||||
dataContent = totalOrderList.size.toString()
|
||||
}
|
||||
|
||||
dayTotalOrdersView.setOperationDataContentTv(dataContent,"单")
|
||||
dayTotalOrdersView.setOperationalDataTagTv("今日全部订单量")
|
||||
dayTotalOrdersView.setOperationalDataViewClick(View.VISIBLE,
|
||||
object :OperationalDataItemView.DataViewClickListener{
|
||||
override fun onClick() {
|
||||
totalOrderList?.also {
|
||||
operationalDataView.visibility = View.INVISIBLE
|
||||
operationalDetailView.visibility = View.VISIBLE
|
||||
operationDataTitle.text = "今日全部订单量列表"
|
||||
itemDayTv.text = DateTimeUtil.getYMDTime(DateTimeUtil.getCurrentTimeStamp())
|
||||
orderListAdapter = OrderListAdapter(AbsMogoApplication.getApp().applicationContext,
|
||||
it,
|
||||
object : OrderListAdapter.ClickViewDetailListener{
|
||||
override fun clickViewOrderDetail(orderNo: String) {
|
||||
mViewModel.sendUiIntent(OperationalDataUiIntent.QueryTaskListByOrder(orderNo))
|
||||
}
|
||||
|
||||
})
|
||||
operationItemRecyclerView.layoutManager =
|
||||
LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)
|
||||
operationItemRecyclerView.adapter = orderListAdapter
|
||||
}
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
private fun updateCompletedOrderList(completedOrderList: MutableList<QueryOrdersRespBean.Result>?) {
|
||||
|
||||
var dataContent = "0"
|
||||
if (completedOrderList != null){
|
||||
dataContent = completedOrderList.size.toString()
|
||||
}
|
||||
|
||||
dayCompletedOrdersView.setOperationDataContentTv(dataContent,"单")
|
||||
dayCompletedOrdersView.setOperationalDataTagTv("今日订单完成量")
|
||||
dayCompletedOrdersView.setOperationalDataViewClick(View.VISIBLE,
|
||||
object :OperationalDataItemView.DataViewClickListener{
|
||||
override fun onClick() {
|
||||
completedOrderList?.also {
|
||||
operationalDataView.visibility = View.INVISIBLE
|
||||
operationalDetailView.visibility = View.VISIBLE
|
||||
operationDataTitle.text = "今日订单完成量列表"
|
||||
itemDayTv.text = DateTimeUtil.getYMDTime(DateTimeUtil.getCurrentTimeStamp())
|
||||
orderListAdapter = OrderListAdapter(AbsMogoApplication.getApp().applicationContext,
|
||||
it,
|
||||
object : OrderListAdapter.ClickViewDetailListener{
|
||||
override fun clickViewOrderDetail(orderNo: String) {
|
||||
mViewModel.sendUiIntent(OperationalDataUiIntent.QueryTaskListByOrder(orderNo))
|
||||
}
|
||||
|
||||
})
|
||||
operationItemRecyclerView.layoutManager =
|
||||
LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)
|
||||
operationItemRecyclerView.adapter = orderListAdapter
|
||||
}
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
private fun updateServingDuration(servingDuration: QueryServingDurationRespBean?) {
|
||||
var duration = DateTimeUtil.second2Time(0)
|
||||
if (servingDuration != null) {
|
||||
duration = DateTimeUtil.second2Time(servingDuration.data)
|
||||
|
||||
}
|
||||
|
||||
val listSplit = duration.split(":")
|
||||
|
||||
servingDurationView.setOperationalDuration(listSplit[0],"时",listSplit[1],"分")
|
||||
servingDurationView.setOperationalDataTagTv("今日服务总时长")
|
||||
servingDurationView.setOperationalDataViewClick(View.GONE,null)
|
||||
}
|
||||
|
||||
override fun onClick(v: View) {
|
||||
if (v.id == R.id.operationalDataCloseIv) {
|
||||
if (operationalDetailView.visibility == View.GONE){
|
||||
dismiss()
|
||||
}else{
|
||||
operationalDetailView.visibility = View.GONE
|
||||
operationalDataView.visibility = View.VISIBLE
|
||||
operationDataTitle.text = "网约车运营数据"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun dismiss() {
|
||||
super.dismiss()
|
||||
}
|
||||
|
||||
companion object {
|
||||
private const val TAG = "TaxiOperationalDialogFragment"
|
||||
}
|
||||
}
|
||||
@@ -1,30 +0,0 @@
|
||||
package com.mogo.och.taxi.ui.personal
|
||||
|
||||
import com.mogo.eagle.core.data.BaseData
|
||||
import com.mogo.och.taxi.base.IUiState
|
||||
import com.mogo.och.taxi.bean.QueryOrdersRespBean
|
||||
import com.mogo.och.taxi.bean.QueryTaskRespBean
|
||||
|
||||
/**
|
||||
* @author: wangmingjun
|
||||
* @date: 2023/11/2
|
||||
*/
|
||||
data class PersonalDataUIState(val personalDataUIState: PersonalDataStateUIState) : IUiState
|
||||
sealed class PersonalDataStateUIState{
|
||||
object Init : PersonalDataStateUIState()
|
||||
|
||||
data class ScheduledTaskList(val currentScheduledTaskList : QueryTaskRespBean.Result?)
|
||||
: PersonalDataStateUIState()
|
||||
|
||||
data class OrderTaskList(val currentOrderTaskList : QueryTaskRespBean.Result?)
|
||||
: PersonalDataStateUIState()
|
||||
|
||||
data class TotalOrderList(val totalOrderList : QueryOrdersRespBean.Result?)
|
||||
: PersonalDataStateUIState()
|
||||
|
||||
data class CompletedOrderList(val completedOrderList : QueryOrdersRespBean.Result?)
|
||||
: PersonalDataStateUIState()
|
||||
|
||||
data class ServingDuration(val servingDuration : BaseData?)
|
||||
: PersonalDataStateUIState()
|
||||
}
|
||||
@@ -1,25 +0,0 @@
|
||||
package com.mogo.och.taxi.ui.personal
|
||||
|
||||
import com.mogo.och.taxi.base.IUiIntent
|
||||
|
||||
/**
|
||||
* @author: wangmingjun
|
||||
* @date: 2023/7/26
|
||||
*/
|
||||
sealed class PersonalDataUiIntent: IUiIntent{
|
||||
//查询车辆演练任务
|
||||
object QueryCurrentScheduledTaskList : PersonalDataUiIntent()
|
||||
|
||||
//查询车辆服务时长
|
||||
object QueryServingDuration : PersonalDataUiIntent()
|
||||
|
||||
//根据订单查询任务列表
|
||||
class QueryTaskListByOrder(val orderNo: Long) : PersonalDataUiIntent()
|
||||
|
||||
//查询车辆当天已完成订单
|
||||
object QueryCurrentCompleteOrder: PersonalDataUiIntent()
|
||||
|
||||
//查询车辆当天所有订单
|
||||
object QueryCurrentDayOrder: PersonalDataUiIntent()
|
||||
|
||||
}
|
||||
@@ -1,133 +0,0 @@
|
||||
package com.mogo.och.taxi.ui.personal
|
||||
|
||||
import com.mogo.commons.AbsMogoApplication
|
||||
import com.mogo.eagle.core.data.BaseData
|
||||
import com.mogo.och.common.module.biz.network.OchCommonServiceCallback
|
||||
import com.mogo.och.taxi.base.BaseViewModel
|
||||
import com.mogo.och.taxi.base.IUiIntent
|
||||
import com.mogo.och.taxi.bean.QueryOrdersRespBean
|
||||
import com.mogo.och.taxi.bean.QueryTaskRespBean
|
||||
import com.mogo.och.taxi.network.TaxiPersonalDataServiceManager
|
||||
|
||||
/**
|
||||
* @author: wangmingjun
|
||||
* @date: 2023/11/2
|
||||
*/
|
||||
class TaxiPersonalDataViewModel : BaseViewModel<PersonalDataUIState, PersonalDataUiIntent>(){
|
||||
|
||||
override fun initUiState(): PersonalDataUIState {
|
||||
return PersonalDataUIState(PersonalDataStateUIState.Init)
|
||||
}
|
||||
|
||||
override fun handleIntent(intent: IUiIntent) {
|
||||
when (intent) {
|
||||
is PersonalDataUiIntent.QueryCurrentScheduledTaskList -> {
|
||||
queryCurrentScheduledTaskList()
|
||||
}
|
||||
is PersonalDataUiIntent.QueryServingDuration -> {
|
||||
queryServingDuration()
|
||||
}
|
||||
is PersonalDataUiIntent.QueryTaskListByOrder -> {
|
||||
queryTaskListByOrder(intent.orderNo)
|
||||
}
|
||||
is PersonalDataUiIntent.QueryCurrentCompleteOrder -> {
|
||||
queryCurrentCompleteOrder()
|
||||
}
|
||||
is PersonalDataUiIntent.QueryCurrentDayOrder -> {
|
||||
queryCurrentDayOrder()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 车辆演练任务列表
|
||||
*/
|
||||
private fun queryCurrentScheduledTaskList() {
|
||||
TaxiPersonalDataServiceManager.queryCurrentScheduledTaskList(
|
||||
AbsMogoApplication.getApp().applicationContext,
|
||||
object :OchCommonServiceCallback<QueryTaskRespBean>{
|
||||
override fun onSuccess(data: QueryTaskRespBean?) {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
|
||||
override fun onFail(code: Int, msg: String?) {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 车辆服务市场列表
|
||||
*/
|
||||
private fun queryServingDuration(){
|
||||
TaxiPersonalDataServiceManager.queryServingDuration(
|
||||
AbsMogoApplication.getApp().applicationContext,
|
||||
object :OchCommonServiceCallback<BaseData>{
|
||||
override fun onSuccess(data: BaseData?) {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
|
||||
override fun onFail(code: Int, msg: String?) {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据订单查询任务列表
|
||||
*/
|
||||
private fun queryTaskListByOrder(orderNo: Long){
|
||||
TaxiPersonalDataServiceManager.queryTaskListByOrder(
|
||||
AbsMogoApplication.getApp().applicationContext,
|
||||
orderNo,
|
||||
object :OchCommonServiceCallback<QueryTaskRespBean>{
|
||||
override fun onSuccess(data: QueryTaskRespBean?) {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
|
||||
override fun onFail(code: Int, msg: String?) {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询车辆当天已完成订单
|
||||
*/
|
||||
private fun queryCurrentCompleteOrder(){
|
||||
TaxiPersonalDataServiceManager.queryCurrentCompleteOrder(
|
||||
AbsMogoApplication.getApp().applicationContext,
|
||||
object :OchCommonServiceCallback<QueryOrdersRespBean>{
|
||||
override fun onSuccess(data: QueryOrdersRespBean?) {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
|
||||
override fun onFail(code: Int, msg: String?) {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询车辆当天所有订单
|
||||
*/
|
||||
private fun queryCurrentDayOrder(){
|
||||
TaxiPersonalDataServiceManager.queryCurrentDayOrder(
|
||||
AbsMogoApplication.getApp().applicationContext,
|
||||
object :OchCommonServiceCallback<QueryOrdersRespBean>{
|
||||
override fun onSuccess(data: QueryOrdersRespBean?) {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
|
||||
override fun onFail(code: Int, msg: String?) {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -1,210 +0,0 @@
|
||||
package com.mogo.och.taxi.ui.personal
|
||||
|
||||
import android.app.Dialog
|
||||
import android.content.Context
|
||||
import android.graphics.Color
|
||||
import android.graphics.Point
|
||||
import android.os.Bundle
|
||||
import android.view.Gravity
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.view.WindowManager
|
||||
import android.widget.Button
|
||||
import android.widget.TextView
|
||||
import androidx.constraintlayout.widget.ConstraintLayout
|
||||
import androidx.fragment.app.DialogFragment
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
|
||||
import com.mogo.och.taxi.R
|
||||
import com.mogo.och.taxi.ui.common.AvoidLeakDialog
|
||||
import com.mogo.och.taxi.bean.QueryCurrentTaskRespBean
|
||||
import com.mogo.och.taxi.ui.task.TaxiCurrentTaskFragment
|
||||
import kotlinx.android.synthetic.main.taxi_no_data_common_view.no_order_data_iv
|
||||
import kotlinx.android.synthetic.main.taxi_no_data_common_view.no_order_data_view
|
||||
import kotlinx.android.synthetic.main.taxi_personal_data_view.module_och_taxi_order_list_close_iv
|
||||
import kotlinx.coroutines.flow.map
|
||||
|
||||
/**
|
||||
* @author: wangmingjun
|
||||
* @date: 2023/7/24
|
||||
*/
|
||||
class TaxiPersonalDialogFragment : DialogFragment(),
|
||||
View.OnClickListener {
|
||||
|
||||
private lateinit var mViewModel: TaxiPersonalDataViewModel
|
||||
private val orders: MutableList<QueryCurrentTaskRespBean.Result> = ArrayList()
|
||||
|
||||
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
||||
val dialog = AvoidLeakDialog(
|
||||
requireContext()
|
||||
)
|
||||
dialog.setHostFragmentReference(this)
|
||||
return dialog
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
mViewModel = ViewModelProvider(
|
||||
this,
|
||||
ViewModelProvider.NewInstanceFactory()
|
||||
)[TaxiPersonalDataViewModel::class.java]
|
||||
}
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
container: ViewGroup?,
|
||||
savedInstanceState: Bundle?
|
||||
): View? {
|
||||
return inflater.inflate(R.layout.taxi_personal_data_view, container, false )
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
initView()
|
||||
initViewModelObserver()
|
||||
}
|
||||
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
isCancelable = false
|
||||
dialog!!.setCanceledOnTouchOutside(true)
|
||||
val window = dialog!!.window
|
||||
//dialog padding 去掉
|
||||
window!!.decorView.setPadding(0, 0, 0, 0)
|
||||
window.setDimAmount(0f)
|
||||
val params = window.attributes
|
||||
params.x = 0
|
||||
params.y = 0
|
||||
val windowManager =
|
||||
requireContext().getSystemService(Context.WINDOW_SERVICE) as WindowManager
|
||||
val point = Point()
|
||||
windowManager.defaultDisplay.getSize(point)
|
||||
params.width = (point.x * 0.375).toInt()
|
||||
params.height = ViewGroup.LayoutParams.MATCH_PARENT
|
||||
d(SceneConstant.M_TAXI + TAG, "width= " + params.width + "height= " + params.height)
|
||||
window.attributes = params
|
||||
window.decorView.setBackgroundColor(Color.parseColor("#00FFFFFF")) //设置背景, 不然显示不全
|
||||
window.setGravity(Gravity.LEFT or Gravity.BOTTOM)
|
||||
}
|
||||
|
||||
private fun initView() {
|
||||
no_order_data_iv.setImageResource(R.drawable.no_order_data)
|
||||
val params = no_order_data_iv.layoutParams as ConstraintLayout.LayoutParams
|
||||
params.width = 480
|
||||
params.height = 480
|
||||
no_order_data_iv.layoutParams = params
|
||||
no_order_data_view.visibility = View.VISIBLE
|
||||
module_och_taxi_order_list_close_iv.setOnClickListener(this)
|
||||
}
|
||||
|
||||
private fun initViewModelObserver() {
|
||||
lifecycleScope.launchWhenStarted {
|
||||
mViewModel.uiStateFlow.map { it.personalDataUIState }.collect { personalDataUIState ->
|
||||
d(TaxiCurrentTaskFragment.TAG, "uiStateFlow-initViewModelObserver: $personalDataUIState")
|
||||
when (personalDataUIState) {
|
||||
is PersonalDataStateUIState.Init -> {
|
||||
}
|
||||
|
||||
is PersonalDataStateUIState.ServingDuration-> { //今日时长
|
||||
|
||||
}
|
||||
|
||||
is PersonalDataStateUIState.CompletedOrderList -> {// 今日订单完成量
|
||||
|
||||
}
|
||||
|
||||
is PersonalDataStateUIState.TotalOrderList -> { //今日全部订单
|
||||
|
||||
}
|
||||
|
||||
is PersonalDataStateUIState.ScheduledTaskList -> { // 今日演练任务量
|
||||
|
||||
}
|
||||
|
||||
is PersonalDataStateUIState.OrderTaskList -> { //订单的任务
|
||||
|
||||
}
|
||||
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onClick(v: View) {
|
||||
if (v.id == R.id.module_och_taxi_order_list_close_iv) {
|
||||
dismiss()
|
||||
}
|
||||
}
|
||||
|
||||
internal open inner class OrderDetailViewHolder(itemView: View) :
|
||||
RecyclerView.ViewHolder(itemView) {
|
||||
var orderTimeTv: TextView
|
||||
var orderStatusBt: Button
|
||||
var startStationTv: TextView
|
||||
var endStationTv: TextView
|
||||
var orderNumTv: TextView
|
||||
var orderTypeBt: Button
|
||||
var dividerLine: View
|
||||
|
||||
init {
|
||||
orderTimeTv = itemView.findViewById<TextView>(R.id.order_time_hm_tv)
|
||||
orderStatusBt = itemView.findViewById<Button>(R.id.order_status_bt)
|
||||
startStationTv = itemView.findViewById<TextView>(R.id.grab_order_start_station)
|
||||
endStationTv = itemView.findViewById<TextView>(R.id.grab_order_end_station)
|
||||
orderNumTv = itemView.findViewById<TextView>(R.id.order_num)
|
||||
orderTypeBt = itemView.findViewById<Button>(R.id.order_type_bt)
|
||||
dividerLine = itemView.findViewById<View>(R.id.module_och_taxi_order_divider)
|
||||
}
|
||||
}
|
||||
|
||||
internal inner class DayGroupViewHolder(itemView: View) :
|
||||
OrderDetailViewHolder(itemView) {
|
||||
val dayGroupTv: TextView
|
||||
|
||||
init {
|
||||
dayGroupTv = itemView.findViewById<TextView>(R.id.order_day_tv)
|
||||
}
|
||||
}
|
||||
|
||||
internal abstract inner class OnTaxiOrderRvOnScrollListener : RecyclerView.OnScrollListener() {
|
||||
private var isUpwardSliding = false
|
||||
override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
|
||||
val manager = recyclerView.layoutManager
|
||||
//不滑动
|
||||
if (manager is LinearLayoutManager && newState == RecyclerView.SCROLL_STATE_IDLE) {
|
||||
val lastItemPosition = manager.findLastCompletelyVisibleItemPosition()
|
||||
val itemCount = manager.itemCount
|
||||
d(
|
||||
SceneConstant.M_TAXI + TAG,
|
||||
"lastItemPosition==$lastItemPosition,itemCount==$itemCount"
|
||||
)
|
||||
//向上滑动到最后一个
|
||||
if (lastItemPosition == itemCount - 1 && isUpwardSliding) {
|
||||
onLoadMore()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
|
||||
super.onScrolled(recyclerView, dx, dy)
|
||||
isUpwardSliding = dy > 0
|
||||
}
|
||||
|
||||
abstract fun onLoadMore()
|
||||
}
|
||||
|
||||
override fun dismiss() {
|
||||
super.dismiss()
|
||||
orders.clear()
|
||||
}
|
||||
|
||||
companion object {
|
||||
private const val TAG = "OCHTaxiOrdersDialog"
|
||||
}
|
||||
}
|
||||
@@ -171,7 +171,7 @@ class TaxiCurrentTaskFragment : BaseFragment(),
|
||||
if (currentTaskWithOrder == null) {
|
||||
initContainerView(false)
|
||||
removeAllMapMarker()
|
||||
}else{
|
||||
} else {
|
||||
updateViewByCurrentTaskWithOrder(currentTaskWithOrder)
|
||||
}
|
||||
updateNextTaskFragment(currentTaskWithOrder)
|
||||
@@ -215,7 +215,7 @@ class TaxiCurrentTaskFragment : BaseFragment(),
|
||||
return
|
||||
}
|
||||
|
||||
if (mPrepareTasCountDownTimer != null){
|
||||
if (mPrepareTasCountDownTimer != null) {
|
||||
mPrepareTasCountDownTimer?.cancel()
|
||||
mPrepareTasCountDownTimer = null
|
||||
}
|
||||
@@ -370,7 +370,8 @@ class TaxiCurrentTaskFragment : BaseFragment(),
|
||||
when (taskType) {
|
||||
TaskTypeEnum.None.code -> {
|
||||
if (order != null && (currentStatus == TaskStatusEnum.CompleteTask.code
|
||||
|| currentStatus == TaskStatusEnum.None.code )) { //暂停接单会清空前往上车点任务
|
||||
|| currentStatus == TaskStatusEnum.None.code)
|
||||
) { //暂停接单会清空前往上车点任务
|
||||
updateOrderUI(order)
|
||||
}
|
||||
}
|
||||
@@ -379,7 +380,7 @@ class TaxiCurrentTaskFragment : BaseFragment(),
|
||||
|
||||
if (order != null && currentStatus == TaskStatusEnum.CompleteTask.code) {
|
||||
updateOrderUI(order)
|
||||
}else{
|
||||
} else {
|
||||
updateVirtualTaskUI(taskAndOrder)
|
||||
}
|
||||
}
|
||||
@@ -467,19 +468,16 @@ class TaxiCurrentTaskFragment : BaseFragment(),
|
||||
}
|
||||
}
|
||||
|
||||
private fun updateVirtualTaskUI(taskAndOrder: QueryCurrentTaskRespBean.Result?){
|
||||
private fun updateVirtualTaskUI(taskAndOrder: QueryCurrentTaskRespBean.Result?) {
|
||||
|
||||
if (taskAndOrder == null) return
|
||||
|
||||
val order = taskAndOrder.order // 订单信息
|
||||
val startSite = taskAndOrder.startSite // 起点
|
||||
val endSite = taskAndOrder.endSite // 终点
|
||||
val currentStatus = taskAndOrder.currentStatus // 任务的状态 0:空闲 1:获取任务 2:开始任务 3:到达目的地
|
||||
|
||||
cancelOrder.visibility = View.GONE
|
||||
orderPhoneAndNum.visibility = if (order != null &&
|
||||
currentStatus == TaskStatusEnum.CompleteTask.code
|
||||
) View.VISIBLE else View.GONE
|
||||
orderPhoneAndNum.visibility = View.GONE
|
||||
taskClickBtn.visibility = View.GONE
|
||||
|
||||
naviToStart.visibility = View.GONE
|
||||
@@ -495,8 +493,9 @@ class TaxiCurrentTaskFragment : BaseFragment(),
|
||||
|
||||
taskStatus.text = resources.getString(R.string.task_start_end_site)
|
||||
taskTypeTv.background =
|
||||
ContextCompat.getDrawable(MainMoGoApplication.getApp().applicationContext
|
||||
,R.drawable.task_unreal_type_btn_bg)
|
||||
ContextCompat.getDrawable(
|
||||
MainMoGoApplication.getApp().applicationContext, R.drawable.task_unreal_type_btn_bg
|
||||
)
|
||||
taskTypeTv.text = resources.getString(R.string.task_exercise)
|
||||
startStationName.text = startSite.siteName
|
||||
endStationName.text = endSite.siteName
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 1.0 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 513 B |
Binary file not shown.
|
After Width: | Height: | Size: 1.5 KiB |
@@ -2,6 +2,6 @@
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<corners
|
||||
android:radius="9dp"/>
|
||||
android:radius="@dimen/dp_8"/>
|
||||
<solid android:color="#364071"/>
|
||||
</shape>
|
||||
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<corners
|
||||
android:radius="@dimen/dp_20"/>
|
||||
<solid android:color="#000E2A"/>
|
||||
</shape>
|
||||
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<corners
|
||||
android:radius="@dimen/dp_8"/>
|
||||
<solid android:color="#3BC593"/>
|
||||
</shape>
|
||||
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<solid
|
||||
android:color="@color/taxi_order_cancel_btn"/>
|
||||
<corners
|
||||
android:radius="@dimen/dp_14" />
|
||||
</shape>
|
||||
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<corners
|
||||
android:radius="@dimen/dp_8"/>
|
||||
<solid android:color="#E5902D"/>
|
||||
</shape>
|
||||
@@ -0,0 +1,60 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/dp_150">
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:id="@+id/taskStationTagTv"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/dp_76"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
android:textSize="@dimen/dp_28"
|
||||
android:textColor="#CAD6FF"
|
||||
android:text="途经:"/>
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:id="@+id/taskStationNameTv"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/dp_10"
|
||||
app:layout_constraintLeft_toLeftOf="@+id/taskStationTagTv"
|
||||
app:layout_constraintTop_toBottomOf="@+id/taskStationTagTv"
|
||||
android:textStyle="bold"
|
||||
android:textSize="@dimen/dp_40"
|
||||
android:textColor="#FFFFFF"
|
||||
android:text="站点名称:"/>
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:id="@+id/stationLineTopIv"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="@dimen/dp_78"
|
||||
android:src="@drawable/taxi_dot_line"
|
||||
app:layout_constraintLeft_toLeftOf="@+id/stationCircleIv"
|
||||
app:layout_constraintRight_toRightOf="@+id/stationCircleIv"
|
||||
app:layout_constraintTop_toTopOf="parent"/>
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:id="@+id/stationLineBottomIv"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="@dimen/dp_78"
|
||||
android:src="@drawable/taxi_dot_line"
|
||||
app:layout_constraintLeft_toLeftOf="@+id/stationCircleIv"
|
||||
app:layout_constraintRight_toRightOf="@+id/stationCircleIv"
|
||||
app:layout_constraintBottom_toBottomOf="parent"/>
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:id="@+id/stationCircleIv"
|
||||
android:layout_width="@dimen/dp_38"
|
||||
android:layout_height="@dimen/dp_38"
|
||||
android:scaleType="fitXY"
|
||||
android:src="@drawable/taxi_driver_circle_blue_big"
|
||||
app:layout_constraintTop_toTopOf="@+id/taskStationNameTv"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/taskStationNameTv"
|
||||
app:layout_constraintRight_toLeftOf="@+id/taskStationNameTv"
|
||||
android:layout_marginRight="@dimen/dp_16"/>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -1,30 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_marginTop="30dp"
|
||||
android:layout_width="@dimen/taxi_operation_data_item_width"
|
||||
android:layout_height="@dimen/taxi_operation_data_item_height"
|
||||
android:background="@drawable/taxi_operation_data_item_bg">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/operation_data_tv"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="30dp"
|
||||
android:layout_marginLeft="60dp"
|
||||
android:textSize="@dimen/dp_36"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
android:textColor="#FFFFFF"
|
||||
android:text="1200"/>
|
||||
<TextView
|
||||
android:id="@+id/operation_data_title_tv"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textColor="#A7B6F0"
|
||||
android:textSize="@dimen/dp_30"
|
||||
app:layout_constraintLeft_toLeftOf="@+id/operation_data_tv"
|
||||
app:layout_constraintTop_toBottomOf="@+id/operation_data_tv"
|
||||
android:text="总数"/>
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -1,12 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/operation_data_recycler_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
/>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -1,29 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/operation_tab_title"
|
||||
android:gravity="center"
|
||||
android:text="完成订单数"
|
||||
android:textColor="#A7B6F0"
|
||||
android:textSize="@dimen/dp_40"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"/>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/operation_tab_line_iv"
|
||||
android:layout_width="@dimen/dp_72"
|
||||
android:layout_height="@dimen/dp_24"
|
||||
app:layout_constraintTop_toBottomOf="@+id/operation_tab_title"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
android:layout_marginTop="10dp"
|
||||
android:src="@drawable/taxi_driver_operation_tab_line"/>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -0,0 +1,79 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="@dimen/dp_800"
|
||||
android:layout_height="@dimen/dp_224"
|
||||
android:background="@drawable/taxi_operation_data_item_bg">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/operationDataContentTv"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/dp_20"
|
||||
android:layout_marginLeft="@dimen/dp_60"
|
||||
android:textSize="@dimen/dp_76"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
android:textColor="#FFFFFF"
|
||||
android:textStyle="bold"
|
||||
android:text="0"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/operationDataContent1Tv"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/dp_20"
|
||||
android:layout_marginLeft="@dimen/dp_8"
|
||||
android:textSize="@dimen/dp_76"
|
||||
app:layout_constraintLeft_toRightOf="@+id/operationDataUnitTv"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
android:textStyle="bold"
|
||||
android:textColor="#FFFFFF"/>
|
||||
<TextView
|
||||
android:id="@+id/operationDataUnitTv"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@dimen/dp_12"
|
||||
android:layout_marginLeft="@dimen/dp_8"
|
||||
android:textSize="@dimen/dp_36"
|
||||
app:layout_constraintLeft_toRightOf="@+id/operationDataContentTv"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/operationDataContentTv"
|
||||
android:textColor="#FFFFFF"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/operationDataUnit1Tv"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/dp_8"
|
||||
android:layout_marginBottom="@dimen/dp_12"
|
||||
android:textSize="@dimen/dp_36"
|
||||
app:layout_constraintLeft_toRightOf="@+id/operationDataContent1Tv"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/operationDataContent1Tv"
|
||||
android:textColor="#FFFFFF"/>
|
||||
<TextView
|
||||
android:id="@+id/operationalDataTagTv"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textColor="#A7B6F0"
|
||||
android:layout_marginTop="@dimen/dp_10"
|
||||
android:textSize="@dimen/dp_30"
|
||||
app:layout_constraintLeft_toLeftOf="@+id/operationDataContentTv"
|
||||
app:layout_constraintTop_toBottomOf="@+id/operationDataContentTv"
|
||||
android:text="今日量"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/operationalDataView"
|
||||
android:layout_width="@dimen/dp_224"
|
||||
android:layout_height="@dimen/dp_80"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
android:layout_marginRight="@dimen/dp_40"
|
||||
android:textSize="@dimen/dp_32"
|
||||
android:textColor="#FFFFFF"
|
||||
android:textStyle="bold"
|
||||
android:gravity="center"
|
||||
android:text="@string/view_data"
|
||||
android:background="@drawable/view_data_click_btn_bg"/>
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -0,0 +1,113 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="#F0151D41">
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:id="@+id/operationDataTitle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="@dimen/dp_86"
|
||||
android:layout_marginLeft="@dimen/dp_114"
|
||||
android:layout_marginTop="@dimen/dp_144"
|
||||
android:gravity="center"
|
||||
android:text="网约车运营数据"
|
||||
android:textColor="#FFFFFF"
|
||||
android:textSize="@dimen/dp_42"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<View
|
||||
android:id="@+id/line"
|
||||
android:layout_width="@dimen/dp_14"
|
||||
android:layout_height="@dimen/dp_50"
|
||||
android:layout_marginRight="@dimen/dp_20"
|
||||
android:background="#2966EC"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/operationDataTitle"
|
||||
app:layout_constraintRight_toLeftOf="@+id/operationDataTitle"
|
||||
app:layout_constraintTop_toTopOf="@+id/operationDataTitle" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/operationalDataCloseIv"
|
||||
android:layout_width="@dimen/dp_106"
|
||||
android:layout_height="@dimen/dp_106"
|
||||
android:layout_marginRight="@dimen/dp_40"
|
||||
android:src="@drawable/taxi_order_cancel_close1"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/operationDataTitle"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toTopOf="@+id/operationDataTitle" />
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/operationalDataView"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintLeft_toLeftOf="@+id/line"
|
||||
app:layout_constraintTop_toBottomOf="@+id/operationDataTitle">
|
||||
|
||||
<com.mogo.och.taxi.ui.operational.OperationalDataItemView
|
||||
android:id="@+id/servingDurationView"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/dp_60"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<com.mogo.och.taxi.ui.operational.OperationalDataItemView
|
||||
android:id="@+id/dayCompletedOrdersView"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/dp_30"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/servingDurationView" />
|
||||
|
||||
<com.mogo.och.taxi.ui.operational.OperationalDataItemView
|
||||
android:id="@+id/dayTotalOrdersView"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/dp_30"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/dayCompletedOrdersView" />
|
||||
|
||||
<com.mogo.och.taxi.ui.operational.OperationalDataItemView
|
||||
android:id="@+id/scheduledTasksView"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/dp_30"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/dayTotalOrdersView" />
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:id="@+id/itemDayTv"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/taxi_order_list_item_height"
|
||||
android:layout_marginTop="@dimen/dp_60"
|
||||
android:background="#80203076"
|
||||
android:gravity="center"
|
||||
android:textColor="#FFFFFF"
|
||||
android:textSize="@dimen/dp_32"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/operationDataTitle" />
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/operationItemRecyclerView"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:layout_marginLeft="@dimen/dp_56"
|
||||
android:layout_marginRight="@dimen/dp_56"
|
||||
android:layout_marginBottom="@dimen/dp_10"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/itemDayTv"
|
||||
app:layout_constraintBottom_toBottomOf="parent"/>
|
||||
|
||||
<androidx.constraintlayout.widget.Group
|
||||
android:id="@+id/operationalDetailView"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:visibility="gone"
|
||||
app:constraint_referenced_ids="operationItemRecyclerView,itemDayTv" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -1,9 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="@dimen/taxi_order_nodata_width"
|
||||
android:layout_height="@dimen/taxi_order_nodata_height"
|
||||
android:gravity="center"
|
||||
android:text="已经到底了…"
|
||||
android:textSize="@dimen/dp_30"
|
||||
android:textColor="#91A1EA">
|
||||
</TextView>
|
||||
@@ -0,0 +1,118 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="@dimen/dp_64">
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:id="@+id/orderTimeTv"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="下单时间 9:01"
|
||||
android:textColor="#8E9DD4"
|
||||
android:textSize="@dimen/dp_38"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"/>
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:id="@+id/orderNumTv"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textColor="#8E9DD4"
|
||||
android:textSize="@dimen/dp_38"
|
||||
android:layout_marginTop="@dimen/dp_54"
|
||||
app:layout_constraintTop_toBottomOf="@+id/orderTimeTv"
|
||||
app:layout_constraintLeft_toLeftOf="@+id/orderTimeTv"
|
||||
tools:text="订单编号111111" />
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:id="@+id/orderPriceTv"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginRight="@dimen/dp_4"
|
||||
android:textColor="#FFFFFF"
|
||||
android:textSize="@dimen/dp_38"
|
||||
app:layout_constraintRight_toLeftOf="@+id/orderPriceUnitTv"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/orderTimeTv"
|
||||
tools:text="0.00" />
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:id="@+id/orderPriceUnitTv"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textColor="#FFFFFF"
|
||||
android:textSize="@dimen/dp_22"
|
||||
android:layout_marginBottom="@dimen/dp_8"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/orderTimeTv"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
android:text="元"/>
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:id="@+id/orderViewDetailBt"
|
||||
android:layout_width="@dimen/dp_162"
|
||||
android:layout_height="@dimen/dp_64"
|
||||
android:background="@drawable/taxi_order_button_status_bg"
|
||||
android:paddingRight="@dimen/dp_28"
|
||||
android:gravity="center"
|
||||
android:text="详情"
|
||||
android:textColor="#FFFFFF"
|
||||
android:textSize="@dimen/dp_24"
|
||||
android:textStyle="bold"
|
||||
app:layout_constraintTop_toTopOf="@+id/orderNumTv"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/orderNumTv"/>
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:id="@+id/orderTypeBt"
|
||||
android:layout_width="@dimen/dp_86"
|
||||
android:layout_height="@dimen/dp_36"
|
||||
android:layout_marginLeft="@dimen/dp_50"
|
||||
android:background="@drawable/taxi_order_button_status_bg"
|
||||
android:gravity="center"
|
||||
android:text="运营单"
|
||||
android:textColor="#FFFFFF"
|
||||
android:textSize="@dimen/dp_24"
|
||||
app:layout_constraintTop_toTopOf="@+id/orderTimeTv"
|
||||
app:layout_constraintLeft_toRightOf="@+id/orderTimeTv"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/orderTimeTv"/>
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:id="@+id/orderStatusBt"
|
||||
android:layout_width="@dimen/dp_86"
|
||||
android:layout_height="@dimen/dp_36"
|
||||
android:background="@drawable/waiting_btn_bg"
|
||||
android:gravity="center"
|
||||
android:text=""
|
||||
android:textColor="#FFFFFF"
|
||||
android:layout_marginLeft="@dimen/dp_18"
|
||||
android:textSize="@dimen/dp_24"
|
||||
app:layout_constraintTop_toTopOf="@+id/orderTimeTv"
|
||||
app:layout_constraintLeft_toRightOf="@+id/orderTypeBt"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/orderTimeTv"/>
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/orderTaskStationView"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/dp_50"
|
||||
android:padding="@dimen/dp_40"
|
||||
app:layout_constraintLeft_toLeftOf="@+id/orderNumTv"
|
||||
app:layout_constraintRight_toRightOf="@+id/orderViewDetailBt"
|
||||
app:layout_constraintTop_toBottomOf="@+id/orderNumTv"
|
||||
android:background="@drawable/order_task_list_bg"
|
||||
android:visibility="visible"/>
|
||||
|
||||
<View
|
||||
android:id="@+id/module_och_taxi_order_divider"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="@dimen/dp_1"
|
||||
app:layout_goneMarginTop="@dimen/dp_70"
|
||||
android:layout_marginTop="@dimen/dp_70"
|
||||
android:padding="10dp"
|
||||
android:background="#598E9DD4"
|
||||
app:layout_constraintTop_toBottomOf="@+id/orderTaskStationView"
|
||||
app:layout_constraintLeft_toLeftOf="@+id/orderTimeTv"
|
||||
app:layout_constraintRight_toRightOf="@+id/orderPriceUnitTv"/>
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -1,19 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/order_day_tv"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/taxi_order_list_item_height"
|
||||
android:gravity="center"
|
||||
android:text="2020.08.17"
|
||||
android:textColor="#FFFFFF"
|
||||
android:textSize="@dimen/dp_34"
|
||||
android:layout_marginTop="40dp"
|
||||
android:background="#80203076">
|
||||
</TextView>
|
||||
<include layout="@layout/taxi_orders_list_item"/>
|
||||
</LinearLayout>
|
||||
@@ -1,127 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingLeft="60dp"
|
||||
android:paddingTop="36dp"
|
||||
android:paddingRight="60dp">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/order_time_hm_tv"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="9:01"
|
||||
android:textColor="#8E9DD4"
|
||||
android:textSize="@dimen/dp_40" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/order_status_bt"
|
||||
android:layout_width="90dp"
|
||||
android:layout_height="38dp"
|
||||
android:layout_alignParentRight="true"
|
||||
android:background="@drawable/taxi_order_button_status_bg"
|
||||
android:text="服务中"
|
||||
android:textColor="#FFFFFF"
|
||||
android:textSize="@dimen/dp_24" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/order_type_bt"
|
||||
android:layout_width="90dp"
|
||||
android:layout_height="38dp"
|
||||
android:layout_marginRight="18dp"
|
||||
android:layout_toLeftOf="@+id/order_status_bt"
|
||||
android:background="@drawable/taxi_order_button_type_bg"
|
||||
android:text="即时单"
|
||||
android:textColor="#FFFFFF"
|
||||
android:textSize="@dimen/dp_24" />
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/order_item_cl"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/order_time_hm_tv"
|
||||
android:orientation="vertical"
|
||||
android:layout_marginTop="30dp">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/grab_order_start_greenDot"
|
||||
android:layout_width="@dimen/dp_30"
|
||||
android:layout_height="@dimen/dp_30"
|
||||
android:src="@drawable/taxi_driver_circle_green_big"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/grab_order_start_station"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintTop_toTopOf="@+id/grab_order_start_station" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/grab_order_start_station"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
tools:text="后路站"
|
||||
android:maxLines="2"
|
||||
android:ellipsize="end"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="40dp"
|
||||
android:textColor="#FFFFFF"
|
||||
android:textSize="@dimen/dp_44" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/grab_order_end_dotLine"
|
||||
app:layout_constraintBottom_toTopOf="@+id/grab_order_end_blueDot"
|
||||
app:layout_constraintLeft_toLeftOf="@+id/grab_order_start_greenDot"
|
||||
app:layout_constraintRight_toRightOf="@+id/grab_order_start_greenDot"
|
||||
app:layout_constraintTop_toBottomOf="@+id/grab_order_start_greenDot"
|
||||
android:layout_width="@dimen/dp_4"
|
||||
android:layout_height="0dp"
|
||||
android:scaleType="fitXY"
|
||||
android:src="@drawable/taxi_dot_line" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/grab_order_end_blueDot"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/grab_order_end_station"
|
||||
app:layout_constraintLeft_toLeftOf="@+id/grab_order_start_greenDot"
|
||||
app:layout_constraintTop_toTopOf="@+id/grab_order_end_station"
|
||||
android:layout_width="@dimen/dp_30"
|
||||
android:layout_height="@dimen/dp_30"
|
||||
android:src="@drawable/taxi_driver_circle_blue_big" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/grab_order_end_station"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textColor="#FFFFFF"
|
||||
android:textSize="@dimen/dp_44"
|
||||
android:maxLines="2"
|
||||
android:ellipsize="end"
|
||||
android:layout_marginTop="40dp"
|
||||
app:layout_constraintTop_toBottomOf="@+id/grab_order_start_station"
|
||||
app:layout_constraintLeft_toLeftOf="@+id/grab_order_start_station"
|
||||
tools:text="后路站1" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/order_num"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textColor="#8E9DD4"
|
||||
android:textSize="@dimen/dp_40"
|
||||
android:layout_marginTop="40dp"
|
||||
app:layout_constraintTop_toBottomOf="@+id/grab_order_end_blueDot"
|
||||
app:layout_constraintLeft_toLeftOf="@+id/grab_order_end_blueDot"
|
||||
tools:text="订单编号111111" />
|
||||
|
||||
<View
|
||||
android:id="@+id/module_och_taxi_order_divider"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="1dp"
|
||||
app:layout_goneMarginTop="40dp"
|
||||
android:layout_marginTop="26dp"
|
||||
android:padding="10dp"
|
||||
android:background="#598E9DD4"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/order_num" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
</RelativeLayout>
|
||||
@@ -1,46 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="#F0151D41">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/taxi_operation_data_title"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="@dimen/dp_86"
|
||||
android:gravity="center"
|
||||
android:text="网约车运营数据"
|
||||
android:textColor="#FFFFFF"
|
||||
android:textSize="@dimen/dp_42"
|
||||
android:layout_marginTop="@dimen/dp_78"
|
||||
android:layout_marginLeft="@dimen/dp_114"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintLeft_toLeftOf="parent"/>
|
||||
|
||||
<View
|
||||
android:layout_width="@dimen/dp_14"
|
||||
android:layout_height="@dimen/dp_50"
|
||||
android:layout_marginRight="@dimen/dp_20"
|
||||
android:background="#2966EC"
|
||||
app:layout_constraintTop_toTopOf="@+id/taxi_operation_data_title"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/taxi_operation_data_title"
|
||||
app:layout_constraintRight_toLeftOf="@+id/taxi_operation_data_title"/>
|
||||
|
||||
<include
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:visibility="gone"
|
||||
layout="@layout/taxi_no_data_common_view"/>
|
||||
<ImageView
|
||||
android:id="@+id/module_och_taxi_order_list_close_iv"
|
||||
android:layout_width="@dimen/dp_106"
|
||||
android:layout_height="@dimen/dp_106"
|
||||
android:layout_marginRight="@dimen/dp_40"
|
||||
android:src="@drawable/taxi_order_cancel_close1"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toTopOf="@+id/taxi_operation_data_title"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/taxi_operation_data_title"/>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -0,0 +1,95 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="@dimen/dp_64"
|
||||
android:paddingRight="@dimen/dp_54">
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:id="@+id/taskTimeTv"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="下单时间 9:01"
|
||||
android:textColor="#8E9DD4"
|
||||
android:textSize="@dimen/dp_38"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"/>
|
||||
<Button
|
||||
android:id="@+id/taskTypeBt"
|
||||
android:layout_width="90dp"
|
||||
android:layout_height="38dp"
|
||||
android:background="@drawable/taxi_order_button_type_bg"
|
||||
android:text="演练单"
|
||||
android:textStyle="bold"
|
||||
android:textColor="#FFFFFF"
|
||||
android:layout_marginLeft="@dimen/dp_48"
|
||||
android:textSize="@dimen/dp_24"
|
||||
app:layout_constraintLeft_toRightOf="@+id/taskTimeTv"
|
||||
app:layout_constraintTop_toTopOf="@+id/taskTimeTv"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/taskTimeTv"/>
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:id="@+id/taskStartSiteTv"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/dp_46"
|
||||
app:layout_constraintTop_toBottomOf="@+id/taskTimeTv"
|
||||
app:layout_constraintLeft_toRightOf="@+id/taskCircleTag1"
|
||||
android:textSize="@dimen/dp_40"
|
||||
android:layout_marginLeft="@dimen/dp_10"
|
||||
android:textColor="#FFFFFF"
|
||||
android:text="起点"
|
||||
android:textStyle="bold"/>
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:id="@+id/taskEndSiteTv"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintLeft_toLeftOf="@+id/taskStartSiteTv"
|
||||
app:layout_constraintTop_toBottomOf="@+id/taskStartSiteTv"
|
||||
android:layout_marginTop="@dimen/dp_30"
|
||||
android:textSize="@dimen/dp_40"
|
||||
android:textColor="#FFFFFF"
|
||||
android:text="终点"
|
||||
android:textStyle="bold"/>
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:id="@+id/taskCircleTag1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:src="@drawable/taxi_driver_circle_green_big"
|
||||
app:layout_constraintLeft_toLeftOf="@+id/taskTimeTv"
|
||||
app:layout_constraintTop_toTopOf="@+id/taskStartSiteTv"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/taskStartSiteTv"/>
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:id="@+id/taskCircleTag2"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:src="@drawable/taxi_driver_circle_blue_big"
|
||||
app:layout_constraintLeft_toLeftOf="@+id/taskCircleTag1"
|
||||
app:layout_constraintRight_toRightOf="@+id/taskCircleTag1"
|
||||
app:layout_constraintTop_toTopOf="@+id/taskEndSiteTv"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/taskEndSiteTv"/>
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:src="@drawable/taxi_dot_line"
|
||||
app:layout_constraintTop_toTopOf="@+id/taskStartSiteTv"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/taskEndSiteTv"
|
||||
app:layout_constraintLeft_toLeftOf="@+id/taskCircleTag1"
|
||||
app:layout_constraintRight_toRightOf="@+id/taskCircleTag1"/>
|
||||
|
||||
<View
|
||||
android:id="@+id/task_divider"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/dp_1"
|
||||
app:layout_goneMarginTop="@dimen/dp_70"
|
||||
android:layout_marginTop="@dimen/dp_70"
|
||||
android:padding="10dp"
|
||||
android:background="#598E9DD4"
|
||||
app:layout_constraintTop_toBottomOf="@+id/taskEndSiteTv" />
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -81,8 +81,6 @@
|
||||
<dimen name="module_och_taxi_order_text_marginRight">31.5dp</dimen>
|
||||
|
||||
|
||||
<dimen name="taxi_operation_data_item_width">800dp</dimen>
|
||||
<dimen name="taxi_operation_data_item_height">222dp</dimen>
|
||||
<dimen name="taxi_order_cancel_width">1120dp</dimen>
|
||||
<dimen name="taxi_order_cancel_btn_height">162dp</dimen>
|
||||
<dimen name="taxi_grab_order_start_station_width">446dp</dimen>
|
||||
|
||||
@@ -58,5 +58,7 @@
|
||||
|
||||
<string name="waiting_server">待服务</string>
|
||||
|
||||
<string name="view_data">查看</string>
|
||||
|
||||
<!-- endregion -->
|
||||
</resources>
|
||||
Reference in New Issue
Block a user