From 27bbd0435881e408f267c99e6a253d2e17873bcc Mon Sep 17 00:00:00 2001
From: tj <1378534974@qq.com>
Date: 星期五, 11 四月 2025 17:44:11 +0800
Subject: [PATCH] 1.2
---
app/src/main/java/com/example/firstapp/ui/dashboard/DashboardFragment.kt | 159 +++++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 148 insertions(+), 11 deletions(-)
diff --git a/app/src/main/java/com/example/firstapp/ui/dashboard/DashboardFragment.kt b/app/src/main/java/com/example/firstapp/ui/dashboard/DashboardFragment.kt
index 8a67903..f8808f2 100644
--- a/app/src/main/java/com/example/firstapp/ui/dashboard/DashboardFragment.kt
+++ b/app/src/main/java/com/example/firstapp/ui/dashboard/DashboardFragment.kt
@@ -22,7 +22,13 @@
import java.text.SimpleDateFormat
import android.graphics.Color
import android.widget.GridLayout
+import android.widget.Toast
+import androidx.lifecycle.lifecycleScope
+import com.example.firstapp.database.response.UserInfo
+import com.example.firstapp.database.service.RetrofitClient
import com.example.firstapp.model.DailyStat
+import com.example.firstapp.utils.PreferencesManager
+import kotlinx.coroutines.launch
class DashboardFragment : Fragment() {
@@ -34,6 +40,12 @@
private lateinit var barChart: BarChart
private lateinit var pieChart: PieChart
private lateinit var heatmapView: View
+ private var currentUserInfo: UserInfo? = null // 确保使用你的实际数据类
+
+ private var startDateCur:String = ""
+ private var endDateCur:String = ""
+
+
enum class DateType {
DAY, WEEK, MONTH, YEAR
}
@@ -48,6 +60,12 @@
return binding.root
}
+ override fun onResume() {
+ super.onResume()
+ // 重新加载用户信息
+ loadUserInfo()
+ }
+
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
@@ -60,7 +78,31 @@
setupView(view)
updateDateDisplay()
loadPackages()
+
+ // 遮罩层
+ loadUserInfo()
+
+ // 遮罩层点击时间
+ binding.overlayContent.setOnClickListener {
+ // 跳转到vipActivity
+ val intent = android.content.Intent(requireContext(), com.example.firstapp.activity.VipActivity::class.java)
+ startActivity(intent)
+ }
}
+
+ private fun showOverlay() {
+ binding.viewOverlay.visibility = View.VISIBLE
+ binding.overlayContent.visibility = View.VISIBLE
+
+ }
+
+ private fun hiddleOverlay() {
+ binding.viewOverlay.visibility = View.GONE
+ binding.overlayContent.visibility = View.GONE
+
+
+ }
+
private fun setupRecyclerView() {
binding.recyclerPackages.apply {
@@ -70,6 +112,10 @@
}
private fun setupTabLayout() {
+ val weekStatsView = binding.layoutWeekStats.root
+ val bar_title:TextView = weekStatsView.findViewById(R.id.bar_title)
+ val pie_title:TextView = weekStatsView.findViewById(R.id.pie_title)
+
binding.tabDateRange.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
override fun onTabSelected(tab: TabLayout.Tab?) {
currentDateType = when(tab?.position) {
@@ -79,6 +125,40 @@
3 -> DateType.YEAR
else -> DateType.DAY
}
+
+ when (currentDateType) {
+ DateType.DAY -> {
+ binding.cardPackageStatsTitleText.text = "本日收到包裹总数"
+ binding.layoutYearStatsTitleText.text = "包裹取件码记录"
+
+ binding.cardPackageStatsTitleText.visibility = View.VISIBLE
+ binding.layoutYearStatsTitleText.visibility = View.VISIBLE
+ }
+ DateType.WEEK -> {
+ binding.cardPackageStatsTitleText.text = "本周收到包裹总数"
+ bar_title.text = "本周收到包裹数分布 ->"
+ pie_title.text = "本周包裹物流公司分布 ->"
+ binding.cardPackageStatsTitleText.visibility = View.VISIBLE
+ binding.layoutYearStatsTitleText.visibility = View.GONE
+
+ }
+ DateType.MONTH -> {
+ binding.cardPackageStatsTitleText.text = "本月收到包裹总数"
+ bar_title.text = "本月收到包裹数分布 ->"
+ pie_title.text = "本月包裹物流公司分布 ->"
+ binding.cardPackageStatsTitleText.visibility = View.VISIBLE
+ binding.layoutYearStatsTitleText.visibility = View.GONE
+ }
+ DateType.YEAR -> {
+ bar_title.text = "本年收到包裹数分布 ->"
+ pie_title.text = "本年包裹物流公司分布 ->"
+ binding.cardPackageStatsTitleText.visibility = View.GONE
+ binding.layoutYearStatsTitleText.visibility = View.GONE
+ }
+ }
+
+
+
updateDateDisplay()
updateCharts()
loadPackages()
@@ -117,10 +197,13 @@
val calendar = currentDate.clone() as Calendar
calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY)
val startDate = SimpleDateFormat("MM月dd日", Locale.getDefault()).format(calendar.time)
-
+ startDateCur=SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(calendar.time)
+
calendar.add(Calendar.DAY_OF_WEEK, 6)
val endDate = SimpleDateFormat("MM月dd日", Locale.getDefault()).format(calendar.time)
-
+ endDateCur=SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(calendar.time)
+
+
"$startDate-$endDate"
}
DateType.MONTH -> "yyyy年MM月"
@@ -135,10 +218,15 @@
}
}
private fun setupView(view: View) {
+
val weekStatsView = binding.layoutWeekStats.root
barChart = weekStatsView.findViewById(R.id.chart_daily_packages)
pieChart = weekStatsView.findViewById(R.id.chart_courier_distribution)
heatmapView = weekStatsView.findViewById(R.id.heatmap_yearly)
+
+ barChart.setViewPortOffsets(100f, 100f, 100f, 200f)
+
+// barChart.invalidate()
// 初始化时隐藏统计视图
weekStatsView.visibility = View.GONE
@@ -147,6 +235,7 @@
setupPieChart()
setupHeatmap()
updateCharts()
+
}
private fun setupBarChart() {
barChart.apply {
@@ -163,7 +252,8 @@
setDrawGridLines(false)
granularity = 1f
labelRotationAngle = 0f
- textSize = 12f
+ textSize = 10f //标签字体
+ setExtraLeftOffset(5f) // 减少左侧留白
setExtraBottomOffset(15f)
}
@@ -189,12 +279,15 @@
setExtraOffsets(10f, 10f, 10f, 20f)
}
+
+
updateBarChartData()
}
private fun updateBarChartData() {
val statsFlow = when (currentDateType) {
DateType.WEEK -> {
- viewModel.getWeeklyStats(currentDate.timeInMillis, 6)
+// viewModel.getWeeklyStats(currentDate.timeInMillis, 6)
+ viewModel.getWeeklyStatsChart(startDateCur,endDateCur)
}
DateType.MONTH -> {
viewModel.getYearMonthlyStats(currentDate.timeInMillis)
@@ -370,14 +463,26 @@
when (currentDateType) {
DateType.DAY -> {
binding.textPackageCount.text = "${packages.size}个"
+
+ // 获取本周统计
+ viewModel.getPackagesUnread(currentDate.timeInMillis,
+ currentDateType.name)
+ .observe(viewLifecycleOwner) { unpackages->
+ // 只读取未取件的包裹
+ packageAdapter.updatePackages(unpackages)
+ }
+
}
DateType.WEEK -> {
// 获取本周统计
- viewModel.getCurrentWeekStats(currentDate.timeInMillis)
- .observe(viewLifecycleOwner) { stats ->
- val weekTotal = stats.sumOf { it.count }
- binding.textPackageCount.text = "${weekTotal}个"
- }
+ viewModel.getCurrentWeekStats2(startDateCur,endDateCur).observe(viewLifecycleOwner) { stats ->
+ binding.textPackageCount.text = "${stats}个"
+ }
+// viewModel.getCurrentWeekStats(currentDate.timeInMillis)
+// .observe(viewLifecycleOwner) { stats ->
+// val weekTotal = stats.sumOf { it.count }
+// binding.textPackageCount.text = "${weekTotal}个"
+// }
}
DateType.MONTH -> {
// 获取本月统计
@@ -396,8 +501,8 @@
}
}
}
- packageAdapter.updatePackages(packages)
- packageAdapter.updatePackages(packages)
+
+// packageAdapter.updatePackages(packages)
// binding.textPackageCount.text = "${packages.size}个"
}
}
@@ -512,6 +617,7 @@
binding.layoutWeekStats.root.visibility = View.VISIBLE
binding.layoutYearStats.root.visibility = View.GONE
binding.layoutWeekStats.chartDailyPackages.visibility = View.VISIBLE
+ (binding.layoutWeekStats.chartDailyPackages.parent as? View)?.visibility = View.VISIBLE
binding.layoutWeekStats.heatmapYearly.visibility = View.GONE
binding.cardPackageStats.visibility = View.VISIBLE
updateBarChartData()
@@ -549,4 +655,35 @@
super.onDestroyView()
_binding = null
}
+ private fun loadUserInfo() {
+
+ lifecycleScope.launch {
+ try {
+ // 从本地获取保存的手机号
+ val savedPhone = PreferencesManager.getPhone()
+ if (savedPhone.isNullOrEmpty()) {
+ Toast.makeText(context, "用户未登录", 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
+ if(userInfo.isMember){
+ hiddleOverlay()
+ }else{
+ // 显示遮罩层
+ showOverlay()
+ }
+
+ }
+ } catch (e: Exception) {
+ e.printStackTrace()
+ Toast.makeText(context, "获取用户信息失败", Toast.LENGTH_SHORT).show()
+ }
+ }
+
+ }
}
\ No newline at end of file
--
Gitblit v1.9.3