Commit e904089b authored by shiyl's avatar shiyl

订单中心页面搭建

parent 337d5da5
......@@ -24,4 +24,7 @@ object IntentConstants {
// 确认订单进选择优惠券列表
const val KEY_EXTRA_COUPON_LIST = "couponList"
// 商户订单中心 -> 商户订单列表
const val KEY_EXTRA_MERCHANT_ORDER_LIST = "key_extra_merchant_order_list"
}
package com.yidian.shenghuoquan.bmerchantorder.adapter
import android.widget.TextView
import androidx.core.content.ContextCompat
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.viewholder.BaseViewHolder
import com.yidian.bcommon.extensions.hide
import com.yidian.bcommon.extensions.show
import com.yidian.shenghuoquan.bmerchantorder.R
import com.yidian.shenghuoquan.bmerchantorder.dto.MyOrderEntryDto
/**
* 订单中心 - 各订单类型的入口
*/
class MyOrderEntryAdapter : BaseQuickAdapter<MyOrderEntryDto, BaseViewHolder>(R.layout.bmerchantorder_item_my_ordre_entry) {
override fun convert(holder: BaseViewHolder, item: MyOrderEntryDto) {
holder.getView<TextView>(R.id.tv_order_type).text = item.orderTypeName
val orderNum = holder.getView<TextView>(R.id.tv_order_num)
if (item.orderTypeNum.isNullOrBlank()) {
orderNum.hide()
} else {
orderNum.show()
orderNum.text = item.orderTypeNum
}
holder.getView<TextView>(R.id.iv_order_icon).background = item.orderTypeIcon?.let { ContextCompat.getDrawable(context, it) }
}
}
package com.yidian.shenghuoquan.bmerchantorder.adapter
import android.widget.TextView
import androidx.core.content.ContextCompat
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.viewholder.BaseViewHolder
import com.yidian.shenghuoquan.bmerchantorder.R
import com.yidian.shenghuoquan.bmerchantorder.dto.OrderFilterConditionDto
/**
* 订单筛选条件适配器
*/
class OrderFilterConditionAdapter : BaseQuickAdapter<OrderFilterConditionDto, BaseViewHolder>(R.layout.bmerchantorder_item_ordre_filter_condition) {
override fun convert(holder: BaseViewHolder, item: OrderFilterConditionDto) {
val view = holder.getView<TextView>(R.id.tv_filter_name)
view.text = item.name
if (item.isSelected) {
view.setTextColor(ContextCompat.getColor(context, R.color.color_1852F1))
view.background = ContextCompat.getDrawable(context, R.drawable.b_merchant_order_shape_blue_corner_bg)
} else {
view.setTextColor(ContextCompat.getColor(context, R.color.color_333333))
view.background = ContextCompat.getDrawable(context, R.drawable.b_merchant_order_shape_white_corner_bg)
}
}
}
package com.yidian.shenghuoquan.bmerchantorder.dto
/**
* 我的订单入口数据模型
*/
data class MyOrderEntryDto(
val orderTypeName: String? = null,// 订单类型名称
var orderTypeNum: String? = null,// 订单类型数量
val orderTypeIcon: Int? = null,// 订单类型图标(@DrawableRes)
)
package com.yidian.shenghuoquan.bmerchantorder.dto
/**
* 订单筛选条件
*/
data class OrderFilterConditionDto(
val name: String? = null,
var isSelected: Boolean = false
)
package com.yidian.shenghuoquan.bmerchantorder.ui
import androidx.activity.viewModels
import androidx.recyclerview.widget.GridLayoutManager
import com.yidian.bcommon.constant.XRouterPathConstants
import com.yidian.bcommon.mvvm.BaseMvvmActivity
import com.yidian.bcommon.utils.ToastUtils
import com.yidian.shenghuoquan.bmerchantorder.R
import com.yidian.shenghuoquan.bmerchantorder.adapter.MyOrderEntryAdapter
import com.yidian.shenghuoquan.bmerchantorder.adapter.OrderFilterConditionAdapter
import com.yidian.shenghuoquan.bmerchantorder.databinding.BmerchantorderActivityMerchantOrderCenterBinding
import com.yidian.shenghuoquan.bmerchantorder.dto.OrderFilterConditionDto
import com.yidian.shenghuoquan.bmerchantorder.viewmodel.MerchantOrderCenterViewModel
import com.yidian.xpage.XPageViewProtocol
......@@ -15,6 +20,10 @@ import com.yidian.xpage.XPageViewProtocol
class MerchantOrderCenterActivity : BaseMvvmActivity<BmerchantorderActivityMerchantOrderCenterBinding, MerchantOrderCenterViewModel>(),
XPageViewProtocol {
private val orderFilterAdapter by lazy { OrderFilterConditionAdapter() }
private val myOrderEntryAdapter by lazy { MyOrderEntryAdapter() }
override val layoutId: Int = R.layout.bmerchantorder_activity_merchant_order_center
override val vm: MerchantOrderCenterViewModel by viewModels()
......@@ -25,9 +34,51 @@ class MerchantOrderCenterActivity : BaseMvvmActivity<BmerchantorderActivityMerch
override fun initView() {
subscribeUiEvent()
initOrderTypeEntryList()
initFilterConditionList()
}
override fun onResume() {
super.onResume()
vm.requestOrderCenterInfo()
}
/**
* 初始化筛选条件的列表
*/
private fun initFilterConditionList() {
binding.rvOrderEntry.layoutManager = GridLayoutManager(this, 2)
binding.rvOrderEntry.adapter = myOrderEntryAdapter
myOrderEntryAdapter.setOnItemClickListener { _, _, position ->
// 更新点击orderFilterList中的item为选中状态
vm.updateFilterList(position)
// 使用最新的筛选条件刷新页面
vm.requestOrderCenterInfo()
}
// 初始化筛选条件列表,默认选中第一个
vm.initFilterList()
}
/**
* 初始化订单入口的列表
*/
private fun initOrderTypeEntryList() {
binding.rvOrderEntry.layoutManager = GridLayoutManager(this, 3)
binding.rvOrderEntry.adapter = myOrderEntryAdapter
myOrderEntryAdapter.setOnItemClickListener { _, _, position ->
vm.openOrderList(position)
}
// 初始化订单入口,默认没有小红点
vm.initOrderEntryList()
}
private fun subscribeUiEvent() {
vm.initOrderEntryListEvent.observe(this, {
myOrderEntryAdapter.setList(it)
})
vm.initOrderFilterListEvent.observe(this, {
orderFilterAdapter.setList(it)
})
}
......
package com.yidian.shenghuoquan.bmerchantorder.viewmodel
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import com.yidian.bcommon.mvvm.BaseViewModel
import com.yidian.bcommon.utils.ToastUtils
import com.yidian.shenghuoquan.bmerchantorder.R
import com.yidian.shenghuoquan.bmerchantorder.dto.MyOrderEntryDto
import com.yidian.shenghuoquan.bmerchantorder.dto.OrderFilterConditionDto
/**
* 订单中心
*/
class MerchantOrderCenterViewModel : BaseViewModel() {
private lateinit var orderEntryList: MutableList<MyOrderEntryDto>
private lateinit var orderFilterList: MutableList<OrderFilterConditionDto>
val currentTimeLimit = MutableLiveData<String>()// 当前时间筛选条件
val actualIncome = MutableLiveData<Double?>()// 实际收入
val pendingSettlementIncome = MutableLiveData<Double?>()// 待结算收入
/**
* 订单入口 Event
*/
private val _initOrderEntryListEvent = MutableLiveData<List<MyOrderEntryDto>>()
val initOrderEntryListEvent: LiveData<List<MyOrderEntryDto>> = _initOrderEntryListEvent
/**
* 订单筛选 Event
*/
private val _initOrderFilterListEvent = MutableLiveData<List<OrderFilterConditionDto>>()
val initOrderFilterListEvent: LiveData<List<OrderFilterConditionDto>> = _initOrderFilterListEvent
val currentTimeLimit = MutableLiveData<String>()
fun requestOrderCenterInfo() {
// todo 筛选条件使用orderFilterList中的当前选中条件,也可以将参数声明为单独的变量,看接口要求吧
// todo 网络请求成功后更新订单的小红点,收支账单赋值
pendingSettlementIncome.value = 12.0
actualIncome.value = 123.453
updateOrderEntryList()
}
/**
* 初始化订单入口,避免多次遍历重复创建对象
*/
fun initOrderEntryList() {
orderEntryList = mutableListOf()
for (i in 0..4) {
when (i) {
0 -> {
val dto =
MyOrderEntryDto(orderTypeName = "全部订单", orderTypeIcon = R.drawable.b_merchant_order_icon_all_order)
orderEntryList.add(dto)
}
1 -> {
val dto =
MyOrderEntryDto(orderTypeName = "待付款", orderTypeIcon = R.drawable.b_merchant_order_icon_waiting_payment)
orderEntryList.add(dto)
}
2 -> {
val dto =
MyOrderEntryDto(orderTypeName = "待核销", orderTypeIcon = R.drawable.b_merchant_order_icon_waiting_write_off)
orderEntryList.add(dto)
}
3 -> {
val dto =
MyOrderEntryDto(orderTypeName = "已完成", orderTypeIcon = R.drawable.b_merchant_order_icon_order_completed)
orderEntryList.add(dto)
}
4 -> {
val dto =
MyOrderEntryDto(orderTypeName = "退款/已关闭", orderTypeIcon = R.drawable.b_merchant_order_icon_order_closed)
orderEntryList.add(dto)
}
}
}
_initOrderEntryListEvent.value = orderEntryList
}
/**
* 更新订单入口显示的订单数量
*/
private fun updateOrderEntryList() {
// todo 此list应为接口返回的订单数量
val list = listOf("99+", "9", "90", "", "")
list.forEachIndexed { index, s ->
orderEntryList[index].apply {
orderTypeNum = s
}
}
_initOrderEntryListEvent.value = orderEntryList
}
/**
* 初始化订单入口,避免多次遍历重复创建对象
*/
fun initFilterList() {
orderFilterList = mutableListOf()
for (i in 0..2) {
when (i) {
0 -> {
val dto = OrderFilterConditionDto(name = "近三个月", isSelected = true)
orderFilterList.add(dto)
}
1 -> {
val dto = OrderFilterConditionDto(name = "近一个月")
orderFilterList.add(dto)
}
2 -> {
val dto = OrderFilterConditionDto(name = "近一周")
orderFilterList.add(dto)
}
}
}
_initOrderFilterListEvent.value = orderFilterList
}
fun updateFilterList(position: Int) {
orderFilterList.forEachIndexed { index, dto ->
when (index) {
position -> dto.isSelected = true
else -> dto.isSelected = false
}
}
// 关闭筛选条件切换
openTimeFilter()
}
fun openTimeFilter() {
// 如果关闭则打开,反之关闭
}
fun openOrderList(orderType: Int) {
// todo 修改为XPage打开页面
when (orderType) {
0 -> ToastUtils.showShortSafe("打开全部订单")
1 -> ToastUtils.showShortSafe("打开待付款订单")
2 -> ToastUtils.showShortSafe("打开待核销订单")
3 -> ToastUtils.showShortSafe("打开已完成订单")
4 -> ToastUtils.showShortSafe("打开退款/关闭订单")
}
// val map = HashMap<String, Any?>()
// map[IntentConstants.KEY_EXTRA_MERCHANT_ORDER_LIST] = orderType
// XPageManager.push(XRouterPathConstants.MERCHANT_ORDER_LIST_ACTIVITY, map)
}
......
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="@dimen/dp12" />
<solid android:color="#ffe9efff" />
</shape>
\ 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/b_merchant_order_color_F26E3D" />
<corners android:radius="@dimen/dp8" />
<padding
android:left="@dimen/dp5"
android:right="@dimen/dp5" />
</shape>
\ 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">
<corners android:radius="@dimen/dp12" />
<solid android:color="@color/white" />
</shape>
\ No newline at end of file
......@@ -50,8 +50,8 @@
android:id="@+id/tv_order_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableStart="@drawable/b_merchant_icon_time_filter"
android:onClick="@{() -> vm.postBackEvent()}"
android:drawableStart="@drawable/b_merchant_order_icon_time_filter"
android:onClick="@{() -> vm.openTimeFilter()}"
android:textColor="@color/color_666666"
android:textSize="@dimen/sp12"
app:layout_constraintEnd_toEndOf="parent"
......@@ -62,6 +62,155 @@
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp16"
android:layout_marginEnd="@dimen/dp16"
android:background="@drawable/b_merchant_order_icon_bill_bg">
<TextView
android:id="@+id/tv_bill"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp20"
android:layout_marginTop="@dimen/dp19"
android:text="收支账单"
android:textColor="@color/color_333333"
android:textSize="@dimen/sp16"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_actual_income_num"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp15"
android:layout_marginEnd="@dimen/dp5"
android:text="@{@string/amount(vm.actualIncome)}"
android:textColor="@color/b_merchant_order_color_F26E3D"
android:textSize="28sp"
app:layout_constraintEnd_toStartOf="@id/gl_bill_center"
app:layout_constraintHorizontal_bias="0"
app:layout_constraintStart_toStartOf="@id/tv_bill"
app:layout_constraintTop_toBottomOf="@id/tv_bill"
tools:text="12353.13" />
<TextView
android:id="@+id/tv_actual_income_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/dp19"
android:text="实际收入"
android:textColor="@color/color_999999"
android:textSize="12sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/gl_bill_center"
app:layout_constraintHorizontal_bias="0"
app:layout_constraintStart_toStartOf="@id/tv_bill"
app:layout_constraintTop_toBottomOf="@id/tv_actual_income_num" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/gl_bill_center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.5" />
<TextView
android:id="@+id/tv_pending_payment_num"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp5"
android:layout_marginTop="@dimen/dp15"
android:text="@{@string/amount(vm.pendingSettlementIncome)}"
android:textColor="@color/b_merchant_order_color_F26E3D"
android:textSize="28sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0"
app:layout_constraintStart_toEndOf="@id/gl_bill_center"
app:layout_constraintTop_toBottomOf="@id/tv_bill"
tools:text="12144214.00" />
<TextView
android:id="@+id/tv_pending_payment_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/dp19"
android:text="待结算收入"
android:textColor="@color/color_999999"
android:textSize="12sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0"
app:layout_constraintStart_toEndOf="@id/gl_bill_center"
app:layout_constraintTop_toBottomOf="@id/tv_pending_payment_num" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp16"
android:layout_marginTop="@dimen/dp10"
android:layout_marginEnd="@dimen/dp16"
android:background="@drawable/b_merchant_order_shape_white_corner_bg">
<TextView
android:id="@+id/tv_my_order_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp20"
android:layout_marginTop="@dimen/dp20"
android:text="我的订单"
android:textColor="@color/color_333333"
android:textSize="16sp"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_all_order_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="@{()-> vm.openOrderList(0)}"
android:text="全部"
android:textColor="@color/color_999999"
android:textSize="14sp"
app:layout_constraintBaseline_toBaselineOf="@id/tv_my_order_title"
app:layout_constraintEnd_toStartOf="@id/iv_all_order" />
<ImageView
android:id="@+id/iv_all_order"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp20"
android:layout_marginEnd="@dimen/dp12"
android:onClick="@{()-> vm.openOrderList(0)}"
android:src="@drawable/icon_next"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_order_entry"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_my_order_title"
tools:itemCount="3"
tools:listitem="@layout/bmerchantorder_item_my_ordre_entry" />
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
</layout>
\ No newline at end of file
<?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/dp85">
<ImageView
android:id="@+id/iv_order_icon"
android:layout_width="@dimen/dp30"
android:layout_height="@dimen/dp30"
android:background="@drawable/b_merchant_order_icon_all_order"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.3" />
<TextView
android:id="@+id/tv_order_type"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp6"
android:textColor="@color/color_333333"
android:textSize="12sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/iv_order_icon"
tools:text="全部订单" />
<TextView
android:id="@+id/tv_order_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/b_merchant_order_shape_order_num"
android:textColor="@color/white"
android:textSize="12sp"
android:visibility="gone"
app:layout_constraintBottom_toTopOf="@id/iv_order_icon"
app:layout_constraintEnd_toEndOf="@id/iv_order_icon"
app:layout_constraintStart_toEndOf="@id/iv_order_icon"
app:layout_constraintTop_toTopOf="@id/iv_order_icon"
tools:text="99+" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?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="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tv_filter_name"
android:layout_width="@dimen/dp163"
android:layout_height="@dimen/dp56"
android:background="@drawable/b_merchant_order_shape_white_corner_bg"
android:gravity="center"
android:textColor="@color/color_333333"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="近三个月" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
\ No newline at end of file
<resources>
<color name="b_merchant_order_color_F26E3D">#F26E3D</color>
</resources>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="amount">%.2f</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