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