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 {
// 认证首页跳转来源
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(
if (it.isNotEmpty()) visibility = View.VISIBLE
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()
viewBinding.ivBack.setOnClickListener(this)
......
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="CommonTopBarView">
<!--标题文字-->
<attr name="CommonTopBarView_title_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 name="CommonEmptyPageView">
<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
import com.yidian.bcommon.http.HttpResult
import io.reactivex.rxjava3.core.Observable
import retrofit2.http.Body
import retrofit2.http.Headers
import retrofit2.http.POST
import retrofit2.http.QueryMap
import retrofit2.http.*
/**
* author: yinjiacheng
......@@ -20,6 +17,7 @@ interface OrderApiService {
const val orderConfirm = "/order/order/order_confirm_page"
const val createOrder = "/order/order/create"
const val orderPay = "/pay/order/pay"
const val getPickupPointList = "/marketing/wxapp/get_bind_take_place_list"
}
/**
......@@ -29,7 +27,7 @@ interface OrderApiService {
@Headers("Content-Type: application/json")
fun getOrderDetail(
@QueryMap commonParams: Map<String, String>,
@QueryMap requestParams: Map<String, String?>
@Body requestParams: Map<String, String?>
): Observable<HttpResult<Any?>>
/**
......@@ -39,7 +37,7 @@ interface OrderApiService {
@Headers("Content-Type: application/json")
fun applyRefund(
@QueryMap commonParams: Map<String, String>,
@QueryMap requestParams: Map<String, String?>
@Body requestParams: Map<String, String?>
): Observable<HttpResult<Any?>>
/**
......@@ -72,4 +70,13 @@ interface OrderApiService {
@Body requestParams: Map<String, String?>
): 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
import com.yidian.bcommon.http.HttpResultSubscriber
import com.yidian.bcommon.http.TransformUtil
import com.yidian.http.ServiceFactory
import com.yidian.shenghuoquan.border.dto.CreateOrderResDto
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.dto.*
import com.yidian.shenghuoquan.border.http.callback.IApplyRefundCallback
import com.yidian.shenghuoquan.border.http.callback.IGetOrderDetailCallback
import com.yidian.shenghuoquan.border.http.callback.IGetPickupPointListCallback
/**
* author: yinjiacheng
......@@ -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
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.shenghuoquan.border.R
import com.yidian.shenghuoquan.border.databinding.BorderActivityOrderDetailBinding
import com.yidian.shenghuoquan.border.manager.OrderStatusManager
import com.yidian.shenghuoquan.border.viewmodel.OrderDetailViewModel
import com.yidian.xpage.XPageViewProtocol
/**
* author: yinjiacheng
* date: 2021/8/21 09:29
* description: 订单详情页
*/
class OrderDetailActivity : BaseMvvmActivity<BorderActivityOrderDetailBinding, OrderDetailViewModel>() {
class OrderDetailActivity : BaseMvvmActivity<BorderActivityOrderDetailBinding, OrderDetailViewModel>(), XPageViewProtocol {
override val layoutId: Int = R.layout.border_activity_order_detail
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() {
vm.orderDetailData.observe(this, {
// 获取当前订单状态
......@@ -27,7 +45,7 @@ class OrderDetailActivity : BaseMvvmActivity<BorderActivityOrderDetailBinding, O
binding.ivCommodityInfo.setCommodityInfo(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
import android.Manifest
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.util.AttributeSet
import android.view.LayoutInflater
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.databinding.DataBindingUtil
import androidx.fragment.app.FragmentActivity
import androidx.lifecycle.LifecycleOwner
import androidx.recyclerview.widget.LinearLayoutManager
import com.tbruyelle.rxpermissions3.RxPermissions
import com.yidian.bcommon.utils.ToastUtils
import com.yidian.bcommon.widget.CommonHintDialog
import com.yidian.shenghuoquan.border.R
......@@ -69,6 +74,19 @@ class OrderCommodityInfoView @JvmOverloads constructor(context: Context, attrs:
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
import android.Manifest
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.util.AttributeSet
import android.view.LayoutInflater
import androidx.constraintlayout.widget.ConstraintLayout
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.databinding.BorderViewOrderPickupPointInfoBinding
import com.yidian.shenghuoquan.border.dto.PlaceList
......@@ -25,13 +32,37 @@ class OrderPickupPointInfoView @JvmOverloads constructor(context: Context, attrs
this,
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 自提点信息
*/
fun setPickupPoint(info: PlaceList?) {
binding.vm = OrderPickupPointViewModel()
binding.vm = vm
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
import android.content.Intent
import android.net.Uri
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import com.yidian.bcommon.app.YdBaseApplication
import com.yidian.bcommon.mvvm.BaseViewModel
import com.yidian.shenghuoquan.border.http.OrderRemoteDataSource
import com.yidian.shenghuoquan.border.http.callback.IApplyRefundCallback
......@@ -22,6 +19,9 @@ class OrderCommodityInfoViewModel : BaseViewModel() {
private val _applyRefund = MutableLiveData<String>()
val applyRefund: LiveData<String> = _applyRefund
private val _contractSeller = MutableLiveData<String>()
val contractSeller: LiveData<String> = _contractSeller
/**
* 申请退款
* @param orderId 订单id
......@@ -32,14 +32,10 @@ class OrderCommodityInfoViewModel : BaseViewModel() {
/**
* 联系卖家
* 打开拨号界面
* @param phone 电话号码
*/
fun contractSeller(phone: String) {
val intent = Intent(Intent.ACTION_DIAL)
intent.data = Uri.parse("tel:$phone")
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
YdBaseApplication.context.startActivity(intent)
_contractSeller.value = phone
}
/**
......
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.utils.ToastUtils
/**
* author: yinjiacheng
......@@ -10,9 +15,12 @@ import com.yidian.bcommon.mvvm.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
import android.content.Intent
import android.net.Uri
import com.yidian.bcommon.app.YdBaseApplication
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import com.yidian.bcommon.mvvm.BaseViewModel
/**
......@@ -12,15 +11,14 @@ import com.yidian.bcommon.mvvm.BaseViewModel
*/
class OrderPickupPointViewModel : BaseViewModel() {
private val _contractPickupPoint = MutableLiveData<String>()
val contractPickupPoint: LiveData<String> = _contractPickupPoint
/**
* 联系自提点
* 打开拨号界面
* @param phone 电话号码
*/
fun contractPickupPoint(phone: String) {
val intent = Intent(Intent.ACTION_DIAL)
intent.data = Uri.parse("tel:$phone")
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
YdBaseApplication.context.startActivity(intent)
_contractPickupPoint.value = phone
}
}
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 @@
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/order_detail"
app:CommonTopBarView_title_text_color="@color/white"
app:layout_constraintTop_toTopOf="parent" />
<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 @@
android:layout_height="@dimen/dp20"
android:layout_marginTop="@dimen/dp18"
android:src="@drawable/icon_order_coupon"
android:visibility="@{data.couponList.size() > 0 ? View.VISIBLE : View.GONE}"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_contract_seller" />
......@@ -111,9 +112,10 @@
android:layout_marginStart="@dimen/dp3"
android:ellipsize="end"
android:maxLines="1"
android:text='@{data.couponList.size() > 0 ? data.couponList.get(0).couponId : ""}'
android:textColor="@color/color_333333"
android:textSize="@dimen/sp14"
android:visibility="@{data.couponList.size() > 0 ? View.VISIBLE : View.GONE}"
app:layout_constraintBottom_toBottomOf="@id/iv_coupon"
app:layout_constraintEnd_toStartOf="@id/tv_coupon_amount"
app:layout_constraintStart_toEndOf="@id/iv_coupon"
......@@ -129,8 +131,10 @@
android:paddingTop="@dimen/dp2"
android:paddingEnd="@dimen/dp2"
android:paddingBottom="@dimen/dp2"
android:text='@{data.couponList.size() > 0 ? String.valueOf(data.couponList.get(0).shareCouponAmount) : ""}'
android:textColor="@color/white"
android:textSize="@dimen/sp11"
android:visibility="@{data.couponList.size() > 0 ? View.VISIBLE : View.GONE}"
app:layout_constraintBottom_toBottomOf="@id/iv_coupon"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/iv_coupon"
......
......@@ -70,6 +70,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/shape_stroke_e5e5e5_corner_14"
android:onClick="@{() -> vm.copyOrderId(data.orderId)}"
android:paddingStart="@dimen/dp12"
android:paddingTop="@dimen/dp5"
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 @@
<string name="refund_time">退款时间</string>
<string name="order_remark">订单备注</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>
\ 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