Commit 973caaaf authored by UIUANG\Zsc's avatar UIUANG\Zsc

新增会员登录注册,并使用优惠券

parent 36362ce6
...@@ -3,22 +3,54 @@ ...@@ -3,22 +3,54 @@
<component name="DesignSurface"> <component name="DesignSurface">
<option name="filePathToZoomLevelMap"> <option name="filePathToZoomLevelMap">
<map> <map>
<entry key="..\:/AndroidProject/YPPos/app/src/main/res/drawable/bg_available_coupons.xml" value="0.283" />
<entry key="..\:/AndroidProject/YPPos/app/src/main/res/drawable/bg_cancel_bg.xml" value="0.3508682328907048" /> <entry key="..\:/AndroidProject/YPPos/app/src/main/res/drawable/bg_cancel_bg.xml" value="0.3508682328907048" />
<entry key="..\:/AndroidProject/YPPos/app/src/main/res/drawable/bg_choose_dialog.xml" value="0.283" />
<entry key="..\:/AndroidProject/YPPos/app/src/main/res/drawable/bg_dialog.xml" value="0.3508682328907048" /> <entry key="..\:/AndroidProject/YPPos/app/src/main/res/drawable/bg_dialog.xml" value="0.3508682328907048" />
<entry key="..\:/AndroidProject/YPPos/app/src/main/res/drawable/bg_dotted_line.xml" value="0.283" />
<entry key="..\:/AndroidProject/YPPos/app/src/main/res/drawable/bg_item_count.xml" value="0.283" />
<entry key="..\:/AndroidProject/YPPos/app/src/main/res/drawable/bg_item_product.xml" value="0.283" />
<entry key="..\:/AndroidProject/YPPos/app/src/main/res/drawable/bg_loading.xml" value="0.283" />
<entry key="..\:/AndroidProject/YPPos/app/src/main/res/drawable/bg_login.xml" value="0.283" />
<entry key="..\:/AndroidProject/YPPos/app/src/main/res/drawable/bg_member.xml" value="0.283" />
<entry key="..\:/AndroidProject/YPPos/app/src/main/res/drawable/bg_offer.xml" value="0.283" />
<entry key="..\:/AndroidProject/YPPos/app/src/main/res/drawable/bg_pay_amount.xml" value="0.283" />
<entry key="..\:/AndroidProject/YPPos/app/src/main/res/drawable/bg_pay_amount_check.xml" value="0.283" />
<entry key="..\:/AndroidProject/YPPos/app/src/main/res/drawable/bg_phone.xml" value="0.283" />
<entry key="..\:/AndroidProject/YPPos/app/src/main/res/drawable/bg_popup_offer_details.xml" value="0.3508682328907048" /> <entry key="..\:/AndroidProject/YPPos/app/src/main/res/drawable/bg_popup_offer_details.xml" value="0.3508682328907048" />
<entry key="..\:/AndroidProject/YPPos/app/src/main/res/drawable/bg_popup_pay.xml" value="0.283" />
<entry key="..\:/AndroidProject/YPPos/app/src/main/res/drawable/bg_popup_settings_bottom.xml" value="0.283" />
<entry key="..\:/AndroidProject/YPPos/app/src/main/res/drawable/bg_popup_settings_top.xml" value="0.283" />
<entry key="..\:/AndroidProject/YPPos/app/src/main/res/drawable/bg_receive_payment.xml" value="0.283" />
<entry key="..\:/AndroidProject/YPPos/app/src/main/res/drawable/bg_search.xml" value="0.283" />
<entry key="..\:/AndroidProject/YPPos/app/src/main/res/drawable/bg_shadow.xml" value="0.283" />
<entry key="..\:/AndroidProject/YPPos/app/src/main/res/drawable/btn_cancel_bg.xml" value="0.283" />
<entry key="..\:/AndroidProject/YPPos/app/src/main/res/drawable/btn_confirm_bg.xml" value="0.3508682328907048" /> <entry key="..\:/AndroidProject/YPPos/app/src/main/res/drawable/btn_confirm_bg.xml" value="0.3508682328907048" />
<entry key="..\:/AndroidProject/YPPos/app/src/main/res/drawable/edit_bg.xml" value="0.3508682328907048" /> <entry key="..\:/AndroidProject/YPPos/app/src/main/res/drawable/edit_bg.xml" value="0.3508682328907048" />
<entry key="..\:/AndroidProject/YPPos/app/src/main/res/drawable/ic_chose_down.xml" value="0.283" />
<entry key="..\:/AndroidProject/YPPos/app/src/main/res/drawable/ic_discount_down.xml" value="0.283" />
<entry key="..\:/AndroidProject/YPPos/app/src/main/res/drawable/ic_popup_close.xml" value="0.283" />
<entry key="..\:/AndroidProject/YPPos/app/src/main/res/drawable/ic_print_receipt.xml" value="0.3508682328907048" /> <entry key="..\:/AndroidProject/YPPos/app/src/main/res/drawable/ic_print_receipt.xml" value="0.3508682328907048" />
<entry key="..\:/AndroidProject/YPPos/app/src/main/res/drawable/ic_synchronize_products.xml" value="0.3508682328907048" /> <entry key="..\:/AndroidProject/YPPos/app/src/main/res/drawable/ic_synchronize_products.xml" value="0.3508682328907048" />
<entry key="..\:/AndroidProject/YPPos/app/src/main/res/layout/activity_login.xml" value="0.16347124117053483" /> <entry key="..\:/AndroidProject/YPPos/app/src/main/res/layout/activity_login.xml" value="0.16347124117053483" />
<entry key="..\:/AndroidProject/YPPos/app/src/main/res/layout/activity_main.xml" value="0.16347124117053483" /> <entry key="..\:/AndroidProject/YPPos/app/src/main/res/layout/activity_main.xml" value="0.33" />
<entry key="..\:/AndroidProject/YPPos/app/src/main/res/layout/activity_register.xml" value="0.16347124117053483" /> <entry key="..\:/AndroidProject/YPPos/app/src/main/res/layout/activity_register.xml" value="0.16347124117053483" />
<entry key="..\:/AndroidProject/YPPos/app/src/main/res/layout/item_pos_product.xml" value="0.5" /> <entry key="..\:/AndroidProject/YPPos/app/src/main/res/layout/item_pos_product.xml" value="0.5" />
<entry key="..\:/AndroidProject/YPPos/app/src/main/res/layout/popup_cash_pay.xml" value="0.33" /> <entry key="..\:/AndroidProject/YPPos/app/src/main/res/layout/popup_cash_pay.xml" value="0.33" />
<entry key="..\:/AndroidProject/YPPos/app/src/main/res/layout/popup_cash_pay_success.xml" value="0.33" /> <entry key="..\:/AndroidProject/YPPos/app/src/main/res/layout/popup_cash_pay_success.xml" value="0.33" />
<entry key="..\:/AndroidProject/YPPos/app/src/main/res/layout/popup_change_quantity.xml" value="0.4703703703703704" /> <entry key="..\:/AndroidProject/YPPos/app/src/main/res/layout/popup_change_quantity.xml" value="0.4703703703703704" />
<entry key="..\:/AndroidProject/YPPos/app/src/main/res/layout/popup_choose_age_group.xml" value="0.2740036231884058" />
<entry key="..\:/AndroidProject/YPPos/app/src/main/res/layout/popup_gender_choose.xml" value="0.2740036231884058" />
<entry key="..\:/AndroidProject/YPPos/app/src/main/res/layout/popup_member_login.xml" value="0.2740036231884058" />
<entry key="..\:/AndroidProject/YPPos/app/src/main/res/layout/popup_member_register.xml" value="0.25" />
<entry key="..\:/AndroidProject/YPPos/app/src/main/res/layout/popup_message.xml" value="0.2740036231884058" />
<entry key="..\:/AndroidProject/YPPos/app/src/main/res/layout/popup_message_tips.xml" value="0.2740036231884058" />
<entry key="..\:/AndroidProject/YPPos/app/src/main/res/layout/popup_offer_details.xml" value="0.1" />
<entry key="..\:/AndroidProject/YPPos/app/src/main/res/layout/popup_order_pay_amount.xml" value="0.16347124117053483" /> <entry key="..\:/AndroidProject/YPPos/app/src/main/res/layout/popup_order_pay_amount.xml" value="0.16347124117053483" />
<entry key="..\:/AndroidProject/YPPos/app/src/main/res/layout/popup_pay_amount.xml" value="0.2740036231884058" />
<entry key="..\:/AndroidProject/YPPos/app/src/main/res/layout/popup_pay_failed.xml" value="0.2318840579710145" />
<entry key="..\:/AndroidProject/YPPos/app/src/main/res/layout/popup_pay_success.xml" value="0.16347124117053483" /> <entry key="..\:/AndroidProject/YPPos/app/src/main/res/layout/popup_pay_success.xml" value="0.16347124117053483" />
<entry key="..\:/AndroidProject/YPPos/app/src/main/res/layout/popup_scan_coupon.xml" value="0.2740036231884058" />
<entry key="..\:/AndroidProject/YPPos/app/src/main/res/layout/popup_settings.xml" value="0.16347124117053483" /> <entry key="..\:/AndroidProject/YPPos/app/src/main/res/layout/popup_settings.xml" value="0.16347124117053483" />
</map> </map>
</option> </option>
......
...@@ -15,8 +15,8 @@ android { ...@@ -15,8 +15,8 @@ android {
applicationId "com.ypsx.yppos" applicationId "com.ypsx.yppos"
minSdkVersion 21 minSdkVersion 21
targetSdkVersion 30 targetSdkVersion 30
versionCode 100017 versionCode 100018
versionName "1.00.017" versionName "1.00.018"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
} }
......
...@@ -10,9 +10,9 @@ ...@@ -10,9 +10,9 @@
{ {
"type": "SINGLE", "type": "SINGLE",
"filters": [], "filters": [],
"versionCode": 100017, "versionCode": 100018,
"versionName": "1.00.017", "versionName": "1.00.018",
"outputFile": "yppos_v100017-1.00.017-release-2021-12-28.apk" "outputFile": "yppos_v100018-1.00.018-release-2022-06-24.apk"
} }
] ]
} }
\ No newline at end of file
...@@ -46,7 +46,7 @@ interface ApiService { ...@@ -46,7 +46,7 @@ interface ApiService {
suspend fun posKickOff(@Body request: KickoffRequest): ApiResponse<String?> suspend fun posKickOff(@Body request: KickoffRequest): ApiResponse<String?>
@POST("/api/sys/user/refreshToken") @POST("/api/sys/user/refreshToken")
fun refreshToken(@Body request:RefreshTokenRequest):ApiResponse<RefreshTokenResponse> fun refreshToken(@Body request: RefreshTokenRequest): ApiResponse<RefreshTokenResponse>
/** /**
* 根据POS机Id查询POS机配置详情 * 根据POS机Id查询POS机配置详情
...@@ -60,7 +60,7 @@ interface ApiService { ...@@ -60,7 +60,7 @@ interface ApiService {
@GET("newretail/api/mall/product/store/incrementDownload") @GET("newretail/api/mall/product/store/incrementDownload")
suspend fun getProductList( suspend fun getProductList(
@Query("storeId") storeId: String, @Query("storeId") storeId: String,
@Query("updateTimeBigger") updateTimeBigger: String?="" @Query("updateTimeBigger") updateTimeBigger: String? = ""
): ApiResponse<List<PosProduct>> ): ApiResponse<List<PosProduct>>
/** /**
...@@ -85,7 +85,6 @@ interface ApiService { ...@@ -85,7 +85,6 @@ interface ApiService {
: ApiResponse<List<SimplePosCommandResponse>> : ApiResponse<List<SimplePosCommandResponse>>
/** /**
* 回复POS机命令,标记已收到命令,准备执行 * 回复POS机命令,标记已收到命令,准备执行
*/ */
...@@ -136,4 +135,22 @@ interface ApiService { ...@@ -136,4 +135,22 @@ interface ApiService {
@GET("newretail/api/sys/options/query") @GET("newretail/api/sys/options/query")
suspend fun getOptionsByKeys(@Query("keys") keys: String = CacheUtil.getAliYunKey()): ApiResponse<List<OptionsResponse>> suspend fun getOptionsByKeys(@Query("keys") keys: String = CacheUtil.getAliYunKey()): ApiResponse<List<OptionsResponse>>
/**
* 根据手机号获取会员信息
*/
@GET("newretail/api/mall/member/getMemberByMobile")
suspend fun getMemberByMobile(@Query("mobile") mobile: String): ApiResponse<MemberInfoResponse?>
/**
* 会员建档
*/
@POST("newretail/api/mall/member/registerMember")
suspend fun registerMember(@Body request: RegisterMemberRequest): ApiResponse<MemberInfoResponse>
/**
* 释放优惠券
*/
@POST("newretail/api/mall/promotion/cancelCoupon")
suspend fun cancelCoupon(@Body request: CancelCouponRequest):ApiResponse<String>
} }
\ No newline at end of file
package com.ypsx.yppos.http.data.bean
data class CouponInfoResponse(
var fee:Int = 0,
var mediaType:String,
var name:String,
var owner:String,
var userCouponCode:String,
var userCouponId:String
)
package com.ypsx.yppos.http.data.bean
data class CouponResponse(
var canUseCoupon:Boolean,
var canUseSkuId:List<String>,
var coupon:CouponInfoResponse,
var reason:String,
)
...@@ -17,7 +17,7 @@ data class InsertOrderProductDTO( ...@@ -17,7 +17,7 @@ data class InsertOrderProductDTO(
//是否虚拟商品 //是否虚拟商品
var isVirtual: Boolean = false, var isVirtual: Boolean = false,
//会员价 //会员价
var memberPrice: Double = 0.0, var memberPrice: Double? ,
//商品名称 //商品名称
var name: String, var name: String,
var payApportionAmount: Double = 0.0, var payApportionAmount: Double = 0.0,
...@@ -25,7 +25,7 @@ data class InsertOrderProductDTO( ...@@ -25,7 +25,7 @@ data class InsertOrderProductDTO(
var price: Double, var price: Double,
var quantity: Double, var quantity: Double,
var priceType: String, var priceType: String,
var mnemonicCode:String, var mnemonicCode: String,
var productId: String, var productId: String,
var productNumber: String, var productNumber: String,
var settlementPrice: Double = 0.0, var settlementPrice: Double = 0.0,
...@@ -38,7 +38,9 @@ data class InsertOrderProductDTO( ...@@ -38,7 +38,9 @@ data class InsertOrderProductDTO(
var merchantItemId: String? = null, var merchantItemId: String? = null,
//称重码 //称重码
var weightCode: String? = null, var weightCode: String? = null,
var isPromotion: Boolean = false var isPromotion: Boolean = false,
var couponDivideTotal: Double = 0.0,
var discountCouponPrice:Double?
......
package com.ypsx.yppos.http.data.bean
data class MemberInfoResponse(
val mobile: String,
val userId: String,
val nickName: String,
val birthday: String,
val avatar: String = "",
//用户可用积分
val point: String="",
//即将到期积分
val aboutToExpirePoint: String=""
)
...@@ -28,6 +28,9 @@ data class OrderDetailsResponse( ...@@ -28,6 +28,9 @@ data class OrderDetailsResponse(
var mobile: String? = null, var mobile: String? = null,
var memberId: String? = null, var memberId: String? = null,
var payments:List<PosBuyPayment>, var payments:List<PosBuyPayment>,
var coupon:CouponInfoResponse?,
var userCouponFee:Double?,
var userCouponCode:String?,
var activitys:List<OrderActivityResponse>?= null, var activitys:List<OrderActivityResponse>?= null,
var deleteProducts:List<PosBuyPart>, var deleteProducts:List<PosBuyPart>,
......
...@@ -7,7 +7,9 @@ data class PayAmountBean( ...@@ -7,7 +7,9 @@ data class PayAmountBean(
var discountTime: Double = 0.0,//分时促销 var discountTime: Double = 0.0,//分时促销
var discountSpecial: Double = 0.0,//特价促销 var discountSpecial: Double = 0.0,//特价促销
var amount: Double = 0.0, //总价值 var amount: Double = 0.0, //总价值
var listNum:Int = 0 var listNum: Int = 0,
var discountMember: Double = 0.0,//会员优惠
var discountCoupon: Double = 0.0,
var coupon: CouponInfoResponse? = null,
var isFinal: Boolean = false
) )
...@@ -5,6 +5,8 @@ data class ProductItemPromotionResponse( ...@@ -5,6 +5,8 @@ data class ProductItemPromotionResponse(
var productId: String, var productId: String,
//价格成交类型,MEMBER_TYPE为会员价,SALE_TYPE为售价,UNRECOGNIZED_TYPE为未知类型 //价格成交类型,MEMBER_TYPE为会员价,SALE_TYPE为售价,UNRECOGNIZED_TYPE为未知类型
var priceType: String, var priceType: String,
//优惠券的优惠金额
var couponDivideTotal:Double,
//原售价 //原售价
var price: Double, var price: Double,
...@@ -13,7 +15,7 @@ data class ProductItemPromotionResponse( ...@@ -13,7 +15,7 @@ data class ProductItemPromotionResponse(
//商品级总优惠金额 //商品级总优惠金额
var discountTotal: Double, var discountTotal: Double,
//会员价 //会员价
var memberPrice: Double, var memberPrice: Double?,
//商家商品Id //商家商品Id
var merchantItemId: String?=null, var merchantItemId: String?=null,
//商品行平摊实付金额, 退货时退货金额不能大于该值 //商品行平摊实付金额, 退货时退货金额不能大于该值
......
...@@ -3,8 +3,9 @@ package com.ypsx.yppos.http.data.bean ...@@ -3,8 +3,9 @@ package com.ypsx.yppos.http.data.bean
data class ProductPromotionsResponse( data class ProductPromotionsResponse(
var orderNo: String, var orderNo: String,
var shopId: String, var shopId: String,
var orderPromotions: List<OrderActivityResponse>?=null, var orderPromotions: List<OrderActivityResponse>? = null,
var productPromotions: List<ProductItemPromotionResponse> var productPromotions: List<ProductItemPromotionResponse>,
var coupon: CouponResponse? = null
) )
package com.ypsx.yppos.http.data.entity
enum class AgeGroupEnum {
//小于30岁:
UNDER_30,
//30-50岁:
BETWEEN_30_50,
// 大于50:
ABOVE_50
}
\ No newline at end of file
package com.ypsx.yppos.http.data.request
import com.ypsx.yppos.http.data.bean.CouponInfoResponse
data class CancelCouponRequest(
var shopId: String,
var memberId: String,
var orderNo: String,
var unlockUserCoupon: CouponInfoResponse
)
package com.ypsx.yppos.http.data.request
data class ConfirmRequest(
var isFinal: Boolean = false,
var userCouponCode: String = ""
)
\ No newline at end of file
package com.ypsx.yppos.http.data.request package com.ypsx.yppos.http.data.request
import com.ypsx.yppos.http.data.bean.InsertOrderProductDTO import com.ypsx.yppos.http.data.bean.*
import com.ypsx.yppos.http.data.bean.OrderActivityResponse
import com.ypsx.yppos.http.data.bean.OrderPayment
data class InsertOrderRequest( data class InsertOrderRequest(
var activitys: List<OrderActivityResponse>? = null, var activitys: List<OrderActivityResponse>? = null,
var coupon: CouponInfoResponse?=null,
var createTime: String, var createTime: String,
var creatorId: String, var creatorId: String,
......
...@@ -8,6 +8,10 @@ data class ProductPromotionRequest( ...@@ -8,6 +8,10 @@ data class ProductPromotionRequest(
//订单号 //订单号
var orderNo: String, var orderNo: String,
var memberId:String = "",
var confirm:ConfirmRequest,
var products: ArrayList<ProductItem> = arrayListOf() var products: ArrayList<ProductItem> = arrayListOf()
) )
package com.ypsx.yppos.http.data.request
data class RegisterMemberRequest(
var ageGroup: String,
//会员性别 0 未知、1 男、2 女
var gender: Int,
var mobile: String,
var shopId: String
)
...@@ -4,12 +4,16 @@ import android.content.Context ...@@ -4,12 +4,16 @@ import android.content.Context
import androidx.room.Database import androidx.room.Database
import androidx.room.Room import androidx.room.Room
import androidx.room.RoomDatabase import androidx.room.RoomDatabase
import androidx.room.migration.Migration
import androidx.sqlite.db.SupportSQLiteDatabase
import com.ypsx.yppos.room.dao.* import com.ypsx.yppos.room.dao.*
import com.ypsx.yppos.room.entity.* import com.ypsx.yppos.room.entity.*
const val name:String = "yp_pos.db"
const val name: String = "yp_pos.db"
@Database( @Database(
entities = [PosConfig::class, PosProduct::class, entities = [PosConfig::class, PosProduct::class,
PosBuy::class, PosBuyPart::class, PosBuyPayment::class], version = 1,exportSchema = false PosBuy::class, PosBuyPart::class, PosBuyPayment::class], version = 3, exportSchema = false
) )
abstract class PosDatabase : RoomDatabase() { abstract class PosDatabase : RoomDatabase() {
...@@ -37,7 +41,9 @@ abstract class PosDatabase : RoomDatabase() { ...@@ -37,7 +41,9 @@ abstract class PosDatabase : RoomDatabase() {
context.applicationContext, context.applicationContext,
PosDatabase::class.java, PosDatabase::class.java,
name name
).allowMainThreadQueries().build() ).allowMainThreadQueries()
.addMigrations(MIGRATION_1_2,MIGRATION_2_3)
.build()
INSTANCE = instance INSTANCE = instance
return instance return instance
} }
...@@ -46,5 +52,30 @@ abstract class PosDatabase : RoomDatabase() { ...@@ -46,5 +52,30 @@ abstract class PosDatabase : RoomDatabase() {
fun clearAllTables() { fun clearAllTables() {
INSTANCE?.clearAllTables() INSTANCE?.clearAllTables()
} }
var MIGRATION_1_2 = object : Migration(1, 2) {
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL("ALTER TABLE POS_Buy ADD COLUMN `userCouponCode` TEXT;")
database.execSQL("ALTER TABLE POS_Buy ADD COLUMN `userCouponFee` REAL;")
}
}
var MIGRATION_2_3 = object : Migration(2, 3) {
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL("ALTER TABLE POS_Buy ADD COLUMN `memberPoint` TEXT;")
database.execSQL("ALTER TABLE POS_BuyPart ADD COLUMN `memberPrice` REAL NOT NULL default 0;")
database.execSQL("ALTER TABLE POS_BuyPart ADD COLUMN `priceType` TEXT NOT NULL default '';")
}
}
var MIGRATION_3_4 = object : Migration(3, 4) {
override fun migrate(database: SupportSQLiteDatabase) {
}
}
} }
} }
\ No newline at end of file
...@@ -18,8 +18,8 @@ data class PosBuy( ...@@ -18,8 +18,8 @@ data class PosBuy(
var promotionOnSaleTotal: Double = 0.00, var promotionOnSaleTotal: Double = 0.00,
var totalAmount: Double = 0.00, var totalAmount: Double = 0.00,
var roundPrice: Double = 0.00, var roundPrice: Double = 0.00,
var type:String, var type: String,
var buyNumber:String, var buyNumber: String,
var remark: String? = null, var remark: String? = null,
var einvoiceQrcodeUrl: String = "", var einvoiceQrcodeUrl: String = "",
...@@ -31,5 +31,9 @@ data class PosBuy( ...@@ -31,5 +31,9 @@ data class PosBuy(
var creatorName: String? = null, var creatorName: String? = null,
var activitys: String? = null, var activitys: String? = null,
var mobile: String? = null, var mobile: String? = null,
var memberId: String? = null var memberId: String? = null,
var userCouponFee: Double? = 0.0,
var userCouponCode: String? = "",
var memberPoint: String?
) )
...@@ -39,10 +39,12 @@ data class PosBuyPart( ...@@ -39,10 +39,12 @@ data class PosBuyPart(
var style: String? = null, var style: String? = null,
var pluLevel: String? = null, var pluLevel: String? = null,
var activityType: String? = null, var activityType: String? = null,
var priceType: String,
var payApportionAmount: Double = 0.00, var payApportionAmount: Double = 0.00,
var activityPrice: Double = 0.00, var activityPrice: Double = 0.00,
var price: Double = 0.00, var price: Double = 0.00,
var memberPrice:Double =0.00,
var settlementPrice: Double = 0.00, var settlementPrice: Double = 0.00,
var discountTotal: Double = 0.00, var discountTotal: Double = 0.00,
var discountPrice: Double = 0.00, var discountPrice: Double = 0.00,
......
...@@ -31,8 +31,9 @@ data class PosBuyPayment( ...@@ -31,8 +31,9 @@ data class PosBuyPayment(
var realPayMethod: String? = null, var realPayMethod: String? = null,
var realPayFlowNo: String? = null, var realPayFlowNo: String? = null,
var payFlowNo: String, var payFlowNo: String,
var status: String, var status: String,
// var openId: String, // var openId: String,
var openId: String?=null, var openId: String? = null,
) )
package com.ypsx.yppos.room.repository package com.ypsx.yppos.room.repository
import android.text.TextUtils
import com.ypsx.base.base.appContext import com.ypsx.base.base.appContext
import com.ypsx.base.ext.util.toJson import com.ypsx.base.ext.util.toJson
import com.ypsx.yppos.http.data.bean.OrderDetailsResponse import com.ypsx.yppos.http.data.bean.OrderDetailsResponse
...@@ -12,6 +13,7 @@ import com.ypsx.yppos.room.entity.PosBuyPart ...@@ -12,6 +13,7 @@ import com.ypsx.yppos.room.entity.PosBuyPart
import com.ypsx.yppos.room.entity.PosBuyPayment import com.ypsx.yppos.room.entity.PosBuyPayment
import com.ypsx.base.util.dXLog import com.ypsx.base.util.dXLog
import com.ypsx.base.util.eXLog import com.ypsx.base.util.eXLog
import com.ypsx.yppos.utils.DateUtil
class PosBuyRepository { class PosBuyRepository {
...@@ -35,7 +37,7 @@ class PosBuyRepository { ...@@ -35,7 +37,7 @@ class PosBuyRepository {
return PosDatabase.getDatabase(appContext).posBuyPaymentDao() return PosDatabase.getDatabase(appContext).posBuyPaymentDao()
} }
fun savePosBuy(orderResponse: OrderDetailsResponse, authCode: String) { fun savePosBuy(orderResponse: OrderDetailsResponse, authCode: String,memberPoint: String) {
orderResponse.toString().eXLog() orderResponse.toString().eXLog()
val isEmpty = orderResponse.activitys?.isEmpty() ?: true val isEmpty = orderResponse.activitys?.isEmpty() ?: true
val activitys = if (isEmpty) "" else orderResponse.activitys.toJson() val activitys = if (isEmpty) "" else orderResponse.activitys.toJson()
...@@ -61,11 +63,23 @@ class PosBuyRepository { ...@@ -61,11 +63,23 @@ class PosBuyRepository {
activitys = activitys, activitys = activitys,
type = orderResponse.type, type = orderResponse.type,
mobile = orderResponse.mobile, mobile = orderResponse.mobile,
memberId = orderResponse.memberId memberId = orderResponse.memberId,
userCouponCode = orderResponse.userCouponCode,
userCouponFee = orderResponse.userCouponFee,
memberPoint = memberPoint
) )
getPosBuyDao().insert(posBuy) getPosBuyDao().insert(posBuy)
for (payment in orderResponse.payments) { for (payment in orderResponse.payments) {
payment.payCode = authCode payment.payCode = authCode
if (TextUtils.isEmpty(payment.payFlowNo)) {
payment.payFlowNo = ""
}
if (TextUtils.isEmpty(payment.payTime)) {
payment.payTime = DateUtil.getTodayDateTime()
}
payment.toJson().dXLog() payment.toJson().dXLog()
getPosBuyPaymentDao().insert(payment) getPosBuyPaymentDao().insert(payment)
} }
...@@ -89,6 +103,7 @@ class PosBuyRepository { ...@@ -89,6 +103,7 @@ class PosBuyRepository {
name = product.paymentProductName, name = product.paymentProductName,
price = product.price, price = product.price,
activityPrice = product.activityPrice, activityPrice = product.activityPrice,
memberPrice = product.memberPrice,
activitys = activity, activitys = activity,
eaQty = 0, eaQty = 0,
spec = product.spec, spec = product.spec,
...@@ -96,6 +111,7 @@ class PosBuyRepository { ...@@ -96,6 +111,7 @@ class PosBuyRepository {
style = product.style, style = product.style,
pluLevel = product.pluLevel, pluLevel = product.pluLevel,
activityType = activityType, activityType = activityType,
priceType = product.priceType,
productNumber = product.productNumber, productNumber = product.productNumber,
isVirtual = product.isVirtual, isVirtual = product.isVirtual,
discountTotal = product.discountTotal, discountTotal = product.discountTotal,
......
package com.ypsx.yppos.ui.adapter package com.ypsx.yppos.ui.adapter
import android.graphics.Color import android.graphics.Color
import android.text.SpannableString
import android.text.SpannableStringBuilder import android.text.SpannableStringBuilder
import android.text.Spanned import android.text.Spanned
import android.text.style.ImageSpan
import android.widget.TextView
import com.chad.library.adapter.base.BaseQuickAdapter import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.viewholder.BaseViewHolder import com.chad.library.adapter.base.viewholder.BaseViewHolder
import com.ypsx.base.ext.util.dp2px
import com.ypsx.yppos.R import com.ypsx.yppos.R
import com.ypsx.yppos.http.data.bean.InsertOrderProductDTO import com.ypsx.yppos.http.data.bean.InsertOrderProductDTO
import com.ypsx.yppos.http.data.entity.PosProductStyle import com.ypsx.yppos.http.data.entity.PosProductStyle
...@@ -22,10 +26,10 @@ class OrderProductAdapter(data: ArrayList<InsertOrderProductDTO>) : ...@@ -22,10 +26,10 @@ class OrderProductAdapter(data: ArrayList<InsertOrderProductDTO>) :
item.run { item.run {
when (style) { when (style) {
PosProductStyle.SINGLE.name -> holder.setText(R.id.tv_barCode, "条码:$barCode") PosProductStyle.SINGLE.name -> holder.setText(R.id.tv_barCode, "条码:$barCode")
PosProductStyle.WEIGHT.name->{ PosProductStyle.WEIGHT.name -> {
if (weightCode.isNullOrEmpty()) { if (weightCode.isNullOrEmpty()) {
holder.setText(R.id.tv_barCode, "PLU:$mnemonicCode") holder.setText(R.id.tv_barCode, "PLU:$mnemonicCode")
}else{ } else {
holder.setText(R.id.tv_barCode, "PLU:$weightCode") holder.setText(R.id.tv_barCode, "PLU:$weightCode")
} }
} }
...@@ -42,9 +46,28 @@ class OrderProductAdapter(data: ArrayList<InsertOrderProductDTO>) : ...@@ -42,9 +46,28 @@ class OrderProductAdapter(data: ArrayList<InsertOrderProductDTO>) :
) )
ssb.setSpan(roundBackgroundColorSpan, 0, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) ssb.setSpan(roundBackgroundColorSpan, 0, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
holder.setText(R.id.tv_name, ssb) holder.setText(R.id.tv_name, ssb)
} else {
if (priceType == "MEMBER_TYPE") {
// val view = holder.getView<TextView>(R.id.tv_name)
var drawable = context.resources.getDrawable(R.drawable.ic_yp_member, null)
drawable.setBounds(0, 0, context.dp2px(16), context.dp2px(16))
// view.setCompoundDrawables(
// drawable,
// null, null, null
// );
// view.compoundDrawablePadding = context.dp2px(5)
val ssb = SpannableStringBuilder("1 $name")
ssb.setSpan(
ImageSpan(drawable),
0,
1,
SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE
)
holder.setText(R.id.tv_name, ssb)
} else { } else {
holder.setText(R.id.tv_name, name) holder.setText(R.id.tv_name, name)
} }
}
holder.setText(R.id.tv_price, "¥$price/$unit") holder.setText(R.id.tv_price, "¥$price/$unit")
holder.setText(R.id.tv_amount, "$amount") holder.setText(R.id.tv_amount, "$amount")
when (style) { when (style) {
......
package com.ypsx.yppos.ui.popup
import android.content.Context
import android.view.Gravity
import android.view.View
import com.ypsx.yppos.R
import com.ypsx.yppos.databinding.PopupChooseAgeGroupBinding
import com.ypsx.yppos.http.data.entity.AgeGroupEnum
import razerdp.basepopup.BasePopupWindow
class ChooseAgeGroupPopupWindow(context: Context) : BasePopupWindow(context) {
var binding: PopupChooseAgeGroupBinding? = null
private var chooseAgeGroupAction: (ageGroup: AgeGroupEnum) -> Unit = { }
init {
setContentView(R.layout.popup_choose_age_group)
popupGravity = Gravity.BOTTOM
setPriority(Priority.HIGH)
setOverlayMask(true)
isOutSideTouchable = true
setOutSideDismiss(true)
setBackPressEnable(false)
}
override fun onViewCreated(contentView: View) {
binding = PopupChooseAgeGroupBinding.bind(contentView)
binding?.click = ProxyClick()
}
inner class ProxyClick {
fun choose(ageGroup: AgeGroupEnum) {
dismiss()
chooseAgeGroupAction.invoke(ageGroup)
}
fun cancel() {
dismiss()
}
}
fun setChooseAgeGroupClick(chooseAgeGroupAction: (ageGroup: AgeGroupEnum) -> Unit) {
this.chooseAgeGroupAction = chooseAgeGroupAction
}
}
\ No newline at end of file
package com.ypsx.yppos.ui.popup
import android.content.Context
import android.view.Gravity
import android.view.View
import com.ypsx.base.base.appContext
import com.ypsx.base.ext.util.screenWidth
import com.ypsx.yppos.R
import com.ypsx.yppos.databinding.PopupGenderChooseBinding
import com.ypsx.yppos.databinding.PopupMemberLoginBinding
import com.ypsx.yppos.databinding.PopupMemberRegisterBinding
import razerdp.basepopup.BasePopupWindow
/**
* 性别选择
*/
class GenderChoosePopupWindow(context: Context) : BasePopupWindow(context) {
var binding: PopupGenderChooseBinding?=null
private var chooseGenderAction: (gender:Int) -> Unit = { }
init {
setContentView(R.layout.popup_gender_choose)
popupGravity = Gravity.BOTTOM
setPriority(Priority.HIGH)
setOverlayMask(true)
isOutSideTouchable = true
setOutSideDismiss(true)
setBackPressEnable(false)
}
override fun onViewCreated(contentView: View) {
binding = PopupGenderChooseBinding.bind(contentView)
binding?.click = ProxyClick()
}
inner class ProxyClick {
fun choose(gender: Int) {
dismiss()
chooseGenderAction.invoke(gender)
}
fun cancel() {
dismiss()
}
}
fun setChooseGenderClick(chooseGenderAction: (gender:Int) -> Unit) {
this.chooseGenderAction = chooseGenderAction
}
}
\ No newline at end of file
package com.ypsx.yppos.ui.popup
import android.content.Context
import android.text.TextUtils
import android.view.Gravity
import android.view.View
import com.ypsx.base.base.appContext
import com.ypsx.base.ext.util.screenWidth
import com.ypsx.base.util.RegexUtils
import com.ypsx.yppos.R
import com.ypsx.yppos.databinding.PopupMemberLoginBinding
import com.ypsx.yppos.databinding.PopupMessageBinding
import com.ypsx.yppos.utils.toast
import com.ypsx.yppos.viewmodel.state.MessageViewModel
import razerdp.basepopup.BasePopupWindow
class MemberLoginPopupWindow(context: Context?) : BasePopupWindow(context) {
var binding: PopupMemberLoginBinding?=null
private var memberLoginAction: (phone:String) -> Unit = { }
init {
setContentView(R.layout.popup_member_login)
width = appContext.screenWidth / 4 * 3
popupGravity = Gravity.CENTER
isOutSideTouchable = false
setOutSideDismiss(false)
setBackPressEnable(false)
}
override fun onViewCreated(contentView: View) {
binding = PopupMemberLoginBinding.bind(contentView)
binding?.click = ProxyClick()
setAutoShowKeyboard(binding?.etMemberPhone,true)
}
inner class ProxyClick {
fun cancel() {
dismiss()
}
fun sure() {
val phone = binding?.etMemberPhone?.text.toString()
if (TextUtils.isEmpty(phone)) {
"手机号不能为空!".toast()
return
}
if (!RegexUtils.isMobileSimple(phone)) {
"手机号不符合规则".toast()
return
}
dismiss()
memberLoginAction.invoke(phone)
}
}
fun setMemberLoginClick(memberLoginAction: (phone:String) -> Unit) {
this.memberLoginAction = memberLoginAction
}
}
package com.ypsx.yppos.ui.popup
import android.content.Context
import android.text.TextUtils
import android.view.Gravity
import android.view.View
import com.ypsx.base.base.appContext
import com.ypsx.base.ext.util.screenWidth
import com.ypsx.yppos.R
import com.ypsx.yppos.databinding.PopupMemberRegisterBinding
import com.ypsx.yppos.http.data.entity.AgeGroupEnum
import com.ypsx.yppos.utils.toast
import com.ypsx.yppos.viewmodel.state.MemberRegisterViewModel
import razerdp.basepopup.BasePopupWindow
class MemberRegisterPopupWindow(context: Context?) : BasePopupWindow(context) {
var binding: PopupMemberRegisterBinding? = null
private lateinit var mobile: String
private var registerMemberAction: (mobile: String,gender:Int,ageGroup:String) -> Unit = { mobile, gender, ageGroup -> {} }
init {
setContentView(R.layout.popup_member_register)
width = appContext.screenWidth / 4 * 3
popupGravity = Gravity.CENTER
setPriority(Priority.LOW)
isOutSideTouchable = false
setOutSideDismiss(false)
setBackPressEnable(false)
}
override fun onViewCreated(contentView: View) {
binding = PopupMemberRegisterBinding.bind(contentView)
binding?.vm = MemberRegisterViewModel()
binding?.click = ProxyClick()
binding?.tvGender?.keyListener = null
binding?.tvAge?.keyListener = null
}
fun setMobile(mobile: String) {
this.mobile = mobile
binding?.vm?.memberMobile?.set(mobile)
}
inner class ProxyClick {
fun chooseGender() {
val genderChoosePopupWindow = GenderChoosePopupWindow(context)
genderChoosePopupWindow.showPopupWindow()
genderChoosePopupWindow.setChooseGenderClick {
binding?.vm?.memberGenderEnum?.set(it)
when (it) {
1 -> binding?.vm?.memberGender?.set(context.resources.getString(
R.string.gender_male
))
2 -> binding?.vm?.memberGender?.set(context.resources.getString(
R.string.gender_female
))
else -> binding?.vm?.memberGender?.set(context.resources.getString(
R.string.gender_male
))
}
}
}
fun chooseAge() {
val chooseAgeGroupPopupWindow = ChooseAgeGroupPopupWindow(context)
chooseAgeGroupPopupWindow.showPopupWindow()
chooseAgeGroupPopupWindow.setChooseAgeGroupClick {
binding?.vm?.memberAgeEnum?.set(it.name)
when (it) {
AgeGroupEnum.UNDER_30 -> binding?.vm?.memberAge?.set(
context.resources.getString(
R.string.age_under_30
)
)
AgeGroupEnum.BETWEEN_30_50 -> binding?.vm?.memberAge?.set(
context.resources.getString(
R.string.age_between_30_50
)
)
AgeGroupEnum.ABOVE_50 -> binding?.vm?.memberAge?.set(
context.resources.getString(
R.string.age_above_50
)
)
}
}
}
fun cancel() {
dismiss()
}
fun sure() {
val memberGender = binding?.vm?.memberGenderEnum?.get()
if (memberGender == 0) {
context.resources.getString(
R.string.choose_gender
).toast()
return
}
val memberAgeGroup = binding?.vm?.memberAgeEnum?.get()
if (TextUtils.isEmpty(memberAgeGroup)) {
context.resources.getString(
R.string.choose_age
).toast()
return
}
registerMemberAction.invoke(mobile,memberGender!!,memberAgeGroup!!)
}
}
fun setRegisterMemberClick(registerMemberAction: (mobile: String,gender:Int,ageGroup:String) -> Unit) {
this.registerMemberAction = registerMemberAction
}
}
\ No newline at end of file
package com.ypsx.yppos.ui.popup
import android.content.Context
import android.view.Gravity
import android.view.View
import com.ypsx.base.base.appContext
import com.ypsx.base.ext.util.screenWidth
import com.ypsx.yppos.R
import com.ypsx.yppos.databinding.PopupMessageBinding
import com.ypsx.yppos.databinding.PopupMessageTipsBinding
import com.ypsx.yppos.viewmodel.state.MessageTipsViewModel
import com.ypsx.yppos.viewmodel.state.MessageViewModel
import razerdp.basepopup.BasePopupWindow
class MessageTipsPopupWindow(context: Context) : BasePopupWindow(context) {
var binding: PopupMessageTipsBinding?=null
init {
setContentView(R.layout.popup_message_tips)
width = appContext.screenWidth / 4 * 3
popupGravity = Gravity.CENTER
isOutSideTouchable = false
setOutSideDismiss(false)
setBackPressEnable(false)
}
override fun onViewCreated(contentView: View) {
binding = PopupMessageTipsBinding.bind(contentView)
binding?.vm = MessageTipsViewModel()
binding?.click = ProxyClick()
}
fun setData(
content: String,
sure: String = "确定",
) {
binding?.apply {
vm?.content?.set(content)
vm?.sure?.set(sure)
}
}
inner class ProxyClick {
fun know() {
dismiss()
}
}
}
\ No newline at end of file
...@@ -50,12 +50,14 @@ class OfferDetailsPopupWindow(context: Context?) : BasePopupWindow(context) { ...@@ -50,12 +50,14 @@ class OfferDetailsPopupWindow(context: Context?) : BasePopupWindow(context) {
discount: String, discount: String,
discountSpecial: String, discountSpecial: String,
discountMoney: String, discountMoney: String,
discountTime: String discountTime: String,
discountMember: String
) { ) {
bind.vm!!.discount.set("¥$discount") bind.vm!!.discount.set("¥$discount")
bind.vm!!.discountSpecial.set("-¥$discountSpecial") bind.vm!!.discountSpecial.set("-¥$discountSpecial")
bind.vm!!.discountMoney.set("-¥$discountMoney") bind.vm!!.discountMoney.set("-¥$discountMoney")
bind.vm!!.discountTime.set("-¥$discountTime") bind.vm!!.discountTime.set("-¥$discountTime")
bind.vm!!.discountMember.set("-¥$discountMember")
} }
override fun showPopupWindow() { override fun showPopupWindow() {
......
...@@ -22,6 +22,9 @@ class OrderPayAmountPopupWindow(context: Context) : BasePopupWindow(context) { ...@@ -22,6 +22,9 @@ class OrderPayAmountPopupWindow(context: Context) : BasePopupWindow(context) {
private var payAction: (item: PosPayMethod) -> Unit = private var payAction: (item: PosPayMethod) -> Unit =
{ _: PosPayMethod -> } { _: PosPayMethod -> }
private var cancelPayAction:()->Unit= { }
init { init {
setContentView(R.layout.popup_order_pay_amount) setContentView(R.layout.popup_order_pay_amount)
setAlignBackgroundGravity(Gravity.BOTTOM) setAlignBackgroundGravity(Gravity.BOTTOM)
...@@ -70,18 +73,26 @@ class OrderPayAmountPopupWindow(context: Context) : BasePopupWindow(context) { ...@@ -70,18 +73,26 @@ class OrderPayAmountPopupWindow(context: Context) : BasePopupWindow(context) {
.toDismiss() .toDismiss()
} }
fun setData(orderNo: String, amount: String) { fun setData(orderNo: String, amount: String,discountCoupon:String) {
bind?.vm?.orderNo?.set(orderNo) bind?.vm?.orderNo?.set(orderNo)
bind?.vm?.payAmount?.set(amount) bind?.vm?.payAmount?.set(amount)
bind?.vm?.discountCoupon?.set("-¥$discountCoupon")
} }
fun setPayClick(payAction: (item: PosPayMethod) -> Unit) { fun setPayClick(payAction: (item: PosPayMethod) -> Unit) {
this.payAction = payAction this.payAction = payAction
} }
fun setCancelPayAction(cancelPayAction: () -> Unit) {
this.cancelPayAction = cancelPayAction
}
inner class ProxyClick { inner class ProxyClick {
fun close() { fun close() {
//关闭时,取消优惠券,并刷新列表
dismiss() dismiss()
cancelPayAction.invoke()
} }
fun pay() { fun pay() {
......
package com.ypsx.yppos.ui.popup
import android.content.Context
import android.text.TextUtils
import android.util.Log
import android.view.Gravity
import android.view.KeyEvent
import android.view.View
import android.view.inputmethod.EditorInfo
import com.ypsx.base.base.appContext
import com.ypsx.base.ext.util.hideSoftKeyboard
import com.ypsx.base.ext.util.screenWidth
import com.ypsx.base.util.dXLog
import com.ypsx.yppos.R
import com.ypsx.yppos.databinding.PopupScanCouponBinding
import com.ypsx.yppos.utils.scan.ScanGunKeyEventHelper
import razerdp.basepopup.BasePopupWindow
class ScanCouponPopupWindow(context: Context,scanGunKeyEventHelper:ScanGunKeyEventHelper) : BasePopupWindow(context),
ScanGunKeyEventHelper.OnScanSuccessListener {
var binding: PopupScanCouponBinding? = null
lateinit var scanGunKeyEventHelper:ScanGunKeyEventHelper
private var scanCouponAction: (couponCode: String) -> Unit = { }
init {
setContentView(R.layout.popup_scan_coupon)
width = appContext.screenWidth / 4 * 3
popupGravity = Gravity.CENTER
isOutSideTouchable = true
setOutSideDismiss(true)
setBackPressEnable(false)
setAutoShowKeyboard(false)
this.scanGunKeyEventHelper = scanGunKeyEventHelper
}
fun setCouponCode(code: String) {
binding?.etCouponCode?.setText(code)
}
override fun onViewCreated(contentView: View) {
binding = PopupScanCouponBinding.bind(contentView)
binding?.etCouponCode?.setOnEditorActionListener { v, actionId, event ->
if (actionId == EditorInfo.IME_ACTION_DONE) {
val textString = binding?.etCouponCode?.text?.toString()
if (!TextUtils.isEmpty(textString)) {
hideSoftKeyboard(context)
scanCouponAction.invoke(textString!!)
}
}
return@setOnEditorActionListener false
}
binding?.etCouponCode?.setOnFocusChangeListener { v, hasFocus ->
if (hasFocus) {
scanGunKeyEventHelper.setOnBarCodeCatchListener(null)
} else {
scanGunKeyEventHelper.setOnBarCodeCatchListener(this)
}
}
// binding?.etCouponCode?.setOnKeyListener { v, keyCode, event ->
// "${event.action} $keyCode".dXLog()
// if (event.action == KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_DEL) {
// val textString = binding?.etCouponCode?.text?.toString()
// textString?.dXLog()
// if (textString!!.isNotEmpty()) {
// val newText = textString.substring(0, textString.length)
// binding?.etCouponCode?.setText(newText)
// binding?.etCouponCode?.setSelection(newText.length)
// }
// }
// return@setOnKeyListener false
//
// }
}
fun setScanCouponClick(scanCouponAction: (couponCode: String) -> Unit) {
this.scanCouponAction = scanCouponAction
}
override fun onScanSuccess(barcode: String) {
Log.i("barcode", barcode + "")
if (barcode.isNotEmpty()) {
binding?.etCouponCode?.setText(barcode)
scanCouponAction.invoke(barcode)
}
}
}
\ No newline at end of file
package com.ypsx.yppos.utils package com.ypsx.yppos.utils
import android.device.PrinterManager import android.device.PrinterManager
import android.text.TextUtils
import com.blankj.utilcode.util.GsonUtils import com.blankj.utilcode.util.GsonUtils
import com.blankj.utilcode.util.Utils.runOnUiThread import com.blankj.utilcode.util.Utils.runOnUiThread
import com.elvishew.xlog.XLog import com.elvishew.xlog.XLog
...@@ -47,7 +48,7 @@ object PrintUtils { ...@@ -47,7 +48,7 @@ object PrintUtils {
} }
fun print(posConfig: PosConfig, orderResponse: OrderDetailsResponse) { fun print(posConfig: PosConfig, orderResponse: OrderDetailsResponse,memberPoint:String) {
val fontSize = 24 val fontSize = 24
val fontStyle = 0x0000 val fontStyle = 0x0000
val fontBold = 0x0001 val fontBold = 0x0001
...@@ -138,6 +139,8 @@ object PrintUtils { ...@@ -138,6 +139,8 @@ object PrintUtils {
var discountTime = 0.0 //分时 var discountTime = 0.0 //分时
var discountSpecial = 0.0 //特价 var discountSpecial = 0.0 //特价
var discountMoney = 0.0 //满减 var discountMoney = 0.0 //满减
var discountMember = 0.0//会员优惠
var discountCoupon = orderResponse.userCouponFee //优惠券优惠金额
orderResponse.activitys?.forEach { item -> orderResponse.activitys?.forEach { item ->
discountMoney += item.discountMoney discountMoney += item.discountMoney
...@@ -155,6 +158,11 @@ object PrintUtils { ...@@ -155,6 +158,11 @@ object PrintUtils {
discountSpecial += discountMoney discountSpecial += discountMoney
} }
} }
if (product.priceType == "MEMBER_TYPE") {
discountMember =
discountMoney.plus((product.price.minus(product.memberPrice)).times(product.quantity))
}
} }
} }
var isPromotion = false var isPromotion = false
...@@ -255,13 +263,58 @@ object PrintUtils { ...@@ -255,13 +263,58 @@ object PrintUtils {
0 0
) )
if (!TextUtils.isEmpty(orderResponse.mobile)){
height += printerManager.drawTextEx( height += printerManager.drawTextEx(
tag1, 0, height, 384, -1, fontName, fontSize, 0, fontBold, 0 "会员卡号:${orderResponse.mobile}",
0,
height,
384,
-1,
fontName,
fontSize,
0,
fontStyle,
0
)
height += printerManager.drawTextEx(
"上次累计积分:${memberPoint}",
0,
height,
384,
-1,
fontName,
fontSize,
0,
fontStyle,
0
) )
if (discountMember != 0.0) {
height += printerManager.drawTextEx(
"会员折扣优惠:${discountMember}",
0,
height,
384,
-1,
fontName,
fontSize,
0,
fontStyle,
0
)
}
}
height += printerManager.drawTextEx(
tag1, 0, height, 384, -1, fontName, fontSize, 0, fontBold, 0
)
var payAmount = orderResponse.payAmount + discountMember + discountCoupon!!
payAmount.toString().dXLog()
height += printerManager.drawTextEx( height += printerManager.drawTextEx(
getAmountCenterSpace( getAmountCenterSpace(
"应付款:${orderResponse.payAmount}", "应付款:${payAmount}",
"数量:${buyNum}" "数量:${buyNum}"
), ),
0, 0,
...@@ -603,6 +656,9 @@ object PrintUtils { ...@@ -603,6 +656,9 @@ object PrintUtils {
var discountTime = 0.0 //分时 var discountTime = 0.0 //分时
var discountSpecial = 0.0 //特价 var discountSpecial = 0.0 //特价
var discountMoney = 0.0 //满减 var discountMoney = 0.0 //满减
var discountMember = 0.0 //会员优惠
var discountCoupon = posBuy.userCouponFee //优惠券优惠金额
var list: List<OrderActivityResponse>? = null var list: List<OrderActivityResponse>? = null
if (posBuy.activitys != null && posBuy.activitys != "") { if (posBuy.activitys != null && posBuy.activitys != "") {
list = list =
...@@ -663,6 +719,11 @@ object PrintUtils { ...@@ -663,6 +719,11 @@ object PrintUtils {
} }
} }
if (product.priceType == "MEMBER_TYPE") {
discountMember =
discountMoney.plus((product.price.minus(product.memberPrice)).times(product.quantity))
}
// //
var name = if (discountMoney > 0.0 && isPromotion) { var name = if (discountMoney > 0.0 && isPromotion) {
...@@ -753,13 +814,56 @@ object PrintUtils { ...@@ -753,13 +814,56 @@ object PrintUtils {
0 0
) )
if (!TextUtils.isEmpty(posBuy.mobile)){
height += printerManager.drawTextEx( height += printerManager.drawTextEx(
tag1, 0, height, 384, -1, fontName, fontSize, 0, fontBold, 0 "会员卡号:${posBuy.mobile}",
0,
height,
384,
-1,
fontName,
fontSize,
0,
fontStyle,
0
)
height += printerManager.drawTextEx(
"上次累计积分:${posBuy.memberPoint}",
0,
height,
384,
-1,
fontName,
fontSize,
0,
fontStyle,
0
) )
if (discountMember != 0.0) {
height += printerManager.drawTextEx(
"会员折扣优惠:${discountMember}",
0,
height,
384,
-1,
fontName,
fontSize,
0,
fontStyle,
0
)
}
}
height += printerManager.drawTextEx(
tag1, 0, height, 384, -1, fontName, fontSize, 0, fontBold, 0
)
var payAmount = posBuy.totalAmount + discountMember + discountCoupon!!
height += printerManager.drawTextEx( height += printerManager.drawTextEx(
getAmountCenterSpace( getAmountCenterSpace(
"应付款:${posBuy.totalAmount}", "应付款:${payAmount}",
"数量:${buyNum}" "数量:${buyNum}"
), ),
0, 0,
......
package com.ypsx.yppos.utils
object StringUtils {
public fun getMemberMobile(mobile: String):String {
return "会员信息:$mobile"
}
}
\ No newline at end of file
package com.ypsx.yppos.viewmodel.state package com.ypsx.yppos.viewmodel.state
import android.view.View import android.view.View
import androidx.databinding.BaseObservable
import androidx.databinding.ObservableField
import androidx.databinding.ObservableInt import androidx.databinding.ObservableInt
import androidx.databinding.ObservableShort
import com.ypsx.base.base.viewmodel.BaseViewModel import com.ypsx.base.base.viewmodel.BaseViewModel
import com.ypsx.base.callback.databind.BooleanObservableField import com.ypsx.base.callback.databind.BooleanObservableField
import com.ypsx.base.callback.databind.DoubleObservableField import com.ypsx.base.callback.databind.DoubleObservableField
...@@ -29,6 +32,9 @@ class MainViewModel : BaseViewModel() { ...@@ -29,6 +32,9 @@ class MainViewModel : BaseViewModel() {
var payAmount = StringObservableField("0.00") var payAmount = StringObservableField("0.00")
var discount = StringObservableField("0.00") var discount = StringObservableField("0.00")
var discountMember = StringObservableField("0.00")
var discountCoupon = StringObservableField("0.00")
// var productsNum = IntObservableField(0) // var productsNum = IntObservableField(0)
...@@ -42,6 +48,14 @@ class MainViewModel : BaseViewModel() { ...@@ -42,6 +48,14 @@ class MainViewModel : BaseViewModel() {
var cashRoundMode = IntObservableField(0) var cashRoundMode = IntObservableField(0)
/**
* 会员信息是否显示
*/
var memberShow = BooleanObservableField(false)
var memberMobile = StringObservableField("")
var memberPoint = StringObservableField("")
init { init {
...@@ -81,6 +95,20 @@ class MainViewModel : BaseViewModel() { ...@@ -81,6 +95,20 @@ class MainViewModel : BaseViewModel() {
} }
} }
var memberVisible = object : ObservableInt(recyclerShow, memberShow) {
override fun get(): Int {
return if (recyclerShow.get() && memberShow.get()) {
View.VISIBLE
} else {
View.GONE
}
}
}
var memberMobileInfo = StringObservableField(memberMobile.get())
private fun getRandom(): Int { private fun getRandom(): Int {
val max = 9 val max = 9
val min = 0 val min = 0
......
package com.ypsx.yppos.viewmodel.state
import com.ypsx.base.base.viewmodel.BaseViewModel
import com.ypsx.base.callback.databind.IntObservableField
import com.ypsx.base.callback.databind.StringObservableField
class MemberRegisterViewModel : BaseViewModel() {
var memberMobile = StringObservableField("")
//性别 会员性别 0 未知、1 男、2 女
var memberGender = StringObservableField("")
var memberGenderEnum = IntObservableField(0)
//年龄 UNKNOWN_AGE_GROUP, 小于30岁: UNDER_30, 30-50岁: BETWEEN_30_50, 大于50: ABOVE_50
var memberAge = StringObservableField("")
var memberAgeEnum = StringObservableField("")
}
\ No newline at end of file
package com.ypsx.yppos.viewmodel.state
import com.ypsx.base.base.viewmodel.BaseViewModel
import com.ypsx.base.callback.databind.BooleanObservableField
import com.ypsx.base.callback.databind.StringObservableField
class MessageTipsViewModel : BaseViewModel() {
var content = StringObservableField()
var sure = StringObservableField("确定")
}
\ No newline at end of file
...@@ -9,4 +9,6 @@ class OfferDetailsViewModel : BaseViewModel() { ...@@ -9,4 +9,6 @@ class OfferDetailsViewModel : BaseViewModel() {
var discountSpecial = StringObservableField("0.00")//特价促销 var discountSpecial = StringObservableField("0.00")//特价促销
var discount = StringObservableField("0.00") var discount = StringObservableField("0.00")
var discountMember = StringObservableField("0.00")
} }
\ No newline at end of file
...@@ -16,6 +16,9 @@ class OrderPayAmountViewModel : BaseViewModel() { ...@@ -16,6 +16,9 @@ class OrderPayAmountViewModel : BaseViewModel() {
var payAmount = StringObservableField() var payAmount = StringObservableField()
var discountCoupon = StringObservableField()
var scanOffline = BooleanObservableField(false) var scanOffline = BooleanObservableField(false)
var scanCardPay = BooleanObservableField(false) var scanCardPay = BooleanObservableField(false)
......
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<stroke android:width="1dp" android:color="#ffa14eff" />
<solid android:color="#fff6efff" />
<corners android:radius="16dp" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="6dp" />
<solid android:color="@color/white" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient android:type="linear" android:useLevel="true" android:startColor="#fffef5d7" android:endColor="#ffffedb8" android:angle="135" />
</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="#fff8f8f8" />
<corners android:radius="6dp" />
</shape>
\ No newline at end of file
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="38dp"
android:height="24dp"
android:viewportWidth="38"
android:viewportHeight="24">
<path
android:pathData="M18.9527,18.28L6.849,6.1763C6.2775,5.6047 5.3492,5.6047 4.7777,6.1763C4.2062,6.7478 4.2062,7.676 4.7777,8.2476L17.8498,21.3196C18.1519,21.6217 18.556,21.7673 18.9527,21.7455C19.3495,21.7637 19.7536,21.6217 20.0557,21.3196L33.1278,8.2512C33.6993,7.6797 33.6993,6.7514 33.1278,6.1799C32.5563,5.6084 31.628,5.6084 31.0565,6.1799L18.9527,18.28Z"
android:strokeWidth="1"
android:fillColor="#333333"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M4,0L32,0A4,4 0,0 1,36 4L36,32A4,4 0,0 1,32 36L4,36A4,4 0,0 1,0 32L0,4A4,4 0,0 1,4 0z"
android:strokeWidth="1"
android:fillType="evenOdd"
android:strokeColor="#00000000">
<aapt:attr name="android:fillColor">
<gradient
android:startY="0"
android:startX="-1.2986879E-16"
android:endY="36"
android:endX="36"
android:type="linear">
<item android:offset="0" android:color="#FF414446"/>
<item android:offset="1" android:color="#FF060707"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M11.727,7.875C12.5283,7.9355 13.092,8.3313 13.4181,9.0622C13.435,9.0925 13.4866,9.2731 13.5729,9.6039L16.875,28.125L11.8325,28.125C10.8716,27.9576 10.2783,27.3749 10.0525,26.3768C9.8267,25.3787 8.7258,19.2115 6.75,7.875L11.727,7.875ZM25.7416,7.8763L25.9307,7.877C25.9572,7.8771 25.9857,7.8772 26.0159,7.8772L28.1362,7.8772C28.2146,7.8772 28.2949,7.8771 28.3771,7.877L29.1666,7.8763C29.2599,7.8762 29.355,7.8761 29.452,7.876L30.375,7.875L18.1341,27L16.875,18.5586L22.9153,9.4904C23.65,8.4679 24.56,7.9294 25.6453,7.875L25.7009,7.876C25.7126,7.8761 25.7262,7.8762 25.7416,7.8763Z"
android:strokeWidth="1"
android:fillType="nonZero"
android:strokeColor="#00000000">
<aapt:attr name="android:fillColor">
<gradient
android:startY="7.875"
android:startX="18.5625"
android:endY="28.125"
android:endX="18.5625"
android:type="linear">
<item android:offset="0" android:color="#FFF4CDA4"/>
<item android:offset="1" android:color="#FFDDAE7B"/>
</gradient>
</aapt:attr>
</path>
</vector>
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
<variable <variable
name="vm" name="vm"
type="com.ypsx.yppos.viewmodel.state.MainViewModel" /> type="com.ypsx.yppos.viewmodel.state.MainViewModel" />
</data> </data>
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
...@@ -28,6 +29,17 @@ ...@@ -28,6 +29,17 @@
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"> app:layout_constraintTop_toTopOf="parent">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_member"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginEnd="10dp"
android:onClick="@{()->click.toLoginMember()}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/iv_settings"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/ic_yp_member" />
<TextView <TextView
android:id="@+id/tv_store_name" android:id="@+id/tv_store_name"
android:layout_width="0dp" android:layout_width="0dp"
...@@ -45,12 +57,12 @@ ...@@ -45,12 +57,12 @@
android:id="@+id/iv_settings" android:id="@+id/iv_settings"
android:layout_width="30dp" android:layout_width="30dp"
android:layout_height="30dp" android:layout_height="30dp"
android:layout_marginEnd="10dp" android:layout_marginHorizontal="10dp"
android:onClick="@{()->click.settings()}" android:onClick="@{()->click.settings()}"
app:srcCompat="@drawable/ic_main_settings"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/ic_main_settings" />
<TextView <TextView
android:id="@+id/textView13" android:id="@+id/textView13"
...@@ -93,8 +105,7 @@ ...@@ -93,8 +105,7 @@
<androidx.appcompat.widget.AppCompatImageView <androidx.appcompat.widget.AppCompatImageView
android:layout_width="20dp" android:layout_width="20dp"
android:layout_height="20dp" android:layout_height="20dp"
app:srcCompat="@drawable/ic_main_search" app:srcCompat="@drawable/ic_main_search" />
/>
<androidx.appcompat.widget.AppCompatEditText <androidx.appcompat.widget.AppCompatEditText
android:id="@+id/et_search_content" android:id="@+id/et_search_content"
...@@ -136,6 +147,7 @@ ...@@ -136,6 +147,7 @@
android:id="@+id/constraintLayout2" android:id="@+id/constraintLayout2"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="0dp" android:layout_height="0dp"
android:background="#F8F8F8"
android:orientation="vertical" android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
...@@ -182,12 +194,53 @@ ...@@ -182,12 +194,53 @@
</androidx.appcompat.widget.LinearLayoutCompat> </androidx.appcompat.widget.LinearLayoutCompat>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginHorizontal="10dp"
android:layout_marginVertical="10dp"
android:background="@drawable/bg_item_product">
<ImageView
android:id="@+id/ivMainLogo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginStart="15dp"
android:src="@mipmap/ic_main_logo" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginStart="5dp"
android:layout_toEndOf="@id/ivMainLogo"
android:text="@string/yp_fresh"
android:textColor="@color/black_333"
android:textSize="14sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:paddingHorizontal="12.5dp"
android:background="@drawable/bg_available_coupons"
android:paddingVertical="8dp"
android:text="可用优惠券"
android:onClick="@{()->click.onCoupon()}"
android:textColor="#ffa14eff"
android:textSize="13sp" />
</RelativeLayout>
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView" android:id="@+id/recyclerView"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="0dp" android:layout_height="0dp"
android:layout_weight="1" android:layout_weight="1"
android:background="#F8F8F8"
android:visibility="@{vm.recyclerVisible}" /> android:visibility="@{vm.recyclerVisible}" />
<View <View
...@@ -196,6 +249,31 @@ ...@@ -196,6 +249,31 @@
android:background="@drawable/bg_shadow" android:background="@drawable/bg_shadow"
android:visibility="@{vm.recyclerVisible}" /> android:visibility="@{vm.recyclerVisible}" />
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="34dp"
android:background="@drawable/bg_member"
android:orientation="horizontal"
android:visibility="@{vm.memberVisible}">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="16dp"
android:layout_height="16dp"
android:layout_gravity="center_vertical"
android:layout_marginStart="10dp"
app:srcCompat="@drawable/ic_yp_member" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="5dp"
android:text="@{vm.memberMobileInfo}"
android:textColor="#474245"
android:textSize="14sp" />
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat <androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/ll_amount" android:id="@+id/ll_amount"
android:layout_width="match_parent" android:layout_width="match_parent"
......
...@@ -97,12 +97,14 @@ ...@@ -97,12 +97,14 @@
android:textColor="#FF5949" android:textColor="#FF5949"
android:textSize="24sp" /> android:textSize="24sp" />
</LinearLayout> </LinearLayout>
<TextView <TextView
android:id="@+id/tv_name" android:id="@+id/tv_name"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_toStartOf="@id/ll_price"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_toStartOf="@id/ll_price"
android:ellipsize="end" android:ellipsize="end"
android:gravity="start"
android:lines="2" android:lines="2"
android:maxLines="2" android:maxLines="2"
android:textColor="#474245" android:textColor="#474245"
......
<?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="click"
type="com.ypsx.yppos.ui.popup.ChooseAgeGroupPopupWindow.ProxyClick" />
<import type="com.ypsx.yppos.http.data.entity.AgeGroupEnum"/>
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_choose"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="15dp"
android:layout_marginBottom="10dp"
android:background="@drawable/bg_choose_dialog"
app:layout_constraintBottom_toTopOf="@id/cl_cancel"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tvChooseAge"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:paddingTop="17.5dp"
android:paddingBottom="15dp"
android:text="@string/choose_age"
android:textColor="@color/black_333"
android:textSize="16sp"
app:layout_constraintBottom_toTopOf="@id/view1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<View
android:id="@+id/view1"
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="#eeeeee"
app:layout_constraintBottom_toTopOf="@id/tvUnder_30"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tvChooseAge" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tvUnder_30"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:paddingVertical="15dp"
android:text="@string/age_under_30"
android:textColor="#A14EFF"
android:textSize="17sp"
android:onClick="@{() -> click.choose(AgeGroupEnum.UNDER_30)}"
app:layout_constraintBottom_toTopOf="@id/view2"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/view1" />
<View
android:id="@+id/view2"
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="#eeeeee"
app:layout_constraintBottom_toTopOf="@id/tvAgeBetween_30_50"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tvUnder_30" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tvAgeBetween_30_50"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:paddingVertical="15dp"
android:text="@string/age_between_30_50"
android:onClick="@{() -> click.choose(AgeGroupEnum.BETWEEN_30_50)}"
android:textColor="#A14EFF"
android:textSize="17sp"
app:layout_constraintBottom_toTopOf="@id/view3"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/view2" />
<View
android:id="@+id/view3"
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="#eeeeee"
app:layout_constraintBottom_toTopOf="@id/tvAgeAbove_50"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tvAgeBetween_30_50" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tvAgeAbove_50"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:paddingVertical="15dp"
android:text="@string/age_above_50"
android:onClick="@{() -> click.choose(AgeGroupEnum.ABOVE_50)}"
android:textColor="#A14EFF"
android:textSize="17sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/view3" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_cancel"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="15dp"
android:layout_marginBottom="20dp"
android:background="@drawable/bg_choose_dialog"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent">
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="match_parent"
android:layout_height="55dp"
android:gravity="center"
android:text="@string/cancel"
android:textColor="@color/black_333"
android:textSize="16sp"
android:onClick="@{() -> click.cancel()}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</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">
<data>
<variable
name="click"
type="com.ypsx.yppos.ui.popup.GenderChoosePopupWindow.ProxyClick" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_choose"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="15dp"
android:layout_marginBottom="10dp"
android:background="@drawable/bg_choose_dialog"
app:layout_constraintBottom_toTopOf="@id/cl_cancel"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tvChooseGender"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:paddingTop="17.5dp"
android:paddingBottom="15dp"
android:text="@string/choose_gender"
android:textColor="@color/black_333"
android:textSize="16sp"
app:layout_constraintBottom_toTopOf="@id/view1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<View
android:id="@+id/view1"
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="#eeeeee"
app:layout_constraintBottom_toTopOf="@id/tvGenderMale"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tvChooseGender" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tvGenderMale"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:paddingVertical="15dp"
android:text="@string/gender_male"
android:textColor="#A14EFF"
android:textSize="17sp"
android:onClick="@{() -> click.choose(1)}"
app:layout_constraintBottom_toTopOf="@id/view2"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/view1" />
<View
android:id="@+id/view2"
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="#eeeeee"
app:layout_constraintBottom_toTopOf="@id/tvGenderFemale"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tvGenderMale" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tvGenderFemale"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:paddingVertical="15dp"
android:text="@string/gender_female"
android:onClick="@{() -> click.choose(2)}"
android:textColor="#A14EFF"
android:textSize="17sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/view2" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_cancel"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="15dp"
android:layout_marginBottom="20dp"
android:background="@drawable/bg_choose_dialog"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent">
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="match_parent"
android:layout_height="55dp"
android:gravity="center"
android:text="@string/cancel"
android:textColor="@color/black_333"
android:textSize="16sp"
android:onClick="@{() -> click.cancel()}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</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">
<data>
<variable
name="click"
type="com.ypsx.yppos.ui.popup.MemberLoginPopupWindow.ProxyClick" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:background="@drawable/bg_dialog"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tv_member_login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/member_login"
android:textColor="@color/black_333"
android:textSize="18sp"
android:gravity="center"
android:layout_marginTop="25dp"
android:layout_marginBottom="25dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toTopOf="@id/etMemberPhone"
app:layout_constraintStart_toStartOf="parent" />
<EditText
android:id="@+id/etMemberPhone"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="@drawable/bg_phone"
android:digits="0123456789"
android:hint="输入手机号或扫描会员码"
android:imeOptions="actionDone"
android:inputType="phone"
android:lines="1"
android:maxLength="11"
android:padding="10dp"
android:textColor="#333333"
android:textColorHint="#999999"
android:textSize="15sp"
android:layout_marginBottom="40dp"
android:layout_marginHorizontal="20dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toTopOf="@id/view4"
app:layout_constraintTop_toBottomOf="@+id/tv_member_login" />
<View
android:id="@+id/view4"
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="#eeeeee"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toTopOf="@id/linearLayout4"
app:layout_constraintTop_toBottomOf="@+id/etMemberPhone" />
<LinearLayout
android:id="@+id/linearLayout4"
android:layout_width="match_parent"
android:layout_height="45dp"
android:orientation="horizontal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/view4"
app:layout_constraintBottom_toBottomOf="parent">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_cancel"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:onClick="@{()->click.cancel()}"
android:text="@string/cancel"
android:textColor="#a6000000"
android:textSize="17sp" />
<View
android:id="@+id/view_line"
android:layout_width="0.5dp"
android:layout_height="match_parent"
android:background="#eeeeee" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_Sure"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:onClick="@{()->click.sure()}"
android:text="@string/sure"
android:textColor="#A14EFF"
android:textSize="17sp" />
</LinearLayout>
</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">
<data>
<variable
name="click"
type="com.ypsx.yppos.ui.popup.MemberRegisterPopupWindow.ProxyClick" />
<variable
name="vm"
type="com.ypsx.yppos.viewmodel.state.MemberRegisterViewModel" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_dialog">
<TextView
android:id="@+id/tv_member_register"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="25dp"
android:layout_marginBottom="25dp"
android:gravity="center"
android:text="@string/member_register"
android:textColor="@color/black_333"
android:textSize="18sp"
app:layout_constraintBottom_toTopOf="@id/tvMemberMobile"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tvMemberMobile"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="20dp"
android:layout_marginBottom="7.5dp"
android:background="@drawable/bg_phone"
android:lines="1"
android:maxLength="11"
android:padding="10dp"
android:text="@{vm.memberMobile}"
android:textColor="#999999"
android:textColorHint="#999999"
android:textSize="15sp"
app:layout_constraintBottom_toTopOf="@id/cl_choose_gender"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_member_register" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_choose_gender"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="20dp"
android:layout_marginVertical="7.5dp"
android:background="@drawable/bg_phone"
android:padding="10dp"
android:onClick="@{()->click.chooseGender()}"
app:layout_constraintBottom_toTopOf="@id/cl_choose_age"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tvMemberMobile">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tvGender"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:gravity="start"
android:background="@android:color/transparent"
android:hint="@string/choose_gender"
android:textColor="#333333"
android:textColorHint="#999999"
android:textSize="15sp"
android:focusable="false"
android:cursorVisible="false"
android:focusableInTouchMode="false"
android:text="@{vm.memberGender}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/iv_down_1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_down_1"
android:layout_width="19dp"
android:layout_height="12dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/tvGender"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/ic_choose_down"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_choose_age"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="20dp"
android:layout_marginTop="7.5dp"
android:layout_marginBottom="20dp"
android:background="@drawable/bg_phone"
android:padding="10dp"
android:onClick="@{()->click.chooseAge()}"
app:layout_constraintBottom_toTopOf="@id/view4"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/cl_choose_gender">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tvAge"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:gravity="start"
android:hint="@string/choose_age"
android:background="@android:color/transparent"
android:textColor="#333333"
android:textColorHint="#999999"
android:textSize="15sp"
android:focusable="false"
android:cursorVisible="false"
android:focusableInTouchMode="false"
android:text="@{vm.memberAge}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/iv_down_2"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_down_2"
android:layout_width="19dp"
android:layout_height="12dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/tvAge"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/ic_choose_down"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
<View
android:id="@+id/view4"
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="#eeeeee"
app:layout_constraintBottom_toTopOf="@id/linearLayout4"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/cl_choose_age" />
<LinearLayout
android:id="@+id/linearLayout4"
android:layout_width="match_parent"
android:layout_height="45dp"
android:orientation="horizontal"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/view4">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_cancel"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:onClick="@{()->click.cancel()}"
android:text="@string/cancel"
android:textColor="#a6000000"
android:textSize="17sp" />
<View
android:id="@+id/view_line"
android:layout_width="0.5dp"
android:layout_height="match_parent"
android:background="#eeeeee" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_Sure"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:onClick="@{()->click.sure()}"
android:text="@string/sure"
android:textColor="#A14EFF"
android:textSize="17sp" />
</LinearLayout>
</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:tools="http://schemas.android.com/tools">
<data>
<variable
name="vm"
type="com.ypsx.yppos.viewmodel.state.MessageTipsViewModel" />
<variable
name="click"
type="com.ypsx.yppos.ui.popup.MessageTipsPopupWindow.ProxyClick" />
</data>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_dialog"
android:orientation="vertical">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginVertical="39dp"
android:gravity="center_horizontal"
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:text="@{vm.content}"
android:textColor="@color/black_333"
android:textSize="16sp"
tools:text="是否取消当前商品" />
<View
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="#eeeeee" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_Sure"
android:layout_width="match_parent"
android:layout_height="50dp"
android:gravity="center"
android:onClick="@{()->click.know()}"
android:text="@{vm.sure}"
android:textColor="#A14EFF"
android:textSize="17sp" />
</androidx.appcompat.widget.LinearLayoutCompat>
</layout>
\ No newline at end of file
...@@ -132,6 +132,39 @@ ...@@ -132,6 +132,39 @@
android:textStyle="bold" /> android:textStyle="bold" />
</RelativeLayout> </RelativeLayout>
<RelativeLayout
android:id="@+id/relativeLayout4"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_marginStart="10dp"
android:layout_marginTop="5dp"
android:layout_marginEnd="10dp"
android:layout_marginBottom="5dp"
android:background="@drawable/bg_offer"
android:padding="10dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/relativeLayout3">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:text="@string/member_price_discount"
android:textColor="@color/black_333"
android:textSize="16sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:text="@{vm.discountMember}"
android:textColor="@color/black_333"
android:textSize="16sp"
android:textStyle="bold" />
</RelativeLayout>
<RelativeLayout <RelativeLayout
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
...@@ -142,7 +175,7 @@ ...@@ -142,7 +175,7 @@
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/relativeLayout3"> app:layout_constraintTop_toBottomOf="@+id/relativeLayout4">
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
......
...@@ -72,6 +72,48 @@ ...@@ -72,6 +72,48 @@
/> />
</LinearLayout> </LinearLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_10"
android:layout_marginTop="20dp"
android:layout_marginEnd="@dimen/dp_10"
android:background="@drawable/bg_pay_amount_check"
android:paddingStart="15dp"
android:paddingTop="@dimen/dp_10"
android:paddingEnd="15dp"
android:paddingBottom="@dimen/dp_10"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toTopOf="@id/constraintLayout3"
app:layout_constraintTop_toBottomOf="@+id/ll_pay_amount">
<TextView
android:id="@+id/tv_use_coupon_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/use_coupon"
android:textColor="#ff4d4d4d"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_use_coupon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@{vm.discountCoupon}"
android:textColor="@color/red"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="-¥22.00" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/constraintLayout3" android:id="@+id/constraintLayout3"
...@@ -88,7 +130,7 @@ ...@@ -88,7 +130,7 @@
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toTopOf="@id/constraintLayout4" app:layout_constraintBottom_toTopOf="@id/constraintLayout4"
app:layout_constraintTop_toBottomOf="@+id/ll_pay_amount"> app:layout_constraintTop_toBottomOf="@+id/cl_3">
<TextView <TextView
android:id="@+id/tv_orderNo_name" android:id="@+id/tv_orderNo_name"
......
<?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>
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_dialog">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_scan_coupon_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="10dp"
android:layout_marginTop="25dp"
android:gravity="center"
android:text="请扫描优惠券券码"
android:textColor="@color/black_333"
android:textSize="18sp"
app:layout_constraintBottom_toTopOf="@id/tv_scan_coupon_tips"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_scan_coupon_tips"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="10dp"
android:layout_marginTop="10dp"
android:gravity="center"
android:text="使用优惠券后将直接进入结算,\n确保商品已添加完成"
android:textColor="#ff999999"
android:textSize="15sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_scan_coupon_title" />
<EditText
android:id="@+id/etCouponCode"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="20dp"
android:layout_marginTop="20dp"
android:layout_marginBottom="25dp"
android:background="@drawable/bg_phone"
android:digits="0123456789"
android:hint="请扫码优惠券券码"
android:imeOptions="actionDone"
android:inputType="number"
android:lines="1"
android:maxLength="20"
android:padding="10dp"
android:textColor="#333333"
android:textColorHint="#999999"
android:textSize="15sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_scan_coupon_tips" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
\ No newline at end of file
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
<string name="promotional_special_offers">促销特价优惠:</string> <string name="promotional_special_offers">促销特价优惠:</string>
<string name="full_discount">满减优惠:</string> <string name="full_discount">满减优惠:</string>
<string name="time_sharing_discount">分时折扣优惠:</string> <string name="time_sharing_discount">分时折扣优惠:</string>
<string name="member_price_discount">会员价优惠:</string>
<string name="total_discount_amount">总优惠金额:</string> <string name="total_discount_amount">总优惠金额:</string>
<string name="checkout_counter">收银台</string> <string name="checkout_counter">收银台</string>
<string name="order_no">小票流水号</string> <string name="order_no">小票流水号</string>
...@@ -41,4 +42,17 @@ ...@@ -41,4 +42,17 @@
<string name="return_cashier">返回收银</string> <string name="return_cashier">返回收银</string>
<string name="pay_again">重新支付</string> <string name="pay_again">重新支付</string>
<string name="close">关闭</string> <string name="close">关闭</string>
<string name="sure">确定</string>
<string name="cancel">取消</string>
<string name="member_login">会员登录</string>
<string name="member_register">会员注册</string>
<string name="choose_age">请选择年龄</string>
<string name="choose_gender">请选择性别</string>
<string name="gender_male"></string>
<string name="gender_female"></string>
<string name="age_under_30">30岁以下</string>
<string name="age_between_30_50">30岁-50岁</string>
<string name="age_above_50">50岁以上</string>
<string name="yp_fresh">谊品生鲜</string>
<string name="use_coupon">使用优惠券优惠</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