From 7f93c049febcead6e548684aec51e9e3e4e0a95a Mon Sep 17 00:00:00 2001 From: tj <1378534974@qq.com> Date: 星期三, 02 四月 2025 11:20:33 +0800 Subject: [PATCH] 1.vip续费页面-样式修改 --- app/src/main/java/com/example/firstapp/activity/VipActivity.kt | 203 +++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 180 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/com/example/firstapp/activity/VipActivity.kt b/app/src/main/java/com/example/firstapp/activity/VipActivity.kt index 56df585..9cf1f11 100644 --- a/app/src/main/java/com/example/firstapp/activity/VipActivity.kt +++ b/app/src/main/java/com/example/firstapp/activity/VipActivity.kt @@ -1,6 +1,7 @@ package com.example.firstapp.activity import android.app.AlertDialog +import android.content.Intent import android.graphics.Color import android.os.Bundle import android.util.TypedValue @@ -10,7 +11,6 @@ import android.widget.Button import android.widget.CheckBox import android.widget.CompoundButton -import android.widget.EditText import android.widget.ImageView import android.widget.LinearLayout import android.widget.TextView @@ -19,22 +19,29 @@ import androidx.cardview.widget.CardView import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.ConstraintSet +import androidx.core.content.ContentProviderCompat.requireContext import androidx.core.content.ContextCompat import androidx.lifecycle.Observer import androidx.lifecycle.lifecycleScope import androidx.navigation.ui.AppBarConfiguration import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide import com.example.firstapp.R import com.example.firstapp.adapter.CardAdapter +import com.example.firstapp.database.request.ProductOrdersRequest +import com.example.firstapp.database.response.UserInfo import com.example.firstapp.database.service.RetrofitClient import com.example.firstapp.databinding.ActivityVipBinding import com.example.firstapp.model.CardData import com.example.firstapp.model.MemberBenefitItem import com.example.firstapp.pay.PayAbility +import com.example.firstapp.ui.vip.MemberInfoCardFragment import com.example.firstapp.utils.Log -import com.google.android.material.dialog.MaterialAlertDialogBuilder +import com.example.firstapp.utils.PreferencesManager +import com.google.gson.Gson import kotlinx.coroutines.launch +import java.math.BigDecimal class VipActivity : AppCompatActivity() { @@ -42,6 +49,16 @@ private lateinit var appBarConfiguration: AppBarConfiguration private lateinit var binding: ActivityVipBinding private var isPaymentSelected = false // 全局变量,默认未选中 + + private var orderName = "" + private var orderType="" + private var currentPrice = BigDecimal.ZERO + private var originalPrice = BigDecimal.ZERO + private var paymentMethod = "" + + private var currentUserInfo: UserInfo? = null // 确保使用你的实际数据类 + + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -64,6 +81,9 @@ finish() } +// 会员基本信息初始化 + loadUserInfo() + // 会员卡片初始化 vipCardInit() @@ -78,6 +98,10 @@ // 勾选协议点击事件 handlePrototalClick() + + // VIP会员服务协议 + handleVipProtocolClick() + } @@ -87,11 +111,11 @@ // 监听 RadioButton 选中状态 protocol.setOnCheckedChangeListener(CompoundButton.OnCheckedChangeListener { buttonView, isChecked -> isPaymentSelected = isChecked // 更新全局变量 - if(isChecked){ - protocol.background = ContextCompat.getDrawable(this, R.drawable.checkbox_round_selected) - }else{ - protocol.background = ContextCompat.getDrawable(this, R.drawable.checkbox_round) - } +// if(isChecked){ +// protocol.background = ContextCompat.getDrawable(this, R.drawable.checkbox_round_selected) +// }else{ +// protocol.background = ContextCompat.getDrawable(this, R.drawable.checkbox_round) +// } }) } @@ -115,7 +139,19 @@ private fun doAlipay(){ lifecycleScope.launch { try { - val response = RetrofitClient.apiService.getPayOrderInfo() + + var request = ProductOrdersRequest( + orderName=orderName, + orderType=orderType, + originalPrice=originalPrice, + currentPrice=currentPrice, + paymentMethod="" + ) + + Log.d("REQUEST", Gson().toJson(request)) + val response = RetrofitClient.apiService.getPayOrderInfo(request) + Log.d("API_RESPONSE", response.toString()) + var orderInfo=response.data Log.d("AliPayHelper","获取订单信息时: ${response}") // 这里调用支付宝 @@ -125,6 +161,7 @@ // Snackbar.make(binding.root, "支付成功", Snackbar.LENGTH_LONG).show() runOnUiThread { Toast.makeText(this@VipActivity, "支付成功", Toast.LENGTH_LONG).show() + loadUserInfo() } } else -> { @@ -240,21 +277,69 @@ "首月限时特惠", "连续包月", "首次开通", - "9.9", + BigDecimal("0.01"), "次月起12元/月", - "自动续费可随时取消" + "自动续费可随时取消", ), CardData.Yearly( "折合9元/月", "年卡", - "108", - "168" + BigDecimal("0.01"), + BigDecimal("168") ), CardData.SingleMonth( "1个月", - "15" + BigDecimal("0.01") ) ) + + // 这里获取列表的第一项作为初始化的值 + // 获取第一项作为初始化的值 + try { + val curentPriceTmp = cardList.firstOrNull() + + // 确保 currentPrice 不为空并获取价格 + currentPrice = when (curentPriceTmp) { + is CardData.ContinueMonthly -> curentPriceTmp.price + is CardData.Yearly -> curentPriceTmp.price + is CardData.SingleMonth -> curentPriceTmp.price + else -> BigDecimal.ZERO // 兜底处理,避免 null 时报错 + } + + + val title = when (curentPriceTmp) { + is CardData.ContinueMonthly -> curentPriceTmp.title + is CardData.Yearly -> curentPriceTmp.title + is CardData.SingleMonth -> curentPriceTmp.title + else -> "" + } + + originalPrice = when (curentPriceTmp) { + is CardData.ContinueMonthly -> BigDecimal.ZERO + is CardData.Yearly -> curentPriceTmp.originalPrice + is CardData.SingleMonth -> BigDecimal.ZERO + else -> BigDecimal.ZERO + } + + // 初始化支付 + orderName = title + orderType = title + + + val alipayAmount:TextView = findViewById(R.id.alipay_amount); + val wechatAmount:TextView = findViewById(R.id.wechat_amount); + val protocolDescLayout:TextView = findViewById(R.id.protocol_desc_layout); + + + alipayAmount.text=currentPrice.toString() + wechatAmount.text=currentPrice.toString() + protocolDescLayout.text="自动续费可随时取消,开通后每月按${currentPrice.toString()}元自动续费,可随时取消自动续费" + + + }catch (e: Exception) { + Toast.makeText(this@VipActivity, e.message, Toast.LENGTH_LONG).show() + Log.d("AliPayHelper","支付失败: ${e.message}") + } val adapter = CardAdapter(cardList) { cardViewList, cardData, cardView -> handleVipCardClick(cardViewList, cardData, cardView) @@ -283,7 +368,16 @@ layoutParams = ConstraintLayout.LayoutParams( TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 30f, resources.displayMetrics).toInt(), TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 30f, resources.displayMetrics).toInt() - ) + ).apply { + // 设置 margin + setMargins( + TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 20f, resources.displayMetrics).toInt(), // left + TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 30f, resources.displayMetrics).toInt(), // top + TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 20f, resources.displayMetrics).toInt(), // right + TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 30f, resources.displayMetrics).toInt() // bottom + ) + } + } val textView = TextView(this).apply { @@ -295,7 +389,8 @@ val checkView = ImageView(this).apply { id = View.generateViewId() - setImageResource(R.drawable.ic_check) +// setImageResource(R.drawable.ic_check) + setImageResource(R.mipmap.vip_right) layoutParams = ConstraintLayout.LayoutParams( TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 30f, resources.displayMetrics).toInt(), TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 30f, resources.displayMetrics).toInt() @@ -315,14 +410,14 @@ ConstraintSet.TOP, previousViewId, if (index == 0) ConstraintSet.TOP else ConstraintSet.BOTTOM, - 16 + 32 ) constraintSet.connect( iconView.id, ConstraintSet.START, ConstraintSet.PARENT_ID, ConstraintSet.START, - 16 + 32 ) // Text 位置 @@ -332,7 +427,7 @@ ConstraintSet.START, iconView.id, ConstraintSet.END, - 8 + 32 ) // Check 位置 @@ -342,7 +437,7 @@ ConstraintSet.END, ConstraintSet.PARENT_ID, ConstraintSet.END, - 16 + 32 ) constraintSet.applyTo(container) @@ -369,19 +464,81 @@ is CardData.Yearly -> cardData.title is CardData.SingleMonth -> cardData.title } - val price = when (cardData) { + currentPrice = when (cardData) { is CardData.ContinueMonthly -> cardData.price is CardData.Yearly -> cardData.price is CardData.SingleMonth -> cardData.price + } + originalPrice = when (cardData) { + is CardData.ContinueMonthly -> BigDecimal.ZERO + is CardData.Yearly -> cardData.originalPrice + is CardData.SingleMonth -> BigDecimal.ZERO } val alipayAmount:TextView = findViewById(R.id.alipay_amount); val wechatAmount:TextView = findViewById(R.id.wechat_amount); - alipayAmount.text=price - wechatAmount.text=price + alipayAmount.text=currentPrice.toString() + wechatAmount.text=currentPrice.toString() // 处理点击事件,这里我们只是简单地展示一个 Toast - Toast.makeText(this, "点击了: ${title}", Toast.LENGTH_SHORT).show() +// Toast.makeText(this, "点击了: ${title}", Toast.LENGTH_SHORT).show() + // 只有连续包月才展示 + val xieyiLayout:LinearLayout = findViewById(R.id.xieyi_layout); + if (title == "连续包月") { + xieyiLayout.visibility = View.VISIBLE + }else{ + xieyiLayout.visibility = View.GONE + } + + orderName = title + orderType=title + + } + + private fun loadUserInfo() { + // 获取Fragment实例 + val memberInfoCardFragment = supportFragmentManager.findFragmentById(R.id.memberInfoCardFragment) as MemberInfoCardFragment? + lifecycleScope.launch { + try { + // 从本地获取保存的手机号 + val savedPhone = PreferencesManager.getPhone() + if (savedPhone.isNullOrEmpty()) { + Toast.makeText(this@VipActivity, "用户未登录", Toast.LENGTH_SHORT).show() + return@launch + } + + val response = RetrofitClient.apiService.getUserInfo(savedPhone) + if (response.code == "0" && response.data != null) { + // 保存用户信息 + currentUserInfo = response.data + val userInfo = response.data + // 调用ViewModel的刷新方法 + memberInfoCardFragment?.viewModel?.updateMemberStatus(userInfo) + + } + } catch (e: Exception) { + e.printStackTrace() + Toast.makeText(this@VipActivity, "获取用户信息失败", Toast.LENGTH_SHORT).show() + } + } + + } + + // VIP会员服务协议 + private fun handleVipProtocolClick(){ + + binding.protocolVip.setOnClickListener{ + startContentActivity("VIP会员服务协议", "VIP会员服务协议") + } + + } + + private fun startContentActivity(type: String, title: String) { + val intent = Intent(this, ContentDetailActivity::class.java).apply { + putExtra(ContentDetailActivity.ID, type) + putExtra(ContentDetailActivity.EXTRA_TITLE, title) + } + startActivity(intent) } } \ No newline at end of file -- Gitblit v1.9.3