diff --git a/BaseModule/src/main/java/com/xscm/moduleutil/bean/FamilyEarnings.kt b/BaseModule/src/main/java/com/xscm/moduleutil/bean/FamilyEarnings.kt new file mode 100644 index 00000000..539b8f7f --- /dev/null +++ b/BaseModule/src/main/java/com/xscm/moduleutil/bean/FamilyEarnings.kt @@ -0,0 +1,34 @@ +package com.xscm.moduleutil.bean + +/** + * 项目名称:羽声语音 + * 时间:2025/11/27 16:47 + * 用途: + */ +class FamilyEarnings { + + var id: Int=0 + var nickname: String="" + var avatar: String="" + var user_code: String="" + var earnings: String="" + var createtime: Long=0 + var gift_name: String="" + var gift_price: String="" + + /* id 列表 id + + nickname 用户昵称 + + avatar + + user_code + + earnings 收益 + createtime + + gift_name 礼物名称 + + gift_price 礼物价格*/ + +} \ No newline at end of file diff --git a/BaseModule/src/main/java/com/xscm/moduleutil/bean/GiftBoxBean.java b/BaseModule/src/main/java/com/xscm/moduleutil/bean/GiftBoxBean.java index 5019c954..27d21369 100644 --- a/BaseModule/src/main/java/com/xscm/moduleutil/bean/GiftBoxBean.java +++ b/BaseModule/src/main/java/com/xscm/moduleutil/bean/GiftBoxBean.java @@ -40,6 +40,7 @@ public class GiftBoxBean { private List daily_tasks; private List daily_tasks_special; private List usual_tasks; + private List teacher_tasks; @Data public static class DailyTasksBean { @@ -54,6 +55,7 @@ public class GiftBoxBean { private int processing_type;//跳转状态: private String processing_type_str;//跳转状态 private String from_id; + private int reward_type;//1:金币 2:钻石 } } diff --git a/BaseModule/src/main/java/com/xscm/moduleutil/bean/MyFamilyBean.kt b/BaseModule/src/main/java/com/xscm/moduleutil/bean/MyFamilyBean.kt new file mode 100644 index 00000000..7ea3baa0 --- /dev/null +++ b/BaseModule/src/main/java/com/xscm/moduleutil/bean/MyFamilyBean.kt @@ -0,0 +1,93 @@ +package com.xscm.moduleutil.bean + +/** + * 项目名称:羽声语音 + * 时间:2025/11/26 18:45 + * 用途: + */ +class MyFamilyBean { + var group_id: String = "" //群组id + var name: String = "" //家族名称 + var user_id: Int = 0 //族长id + var group_members_num: Int = 0 //签约次数 群组人数 + var group_earnings: String = "" //总计收益 + + var group_owner_info: GroupOwnerInfoBean? = null //族长信息 + + class GroupOwnerInfoBean { + + var nickname: String = "" //昵称 + var avatar: String = "" //头像 + var dress: String = "" //头像框 + var user_code: String = "" //用户id + var icon: List = arrayListOf() + var mic_cycle: String = "" //麦圈 + var nobility_image: String = "" //贵族 + var nickname_color: String = "" //贵族颜色 + } + + var group_members_lists: List = arrayListOf() // + + class GroupMembersListsBean{ + var market_value: String = "" //身价 + var nickname: String = "" + var avatar: String = "" + var user_code: String = "" + var user_id: Int = 0 + var end_time: Long = 0 //签约到期时间点 + var dress: String = "" + var icon: List = arrayListOf() + var mic_cycle: String = "" //麦圈 + var nobility_image: String = "" //贵族 + var nickname_color: String = "" //贵族颜色 + var free_renewal: String = "" //免费续签次数 + var today_earnings: String = "" //今日收礼收益 + var yesterday_earnings: String = "" //昨日收礼收益 + var is_online: Int = 0 //是否在线 1在线 0离线 + var is_show_sign: Int = 0 //是否显示续约按钮 1:显示 0:不显示 + + var sign_times: Int = 0 //非首签签约时长 + var sign_user_ratio : Int = 0 //非首签签约比例 + var end_day: String = "" //签约剩余时长 + + } + + /* "group_id": "string", + "name": "string", + "user_id": "string", + "group_members_num": "string", + "group_earnings": "string", + "group_owner_info": { + "nickname": "string", + "avatar": "string", + "dress": "string", + "user_code": "string", + "icon": [ + "string" + ], + "mic_cycle": "string", + "nobility_image": "string", + "nickname_color": "string" + }, + "group_members_lists": [ + { + "market_value": "string", + "nickname": "string", + "avatar": "string", + "user_code": "string", + "user_id": "string", + "end_time": "string", + "dress": "string", + "icon": [ + "string" + ], + "mic_cycle": "string", + "nobility_image": "string", + "nickname_color": "string", + "free_renewal": "string", + "today_earnings": "string", + "yesterday_earnings": "string" + } + ] + }*/ +} \ No newline at end of file diff --git a/BaseModule/src/main/java/com/xscm/moduleutil/bean/UserInfo.java b/BaseModule/src/main/java/com/xscm/moduleutil/bean/UserInfo.java index e0e0647a..4f301a93 100644 --- a/BaseModule/src/main/java/com/xscm/moduleutil/bean/UserInfo.java +++ b/BaseModule/src/main/java/com/xscm/moduleutil/bean/UserInfo.java @@ -84,7 +84,7 @@ public class UserInfo extends BaseEvent implements Serializable { private int singer_status;//歌手认证状态0-待审核,1-通过,2-拒绝 -1:未认证 private int singer_level;//歌手等级 private CpInfo cp_info; - + private int market_value;//身价 /*"cp_info": { "name": "string", @@ -116,7 +116,7 @@ public class UserInfo extends BaseEvent implements Serializable { @Override public int getItemType() { - if(!name.isEmpty()) { + if (!name.isEmpty()) { return 1; } return 2; @@ -129,6 +129,7 @@ public class UserInfo extends BaseEvent implements Serializable { public String avatar; public String dress; } + @Data public static class UserInfo2 implements Serializable { public String user_id; diff --git a/BaseModule/src/main/java/com/xscm/moduleutil/http/ApiServer.java b/BaseModule/src/main/java/com/xscm/moduleutil/http/ApiServer.java index 1701f2c8..455c10f5 100644 --- a/BaseModule/src/main/java/com/xscm/moduleutil/http/ApiServer.java +++ b/BaseModule/src/main/java/com/xscm/moduleutil/http/ApiServer.java @@ -859,4 +859,15 @@ public interface ApiServer { @GET(Constants.GET_CP_ZONE) Call> getCpRoom(@Query("user_id") String userId); + + @GET(Constants.POST_MY_FAMILY) + Call> myFamily(); + + @GET(Constants.POST_MY_JOIN_FAMILY) + Call> myJoinFamily(); + + @FormUrlEncoded + @POST(Constants.POST_FAMILY_EARNINGS) + Call>> familyEarnings( @Field("user_id") String user_id,@Field("page") int page,@Field("start_time") String start_time,@Field("end_time") String end_time); + } diff --git a/BaseModule/src/main/java/com/xscm/moduleutil/http/RetrofitClient.java b/BaseModule/src/main/java/com/xscm/moduleutil/http/RetrofitClient.java index a5b302c0..f356f956 100644 --- a/BaseModule/src/main/java/com/xscm/moduleutil/http/RetrofitClient.java +++ b/BaseModule/src/main/java/com/xscm/moduleutil/http/RetrofitClient.java @@ -4194,8 +4194,7 @@ public class RetrofitClient { }); } - public void onNextRetu - (Response> response, BaseObserver observer) { + public void onNextRetu(Response> response, BaseObserver observer) { if (response.code() == 200) { BaseModel string = response.body(); if (string != null) { @@ -4582,5 +4581,90 @@ public class RetrofitClient { }); } + public void myFamily(int type,BaseObserver observer) { + if (type==1) { + sApiServer.myFamily().enqueue(new Callback>() { + + @Override + public void onResponse(Call> call, Response> response) { + if (response.code() == 200) { + BaseModel baseModel = response.body(); + if (baseModel.getCode() == 1) { + observer.onNext(baseModel.getData()!=null ? baseModel.getData() : new MyFamilyBean()); + } else if (baseModel.getCode() == 301) { + try { + ToastUtils.showShort(baseModel.getMsg()); + CommonAppContext.getInstance().clearLoginInfo(); + } catch (ClassNotFoundException e) { + } + } else { + ToastUtils.showLong(baseModel.getMsg()); + } + } + } + + @Override + public void onFailure(Call> call, Throwable t) { + LogUtils.e("myFamily", t.fillInStackTrace()); + } + }); + }else { + sApiServer.myJoinFamily().enqueue(new Callback>() { + + @Override + public void onResponse(Call> call, Response> response) { + if (response.code() == 200) { + BaseModel baseModel = response.body(); + if (baseModel.getCode() == 1) { + observer.onNext(baseModel.getData()!=null ? baseModel.getData() : new MyFamilyBean()); + } else if (baseModel.getCode() == 301) { + try { + ToastUtils.showShort(baseModel.getMsg()); + CommonAppContext.getInstance().clearLoginInfo(); + } catch (ClassNotFoundException e) { + } + } else { + observer.onNext(new MyFamilyBean()); + ToastUtils.showLong(baseModel.getMsg()); + } + } + } + + @Override + public void onFailure(Call> call, Throwable t) { + LogUtils.e("myJoinFamily", t.fillInStackTrace()); + } + }); + } + } + + public void familyEarnings(String user_id,int page,String start_time,String end_time,BaseObserver> observer) { + sApiServer.familyEarnings(user_id,page,start_time,end_time).enqueue(new Callback>>() { + @Override + public void onResponse(Call>> call, Response>> response) { + if (response.code() == 200) { + BaseModel> baseModel = response.body(); + if (baseModel.getCode() == 1) { + observer.onNext(baseModel.getData()!=null?baseModel.getData():new ArrayList()); + } else if (baseModel.getCode() == 301) { + try { + ToastUtils.showShort(baseModel.getMsg()); + CommonAppContext.getInstance().clearLoginInfo(); + } catch (ClassNotFoundException e) { + } + } else { + ToastUtils.showLong(baseModel.getMsg()); + } + } + } + + @Override + public void onFailure(Call>> call, Throwable t) { + LogUtils.e("familyEarnings", t.fillInStackTrace()); + } + }); + + } + } diff --git a/BaseModule/src/main/java/com/xscm/moduleutil/widget/Constants.java b/BaseModule/src/main/java/com/xscm/moduleutil/widget/Constants.java index f8fa9010..f58a14ed 100644 --- a/BaseModule/src/main/java/com/xscm/moduleutil/widget/Constants.java +++ b/BaseModule/src/main/java/com/xscm/moduleutil/widget/Constants.java @@ -280,6 +280,9 @@ public class Constants { public static final String GET_ROOM_GIFT = "/api/Room/room_give_gift";//直播间送礼 public static final String POST_CP_GIVE_GIFT = "/api/UserCp/cpGiveGift";//用户CP礼物回赠 public static final String GET_CP_ZONE = "/api/UserCp/cpZone";//心动空间 + public static final String POST_MY_FAMILY = "/api/Family/myFamily";//我的家族 + public static final String POST_MY_JOIN_FAMILY = "/api/Family/myJoinFamily";//我加入的家族 + public static final String POST_FAMILY_EARNINGS = "/api/Family/familyEarnings";//家族收益详情 public static final String GET_ROOM_USER = "/api/Room/room_user_home";//房间内点击头像 public static final String APPLY_PIT = "/api/RoomPit/apply_pit";//申请上麦 public static final String DOWN_PIT = "/api/RoomPit/down_pit";//下麦 diff --git a/MainModule/src/main/java/com/xscm/modulemain/activity/user/activity/DailyTasksActivity.java b/MainModule/src/main/java/com/xscm/modulemain/activity/user/activity/DailyTasksActivity.java index 5aa34bd2..92415b4f 100644 --- a/MainModule/src/main/java/com/xscm/modulemain/activity/user/activity/DailyTasksActivity.java +++ b/MainModule/src/main/java/com/xscm/modulemain/activity/user/activity/DailyTasksActivity.java @@ -106,29 +106,34 @@ public class DailyTasksActivity extends BaseMvpActivity sections = new ArrayList<>(); -// 每日任务 + // 每日任务 sections.add(new TaskItem("今日任务", giftBoxBean.getTasks().getDaily_tasks())); -// 特殊任务 - sections.add(new TaskItem("特殊任务", giftBoxBean.getTasks().getDaily_tasks_special())); -// 平台任务 + // 特殊任务 + sections.add(new TaskItem("特殊任务", giftBoxBean.getTasks().getDaily_tasks_special()));// + // 师徒任务 + if (giftBoxBean.getTasks().getTeacher_tasks() != null && giftBoxBean.getTasks().getTeacher_tasks().size() > 0) { + sections.add(new TaskItem("师徒任务", giftBoxBean.getTasks().getTeacher_tasks())); + } + + // 平台任务 sections.add(new TaskItem("平台任务", giftBoxBean.getTasks().getUsual_tasks())); mTaskDataAdapter = new TaskSectionAdapter(sections); mBinding.rvTaskToday.setAdapter(mTaskDataAdapter); mTaskDataAdapter.setOnItemClickListener(new TaskSectionAdapter.OnItemClickListener() { @Override public void onItemClick(TaskItem taskItem, GiftBoxBean.TaskDataBean.DailyTasksBean item) { - if (taskItem.getTitle().equals("今日任务") || taskItem.getTitle().equals("平台任务")) { - if (item.getTask_status()==2) { + if (taskItem.getTitle().equals("今日任务") || taskItem.getTitle().equals("平台任务") || taskItem.getTitle().equals("师徒任务")) { + if (item.getTask_status() == 2) { MvpPre.dailyTasksReceive(item.getTask_id() + ""); } } else { - if (item.getTask_status() == 2){ + if (item.getTask_status() == 2) { MvpPre.dailyTasksReceive(item.getTask_id() + ""); - }else if (item.getTask_status() == 1) { + } else if (item.getTask_status() == 1) { mBinding.coolWaitView.setVisibility(View.VISIBLE); // if (item.getTask_id() == 9) { - RoomManager.getInstance().fetchRoomDataAndEnter(DailyTasksActivity.this, item.getFrom_id(), "", item.getTask_id() + ""); - finish(); + RoomManager.getInstance().fetchRoomDataAndEnter(DailyTasksActivity.this, item.getFrom_id(), "", item.getTask_id() + ""); + finish(); // ARouter.getInstance().build(ARouteConstants.ROOM_DETAILS).withString("roomId", item.getFrom_id()).withString("taskId", item.getTask_id() + "").navigation(); // } else { // RoomManager.getInstance().fetchRoomDataAndEnter(DailyTasksActivity.this, item.getFrom_id(), "", item.getTask_id() + ""); diff --git a/MainModule/src/main/java/com/xscm/modulemain/activity/user/activity/TotalRevenueActivity.kt b/MainModule/src/main/java/com/xscm/modulemain/activity/user/activity/TotalRevenueActivity.kt index 8c7dd166..c11556ea 100644 --- a/MainModule/src/main/java/com/xscm/modulemain/activity/user/activity/TotalRevenueActivity.kt +++ b/MainModule/src/main/java/com/xscm/modulemain/activity/user/activity/TotalRevenueActivity.kt @@ -1,11 +1,17 @@ package com.xscm.modulemain.activity.user.activity import android.util.Log +import com.scwang.smartrefresh.layout.api.RefreshLayout +import com.scwang.smartrefresh.layout.listener.OnRefreshLoadMoreListener import com.xscm.modulemain.BaseMvpActivity import com.xscm.modulemain.R import com.xscm.modulemain.activity.user.conacts.UserFamilyConacts import com.xscm.modulemain.activity.user.presenter.UserFamilyPresenter +import com.xscm.modulemain.adapter.TotalRevenueAdapter import com.xscm.modulemain.databinding.ActivityTotalRevenueBinding +import com.xscm.moduleutil.bean.FamilyEarnings +import com.xscm.moduleutil.bean.MyFamilyBean +import com.xscm.moduleutil.widget.CommonEmptyView import com.xscm.moduleutil.widget.DoubleTimePickerBottomSheet import com.xscm.moduleutil.widget.DoubleTimePickerBottomSheet.OnTimeRangeSelectedListener import java.text.SimpleDateFormat @@ -19,37 +25,119 @@ import java.util.Locale */ class TotalRevenueActivity : BaseMvpActivity(), UserFamilyConacts.View { - - var page = 1 - var type = "1" - var revenueType = "1" + private var page = 1 + private var userId: Int = 0 + private var adapter: TotalRevenueAdapter? = null override fun bindPresenter(): UserFamilyPresenter? { return UserFamilyPresenter(this, this) } + override fun initView() { + super.initView() + userId = intent.getIntExtra("userId",0) + } override fun initData() { mBinding.topBar.tvTitle.text = "总收益" + MvpPre?.familyEarnings( + userId.toString(), + page, + mBinding.tv2.text.toString(), + mBinding.tv22.text.toString()) + + adapter= TotalRevenueAdapter() + mBinding.totalView.adapter = adapter + val commonEmptyView = CommonEmptyView(this) + commonEmptyView.setImg(R.mipmap.ic_empty) + commonEmptyView.setTextColor(getResources().getColor(com.xscm.moduleutil.R.color.color_FFBDBDBC)) + adapter?.bindToRecyclerView(mBinding.totalView) + adapter?.setEmptyView(commonEmptyView) + mBinding.rl3.setOnClickListener({ v -> val dialog = DoubleTimePickerBottomSheet() dialog.setOnTimeRangeSelectedListener(OnTimeRangeSelectedListener { startDate: Date?, endDate: Date? -> // 处理选择的时间范围 - val sdf = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()) + val sdf = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()) Log.d("SelectedTime", "开始时间:" + sdf.format(startDate)) mBinding.tv2.setText(sdf.format(startDate)) Log.d("SelectedTime", "结束时间:" + sdf.format(endDate)) mBinding.tv22.setText(sdf.format(endDate)) page = 1 - + MvpPre?.familyEarnings( + userId.toString(), + page, + mBinding.tv2.text.toString(), + mBinding.tv22.text.toString() + ) }) val fragmentManager = supportFragmentManager - dialog.show(fragmentManager,"DoubleTimePickerBottomSheet") + dialog.show(fragmentManager, "DoubleTimePickerBottomSheet") }) + + mBinding.smartRefreshLayout.setOnRefreshLoadMoreListener(object :OnRefreshLoadMoreListener{ + override fun onRefresh(refreshLayout: RefreshLayout) { + page++ + MvpPre?.familyEarnings( + userId.toString(), + page, + mBinding.tv2.text.toString(), + mBinding.tv22.text.toString() + ) + } + + override fun onLoadMore(refreshLayout: RefreshLayout) { + page = 1 // 重置页码 + MvpPre?.familyEarnings( + userId.toString(), + page, + mBinding.tv2.text.toString(), + mBinding.tv22.text.toString() + ) + } + + } ) } override fun getLayoutId(): Int { return R.layout.activity_total_revenue } + + override fun myFamily(data: MyFamilyBean) { + } + + override fun familyEarnings(data: List) { + mBinding.smartRefreshLayout.finishRefresh() + mBinding.smartRefreshLayout.finishLoadMore() + // 检查数据是否为空 + if (data.isEmpty()) { + return + } + + adapter?.let { adapter -> + when { + // 第一页数据为空 + page == 1 && data.isEmpty() -> { + } + // 第一页有数据 + page == 1 && data.isNotEmpty() -> { + adapter.setNewData(data) + } + // 非第一页数据为空(没有更多数据) + page > 1 && data.isEmpty() -> { + // 显示没有更多数据的提示 + // 设置一个特殊的空视图,表示没有更多数据 + // 重要:page--,因为这次加载没有新数据 + page-- + } + // 非第一页有数据 + else -> { + adapter.addData(data) + } + } + // 通知数据更新 + adapter.notifyDataSetChanged() + } + } } \ No newline at end of file diff --git a/MainModule/src/main/java/com/xscm/modulemain/activity/user/activity/UserFamilyActivity.kt b/MainModule/src/main/java/com/xscm/modulemain/activity/user/activity/UserFamilyActivity.kt index 2442880c..3ea3da47 100644 --- a/MainModule/src/main/java/com/xscm/modulemain/activity/user/activity/UserFamilyActivity.kt +++ b/MainModule/src/main/java/com/xscm/modulemain/activity/user/activity/UserFamilyActivity.kt @@ -2,29 +2,38 @@ package com.xscm.modulemain.activity.user.activity import android.graphics.Color import android.view.LayoutInflater -import android.widget.ImageView +import android.view.View import android.widget.TextView +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentActivity +import androidx.viewpager2.adapter.FragmentStateAdapter +import com.blankj.utilcode.util.ToastUtils import com.google.android.material.tabs.TabLayout import com.google.android.material.tabs.TabLayoutMediator import com.xscm.modulemain.BaseMvpActivity import com.xscm.modulemain.R import com.xscm.modulemain.activity.user.conacts.UserFamilyConacts +import com.xscm.modulemain.activity.user.fragment.MyFamilyFragment +import com.xscm.modulemain.activity.user.fragment.JoinedFamilyFragment import com.xscm.modulemain.activity.user.presenter.UserFamilyPresenter -import com.xscm.modulemain.adapter.FamilyPagerAdapter import com.xscm.modulemain.databinding.ActivityUserFamilyBinding +import com.xscm.moduleutil.bean.FamilyEarnings +import com.xscm.moduleutil.bean.MyFamilyBean /** -* @Author qx -* @Time 2025/11/25 17:11 -* @Description 我的家族 -*/ + * @Author qx + * @Time 2025/11/25 17:11 + * @Description 我的家族 + */ class UserFamilyActivity : BaseMvpActivity(), UserFamilyConacts.View { - - private lateinit var mAdapter: FamilyPagerAdapter + private var myFamilyFragment: MyFamilyFragment? = null + private var joinedFamilyFragment: JoinedFamilyFragment? = null + private var familyPagerAdapter: FamilyPagerAdapter? = null + var type: Int = 1 override fun bindPresenter(): UserFamilyPresenter? { - return UserFamilyPresenter(this,this) + return UserFamilyPresenter(this, this) } override fun doDone() { @@ -34,54 +43,48 @@ class UserFamilyActivity : BaseMvpActivity - // 创建自定义Tab视图 - val customView = LayoutInflater.from(this).inflate(R.layout.custom_tab_family, null) - val tabTitle = customView.findViewById(R.id.tab_title) - - when (position) { - 0 -> { - tabTitle.text = "我的家族" - } - 1 -> { - tabTitle.text = "我加入的家族" - } - } - - // 设置Tab的初始状态 - if (position == 0) { - tabTitle.setBackgroundResource(R.mipmap.user_tab_bj) - tabTitle.setTextColor(Color.BLACK) - } else { - tabTitle.setBackgroundResource(0) - tabTitle.setTextColor(Color.WHITE) - } - - tab.customView = customView + tab.customView = createTabView( + when (position) { + 0 -> "我的家族" + else -> "我加入的家族" + }, + position == 0 + ) }.attach() - + // 设置Tab选中监听 mBinding.tabLayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener { override fun onTabSelected(tab: TabLayout.Tab) { @@ -91,6 +94,18 @@ class UserFamilyActivity : BaseMvpActivity { + type = 1 + MvpPre?.myFamily(type) + } + 1 -> { + type = 2 + MvpPre?.myFamily(type) + } + } } override fun onTabUnselected(tab: TabLayout.Tab) { @@ -107,4 +122,64 @@ class UserFamilyActivity : BaseMvpActivity(R.id.tab_title) + tabTitle.text = title + + if (isSelected) { + tabTitle.setBackgroundResource(R.mipmap.user_tab_bj) + tabTitle.setTextColor(Color.BLACK) + } else { + tabTitle.setBackgroundResource(0) + tabTitle.setTextColor(Color.WHITE) + } + + return customView + } + + /** + * ViewPager2适配器 + */ + inner class FamilyPagerAdapter(activity: FragmentActivity) : FragmentStateAdapter(activity) { + private val fragments = mutableListOf() + + fun addFragment(fragment: Fragment) { + fragments.add(fragment) + } + + override fun getItemCount(): Int = fragments.size + + override fun createFragment(position: Int): Fragment = fragments[position] + } + + override fun myFamily(data: MyFamilyBean) { + // 这个方法现在由Fragment处理,Activity通过FamilyDataCallback接收数据 + if (data.group_owner_info!=null ) { + // 如果是"我的家族"数据,更新MyFamilyFragment + if (type == 1) { + myFamilyFragment?.setMyFamilyBean(data) + }else{ + joinedFamilyFragment?.setMyFamilyBean(data) + } + // 如果是"我加入的家族"数据,可以在这里处理JoinedFamilyFragment的数据更新 + } else { + // 如果是"我加入的家族"没有数据 + if (type == 2) { + ToastUtils.showLong("您还没有加入任何家族") + // 切换回"我的家族"tab + mBinding.tabLayout.selectTab(mBinding.tabLayout.getTabAt(0)) + } else { + ToastUtils.showLong("没有数据") + } + } + } + + override fun familyEarnings(data: List) { + TODO("Not yet implemented") + } +} diff --git a/MainModule/src/main/java/com/xscm/modulemain/activity/user/conacts/UserFamilyConacts.kt b/MainModule/src/main/java/com/xscm/modulemain/activity/user/conacts/UserFamilyConacts.kt index 250983e3..e3fc6261 100644 --- a/MainModule/src/main/java/com/xscm/modulemain/activity/user/conacts/UserFamilyConacts.kt +++ b/MainModule/src/main/java/com/xscm/modulemain/activity/user/conacts/UserFamilyConacts.kt @@ -1,8 +1,11 @@ package com.xscm.modulemain.activity.user.conacts +import android.R import android.app.Activity import com.xscm.moduleutil.activity.IPresenter import com.xscm.moduleutil.activity.IView +import com.xscm.moduleutil.bean.FamilyEarnings +import com.xscm.moduleutil.bean.MyFamilyBean /** * 项目名称:羽声语音 @@ -11,10 +14,15 @@ import com.xscm.moduleutil.activity.IView */ class UserFamilyConacts { interface View : IView{ + fun myFamily(data: MyFamilyBean) + fun familyEarnings(data: List) } interface IPre : IPresenter { + fun myFamily(type: Int) //1: 我的家族 2:我加入的家族 + + fun familyEarnings(user_id:String, page: Int, start_time: String, end_time: String) } } \ No newline at end of file diff --git a/MainModule/src/main/java/com/xscm/modulemain/activity/user/fragment/JoinedFamilyFragment.kt b/MainModule/src/main/java/com/xscm/modulemain/activity/user/fragment/JoinedFamilyFragment.kt index 5d8f1690..130fd230 100644 --- a/MainModule/src/main/java/com/xscm/modulemain/activity/user/fragment/JoinedFamilyFragment.kt +++ b/MainModule/src/main/java/com/xscm/modulemain/activity/user/fragment/JoinedFamilyFragment.kt @@ -1,39 +1,124 @@ package com.xscm.modulemain.activity.user.fragment +import android.content.Intent +import android.graphics.Color import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment +import com.blankj.utilcode.util.ToastUtils +import com.tencent.imsdk.v2.V2TIMConversation +import com.tencent.qcloud.tuicore.TUIConstants +import com.tencent.qcloud.tuikit.tuichat.classicui.page.TUIGroupChatActivity +import com.xscm.modulemain.R +import com.xscm.modulemain.activity.user.activity.TotalRevenueActivity +import com.xscm.modulemain.activity.user.activity.UserHomepageActivity +import com.xscm.modulemain.adapter.MyFamilyAdapter import com.xscm.modulemain.databinding.FragmentJoinedFamilyBinding +import com.xscm.moduleutil.base.BaseFragment +import com.xscm.moduleutil.bean.MyFamilyBean +import com.xscm.moduleutil.widget.CommonEmptyView /** * @Author qx * @Time 2025/11/25 17:20 * @Description 我加入的家族Fragment */ -class JoinedFamilyFragment : Fragment() { - - private var _binding: FragmentJoinedFamilyBinding? = null - private val binding get() = _binding!! - - override fun onCreateView( - inflater: LayoutInflater, - container: ViewGroup?, - savedInstanceState: Bundle? - ): View { - _binding = FragmentJoinedFamilyBinding.inflate(inflater, container, false) - return binding.root - } +class JoinedFamilyFragment(var data: MyFamilyBean) : BaseFragment() { + private var dataList = mutableListOf() + private var adapter: MyFamilyAdapter? = null + private var userId: Int = 0 + private var myFamilyBean : MyFamilyBean= MyFamilyBean() override fun onDestroyView() { super.onDestroyView() - _binding = null + } + + override fun initData() { + myFamily1(data) + } + + override fun initView() { + + mBinding.tvZsyNum2.setOnClickListener { + val intent= Intent(activity, TotalRevenueActivity::class.java) + intent.putExtra("userId",userId) + startActivity(intent) + } + + mBinding.tvFamilyGroup.setOnClickListener { + if (myFamilyBean.group_members_lists.isNotEmpty()) { + val intent = Intent(activity, TUIGroupChatActivity::class.java) + intent.putExtra(TUIConstants.TUIChat.CHAT_ID, myFamilyBean.group_id) + intent.putExtra(TUIConstants.TUIChat.CHAT_NAME, myFamilyBean.name) + intent.putExtra(TUIConstants.TUIChat.CHAT_TYPE, V2TIMConversation.V2TIM_GROUP) + startActivity(intent) + }else{ + ToastUtils.showLong("家族群至少需要签约一位徒弟") + } + } + + mBinding.headView.setOnClickListener { view -> + val intent = Intent(activity, UserHomepageActivity::class.java) + intent.putExtra("userId", myFamilyBean.user_id.toString()) + startActivity(intent) + } + } + + override fun getLayoutId(): Int { + return R.layout.fragment_joined_family } companion object { - fun newInstance(): JoinedFamilyFragment { - return JoinedFamilyFragment() + fun newInstance(data: MyFamilyBean): JoinedFamilyFragment { + return JoinedFamilyFragment(data) + } + } + + /** + * 设置数据 + */ + fun setMyFamilyBean(myBean: MyFamilyBean) { + this.myFamilyBean = myBean + myFamily1(myBean) + } + + fun myFamily1(data: MyFamilyBean) { + + myFamilyBean= data + userId = data.user_id + dataList.clear() + dataList.addAll(data.group_members_lists) + + mBinding.headView.setData(data.group_owner_info?.avatar,data.group_owner_info?.dress,data.group_owner_info?.nobility_image) + mBinding.tvUserName.text = data.group_owner_info?.nickname + if (data.group_owner_info?.nickname_color?.isNotEmpty()==true){ + mBinding.tvUserName.startColor = Color.parseColor(data.group_owner_info?.nickname_color) + mBinding.tvUserName.shineColor = Color.parseColor(data.group_owner_info?.nickname_color) + mBinding.tvUserName.endColor = Color.parseColor(data.group_owner_info?.nickname_color) + mBinding.tvUserName.isShine = true + mBinding.tvUserName.shineType = 0 + } + + mBinding.tvUserId.setText("ID: ${data.group_owner_info?.user_code}") + mBinding.tvZsyNum.text = data.group_earnings + mBinding.tvSignNum.setText("群组人数:${data.group_members_num}") + + adapter = MyFamilyAdapter(activity!!,userId, R.layout.item_family_members, dataList) + mBinding.recyclerView.adapter = adapter + val commonEmptyView = CommonEmptyView(activity!!) + commonEmptyView.setImg(R.mipmap.ic_empty) + commonEmptyView.setTextColor(getResources().getColor(com.xscm.moduleutil.R.color.color_FFBDBDBC)) + adapter?.bindToRecyclerView(mBinding.recyclerView) + adapter?.setEmptyView(commonEmptyView) + adapter?.setOnItemChildClickListener { adapter, view, position -> + if (view.id == R.id.iv_head) { + val item = dataList[position] + val intent = Intent(activity, UserHomepageActivity::class.java) + intent.putExtra("userId", item.user_id.toString() + "") + startActivity(intent) + } } } } diff --git a/MainModule/src/main/java/com/xscm/modulemain/activity/user/fragment/MyFamilyFragment.kt b/MainModule/src/main/java/com/xscm/modulemain/activity/user/fragment/MyFamilyFragment.kt index b54d141c..0df8660c 100644 --- a/MainModule/src/main/java/com/xscm/modulemain/activity/user/fragment/MyFamilyFragment.kt +++ b/MainModule/src/main/java/com/xscm/modulemain/activity/user/fragment/MyFamilyFragment.kt @@ -1,15 +1,21 @@ package com.xscm.modulemain.activity.user.fragment import android.content.Intent +import android.graphics.Color import android.view.View import com.blankj.utilcode.util.ActivityUtils +import com.blankj.utilcode.util.ToastUtils +import com.tencent.imsdk.v2.V2TIMConversation +import com.tencent.qcloud.tuicore.TUIConstants +import com.tencent.qcloud.tuikit.tuichat.classicui.page.TUIGroupChatActivity import com.xscm.modulemain.R import com.xscm.modulemain.activity.user.activity.HeartCpActivity import com.xscm.modulemain.activity.user.activity.TotalRevenueActivity -import com.xscm.modulemain.activity.user.conacts.UserFamilyConacts -import com.xscm.modulemain.activity.user.presenter.UserFamilyPresenter +import com.xscm.modulemain.activity.user.activity.UserHomepageActivity +import com.xscm.modulemain.adapter.MyFamilyAdapter import com.xscm.modulemain.databinding.FragmentMyFamilyBinding -import com.xscm.moduleutil.base.BaseMvpFragment +import com.xscm.moduleutil.base.BaseFragment +import com.xscm.moduleutil.bean.MyFamilyBean import com.xscm.moduleutil.dialog.ConfirmDialog import com.xscm.moduleutil.widget.CommonEmptyView @@ -18,11 +24,12 @@ import com.xscm.moduleutil.widget.CommonEmptyView * @Time 2025/11/25 17:20 * @Description 我的家族Fragment */ -class MyFamilyFragment : BaseMvpFragment(), UserFamilyConacts.View { +class MyFamilyFragment(var data: MyFamilyBean) : BaseFragment() { - override fun bindPresenter(): UserFamilyPresenter? { - return UserFamilyPresenter(this, activity!!) - } + private var dataList = mutableListOf() + private var adapter: MyFamilyAdapter? = null + private var userId: Int = 0 + private var myFamilyBean : MyFamilyBean= MyFamilyBean() override fun onDestroyView() { @@ -30,19 +37,35 @@ class MyFamilyFragment : BaseMvpFragment + val intent = Intent(activity, UserHomepageActivity::class.java) + intent.putExtra("userId", myFamilyBean.user_id.toString()) + startActivity(intent) + } + + } override fun getLayoutId(): Int { @@ -50,17 +73,23 @@ class MyFamilyFragment : BaseMvpFragment + if (view.id == R.id.tv_renew) { + val item = dataList[position] + queren1(1, "是否确认免费续约", item.user_id.toString()) + }else if (view.id == R.id.iv_head) { + val item = dataList[position] + val intent = Intent(activity, UserHomepageActivity::class.java) + intent.putExtra("userId", item.user_id.toString()) + startActivity(intent) + } + } + } +} \ No newline at end of file diff --git a/MainModule/src/main/java/com/xscm/modulemain/activity/user/presenter/UserFamilyPresenter.kt b/MainModule/src/main/java/com/xscm/modulemain/activity/user/presenter/UserFamilyPresenter.kt index 09e3cd4b..ce576d02 100644 --- a/MainModule/src/main/java/com/xscm/modulemain/activity/user/presenter/UserFamilyPresenter.kt +++ b/MainModule/src/main/java/com/xscm/modulemain/activity/user/presenter/UserFamilyPresenter.kt @@ -2,13 +2,54 @@ package com.xscm.modulemain.activity.user.presenter import android.content.Context import com.xscm.modulemain.activity.user.conacts.UserFamilyConacts +import com.xscm.moduleutil.bean.FamilyEarnings +import com.xscm.moduleutil.bean.MyFamilyBean +import com.xscm.moduleutil.http.BaseObserver import com.xscm.moduleutil.presenter.BasePresenter +import io.reactivex.disposables.Disposable +import java.lang.ref.WeakReference /** * 项目名称:羽声语音 * 时间:2025/11/25 17:01 * 用途: */ -class UserFamilyPresenter (view: UserFamilyConacts.View,context: Context) : BasePresenter(view,context), UserFamilyConacts.IPre{ +class UserFamilyPresenter(val view: UserFamilyConacts.View, context: Context) : + BasePresenter(view, context), UserFamilyConacts.IPre { + override fun myFamily(type: Int) { + api.myFamily(type, object : BaseObserver() { + override fun onSubscribe(d: Disposable) { + addDisposable(d) + } + + override fun onNext(t: MyFamilyBean) { + if (MvpRef==null){ + MvpRef=WeakReference(view); + } + MvpRef.get()?.myFamily(t) + } + + }) + } + + override fun familyEarnings( + user_id: String, + page: Int, + start_time:String, + end_time:String + ) { + api.familyEarnings(user_id, page, start_time, end_time, object : BaseObserver>() { + override fun onSubscribe(d: Disposable) { + addDisposable(d) + } + + override fun onNext(t: MutableList) { + if (MvpRef==null) + MvpRef=WeakReference(view); + MvpRef.get()?.familyEarnings(t) + } + }) + + } +} -} \ No newline at end of file diff --git a/MainModule/src/main/java/com/xscm/modulemain/adapter/FamilyPagerAdapter.kt b/MainModule/src/main/java/com/xscm/modulemain/adapter/FamilyPagerAdapter.kt deleted file mode 100644 index 6c69fbeb..00000000 --- a/MainModule/src/main/java/com/xscm/modulemain/adapter/FamilyPagerAdapter.kt +++ /dev/null @@ -1,27 +0,0 @@ -package com.xscm.modulemain.adapter - -import androidx.fragment.app.Fragment -import androidx.fragment.app.FragmentActivity -import androidx.viewpager2.adapter.FragmentStateAdapter -import com.xscm.modulemain.activity.user.fragment.JoinedFamilyFragment -import com.xscm.modulemain.activity.user.fragment.MyFamilyFragment - -/** - * @Author qx - * @Time 2025/11/25 17:25 - * @Description 家族页面ViewPager2适配器 - */ -class FamilyPagerAdapter(activity: FragmentActivity) : FragmentStateAdapter(activity) { - - override fun getItemCount(): Int { - return 2 - } - - override fun createFragment(position: Int): Fragment { - return when (position) { - 0 -> MyFamilyFragment.newInstance() - 1 -> JoinedFamilyFragment.newInstance() - else -> MyFamilyFragment.newInstance() - } - } -} diff --git a/MainModule/src/main/java/com/xscm/modulemain/adapter/MyFamilyAdapter.kt b/MainModule/src/main/java/com/xscm/modulemain/adapter/MyFamilyAdapter.kt new file mode 100644 index 00000000..7552608a --- /dev/null +++ b/MainModule/src/main/java/com/xscm/modulemain/adapter/MyFamilyAdapter.kt @@ -0,0 +1,116 @@ +package com.xscm.modulemain.adapter + +import android.content.Context +import android.graphics.Color +import android.view.View +import android.widget.ImageView +import android.widget.LinearLayout +import androidx.core.view.isVisible +import androidx.recyclerview.widget.RecyclerView +import com.chad.library.adapter.base.BaseQuickAdapter +import com.chad.library.adapter.base.BaseViewHolder +import com.google.android.flexbox.FlexboxLayout +import com.xscm.modulemain.Application +import com.xscm.modulemain.R +import com.xscm.moduleutil.bean.MyFamilyBean +import com.xscm.moduleutil.utils.ImageUtils +import com.xscm.moduleutil.utils.MeHeadView +import com.xscm.moduleutil.utils.SpUtil +import com.xscm.moduleutil.widget.ShineTextView + +/** + * 项目名称:羽声语音 + * 时间:2025/11/27 9:23 + * 用途: + */ +class MyFamilyAdapter( + val context: Context,var userId: Int, layoutId: Int, data: MutableList? +) : + BaseQuickAdapter(layoutId, data) { + + // 定义点击事件回调接口 + interface OnItemClickListener { + fun onItemClick(position: Int, item: MyFamilyBean.GroupMembersListsBean) + } + + private var onItemClickListener: OnItemClickListener? = null + + // 设置点击事件监听器 + fun setOnItemClickListener(listener: OnItemClickListener) { + onItemClickListener = listener + } + override fun convert( + helper: BaseViewHolder, + item: MyFamilyBean.GroupMembersListsBean + ) { + // 设置整个项的点击事件 + helper.itemView.setOnClickListener { + val position = helper.adapterPosition + if (position != RecyclerView.NO_POSITION) { + onItemClickListener?.onItemClick(position, item) + } + } + var flex_entry: FlexboxLayout=helper.getView(R.id.flex_entry) + var meHeadView : MeHeadView= helper.getView(R.id.iv_head) + var tvName : ShineTextView =helper.getView(R.id.tv_name) + meHeadView.setData(item.avatar,item.dress,item.nobility_image) +// helper.setText(R.id.tv_name,item.nickname) + helper.setText(R.id.tv_net_worth,item.market_value) + if (item.is_online==1){ + helper.setImageResource(R.id.im_online, com.xscm.moduleutil.R.mipmap.members_online) + }else{ + helper.setImageResource(R.id.im_online, com.xscm.moduleutil.R.mipmap.members_offline) + } + + helper.setText(R.id.tv_time, "剩余租期"+item.end_day) + helper.setText(R.id.tv_num, "免费续约次数"+ item.free_renewal) + + helper.setText(R.id.tv_today, item.today_earnings) + helper.setText(R.id.tv_yesterday, item.yesterday_earnings) + tvName.setText(item.nickname) + if (item.nickname_color.isNotEmpty()){ + tvName.startColor = Color.parseColor(item.nickname_color) + tvName.shineColor = Color.parseColor(item.nickname_color) + tvName.endColor = Color.parseColor(item.nickname_color) + tvName.isShine = true + tvName.shineType = 0 + + } + if (userId == SpUtil.getUserId()) { + if (item.is_show_sign==0){ + helper.setGone(R.id.tv_renew,false) + }else{ + helper.setGone(R.id.tv_renew,true) + } + } + + if (item.icon.isNotEmpty()) { + flex_entry.isVisible=true + for (url in item.icon) { + if (url.contains("http")) { + val imageView1 = ImageView(Application.getInstance()) + val params = LinearLayout.LayoutParams( + LinearLayout.LayoutParams.WRAP_CONTENT, + Application.getInstance().getResources() + .getDimensionPixelSize(com.xscm.moduleutil.R.dimen.dp_20) + ) + params.setMargins( + 0, + 0, + Application.getInstance().getResources() + .getDimensionPixelSize(com.xscm.moduleutil.R.dimen.dp_10), + 0 + ) // 右边距 + imageView1.setLayoutParams(params) + imageView1.setScaleType(ImageView.ScaleType.FIT_START) + + // 使用 Glide 加载图片 + ImageUtils.loadHeadCC(url, imageView1, params) + flex_entry.addView(imageView1) + } + } + } else { + flex_entry.isVisible=false + } + } +} \ No newline at end of file diff --git a/MainModule/src/main/java/com/xscm/modulemain/adapter/TaskDataAdapter.java b/MainModule/src/main/java/com/xscm/modulemain/adapter/TaskDataAdapter.java index d8e7ef37..f41d1f80 100644 --- a/MainModule/src/main/java/com/xscm/modulemain/adapter/TaskDataAdapter.java +++ b/MainModule/src/main/java/com/xscm/modulemain/adapter/TaskDataAdapter.java @@ -30,31 +30,34 @@ public class TaskDataAdapter extends BaseQuickAdapter(R.layout.item_total_revenue) { + override fun convert( + helper: BaseViewHolder, + item: FamilyEarnings? + ) { + helper.setText(R.id.tv_name, item?.nickname) + helper.setText(R.id.tv_gift_name, item?.gift_name) + helper.setText(R.id.tv_gift_price, item?.gift_price) + helper.setText(R.id.tv_time, "时间"+TimeUtils.getDateToStringNoZ(item?.createtime?:0L)) + helper.setText(R.id.tv_jb, item?.earnings) + } +} \ No newline at end of file diff --git a/MainModule/src/main/java/com/xscm/modulemain/dialog/UserNetWorthDialog.kt b/MainModule/src/main/java/com/xscm/modulemain/dialog/UserNetWorthDialog.kt index 65d5a7f4..728bf5dc 100644 --- a/MainModule/src/main/java/com/xscm/modulemain/dialog/UserNetWorthDialog.kt +++ b/MainModule/src/main/java/com/xscm/modulemain/dialog/UserNetWorthDialog.kt @@ -8,8 +8,10 @@ import android.view.LayoutInflater import android.view.ViewGroup import com.blankj.utilcode.util.ScreenUtils import com.xscm.modulemain.databinding.DialogUserNetWorthBinding +import com.xscm.moduleutil.bean.UserInfo import com.xscm.moduleutil.color.ThemeableDrawableUtils import com.xscm.moduleutil.utils.ColorManager +import com.xscm.moduleutil.utils.SpUtil /** * 项目名称:羽声语音 @@ -19,6 +21,7 @@ import com.xscm.moduleutil.utils.ColorManager class UserNetWorthDialog(context: Context) : Dialog(context, com.xscm.moduleutil.R.style.BaseDialogStyleH) { + var userInfo : UserInfo= UserInfo() private lateinit var mBinding: DialogUserNetWorthBinding init { @@ -26,11 +29,13 @@ class UserNetWorthDialog(context: Context) : setContentView(mBinding.root) setupWindow() - setupViews() initView() + setupViews() } private fun setupViews() { + userInfo= SpUtil.getUserInfo() + mBinding.tv2.setText(userInfo.market_value.toString()) } private fun setupWindow() { diff --git a/MainModule/src/main/res/layout/activity_total_revenue.xml b/MainModule/src/main/res/layout/activity_total_revenue.xml index 587d01c4..d8f0bfdb 100644 --- a/MainModule/src/main/res/layout/activity_total_revenue.xml +++ b/MainModule/src/main/res/layout/activity_total_revenue.xml @@ -19,10 +19,10 @@ @@ -71,8 +71,9 @@ @@ -92,17 +93,19 @@ android:layout_height="match_parent"> diff --git a/MainModule/src/main/res/layout/activity_user_family.xml b/MainModule/src/main/res/layout/activity_user_family.xml index ab056cc1..2a72b94f 100644 --- a/MainModule/src/main/res/layout/activity_user_family.xml +++ b/MainModule/src/main/res/layout/activity_user_family.xml @@ -52,13 +52,14 @@ android:paddingLeft="0dp" android:paddingRight="0dp" /> + + app:layout_constraintTop_toBottomOf="@id/tabLayout"/> diff --git a/MainModule/src/main/res/layout/dialog_user_net_worth.xml b/MainModule/src/main/res/layout/dialog_user_net_worth.xml index eda0ae2e..02366978 100644 --- a/MainModule/src/main/res/layout/dialog_user_net_worth.xml +++ b/MainModule/src/main/res/layout/dialog_user_net_worth.xml @@ -198,7 +198,7 @@ diff --git a/MainModule/src/main/res/layout/fragment_joined_family.xml b/MainModule/src/main/res/layout/fragment_joined_family.xml index 78aad967..6387e3f4 100644 --- a/MainModule/src/main/res/layout/fragment_joined_family.xml +++ b/MainModule/src/main/res/layout/fragment_joined_family.xml @@ -1,17 +1,184 @@ - - - + android:orientation="vertical"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - diff --git a/MainModule/src/main/res/layout/fragment_my_family.xml b/MainModule/src/main/res/layout/fragment_my_family.xml index 68e89c34..f0b55077 100644 --- a/MainModule/src/main/res/layout/fragment_my_family.xml +++ b/MainModule/src/main/res/layout/fragment_my_family.xml @@ -17,8 +17,8 @@ android:layout_marginHorizontal="@dimen/dp_16" android:layout_marginTop="@dimen/dp_10" android:layout_weight="1" - app:srlEnableLoadMore="true" - app:srlEnableRefresh="true"> + app:srlEnableLoadMore="false" + app:srlEnableRefresh="false"> - + tools:text="家族名称" + app:isShine="false"/> - -