Commit a520beb8 authored by shiyl's avatar shiyl

Merge branch 'feature/dev_fight_order' of...

Merge branch 'feature/dev_fight_order' of https://git.yidian-inc.com:8021/bp/ShenghuoquanBusiness into feature/dev_fight_order

# Conflicts:
#	Components/BOrder/src/main/java/com/yidian/shenghuoquan/border/http/OrderApiService.kt
parents 488d8f08 0e9b1e55
...@@ -12,4 +12,7 @@ object IntentConstants { ...@@ -12,4 +12,7 @@ object IntentConstants {
// 认证首页跳转来源 // 认证首页跳转来源
const val KEY_EXTRA_LIFE_ACCOUNT_AUTH_FROM = "lifeAccountAuthFrom" const val KEY_EXTRA_LIFE_ACCOUNT_AUTH_FROM = "lifeAccountAuthFrom"
// 订单id
const val KEY_EXTRA_ORDER_ID = "orderId"
} }
...@@ -48,6 +48,15 @@ class CommonTopBarView @JvmOverloads constructor( ...@@ -48,6 +48,15 @@ class CommonTopBarView @JvmOverloads constructor(
if (it.isNotEmpty()) visibility = View.VISIBLE if (it.isNotEmpty()) visibility = View.VISIBLE
viewBinding.tvAction.text = it viewBinding.tvAction.text = it
} }
typeArray.getColor(R.styleable.CommonTopBarView_CommonTopBarView_bg_color, -1).let {
if (it != -1) viewBinding.root.setBackgroundColor(it)
}
typeArray.getColor(R.styleable.CommonTopBarView_CommonTopBarView_title_text_color, -1).let {
if (it != -1) viewBinding.tvTitle.setTextColor(it)
}
typeArray.getResourceId(R.styleable.CommonTopBarView_CommonTopBarView_back_img, -1).let {
if (it != -1) viewBinding.ivBack.setImageResource(it)
}
typeArray.recycle() typeArray.recycle()
viewBinding.ivBack.setOnClickListener(this) viewBinding.ivBack.setOnClickListener(this)
......
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<declare-styleable name="CommonTopBarView"> <declare-styleable name="CommonTopBarView">
<!--标题文字-->
<attr name="CommonTopBarView_title_text" format="string" /> <attr name="CommonTopBarView_title_text" format="string" />
<!--操作按钮文字-->
<attr name="CommonTopBarView_action_text" format="string" /> <attr name="CommonTopBarView_action_text" format="string" />
<!--整体背景色-->
<attr name="CommonTopBarView_bg_color" format="color" />
<!--标题文字颜色-->
<attr name="CommonTopBarView_title_text_color" format="color" />
<!--返回按钮图标-->
<attr name="CommonTopBarView_back_img" format="reference" />
</declare-styleable> </declare-styleable>
<declare-styleable name="CommonEmptyPageView"> <declare-styleable name="CommonEmptyPageView">
<attr name="CommonEmptyPageView_place_holder_img" format="reference" /> <attr name="CommonEmptyPageView_place_holder_img" format="reference" />
......
package com.yidian.shenghuoquan.border.adapter
import android.graphics.Rect
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.databinding.DataBindingUtil
import androidx.recyclerview.widget.RecyclerView
import com.yidian.shenghuoquan.border.R
import com.yidian.shenghuoquan.border.databinding.BorderItemPickupPointListBinding
import com.yidian.shenghuoquan.border.viewmodel.PickupPointListItemViewModel
import com.yidian.utils.DensityUtil
/**
* author: yinjiacheng
* date: 2021/8/24 16:57
* description: 自提点列表
*/
class PickupPointListAdapter : RecyclerView.Adapter<PickupPointListAdapter.PickupPointListViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PickupPointListViewHolder {
val binding = DataBindingUtil.inflate<BorderItemPickupPointListBinding>(
LayoutInflater.from(parent.context),
R.layout.border_item_pickup_point_list,
parent,
false
)
return PickupPointListViewHolder(binding.root, binding)
}
override fun onBindViewHolder(holder: PickupPointListViewHolder, position: Int) {
holder.binding.vm = PickupPointListItemViewModel()
}
override fun getItemCount(): Int {
return 0
}
class PickupPointListViewHolder(itemView: View, val binding: BorderItemPickupPointListBinding) : RecyclerView.ViewHolder(itemView)
class PickupPointListItemDecoration : RecyclerView.ItemDecoration() {
override fun getItemOffsets(outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State) {
outRect.top = DensityUtil.dp2px(28F)
}
}
}
package com.yidian.shenghuoquan.border.dto
import com.google.gson.annotations.SerializedName
/**
* author: yinjiacheng
* date: 2021/8/24 18:31
* description: 自提点列表数据结构
*/
data class PickupPointListDto(
@SerializedName("list")
val list: List<PickupPoint>,
@SerializedName("total") // 总数
val total: Int,
@SerializedName("total_page") // 总页数
val totalPage: Int
)
data class PickupPoint(
@SerializedName("address") // 详细地址
val address: String,
@SerializedName("area") // 区
val area: String,
@SerializedName("city") // 市
val city: String,
@SerializedName("contact_name") // 联系人
val contactName: String,
@SerializedName("create_time")
val createTime: String,
@SerializedName("distance") // 距离 单位:km(如果入参没有传longitude或latitude则没有此字段)
val distance: Double,
@SerializedName("is_delete")
val isDelete: Int,
@SerializedName("latitude") // 纬度
val latitude: String,
@SerializedName("life_account_id") // 生活号id
val lifeAccountId: String,
@SerializedName("location")
val location: String,
@SerializedName("longitude") // 经度
val longitude: String,
@SerializedName("phone") // 联系电话
val phone: String,
@SerializedName("province") // 省
val province: String,
@SerializedName("take_place_id") // 自提点id
val takePlaceId: Int,
@SerializedName("take_place_name") // 自提点名称
val takePlaceName: String,
@SerializedName("update_time")
val updateTime: String
)
...@@ -2,10 +2,7 @@ package com.yidian.shenghuoquan.border.http ...@@ -2,10 +2,7 @@ package com.yidian.shenghuoquan.border.http
import com.yidian.bcommon.http.HttpResult import com.yidian.bcommon.http.HttpResult
import io.reactivex.rxjava3.core.Observable import io.reactivex.rxjava3.core.Observable
import retrofit2.http.Body import retrofit2.http.*
import retrofit2.http.Headers
import retrofit2.http.POST
import retrofit2.http.QueryMap
/** /**
* author: yinjiacheng * author: yinjiacheng
...@@ -20,6 +17,7 @@ interface OrderApiService { ...@@ -20,6 +17,7 @@ interface OrderApiService {
const val orderConfirm = "/order/order/order_confirm_page" const val orderConfirm = "/order/order/order_confirm_page"
const val createOrder = "/order/order/create" const val createOrder = "/order/order/create"
const val orderPay = "/pay/order/pay" const val orderPay = "/pay/order/pay"
const val getPickupPointList = "/marketing/wxapp/get_bind_take_place_list"
} }
/** /**
...@@ -29,7 +27,7 @@ interface OrderApiService { ...@@ -29,7 +27,7 @@ interface OrderApiService {
@Headers("Content-Type: application/json") @Headers("Content-Type: application/json")
fun getOrderDetail( fun getOrderDetail(
@QueryMap commonParams: Map<String, String>, @QueryMap commonParams: Map<String, String>,
@QueryMap requestParams: Map<String, String?> @Body requestParams: Map<String, String?>
): Observable<HttpResult<Any?>> ): Observable<HttpResult<Any?>>
/** /**
...@@ -39,7 +37,7 @@ interface OrderApiService { ...@@ -39,7 +37,7 @@ interface OrderApiService {
@Headers("Content-Type: application/json") @Headers("Content-Type: application/json")
fun applyRefund( fun applyRefund(
@QueryMap commonParams: Map<String, String>, @QueryMap commonParams: Map<String, String>,
@QueryMap requestParams: Map<String, String?> @Body requestParams: Map<String, String?>
): Observable<HttpResult<Any?>> ): Observable<HttpResult<Any?>>
/** /**
...@@ -72,4 +70,13 @@ interface OrderApiService { ...@@ -72,4 +70,13 @@ interface OrderApiService {
@Body requestParams: Map<String, String?> @Body requestParams: Map<String, String?>
): Observable<HttpResult<Any?>> ): Observable<HttpResult<Any?>>
/**
* 获取活动设置的自提点列表
*/
@GET(getPickupPointList)
fun getPickupPointList(
@QueryMap commonParams: Map<String, String>,
@QueryMap requestParams: Map<String, String?>
): Observable<HttpResult<Any?>>
} }
...@@ -5,12 +5,10 @@ import com.yidian.bcommon.http.HttpResult ...@@ -5,12 +5,10 @@ import com.yidian.bcommon.http.HttpResult
import com.yidian.bcommon.http.HttpResultSubscriber import com.yidian.bcommon.http.HttpResultSubscriber
import com.yidian.bcommon.http.TransformUtil import com.yidian.bcommon.http.TransformUtil
import com.yidian.http.ServiceFactory import com.yidian.http.ServiceFactory
import com.yidian.shenghuoquan.border.dto.CreateOrderResDto import com.yidian.shenghuoquan.border.dto.*
import com.yidian.shenghuoquan.border.dto.OrderConfirmResDto
import com.yidian.shenghuoquan.border.dto.OrderDetailDto
import com.yidian.shenghuoquan.border.dto.OrderPayResDto
import com.yidian.shenghuoquan.border.http.callback.IApplyRefundCallback import com.yidian.shenghuoquan.border.http.callback.IApplyRefundCallback
import com.yidian.shenghuoquan.border.http.callback.IGetOrderDetailCallback import com.yidian.shenghuoquan.border.http.callback.IGetOrderDetailCallback
import com.yidian.shenghuoquan.border.http.callback.IGetPickupPointListCallback
/** /**
* author: yinjiacheng * author: yinjiacheng
...@@ -123,4 +121,25 @@ object OrderRemoteDataSource { ...@@ -123,4 +121,25 @@ object OrderRemoteDataSource {
} }
}) })
} }
/**
* 获取活动设置的自提点列表
*/
fun getPickupPointList(callback: IGetPickupPointListCallback, requestParams: HashMap<String, String?>) {
val timeStamp = System.currentTimeMillis()
val publicParamsMap = HttpParamsUtils.getPublicParamsMap(timeStamp)
val privateParamsMap = HttpParamsUtils.getPrivateParamsMap(requestParams, timeStamp)
ServiceFactory.getInstance().createService(OrderApiService::class.java)
.getPickupPointList(publicParamsMap, privateParamsMap)
.compose(TransformUtil.defaultSchedulers())
.subscribe(object : HttpResultSubscriber<PickupPointListDto>() {
override fun onSuccess(result: HttpResult<PickupPointListDto>?) {
callback.getPickupPointListSuccess(result?.result)
}
override fun onFailure(result: HttpResult<PickupPointListDto>?) {
callback.getPickupPointListFailure(result?.reason)
}
})
}
} }
package com.yidian.shenghuoquan.border.http.callback
import com.yidian.shenghuoquan.border.dto.PickupPointListDto
/**
* author: yinjiacheng
* date: 2021/8/24 19:01
* description: API /marketing/wxapp/get_bind_take_place_list
*/
interface IGetPickupPointListCallback {
fun getPickupPointListSuccess(result: PickupPointListDto?)
fun getPickupPointListFailure(message: String?)
}
package com.yidian.shenghuoquan.border.ui package com.yidian.shenghuoquan.border.ui
import androidx.activity.viewModels import androidx.activity.viewModels
import com.yidian.bcommon.constant.IntentConstants
import com.yidian.bcommon.constant.XRouterPathConstants
import com.yidian.bcommon.mvvm.BaseMvvmActivity import com.yidian.bcommon.mvvm.BaseMvvmActivity
import com.yidian.shenghuoquan.border.R import com.yidian.shenghuoquan.border.R
import com.yidian.shenghuoquan.border.databinding.BorderActivityOrderDetailBinding import com.yidian.shenghuoquan.border.databinding.BorderActivityOrderDetailBinding
import com.yidian.shenghuoquan.border.manager.OrderStatusManager import com.yidian.shenghuoquan.border.manager.OrderStatusManager
import com.yidian.shenghuoquan.border.viewmodel.OrderDetailViewModel import com.yidian.shenghuoquan.border.viewmodel.OrderDetailViewModel
import com.yidian.xpage.XPageViewProtocol
/** /**
* author: yinjiacheng * author: yinjiacheng
* date: 2021/8/21 09:29 * date: 2021/8/21 09:29
* description: 订单详情页 * description: 订单详情页
*/ */
class OrderDetailActivity : BaseMvvmActivity<BorderActivityOrderDetailBinding, OrderDetailViewModel>() { class OrderDetailActivity : BaseMvvmActivity<BorderActivityOrderDetailBinding, OrderDetailViewModel>(), XPageViewProtocol {
override val layoutId: Int = R.layout.border_activity_order_detail override val layoutId: Int = R.layout.border_activity_order_detail
override val vm: OrderDetailViewModel by viewModels() override val vm: OrderDetailViewModel by viewModels()
/**
* 订单id
*/
private val orderId by lazy {
intent.getSerializableExtra(XRouterPathConstants.ParamsKey)?.let { params ->
(params as HashMap<*, *>)[IntentConstants.KEY_EXTRA_ORDER_ID]?.let {
it as String
}
}
}
override fun getXPageName(): String {
return XRouterPathConstants.ORDER_DETAIL_ACTIVITY
}
override fun initView() { override fun initView() {
vm.orderDetailData.observe(this, { vm.orderDetailData.observe(this, {
// 获取当前订单状态 // 获取当前订单状态
...@@ -27,7 +45,7 @@ class OrderDetailActivity : BaseMvvmActivity<BorderActivityOrderDetailBinding, O ...@@ -27,7 +45,7 @@ class OrderDetailActivity : BaseMvvmActivity<BorderActivityOrderDetailBinding, O
binding.ivCommodityInfo.setCommodityInfo(status, it) binding.ivCommodityInfo.setCommodityInfo(status, it)
binding.ivOrderInfo.setOrderInfo(status, it) binding.ivOrderInfo.setOrderInfo(status, it)
}) })
// Test // 请求订单详情
vm.requestOrderDetail("21082017225320101002") orderId?.let { vm.requestOrderDetail(it) }
} }
} }
package com.yidian.shenghuoquan.border.ui
import androidx.activity.viewModels
import androidx.recyclerview.widget.LinearLayoutManager
import com.yidian.bcommon.constant.XRouterPathConstants
import com.yidian.bcommon.mvvm.BaseMvvmActivity
import com.yidian.shenghuoquan.border.R
import com.yidian.shenghuoquan.border.adapter.PickupPointListAdapter
import com.yidian.shenghuoquan.border.databinding.BorderActivitySelectPickupPointBinding
import com.yidian.shenghuoquan.border.viewmodel.SelectPickupPointViewModel
import com.yidian.xpage.XPageViewProtocol
/**
* author: yinjiacheng
* date: 2021/8/24 14:02
* description: 选择自提点页
*/
class SelectPickupPointActivity : BaseMvvmActivity<BorderActivitySelectPickupPointBinding, SelectPickupPointViewModel>(),
XPageViewProtocol {
override val layoutId = R.layout.border_activity_select_pickup_point
override val vm: SelectPickupPointViewModel by viewModels()
private val adapter by lazy { PickupPointListAdapter() }
override fun getXPageName(): String {
return XRouterPathConstants.PICKUP_POINT_ACTIVITY
}
override fun initView() {
initRecyclerView()
}
private fun initRecyclerView() {
binding.rvPickupPointList.adapter = adapter
binding.rvPickupPointList.layoutManager = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)
binding.rvPickupPointList.addItemDecoration(PickupPointListAdapter.PickupPointListItemDecoration())
}
}
package com.yidian.shenghuoquan.border.ui.widget package com.yidian.shenghuoquan.border.ui.widget
import android.Manifest
import android.content.Context import android.content.Context
import android.content.Intent
import android.net.Uri
import android.util.AttributeSet import android.util.AttributeSet
import android.view.LayoutInflater import android.view.LayoutInflater
import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.ConstraintLayout
import androidx.databinding.DataBindingUtil import androidx.databinding.DataBindingUtil
import androidx.fragment.app.FragmentActivity
import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.LifecycleOwner
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import com.tbruyelle.rxpermissions3.RxPermissions
import com.yidian.bcommon.utils.ToastUtils import com.yidian.bcommon.utils.ToastUtils
import com.yidian.bcommon.widget.CommonHintDialog import com.yidian.bcommon.widget.CommonHintDialog
import com.yidian.shenghuoquan.border.R import com.yidian.shenghuoquan.border.R
...@@ -69,6 +74,19 @@ class OrderCommodityInfoView @JvmOverloads constructor(context: Context, attrs: ...@@ -69,6 +74,19 @@ class OrderCommodityInfoView @JvmOverloads constructor(context: Context, attrs:
ToastUtils.showShortSafe("已申请退款") ToastUtils.showShortSafe("已申请退款")
} }
}) })
// 监听点击联系卖家
vm.contractSeller.observe(context as LifecycleOwner, { phone ->
// 先判断权限
RxPermissions(context as FragmentActivity).request(Manifest.permission.CALL_PHONE).subscribe { granted ->
if (granted) {
val intent = Intent(Intent.ACTION_DIAL)
intent.data = Uri.parse("tel:$phone")
context.startActivity(intent)
} else {
ToastUtils.showShortSafe("请在设置里同意相关权限")
}
}
})
} }
/** /**
......
package com.yidian.shenghuoquan.border.ui.widget package com.yidian.shenghuoquan.border.ui.widget
import android.Manifest
import android.content.Context import android.content.Context
import android.content.Intent
import android.net.Uri
import android.util.AttributeSet import android.util.AttributeSet
import android.view.LayoutInflater import android.view.LayoutInflater
import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.ConstraintLayout
import androidx.databinding.DataBindingUtil import androidx.databinding.DataBindingUtil
import androidx.fragment.app.FragmentActivity
import androidx.lifecycle.LifecycleOwner
import com.tbruyelle.rxpermissions3.RxPermissions
import com.yidian.bcommon.utils.ToastUtils
import com.yidian.shenghuoquan.border.R import com.yidian.shenghuoquan.border.R
import com.yidian.shenghuoquan.border.databinding.BorderViewOrderPickupPointInfoBinding import com.yidian.shenghuoquan.border.databinding.BorderViewOrderPickupPointInfoBinding
import com.yidian.shenghuoquan.border.dto.PlaceList import com.yidian.shenghuoquan.border.dto.PlaceList
...@@ -25,13 +32,37 @@ class OrderPickupPointInfoView @JvmOverloads constructor(context: Context, attrs ...@@ -25,13 +32,37 @@ class OrderPickupPointInfoView @JvmOverloads constructor(context: Context, attrs
this, this,
true true
) )
private val vm by lazy { OrderPickupPointViewModel() }
init {
registerUIEvent()
}
/**
* 注册UI事件监听
*/
private fun registerUIEvent() {
// 监听点击联系自提点
vm.contractPickupPoint.observe(context as LifecycleOwner, { phone ->
// 先判断权限
RxPermissions(context as FragmentActivity).request(Manifest.permission.CALL_PHONE).subscribe { granted ->
if (granted) {
val intent = Intent(Intent.ACTION_DIAL)
intent.data = Uri.parse("tel:$phone")
context.startActivity(intent)
} else {
ToastUtils.showShortSafe("请在设置里同意相关权限")
}
}
})
}
/** /**
* 设置自提点 * 设置自提点
* @param info 自提点信息 * @param info 自提点信息
*/ */
fun setPickupPoint(info: PlaceList?) { fun setPickupPoint(info: PlaceList?) {
binding.vm = OrderPickupPointViewModel() binding.vm = vm
binding.data = info binding.data = info
} }
} }
package com.yidian.shenghuoquan.border.ui.widget
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.inputmethod.EditorInfo
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.databinding.DataBindingUtil
import androidx.lifecycle.LifecycleOwner
import com.yidian.shenghuoquan.border.R
import com.yidian.shenghuoquan.border.databinding.BorderViewPickupPointSearchBinding
import com.yidian.shenghuoquan.border.viewmodel.PickupPointSearchViewModel
/**
* author: yinjiacheng
* date: 2021/8/24 15:07
* description: 自提点搜索框
*/
class PickupPointSearchView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyle: Int = 0) :
ConstraintLayout(context, attrs, defStyle) {
private val binding = DataBindingUtil.inflate<BorderViewPickupPointSearchBinding>(
LayoutInflater.from(getContext()),
R.layout.border_view_pickup_point_search,
this,
true
)
private val vm by lazy { PickupPointSearchViewModel() }
init {
binding.vm = vm
registerUIEvent()
initView()
}
private fun initView() {
binding.etSearch.setOnEditorActionListener { v, actionId, event ->
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
// TODO: 2021/8/24 请求搜索自提点
}
false
}
}
/**
* 注册UI事件监听
*/
private fun registerUIEvent() {
vm.clearSearch.observe(context as LifecycleOwner, {
// 清空搜索框
binding.etSearch.setText("")
})
}
}
package com.yidian.shenghuoquan.border.viewmodel package com.yidian.shenghuoquan.border.viewmodel
import android.content.Intent
import android.net.Uri
import androidx.lifecycle.LiveData import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import com.yidian.bcommon.app.YdBaseApplication
import com.yidian.bcommon.mvvm.BaseViewModel import com.yidian.bcommon.mvvm.BaseViewModel
import com.yidian.shenghuoquan.border.http.OrderRemoteDataSource import com.yidian.shenghuoquan.border.http.OrderRemoteDataSource
import com.yidian.shenghuoquan.border.http.callback.IApplyRefundCallback import com.yidian.shenghuoquan.border.http.callback.IApplyRefundCallback
...@@ -22,6 +19,9 @@ class OrderCommodityInfoViewModel : BaseViewModel() { ...@@ -22,6 +19,9 @@ class OrderCommodityInfoViewModel : BaseViewModel() {
private val _applyRefund = MutableLiveData<String>() private val _applyRefund = MutableLiveData<String>()
val applyRefund: LiveData<String> = _applyRefund val applyRefund: LiveData<String> = _applyRefund
private val _contractSeller = MutableLiveData<String>()
val contractSeller: LiveData<String> = _contractSeller
/** /**
* 申请退款 * 申请退款
* @param orderId 订单id * @param orderId 订单id
...@@ -32,14 +32,10 @@ class OrderCommodityInfoViewModel : BaseViewModel() { ...@@ -32,14 +32,10 @@ class OrderCommodityInfoViewModel : BaseViewModel() {
/** /**
* 联系卖家 * 联系卖家
* 打开拨号界面
* @param phone 电话号码 * @param phone 电话号码
*/ */
fun contractSeller(phone: String) { fun contractSeller(phone: String) {
val intent = Intent(Intent.ACTION_DIAL) _contractSeller.value = phone
intent.data = Uri.parse("tel:$phone")
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
YdBaseApplication.context.startActivity(intent)
} }
/** /**
......
package com.yidian.shenghuoquan.border.viewmodel package com.yidian.shenghuoquan.border.viewmodel
import android.content.ClipData
import android.content.ClipboardManager
import android.content.Context
import com.yidian.bcommon.app.YdBaseApplication
import com.yidian.bcommon.mvvm.BaseViewModel import com.yidian.bcommon.mvvm.BaseViewModel
import com.yidian.bcommon.utils.ToastUtils
/** /**
* author: yinjiacheng * author: yinjiacheng
...@@ -10,9 +15,12 @@ import com.yidian.bcommon.mvvm.BaseViewModel ...@@ -10,9 +15,12 @@ import com.yidian.bcommon.mvvm.BaseViewModel
class OrderInfoViewModel : BaseViewModel() { class OrderInfoViewModel : BaseViewModel() {
/** /**
* 复制订单 * 复制订单id
*/ */
fun copyOrderNo() { fun copyOrderId(orderId: String) {
val clipboard = YdBaseApplication.context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
val data = ClipData.newPlainText("copyOrderId", orderId)
clipboard.setPrimaryClip(data)
ToastUtils.showShortSafe("已复制")
} }
} }
package com.yidian.shenghuoquan.border.viewmodel package com.yidian.shenghuoquan.border.viewmodel
import android.content.Intent import androidx.lifecycle.LiveData
import android.net.Uri import androidx.lifecycle.MutableLiveData
import com.yidian.bcommon.app.YdBaseApplication
import com.yidian.bcommon.mvvm.BaseViewModel import com.yidian.bcommon.mvvm.BaseViewModel
/** /**
...@@ -12,15 +11,14 @@ import com.yidian.bcommon.mvvm.BaseViewModel ...@@ -12,15 +11,14 @@ import com.yidian.bcommon.mvvm.BaseViewModel
*/ */
class OrderPickupPointViewModel : BaseViewModel() { class OrderPickupPointViewModel : BaseViewModel() {
private val _contractPickupPoint = MutableLiveData<String>()
val contractPickupPoint: LiveData<String> = _contractPickupPoint
/** /**
* 联系自提点 * 联系自提点
* 打开拨号界面
* @param phone 电话号码 * @param phone 电话号码
*/ */
fun contractPickupPoint(phone: String) { fun contractPickupPoint(phone: String) {
val intent = Intent(Intent.ACTION_DIAL) _contractPickupPoint.value = phone
intent.data = Uri.parse("tel:$phone")
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
YdBaseApplication.context.startActivity(intent)
} }
} }
package com.yidian.shenghuoquan.border.viewmodel
import com.yidian.bcommon.mvvm.BaseViewModel
/**
* author: yinjiacheng
* date: 2021/8/24 17:19
* description: 自提点列表
*/
class PickupPointListItemViewModel : BaseViewModel() {
}
package com.yidian.shenghuoquan.border.viewmodel
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import com.yidian.bcommon.mvvm.BaseViewModel
/**
* author: yinjiacheng
* date: 2021/8/24 15:34
* description: 自提点搜索
*/
class PickupPointSearchViewModel : BaseViewModel() {
private val _clearSearch = MutableLiveData<Unit>()
val clearSearch: LiveData<Unit> = _clearSearch
/**
* 清空搜索
* 请求附近自提点数据
*/
fun clearSearch() {
_clearSearch.value = Unit
// TODO: 2021/8/24 请求附近自提点
}
}
package com.yidian.shenghuoquan.border.viewmodel
import com.yidian.bcommon.mvvm.BaseViewModel
/**
* author: yinjiacheng
* date: 2021/8/24 14:03
* description: 自提点选择
*/
class SelectPickupPointViewModel : BaseViewModel() {
}
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/icon_pickup_point_selected" android:state_checked="true" />
<item android:drawable="@drawable/icon_pickup_point_unselected" android:state_checked="false" />
</selector>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/white" />
<corners android:radius="@dimen/dp10" />
</shape>
\ No newline at end of file
...@@ -18,7 +18,10 @@ ...@@ -18,7 +18,10 @@
android:id="@+id/bv_top_bar" android:id="@+id/bv_top_bar"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:CommonTopBarView_back_img="@drawable/icon_back_white"
app:CommonTopBarView_bg_color="@color/color_F6775B"
app:CommonTopBarView_title_text="@string/order_detail" app:CommonTopBarView_title_text="@string/order_detail"
app:CommonTopBarView_title_text_color="@color/white"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
<ScrollView <ScrollView
......
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="vm"
type="com.yidian.shenghuoquan.border.viewmodel.SelectPickupPointViewModel" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<com.yidian.bcommon.widget.CommonTopBarView
android:id="@+id/bv_top_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:CommonTopBarView_back_img="@drawable/icon_back_white"
app:CommonTopBarView_bg_color="@color/color_F6775B"
app:CommonTopBarView_title_text="@string/select_pickup_point"
app:CommonTopBarView_title_text_color="@color/white"
app:layout_constraintTop_toTopOf="parent" />
<com.yidian.shenghuoquan.border.ui.widget.PickupPointSearchView
android:id="@+id/sv_pickup_point_search"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp16"
android:layout_marginTop="@dimen/dp9"
android:layout_marginEnd="@dimen/dp16"
app:layout_constraintTop_toBottomOf="@id/bv_top_bar" />
<TextView
android:id="@+id/tv_nearby_pickup_point"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp16"
android:layout_marginTop="@dimen/dp20"
android:text="@string/nearby_pickup_point"
android:textColor="@color/color_333333"
android:textSize="@dimen/sp16"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/sv_pickup_point_search" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_pickup_point_list"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginStart="@dimen/dp16"
android:layout_marginTop="@dimen/dp20"
android:layout_marginEnd="@dimen/dp16"
android:layout_marginBottom="@dimen/dp20"
android:paddingStart="@dimen/dp16"
android:paddingEnd="@dimen/dp16"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_nearby_pickup_point" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<layout 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">
<data>
<variable
name="vm"
type="com.yidian.shenghuoquan.border.viewmodel.PickupPointListItemViewModel" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tv_pickup_point_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/color_333333"
android:textSize="@dimen/sp16"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="维多利亚3层" />
<TextView
android:id="@+id/tv_pickup_point_distance"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/color_D66948"
android:textSize="@dimen/sp14"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/tv_pickup_point_address"
tools:text="距您:2.7km" />
<View
android:layout_width="@dimen/dp1"
android:layout_height="@dimen/dp8"
android:background="@color/color_999999"
app:layout_constraintBottom_toBottomOf="@id/tv_pickup_point_distance"
app:layout_constraintEnd_toStartOf="@id/tv_pickup_point_address"
app:layout_constraintStart_toEndOf="@id/tv_pickup_point_distance"
app:layout_constraintTop_toTopOf="@id/tv_pickup_point_distance" />
<TextView
android:id="@+id/tv_pickup_point_address"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp17"
android:layout_marginTop="@dimen/dp8"
android:textColor="@color/color_999999"
android:textSize="@dimen/sp14"
app:layout_constraintStart_toEndOf="@id/tv_pickup_point_distance"
app:layout_constraintTop_toBottomOf="@id/tv_pickup_point_name"
tools:text="经济技术开发区燕顺路123号" />
<TextView
android:id="@+id/tv_pickup_point_contract"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp8"
android:textColor="@color/color_999999"
android:textSize="@dimen/sp14"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_pickup_point_address"
tools:text="提货点联系人:面团儿" />
<CheckBox
android:id="@+id/cb_pickup_point_select"
android:layout_width="@dimen/dp18"
android:layout_height="@dimen/dp18"
android:background="@drawable/selector_pickup_point_select"
android:button="@null"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
\ No newline at end of file
...@@ -101,6 +101,7 @@ ...@@ -101,6 +101,7 @@
android:layout_height="@dimen/dp20" android:layout_height="@dimen/dp20"
android:layout_marginTop="@dimen/dp18" android:layout_marginTop="@dimen/dp18"
android:src="@drawable/icon_order_coupon" android:src="@drawable/icon_order_coupon"
android:visibility="@{data.couponList.size() > 0 ? View.VISIBLE : View.GONE}"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_contract_seller" /> app:layout_constraintTop_toBottomOf="@id/tv_contract_seller" />
...@@ -111,9 +112,10 @@ ...@@ -111,9 +112,10 @@
android:layout_marginStart="@dimen/dp3" android:layout_marginStart="@dimen/dp3"
android:ellipsize="end" android:ellipsize="end"
android:maxLines="1" android:maxLines="1"
android:text='@{data.couponList.size() > 0 ? data.couponList.get(0).couponId : ""}'
android:textColor="@color/color_333333" android:textColor="@color/color_333333"
android:textSize="@dimen/sp14" android:textSize="@dimen/sp14"
android:visibility="@{data.couponList.size() > 0 ? View.VISIBLE : View.GONE}"
app:layout_constraintBottom_toBottomOf="@id/iv_coupon" app:layout_constraintBottom_toBottomOf="@id/iv_coupon"
app:layout_constraintEnd_toStartOf="@id/tv_coupon_amount" app:layout_constraintEnd_toStartOf="@id/tv_coupon_amount"
app:layout_constraintStart_toEndOf="@id/iv_coupon" app:layout_constraintStart_toEndOf="@id/iv_coupon"
...@@ -129,8 +131,10 @@ ...@@ -129,8 +131,10 @@
android:paddingTop="@dimen/dp2" android:paddingTop="@dimen/dp2"
android:paddingEnd="@dimen/dp2" android:paddingEnd="@dimen/dp2"
android:paddingBottom="@dimen/dp2" android:paddingBottom="@dimen/dp2"
android:text='@{data.couponList.size() > 0 ? String.valueOf(data.couponList.get(0).shareCouponAmount) : ""}'
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="@dimen/sp11" android:textSize="@dimen/sp11"
android:visibility="@{data.couponList.size() > 0 ? View.VISIBLE : View.GONE}"
app:layout_constraintBottom_toBottomOf="@id/iv_coupon" app:layout_constraintBottom_toBottomOf="@id/iv_coupon"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/iv_coupon" app:layout_constraintTop_toTopOf="@id/iv_coupon"
......
...@@ -70,6 +70,7 @@ ...@@ -70,6 +70,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@drawable/shape_stroke_e5e5e5_corner_14" android:background="@drawable/shape_stroke_e5e5e5_corner_14"
android:onClick="@{() -> vm.copyOrderId(data.orderId)}"
android:paddingStart="@dimen/dp12" android:paddingStart="@dimen/dp12"
android:paddingTop="@dimen/dp5" android:paddingTop="@dimen/dp5"
android:paddingEnd="@dimen/dp12" android:paddingEnd="@dimen/dp12"
......
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<import type="android.view.View" />
<variable
name="vm"
type="com.yidian.shenghuoquan.border.viewmodel.PickupPointSearchViewModel" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/shape_solid_ffffff_corner_10"
android:paddingStart="@dimen/dp9"
android:paddingTop="@dimen/dp12"
android:paddingEnd="@dimen/dp9"
android:paddingBottom="@dimen/dp12">
<ImageView
android:id="@+id/iv_search"
android:layout_width="@dimen/dp16"
android:layout_height="@dimen/dp16"
android:src="@drawable/icon_search"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/et_search"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp4"
android:background="@null"
android:hint="@string/search_pickup_point"
android:imeOptions="actionSearch"
android:maxLines="1"
android:textColor="@color/color_333333"
android:textColorHint="@color/color_666666"
android:textSize="@dimen/sp14"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@id/iv_search"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/iv_clear"
android:layout_width="@dimen/dp24"
android:layout_height="@dimen/dp24"
android:onClick="@{() -> vm.clearSearch()}"
android:src="@drawable/icon_clear"
android:visibility="@{etSearch.text.length() > 0 ? View.VISIBLE : View.GONE}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
\ No newline at end of file
...@@ -24,4 +24,8 @@ ...@@ -24,4 +24,8 @@
<string name="refund_time">退款时间</string> <string name="refund_time">退款时间</string>
<string name="order_remark">订单备注</string> <string name="order_remark">订单备注</string>
<string name="refuse_time">拒绝时间</string> <string name="refuse_time">拒绝时间</string>
<string name="select_pickup_point">选择自提点</string>
<string name="search_pickup_point">搜索自提点名称/地址</string>
<string name="cancel">取消</string>
<string name="nearby_pickup_point">附近自提点</string>
</resources> </resources>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment