Commit 33655ac7 authored by yinjiacheng's avatar yinjiacheng

update 订单详情页UI

parent df147c92
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.BorderItemOrderDetailCommodityListBinding
import com.yidian.shenghuoquan.border.dto.OrderItem
import com.yidian.shenghuoquan.border.viewmodel.OrderDetailCommodityListItemViewModel
import com.yidian.utils.DensityUtil
/**
* author: yinjiacheng
* date: 2021/8/23 16:18
* description: 订单详情商品列表
*/
class OrderDetailCommodityListAdapter(data: List<OrderItem>?) :
RecyclerView.Adapter<OrderDetailCommodityListAdapter.OrderDetailCommodityListViewHolder>() {
private val data by lazy { ArrayList<OrderItem>() }
init {
data?.let {
this.data.addAll(it)
}
}
/**
* 更新数据
*/
fun updateData(data: List<OrderItem>?) {
data?.let {
notifyItemRangeRemoved(0, this.data.size)
this.data.clear()
this.data.addAll(it)
notifyItemRangeInserted(0, this.data.size)
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): OrderDetailCommodityListViewHolder {
val binding = DataBindingUtil.inflate<BorderItemOrderDetailCommodityListBinding>(
LayoutInflater.from(parent.context),
R.layout.border_item_order_detail_commodity_list,
parent,
false
)
return OrderDetailCommodityListViewHolder(binding.root, binding)
}
override fun onBindViewHolder(holder: OrderDetailCommodityListViewHolder, position: Int) {
holder.binding.vm = OrderDetailCommodityListItemViewModel()
holder.binding.data = data[position]
}
override fun getItemCount(): Int {
return data.size
}
class OrderDetailCommodityListViewHolder(itemView: View, val binding: BorderItemOrderDetailCommodityListBinding) :
RecyclerView.ViewHolder(itemView)
class OrderDetailCommodityListItemDecoration : RecyclerView.ItemDecoration() {
override fun getItemOffsets(outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State) {
outRect.top = DensityUtil.dp2px(16f)
}
}
}
......@@ -22,11 +22,11 @@ data class OrderDetailDto(
@SerializedName("comment")
val comment: String,
@SerializedName("coupon_list")
val couponList: List<Any>,
val couponList: List<Coupon>,
@SerializedName("create_time")
val createTime: String,
@SerializedName("discount_fee")
val discountFee: String,
val discountFee: Double,
@SerializedName("is_refund")
val isRefund: Int,
@SerializedName("life_account_icon")
......@@ -74,10 +74,10 @@ data class OrderDetailDto(
@SerializedName("shop_id")
val shopId: String,
@SerializedName("total_price")
val totalPrice: Int,
val totalPrice: Double,
@SerializedName("update_time")
val updateTime: String,
@SerializedName("use_coupon")
@SerializedName("use_coupon") // 是否使用优惠券,0未使用,1使用
val useCoupon: Int,
@SerializedName("user_id")
val userId: Long,
......@@ -85,6 +85,31 @@ data class OrderDetailDto(
val wechat: Wechat
)
data class Coupon(
@SerializedName("coupon_amount")
val couponAmount: Int,
@SerializedName("coupon_id")
val couponId: String,
@SerializedName("create_time")
val createTime: String,
@SerializedName("goods_sku_id")
val goodsSkuId: String,
@SerializedName("order_id")
val orderId: String,
@SerializedName("order_item_id")
val orderItemId: String,
@SerializedName("recover_coupon_amount")
val recoverCouponAmount: Int,
@SerializedName("share_coupon_amount")
val shareCouponAmount: Int,
@SerializedName("share_coupon_id")
val shareCouponId: Int,
@SerializedName("update_time")
val updateTime: String,
@SerializedName("user_id")
val userId: Long
)
data class MergeOrderItem(
@SerializedName("desc_pic_url")
val descPicUrl: String,
......@@ -93,7 +118,7 @@ data class MergeOrderItem(
@SerializedName("goods_num")
val goodsNum: Int,
@SerializedName("price")
val price: Int
val price: Double
)
data class OrderItem(
......@@ -136,7 +161,7 @@ data class OrderItem(
@SerializedName("payment")
val payment: Int,
@SerializedName("price")
val price: Int,
val price: Double,
@SerializedName("refund_amount")
val refundAmount: Int,
@SerializedName("refund_count")
......
......@@ -27,6 +27,7 @@ class OrderDetailActivity : BaseMvvmActivity<BorderActivityOrderDetailBinding, O
binding.ivCommodityInfo.setCommodityInfo(status, it)
binding.ivOrderInfo.setOrderInfo(status, it)
})
vm.requestOrderDetail("21081915562568101010")
// Test
vm.requestOrderDetail("21082017225320101002")
}
}
......@@ -5,10 +5,13 @@ import android.util.AttributeSet
import android.view.LayoutInflater
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.databinding.DataBindingUtil
import androidx.recyclerview.widget.LinearLayoutManager
import com.yidian.shenghuoquan.border.R
import com.yidian.shenghuoquan.border.adapter.OrderDetailCommodityListAdapter
import com.yidian.shenghuoquan.border.databinding.BorderViewOrderCommodityInfoBinding
import com.yidian.shenghuoquan.border.dto.OrderDetailDto
import com.yidian.shenghuoquan.border.manager.OrderStatus
import com.yidian.shenghuoquan.border.viewmodel.OrderCommodityInfoViewModel
/**
* author: yinjiacheng
......@@ -25,6 +28,17 @@ class OrderCommodityInfoView @JvmOverloads constructor(context: Context, attrs:
this,
true
)
private val adapter by lazy { OrderDetailCommodityListAdapter(null) }
init {
initRecycleView()
}
private fun initRecycleView() {
binding.rvCommodityList.layoutManager = LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)
binding.rvCommodityList.adapter = adapter
binding.rvCommodityList.addItemDecoration(OrderDetailCommodityListAdapter.OrderDetailCommodityListItemDecoration())
}
/**
* 设置商品信息
......@@ -32,6 +46,9 @@ class OrderCommodityInfoView @JvmOverloads constructor(context: Context, attrs:
* @param info 商品信息
*/
fun setCommodityInfo(status: OrderStatus, info: OrderDetailDto) {
binding.vm = OrderCommodityInfoViewModel()
binding.status = status
binding.data = info
adapter.updateData(info.orderItemList)
}
}
package com.yidian.shenghuoquan.border.viewmodel
import android.widget.ImageView
import androidx.databinding.BindingAdapter
import com.bumptech.glide.Glide
import com.bumptech.glide.load.resource.bitmap.CenterCrop
import com.bumptech.glide.load.resource.bitmap.RoundedCorners
import com.bumptech.glide.request.RequestOptions
import com.yidian.bcommon.mvvm.BaseViewModel
import com.yidian.shenghuoquan.border.R
import com.yidian.utils.DensityUtil
/**
* author: yinjiacheng
* date: 2021/8/23 16:01
* description: 订单详情商品列表
*/
class OrderDetailCommodityListItemViewModel : BaseViewModel() {
companion object {
/**
* 加载商品图片
* @param url 图片url
* @param target 目标ImageView
*/
@BindingAdapter("commodityImageUrl")
@JvmStatic
fun loadCommodityImage(target: ImageView, url: String) {
Glide.with(target.context).load(url)
.apply(
RequestOptions()
.transform(CenterCrop(), RoundedCorners(DensityUtil.dp2px(12F)))
.error(R.drawable.img_order_commodity_placeholder)
.placeholder(R.drawable.img_order_commodity_placeholder)
)
.into(target)
}
}
}
<?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.OrderDetailCommodityListItemViewModel" />
<variable
name="data"
type="com.yidian.shenghuoquan.border.dto.OrderItem" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/iv_commodity_pic"
android:layout_width="@dimen/dp82"
android:layout_height="@dimen/dp60"
app:commodityImageUrl="@{data.descPicUrl}"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:src="@drawable/img_order_commodity_placeholder" />
<TextView
android:id="@+id/tv_commodity_name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp8"
android:ellipsize="end"
android:includeFontPadding="false"
android:maxLines="1"
android:text="@{data.goodsName}"
android:textColor="@color/color_333333"
android:textSize="@dimen/sp15"
app:layout_constraintStart_toEndOf="@id/iv_commodity_pic"
app:layout_constraintTop_toTopOf="parent"
tools:text="肉末茄子+蔬蒸蛋套餐+肉末茄…" />
<TextView
android:id="@+id/tv_commodity_count"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp8"
android:includeFontPadding="false"
android:text="@{'共' + String.valueOf(data.goodsNum) + '件'}"
android:textColor="@color/color_999999"
android:textSize="@dimen/sp13"
app:layout_constraintStart_toStartOf="@id/tv_commodity_name"
app:layout_constraintTop_toBottomOf="@id/tv_commodity_name"
tools:text="共2件" />
<TextView
android:id="@+id/tv_commodity_amount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp8"
android:includeFontPadding="false"
android:text="@{'¥' + String.valueOf(data.price)}"
android:textColor="@color/color_333333"
android:textSize="@dimen/sp16"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="@id/tv_commodity_name"
app:layout_constraintTop_toBottomOf="@id/tv_commodity_count"
tools:text="¥15.00" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
\ No newline at end of file
......@@ -5,6 +5,23 @@
<data>
<import type="android.view.View" />
<import type="com.yidian.shenghuoquan.border.manager.OrderStatus" />
<import type="java.util.List" />
<variable
name="vm"
type="com.yidian.shenghuoquan.border.viewmodel.OrderCommodityInfoViewModel" />
<variable
name="status"
type="com.yidian.shenghuoquan.border.manager.OrderStatus" />
<variable
name="data"
type="com.yidian.shenghuoquan.border.dto.OrderDetailDto" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
......@@ -20,6 +37,7 @@
android:id="@+id/tv_activity_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{data.marketingName}"
android:textColor="@color/color_333333"
android:textSize="@dimen/sp16"
app:layout_constraintStart_toStartOf="parent"
......@@ -54,6 +72,7 @@
android:text="@string/apply_refund"
android:textColor="@color/color_999999"
android:textSize="@dimen/sp11"
android:visibility="@{status == OrderStatus.ORDER_STATUS_PAID ? View.VISIBLE : View.GONE}"
app:layout_constraintEnd_toStartOf="@id/tv_contract_seller"
app:layout_constraintTop_toTopOf="@id/tv_contract_seller" />
......@@ -89,19 +108,19 @@
android:layout_marginStart="@dimen/dp3"
android:ellipsize="end"
android:maxLines="1"
android:text="@string/red_packet_or_coupon"
android:textColor="@color/color_333333"
android:textSize="@dimen/sp14"
app:layout_constraintBottom_toBottomOf="@id/iv_coupon"
app:layout_constraintEnd_toStartOf="@id/tv_coupon_amount"
app:layout_constraintStart_toEndOf="@id/iv_coupon"
app:layout_constraintTop_toTopOf="@id/iv_coupon" />
app:layout_constraintTop_toTopOf="@id/iv_coupon"
tools:text="@string/red_packet_or_coupon" />
<TextView
android:id="@+id/tv_coupon_amount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/shape_solid_d66948_corner_9"
android:drawableEnd="@drawable/icon_next_white"
android:paddingStart="@dimen/dp8"
android:paddingTop="@dimen/dp2"
......@@ -122,6 +141,7 @@
android:text="@string/discount_amount"
android:textColor="@color/color_333333"
android:textSize="@dimen/sp14"
android:visibility="@{data.useCoupon == 1 ? View.VISIBLE : View.GONE}"
app:layout_constraintBaseline_toBaselineOf="@id/tv_total_amount"
app:layout_constraintEnd_toStartOf="@id/tv_discount_amount" />
......@@ -130,8 +150,10 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dp8"
android:text="@{'¥' + String.valueOf(data.discountFee)}"
android:textColor="@color/color_D66948"
android:textSize="@dimen/sp14"
android:visibility="@{data.useCoupon == 1 ? View.VISIBLE : View.GONE}"
app:layout_constraintBaseline_toBaselineOf="@id/tv_total_amount"
app:layout_constraintEnd_toStartOf="@id/tv_total_amount_text"
tools:text="¥10.00" />
......@@ -151,6 +173,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp24"
android:text="@{'¥' + String.valueOf(data.totalPrice)}"
android:textColor="@color/black"
android:textSize="@dimen/sp18"
android:textStyle="bold"
......
......@@ -161,7 +161,7 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp14"
android:text="@{data.marketingName}"
android:text="@{data.comment}"
android:textColor="@color/color_333333"
android:textSize="@dimen/sp14"
app:layout_constraintEnd_toEndOf="parent"
......
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