Commit 488d8f08 authored by shiyl's avatar shiyl

确认订单UI完善

parent 248de6ee
...@@ -22,5 +22,9 @@ class XEventConfig { ...@@ -22,5 +22,9 @@ class XEventConfig {
const val CHOOSE_STORE_SUCCESS = "choose_store_success" const val CHOOSE_STORE_SUCCESS = "choose_store_success"
// 商品发布成功 // 商品发布成功
const val COMMODITY_PUBLISH_SUCCESS = "commodity_publish_success" const val COMMODITY_PUBLISH_SUCCESS = "commodity_publish_success"
// 确认订单选择自提点成功
const val CONFIRM_ORDER_CHOOSE_POINT_SUCCESS = "confirm_order_choose_point_success"
// 确认订单选择优惠券成功
const val CONFIRM_ORDER_CHOOSE_COUPON_SUCCESS = "confirm_order_choose_coupon_success"
} }
} }
package com.yidian.shenghuoquan.bdemo.dto
import android.os.Parcelable
import com.google.gson.annotations.SerializedName
import kotlinx.parcelize.Parcelize
/**
* 确认订单请求参数
*/
@Parcelize
data class ConfirmOrderRequest(
@SerializedName("business_from")
val businessFrom: Int? = null,
@SerializedName("goods_list")
val goodsList: List<Goods>? = null,
@SerializedName("marketing_id")
val marketingId: String? = null
) : Parcelable
@Parcelize
data class Goods(
@SerializedName("goods_sku_id")
val goodsSkuId: String? = null,
@SerializedName("goods_sku_num")
val goodsSkuNum: Int? = null
) : Parcelable
...@@ -5,6 +5,8 @@ import com.yidian.bcommon.base.BaseActivity ...@@ -5,6 +5,8 @@ import com.yidian.bcommon.base.BaseActivity
import com.yidian.bcommon.constant.XRouterPathConstants import com.yidian.bcommon.constant.XRouterPathConstants
import com.yidian.bcommon.extensions.clickAntiShake import com.yidian.bcommon.extensions.clickAntiShake
import com.yidian.shenghuoquan.bdemo.databinding.ActivityDemoTestBinding import com.yidian.shenghuoquan.bdemo.databinding.ActivityDemoTestBinding
import com.yidian.shenghuoquan.bdemo.dto.ConfirmOrderRequest
import com.yidian.shenghuoquan.bdemo.dto.Goods
import com.yidian.xpage.XPageManager import com.yidian.xpage.XPageManager
...@@ -27,10 +29,15 @@ class DemoTestActivity : BaseActivity<ActivityDemoTestBinding>() { ...@@ -27,10 +29,15 @@ class DemoTestActivity : BaseActivity<ActivityDemoTestBinding>() {
} }
private fun initClick() { private fun initClick() {
val list = mutableListOf<Goods>()
list.add(Goods(goodsSkuId = "04qbwzoazPixJUhfOppD", goodsSkuNum = 1))
val confirmOrderReqDto = ConfirmOrderRequest(businessFrom = 2, goodsList = list, marketingId = "79")
// 模拟h5进入确认订单的参数和逻辑 // 模拟h5进入确认订单的参数和逻辑
viewBind.btnOrderConfirm.clickAntiShake { viewBind.btnOrderConfirm.clickAntiShake {
val hashMap = HashMap<String, Any?>() val hashMap = HashMap<String, Any?>()
hashMap["marketing_id"] = 121231321// 活动id hashMap["business_from"] = "2"
hashMap["marketing_id"] = "1"// 活动id
hashMap["goods_list"] = list
XPageManager.push(XRouterPathConstants.CONFIRM_ORDER_ACTIVITY, hashMap) XPageManager.push(XRouterPathConstants.CONFIRM_ORDER_ACTIVITY, hashMap)
} }
} }
......
...@@ -4,7 +4,9 @@ ...@@ -4,7 +4,9 @@
package="com.yidian.shenghuoquan.border"> package="com.yidian.shenghuoquan.border">
<application> <application>
<activity android:name="com.yidian.shenghuoquan.border.ui.ConfirmOrderActivity"/> <activity
android:name="com.yidian.shenghuoquan.border.ui.ConfirmOrderActivity"
android:windowSoftInputMode="adjustPan" />
<activity android:name="com.yidian.shenghuoquan.border.ui.OrderDetailActivity" /> <activity android:name="com.yidian.shenghuoquan.border.ui.OrderDetailActivity" />
</application> </application>
......
package com.yidian.shenghuoquan.border.adapter
import android.annotation.SuppressLint
import android.widget.ImageView
import android.widget.TextView
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.viewholder.BaseViewHolder
import com.yidian.shenghuoquan.border.R
import com.yidian.shenghuoquan.border.dto.GoodsList
/**
* 确认订单页面商品列表适配器
*/
class OrderConfirmCommodityListAdapter : BaseQuickAdapter<GoodsList, BaseViewHolder>(R.layout.border_item_order_confirm_commodity_list) {
@SuppressLint("SetTextI18n")
override fun convert(holder: BaseViewHolder, item: GoodsList) {
holder.getView<TextView>(R.id.tv_commodity_name).text = item.name
holder.getView<TextView>(R.id.tv_commodity_count).text = "共" + item.name + "件"
holder.getView<TextView>(R.id.tv_commodity_amount).text = "¥" + item.name
val ivCommodityPic = holder.getView<ImageView>(R.id.iv_commodity_pic)
// Glide.with(context).load(item.url)
// .apply(
// RequestOptions()
// .transform(CenterCrop(), RoundedCorners(DensityUtil.dp2px(12F)))
// .error(R.drawable.img_order_commodity_placeholder)
// .placeholder(R.drawable.img_order_commodity_placeholder)
// )
// .into(ivCommodityPic)
}
}
...@@ -14,8 +14,8 @@ data class OrderConfirmResDto( ...@@ -14,8 +14,8 @@ data class OrderConfirmResDto(
// val price: Int? = null, // val price: Int? = null,
@SerializedName("shipping") @SerializedName("shipping")
val shipping: Shipping? = null, val shipping: Shipping? = null,
@SerializedName("take_place_list") // @SerializedName("take_place_list")
val takePlaceList: List<TakePlaceList>? = null // val takePlaceList: List<TakePlaceList>? = null
) : Parcelable ) : Parcelable
@Parcelize @Parcelize
...@@ -57,6 +57,10 @@ data class CouponList( ...@@ -57,6 +57,10 @@ data class CouponList(
data class GoodsList( data class GoodsList(
@SerializedName("name") @SerializedName("name")
val name: String? = null, val name: String? = null,
@SerializedName("price") // 商品价格
val price: Double,
@SerializedName("goods_num") // 商品数量
val goodsNum: Int,
) : Parcelable ) : Parcelable
/** /**
...@@ -78,6 +82,8 @@ data class Shipping( ...@@ -78,6 +82,8 @@ data class Shipping(
val shippingId: String? = null, val shippingId: String? = null,
@SerializedName("take_place_id") @SerializedName("take_place_id")
val takePlaceId: Int? = null, val takePlaceId: Int? = null,
@SerializedName("take_place_name")
val takePlaceName: String? = null,
@SerializedName("update_time") @SerializedName("update_time")
val updateTime: String? = null, val updateTime: String? = null,
@SerializedName("user_id") @SerializedName("user_id")
...@@ -85,13 +91,13 @@ data class Shipping( ...@@ -85,13 +91,13 @@ data class Shipping(
) : Parcelable ) : Parcelable
/** ///**
* 自提点列表 // * 自提点列表
*/ // */
@Parcelize //@Parcelize
data class TakePlaceList( //data class TakePlaceList(
@SerializedName("take_place_id") // @SerializedName("take_place_id")
val takePlaceId: Int? = null,// 自提点id // val takePlaceId: Int? = null,// 自提点id
@SerializedName("take_place_name") // @SerializedName("take_place_name")
val takePlaceName: String? = null,// 自提点名称 // val takePlaceName: String? = null,// 自提点名称
) : Parcelable //) : Parcelable
...@@ -2,6 +2,7 @@ package com.yidian.shenghuoquan.border.http ...@@ -2,6 +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.Headers import retrofit2.http.Headers
import retrofit2.http.POST import retrofit2.http.POST
import retrofit2.http.QueryMap import retrofit2.http.QueryMap
...@@ -48,7 +49,7 @@ interface OrderApiService { ...@@ -48,7 +49,7 @@ interface OrderApiService {
@Headers("Content-Type: application/json") @Headers("Content-Type: application/json")
fun requestOrderConfirm( fun requestOrderConfirm(
@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?>>
/** /**
...@@ -58,7 +59,7 @@ interface OrderApiService { ...@@ -58,7 +59,7 @@ interface OrderApiService {
@Headers("Content-Type: application/json") @Headers("Content-Type: application/json")
fun requestCreateOrder( fun requestCreateOrder(
@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?>>
/** /**
...@@ -68,7 +69,7 @@ interface OrderApiService { ...@@ -68,7 +69,7 @@ interface OrderApiService {
@Headers("Content-Type: application/json") @Headers("Content-Type: application/json")
fun requestOrderPay( fun requestOrderPay(
@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?>>
} }
...@@ -2,39 +2,75 @@ package com.yidian.shenghuoquan.border.ui ...@@ -2,39 +2,75 @@ package com.yidian.shenghuoquan.border.ui
import android.content.Intent import android.content.Intent
import androidx.activity.viewModels import androidx.activity.viewModels
import com.yidian.bcommon.constant.XEventConfig
import com.yidian.bcommon.constant.XRouterPathConstants import com.yidian.bcommon.constant.XRouterPathConstants
import com.yidian.bcommon.mvvm.BaseMvvmActivity import com.yidian.bcommon.mvvm.BaseMvvmActivity
import com.yidian.bcommon.utils.SensitiveInfoUtil
import com.yidian.bcommon.utils.ToastUtils
import com.yidian.shenghuoquan.border.R import com.yidian.shenghuoquan.border.R
import com.yidian.shenghuoquan.border.adapter.OrderConfirmCommodityListAdapter
import com.yidian.shenghuoquan.border.databinding.BorderActivityConfirmOrderBinding import com.yidian.shenghuoquan.border.databinding.BorderActivityConfirmOrderBinding
import com.yidian.shenghuoquan.border.dto.CouponList
import com.yidian.shenghuoquan.border.dto.Shipping
import com.yidian.xarc.xevent.XBaseEvent
import com.yidian.xarc.xevent.XEventManager
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
/** /**
* 确认订单 * 确认订单
*/ */
class ConfirmOrderActivity : BaseMvvmActivity<BorderActivityConfirmOrderBinding, ConfirmOrderViewModel>() { class ConfirmOrderActivity : BaseMvvmActivity<BorderActivityConfirmOrderBinding, ConfirmOrderViewModel>() {
private val adapter by lazy { OrderConfirmCommodityListAdapter() }
override val layoutId: Int = R.layout.border_activity_confirm_order override val layoutId: Int = R.layout.border_activity_confirm_order
override val vm: ConfirmOrderViewModel by viewModels() override val vm: ConfirmOrderViewModel by viewModels()
override fun initView() { override fun initView() {
initClick() XEventManager.register(this)
subscribeUiEvent()
initList()
getIntentData(intent) getIntentData(intent)
} }
private fun initList() {
binding.rvGoodsList.adapter = adapter
}
private fun getIntentData(intent: Intent?) { private fun getIntentData(intent: Intent?) {
val paramsMap = intent?.getSerializableExtra(XRouterPathConstants.ParamsKey) val paramsMap = intent?.getSerializableExtra(XRouterPathConstants.ParamsKey)
if (paramsMap != null) { if (paramsMap != null) {
paramsMap as HashMap<*, *> paramsMap as HashMap<String, String?>
val marketingId = paramsMap["marketing_id"] vm.requestConfirmOrderInfo(paramsMap)
ToastUtils.showLongSafe("活动id: $marketingId")
} }
} }
private fun initClick() { private fun subscribeUiEvent() {
vm.goodsSuccessEvent.observe(this, {
adapter.setList(it)
})
} }
override fun onDestroy() {
super.onDestroy()
XEventManager.unRegister(this)
}
@Subscribe(sticky = false, threadMode = ThreadMode.MAIN)
fun onEvent(event: XBaseEvent?) {
when (event?.name) {
XEventConfig.CONFIRM_ORDER_CHOOSE_POINT_SUCCESS -> {
// 选择自提点成功
val point = event.body as Shipping
vm.choosePickUpPointSuccess(point)
}
XEventConfig.CONFIRM_ORDER_CHOOSE_COUPON_SUCCESS -> {
// 选择优惠券成功
val coupon = event.body as CouponList
vm.chooseVoucherSuccess(coupon)
}
}
}
} }
package com.yidian.shenghuoquan.border.ui package com.yidian.shenghuoquan.border.ui
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import com.yidian.bcommon.mvvm.BaseViewModel import com.yidian.bcommon.mvvm.BaseViewModel
import com.yidian.bcommon.utils.ToastUtils
import com.yidian.shenghuoquan.border.dto.CouponList
import com.yidian.shenghuoquan.border.dto.GoodsList
import com.yidian.shenghuoquan.border.dto.Shipping
import com.yidian.shenghuoquan.border.http.OrderRemoteDataSource
class ConfirmOrderViewModel : BaseViewModel() { class ConfirmOrderViewModel : BaseViewModel() {
// var selectedPickUpPoint = MutableLiveData<String>() private var originalAmount: Double = 0.00// 原价总和
var receivingName = MutableLiveData<String>() var couponAmount: Double = 0.00// 优惠券金额
var receivingPhone = MutableLiveData<String>()
// var goodsList = MutableLiveData<String>() var selectedPickUpPoint = MutableLiveData<Shipping?>()// 自提点
var couponsAvailableNum = MutableLiveData<Int>() var receivingName = MutableLiveData<String>()// 收货人姓名
var discountAmount = MutableLiveData<Double>() var receivingPhone = MutableLiveData<String>()//收货人电话
var totalAmount = MutableLiveData<Double>() var selectedCoupon = MutableLiveData<CouponList>()// 选中的优惠券
var couponsAvailableNum = MutableLiveData<Int>()// 可用优惠券数量
var totalAmount = MutableLiveData(0.00)// 合计金额 = 原价 - 优惠
var remark = MutableLiveData<String>() var remark = MutableLiveData<String>()
/**
* 商品列表成功 Event
*/
private val _goodsSuccessEvent = MutableLiveData<List<GoodsList>?>()
val goodsSuccessEvent: LiveData<List<GoodsList>?> = _goodsSuccessEvent
/** /**
* 请求订单信息 * 请求订单信息
*/ */
fun requestOrderInfo() { fun requestConfirmOrderInfo(paramsMap: HashMap<String, String?>) {
// val paramsMap = HashMap<String, String?>()
// paramsMap["business_from"] = "2"
// paramsMap["marketing_id"] = marketingId.toString()
OrderRemoteDataSource.requestOrderConfirm(paramsMap) {
if (it == null) {
return@requestOrderConfirm
}
selectedPickUpPoint.value = it.shipping
receivingName.value = it.shipping?.receiverName ?: ""
receivingPhone.value = it.shipping?.receiverMobile ?: ""
_goodsSuccessEvent.value = it.goodsList
calculateOriginalAmount(it.goodsList)
couponsAvailableNum.value = it.couponList?.size ?: 0 // 显示0张便于查看不能使用的优惠券
}
}
/**
* 计算商品原价 = 数量 * 单价
*/
private fun calculateOriginalAmount(goodsList: List<GoodsList>?) {
if (goodsList.isNullOrEmpty()) {
return
}
goodsList.forEach {
originalAmount = originalAmount.plus(it.price * it.goodsNum)
}
// 计算出合计
calculateTotalAmount()
}
/**
* 计算商品合计 = 原价 - 优惠
*/
private fun calculateTotalAmount() {
totalAmount.value = originalAmount - couponAmount
} }
/** /**
* 选择自提点 * 选择自提点
*/ */
fun choosePickUpPoint() { fun choosePickUpPoint() {
// todo 带过去当前选中自提点
ToastUtils.showLongSafe("去选择自提点")
}
fun choosePickUpPointSuccess(point: Shipping) {
selectedPickUpPoint.value = point
} }
/** /**
* 选择代金券 * 选择代金券
*/ */
fun chooseVoucher() { fun chooseVoucher() {
// todo 带过去当前选中优惠券
ToastUtils.showLongSafe("去选择优惠券")
}
fun chooseVoucherSuccess(coupon: CouponList) {
selectedCoupon.value = coupon
couponAmount = coupon.amount?.toDouble() ?: 0.00
// 重新计算相关金额
calculateTotalAmount()
} }
/** /**
* 创建订单 * 创建订单
*/ */
fun createOrder() { fun createOrder() {
val paramsMap = HashMap<String, String?>()
paramsMap["business_from"] = "2"
paramsMap["user_id"] = "510235230818"
// todo 添加其他参数
OrderRemoteDataSource.requestCreateOrder(paramsMap) {
ToastUtils.showShort("创建订单成功${it?.orderId}")
}
} }
/** /**
......
...@@ -61,7 +61,7 @@ class OrderCommodityInfoView @JvmOverloads constructor(context: Context, attrs: ...@@ -61,7 +61,7 @@ class OrderCommodityInfoView @JvmOverloads constructor(context: Context, attrs:
vm.requestApplyRefund(it) vm.requestApplyRefund(it)
} }
}, null, R.color.color_5A968F) }, null, R.color.color_FD7823)
}) })
// 监听申请退款接口请求结果 // 监听申请退款接口请求结果
vm.applyRefundResult.observe(context as LifecycleOwner, { vm.applyRefundResult.observe(context as LifecycleOwner, {
......
...@@ -4,5 +4,5 @@ ...@@ -4,5 +4,5 @@
<corners android:radius="@dimen/dp9" /> <corners android:radius="@dimen/dp9" />
<solid android:color="#D66948" /> <solid android:color="@color/color_FD7823" />
</shape> </shape>
\ No newline at end of file
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android" <shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle"> android:shape="rectangle">
<solid android:color="@color/color_5A968F" /> <solid android:color="@color/color_FD7823" />
<corners android:radius="@dimen/dp18" /> <corners android:radius="@dimen/dp18" />
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android" <shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle"> android:shape="rectangle">
<solid android:color="@color/color_D66948" /> <solid android:color="@color/color_FD7823" />
<corners android:radius="@dimen/dp9" /> <corners android:radius="@dimen/dp9" />
</shape> </shape>
\ 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="wrap_content"
android:layout_marginBottom="@dimen/dp15">
<ImageView
android:id="@+id/iv_commodity_pic"
android:layout_width="@dimen/dp82"
android:layout_height="@dimen/dp60"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0"
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:textColor="@color/color_333333"
android:textSize="@dimen/sp15"
app:layout_constraintEnd_toEndOf="parent"
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:textColor="@color/color_999999"
android:textSize="@dimen/sp13"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0"
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: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="@id/tv_commodity_name"
app:layout_constraintTop_toBottomOf="@id/tv_commodity_count"
tools:text="¥15.00" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
...@@ -154,7 +154,7 @@ ...@@ -154,7 +154,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dp8" android:layout_marginEnd="@dimen/dp8"
android:text="@{'¥' + String.valueOf(data.discountFee)}" android:text="@{'¥' + String.valueOf(data.discountFee)}"
android:textColor="@color/color_D66948" android:textColor="@color/color_FD7823"
android:textSize="@dimen/sp14" android:textSize="@dimen/sp14"
android:visibility="@{data.useCoupon == 1 ? View.VISIBLE : View.GONE}" android:visibility="@{data.useCoupon == 1 ? View.VISIBLE : View.GONE}"
app:layout_constraintBaseline_toBaselineOf="@id/tv_total_amount" app:layout_constraintBaseline_toBaselineOf="@id/tv_total_amount"
......
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<color name="color_F6775B">#F6775B</color>
<color name="color_F7F7F7">#FFF7F7F7</color> <color name="color_F7F7F7">#FFF7F7F7</color>
<color name="color_5A968F">#5A968F</color> <color name="color_FD7823">#FD7823</color>
<color name="color_D66948">#D66948</color>
</resources> </resources>
\ No newline at end of file
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
<string name="order_detail">订单详情</string> <string name="order_detail">订单详情</string>
<string name="pickup_point">自提点</string> <string name="pickup_point">自提点</string>
<string name="pickup_point_contract">提货点联系人: %s %s</string> <string name="pickup_point_contract">提货点联系人: %s %s</string>
<string name="pickup_point_contract_person">提货点联系人: </string>
<string name="please_select_pickup_point">请选择自提点</string> <string name="please_select_pickup_point">请选择自提点</string>
<string name="consignee_name">收货姓名</string> <string name="consignee_name">收货姓名</string>
<string name="consignee_phone">手机号码</string> <string name="consignee_phone">手机号码</string>
...@@ -11,7 +12,9 @@ ...@@ -11,7 +12,9 @@
<string name="contract_seller">联系卖家</string> <string name="contract_seller">联系卖家</string>
<string name="apply_refund">申请退款</string> <string name="apply_refund">申请退款</string>
<string name="red_packet_or_coupon">红包/优惠券</string> <string name="red_packet_or_coupon">红包/优惠券</string>
<string name="coupons_available_num">张优惠券可用</string>
<string name="discount_amount">已优惠:</string> <string name="discount_amount">已优惠:</string>
<string name="renminbi">¥</string>
<string name="total_amount">合计:</string> <string name="total_amount">合计:</string>
<string name="order_info">订单信息</string> <string name="order_info">订单信息</string>
<string name="order_no">订单编号</string> <string name="order_no">订单编号</string>
......
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