diff --git a/BaseModule/src/main/java/com/xscm/moduleutil/bean/SignInData.kt b/BaseModule/src/main/java/com/xscm/moduleutil/bean/SignInData.kt new file mode 100644 index 00000000..5310eb10 --- /dev/null +++ b/BaseModule/src/main/java/com/xscm/moduleutil/bean/SignInData.kt @@ -0,0 +1,115 @@ +package com.xscm.moduleutil.bean + +import com.chad.library.adapter.base.entity.MultiItemEntity + +/** + * 项目名称:羽声语音 + * 时间:2025/12/12 10:35 + * 用途:签到实体类 + */ +class SignInData : MultiItemEntity{ + val TYPE_NORMAL: Int = 0 // 普通类型,使用day_sgin布局 + val TYPE_DOUBLE: Int = 1 // 双倍宽度类型,使用day_sgin2布局 + var viewType: Int = TYPE_NORMAL // 默认为普通类型 + + var day: Int = 0 //第几天 + var sign_in_date: String = "" //日期 + var sign_in_status: Int = 0 // 签到状态:1已签到 0未签到 + var sign_in_status_str: String = "" //已签到 + var is_today: Int = 0 //是否是当天 0否 1是 + var gift_name: String = "" //礼物名称 + var num: String = "" //数量 + var gift_price: Int = 0 //价格 + var type: Int = 0 //类型: 1金币 2礼物 3装扮 4钻石 + var base_image: String = "" //礼物图片 + override fun getItemType(): Int { + return viewType + } + + /* "gift_bag": [ + { + "day": 1, //第几天 + "sign_in_date": "2025-12-09", //日期 + "sign_in_status": 1, //签到状态:1已签到 0未签到 + "sign_in_status_str": "已签到", + "is_today": 0, //是否是当天 0否 1是 + "gift_name": "金币", //礼物名称 + "num": 1, //数量 + "gift_price": 1, //价格 + "type": 1, //类型: 1金币 2礼物 3装扮 4钻石 + "base_image": "https://test.vespa.qxyushen.top/static/image/icon/gold.png" //礼物图片 + }, + { + "day": 2, + "sign_in_date": "2025-12-10", + "sign_in_status": 1, + "sign_in_status_str": "已签到", + "is_today": 0, + "gift_name": "打工狗", + "num": "1 个", + "gift_price": "9", + "type": 2, + "base_image": "https://cos.xscmmidi.site/admin/3143tianxuanbanzhuangou_17615346376493.png" + }, + { + "day": 3, + "sign_in_date": "2025-12-11", + "sign_in_status": 1, + "sign_in_status_str": "已签到", + "is_today": 0, + "gift_name": "神皇", + "num": "3 天", + "gift_price": 30, + "type": 3, + "base_image": "https://midi01.oss-cn-beijing.aliyuncs.com/5544shenhuang_17579016149523.png" + }, + { + "day": 4, + "sign_in_date": "2025-12-12", + "sign_in_status": 1, + "sign_in_status_str": "已签到", + "is_today": 1, + "gift_name": "心动喷发", + "num": "2 个", + "gift_price": "100", + "type": 2, + "base_image": "https://cos.xscmmidi.site/admin/3300xindongpenfa_17615347008740.png" + }, + { + "day": 5, + "sign_in_date": "2025-12-13", + "sign_in_status": 0, + "sign_in_status_str": "未签到", + "is_today": 0, + "gift_name": "钻石", + "num": 20, + "gift_price": 1, + "type": 4, + "base_image": "https://test.vespa.qxyushen.top/static/image/icon/gold.png" + }, + { + "day": 6, + "sign_in_date": "2025-12-14", + "sign_in_status": 0, + "sign_in_status_str": "未签到", + "is_today": 0, + "gift_name": "王者之戒", + "num": "1 个", + "gift_price": "19", + "type": 2, + "base_image": "https://cos.xscmmidi.site/admin/5390wangzhezhijie_17615353361010.png" + }, + { + "day": 7, + "sign_in_date": "2025-12-15", + "sign_in_status": 0, + "sign_in_status_str": "未签到", + "is_today": 0, + "gift_name": "财源滚滚", + "num": "30 天", + "gift_price": 288, + "type": 3, + "base_image": "https://midi01.oss-cn-beijing.aliyuncs.com/2160caiyuangunguntouxiangkuang_17579008394073.png" + } + ]*/ +} \ No newline at end of file diff --git a/BaseModule/src/main/java/com/xscm/moduleutil/bean/TasksSignStatus.kt b/BaseModule/src/main/java/com/xscm/moduleutil/bean/TasksSignStatus.kt new file mode 100644 index 00000000..acbbd77c --- /dev/null +++ b/BaseModule/src/main/java/com/xscm/moduleutil/bean/TasksSignStatus.kt @@ -0,0 +1,11 @@ +package com.xscm.moduleutil.bean + +/** + * 项目名称:羽声语音 + * 时间:2025/12/12 14:54 + * 用途:签到状态 + */ +class TasksSignStatus { + var status : Int=0 + var status_str: String="" +} \ No newline at end of file diff --git a/BaseModule/src/main/res/drawable/bg_r16_deff85_cfffdc.xml b/BaseModule/src/main/res/drawable/bg_r16_deff85_cfffdc.xml new file mode 100644 index 00000000..68fc15a3 --- /dev/null +++ b/BaseModule/src/main/res/drawable/bg_r16_deff85_cfffdc.xml @@ -0,0 +1,14 @@ + + + + + \ No newline at end of file diff --git a/BaseModule/src/main/res/drawable/bg_r99_e7fe67_90ff86_5cfbbd.xml b/BaseModule/src/main/res/drawable/bg_r99_e7fe67_90ff86_5cfbbd.xml new file mode 100644 index 00000000..4e2d3bac --- /dev/null +++ b/BaseModule/src/main/res/drawable/bg_r99_e7fe67_90ff86_5cfbbd.xml @@ -0,0 +1,14 @@ + + + + + \ No newline at end of file diff --git a/BaseModule/src/main/res/drawable/selector_sign_bg.xml b/BaseModule/src/main/res/drawable/selector_sign_bg.xml new file mode 100644 index 00000000..71db39f0 --- /dev/null +++ b/BaseModule/src/main/res/drawable/selector_sign_bg.xml @@ -0,0 +1,16 @@ + + + + + \ No newline at end of file diff --git a/MainModule/src/main/java/com/xscm/modulemain/dialog/SignInDialog.kt b/MainModule/src/main/java/com/xscm/modulemain/dialog/SignInDialog.kt new file mode 100644 index 00000000..47d039d3 --- /dev/null +++ b/MainModule/src/main/java/com/xscm/modulemain/dialog/SignInDialog.kt @@ -0,0 +1,241 @@ +package com.xscm.modulemain.dialog + +import android.content.Context +import android.view.Gravity +import android.view.View +import android.view.ViewGroup +import com.blankj.utilcode.util.ScreenUtils +import com.xscm.modulemain.R +import com.xscm.modulemain.databinding.DialogSignBinding +import com.xscm.moduleutil.bean.SignInData +import com.xscm.moduleutil.http.BaseObserver +import com.xscm.moduleutil.http.RetrofitClient +import com.xscm.moduleutil.utils.ImageLoader +import com.xscm.moduleutil.widget.dialog.BaseDialog +import io.reactivex.disposables.Disposable + +/** + * 项目名称:羽声语音 + * 时间:2025/12/9 18:21 + * 用途:签到 + */ +class SignInDialog(context: Context) : BaseDialog(context) { + var signInDataLists: List? = ArrayList() + private var onCloseCallback: (() -> Unit)? = null + + fun setOnCloseListener(callback: () -> Unit) = apply { + onCloseCallback = callback + } + + + init { + // 设置对话框从底部弹出 + window?.setGravity(Gravity.CENTER) + // 设置对话框的宽度为屏幕宽度 + window?.setLayout( + (ScreenUtils.getScreenWidth() * 315f / 375).toInt(), + ViewGroup.LayoutParams.WRAP_CONTENT + ) + // 添加动画效果 + window?.setWindowAnimations(com.xscm.moduleutil.R.style.DialogAnimationt) + setCancelable(false) + setCanceledOnTouchOutside(false) + } + + override fun getLayoutId(): Int { + return R.layout.dialog_sign + } + + override fun initView() { + mBinding.ivClose.setOnClickListener { + onCloseCallback?.invoke() + dismiss() + } + mBinding.btnSign.setOnClickListener { + + RetrofitClient.getInstance().dailyTasksSign(object : BaseObserver() { + override fun onSubscribe(d: Disposable) { + } + + override fun onNext(t: String) { + var signInSuccessDialog=SignInSuccessDialog(context) + signInSuccessDialog.viewData(signInData) + signInSuccessDialog.setOnCloseListener { + onCloseCallback?.invoke() + } + signInSuccessDialog.show() + dismiss() + } + }) + } + } + + override fun initData() { + RetrofitClient.getInstance().signIn(object : BaseObserver>() { + override fun onSubscribe(d: Disposable) { + } + + override fun onNext(t: List) { + signInDataLists = t + for (i in signInDataLists!!) { + setUpView(i) + } + } + + }) + } + + var signInData = SignInData() + + fun setUpView(signInData: SignInData) { + if (signInData.is_today == 1) { + this.signInData = signInData + if (signInData.sign_in_status == 1) { + mBinding.btnSign.text = "已签到" + mBinding.btnSign.isEnabled = false + mBinding.btnSign.setBackgroundResource(com.xscm.moduleutil.R.drawable.bg_r53_f3f3f3) + } + } + if (signInData.day == 1) { + mBinding.day1.tvDay.text = signInData.day.toString() + + mBinding.day1.tvSiginPrice.text = signInData.gift_name + "*" + signInData.num + if (signInData.sign_in_status == 1) { + mBinding.day1.ivCollected.visibility = View.VISIBLE + mBinding.day1.root.setBackgroundResource(R.drawable.select_item_click) + ImageLoader.loadImage( + context, + mBinding.day1.ivSign, + signInData.base_image, + 0.4f + ) + } else { + mBinding.day1.ivCollected.visibility = View.GONE + com.xscm.moduleutil.utils.ImageUtils.loadHead( + signInData.base_image, + mBinding.day1.ivSign + ) + } + } else if (signInData.day == 2) { + mBinding.day2.tvDay.text = signInData.day.toString() + + mBinding.day2.tvSiginPrice.text = signInData.gift_name + "*" + signInData.num + if (signInData.sign_in_status == 1) { + mBinding.day2.ivCollected.visibility = View.VISIBLE + mBinding.day2.root.setBackgroundResource(R.drawable.select_item_click) + ImageLoader.loadImage( + context, + mBinding.day2.ivSign, + signInData.base_image, + 0.4f + ) + } else { + mBinding.day2.ivCollected.visibility = View.GONE + com.xscm.moduleutil.utils.ImageUtils.loadHead( + signInData.base_image, + mBinding.day2.ivSign + ) + } + } else if (signInData.day == 3) { + mBinding.day3.tvDay.text = signInData.day.toString() + + mBinding.day3.tvSiginPrice.text = signInData.gift_name + "*" + signInData.num + if (signInData.sign_in_status == 1) { + mBinding.day3.ivCollected.visibility = View.VISIBLE + mBinding.day3.root.setBackgroundResource(R.drawable.select_item_click) + ImageLoader.loadImage( + context, + mBinding.day3.ivSign, + signInData.base_image, + 0.4f + ) + } else { + mBinding.day3.ivCollected.visibility = View.GONE + com.xscm.moduleutil.utils.ImageUtils.loadHead( + signInData.base_image, + mBinding.day3.ivSign + ) + } + } else if (signInData.day == 4) { + mBinding.day4.tvDay.text = signInData.day.toString() + + mBinding.day4.tvSiginPrice.text = signInData.gift_name + "*" + signInData.num + if (signInData.sign_in_status == 1) { + mBinding.day4.ivCollected.visibility = View.VISIBLE + mBinding.day4.root.setBackgroundResource(R.drawable.select_item_click) + ImageLoader.loadImage( + context, + mBinding.day4.ivSign, + signInData.base_image, + 0.4f + ) + } else { + mBinding.day4.ivCollected.visibility = View.GONE + com.xscm.moduleutil.utils.ImageUtils.loadHead( + signInData.base_image, + mBinding.day4.ivSign + ) + } + } else if (signInData.day == 5) { + mBinding.day5.tvDay.text = signInData.day.toString() + + mBinding.day5.tvSiginPrice.text = signInData.gift_name + "*" + signInData.num + if (signInData.sign_in_status == 1) { + mBinding.day5.ivCollected.visibility = View.VISIBLE + mBinding.day5.root.setBackgroundResource(R.drawable.select_item_click) + ImageLoader.loadImage( + context, + mBinding.day5.ivSign, + signInData.base_image, + 0.4f + ) + } else { + mBinding.day5.ivCollected.visibility = View.GONE + com.xscm.moduleutil.utils.ImageUtils.loadHead( + signInData.base_image, + mBinding.day5.ivSign + ) + } + } else if (signInData.day == 6) { + mBinding.day6.tvDay.text = signInData.day.toString() + + mBinding.day6.tvSiginPrice.text = signInData.gift_name + "*" + signInData.num + if (signInData.sign_in_status == 1) { + mBinding.day6.ivCollected.visibility = View.VISIBLE + mBinding.day6.root.setBackgroundResource(R.drawable.select_item_click) + ImageLoader.loadImage( + context, + mBinding.day6.ivSign, + signInData.base_image, + 0.4f + ) + } else { + mBinding.day6.ivCollected.visibility = View.GONE + com.xscm.moduleutil.utils.ImageUtils.loadHead( + signInData.base_image, + mBinding.day6.ivSign + ) + } + } else if (signInData.day == 7) { + mBinding.day7.tvDay.text = signInData.day.toString() + + mBinding.day7.tvSiginPrice.text = signInData.gift_name + "*" + signInData.num + if (signInData.sign_in_status == 1) { + mBinding.day7.ivCollected.visibility = View.VISIBLE + mBinding.day7.root.setBackgroundResource(R.drawable.select_item_click) + ImageLoader.loadImage( + context, + mBinding.day7.ivSign, + signInData.base_image, + 0.4f + ) + } else { + mBinding.day7.ivCollected.visibility = View.GONE + com.xscm.moduleutil.utils.ImageUtils.loadHead( + signInData.base_image, + mBinding.day7.ivSign + ) + } + } + } +} \ No newline at end of file diff --git a/MainModule/src/main/java/com/xscm/modulemain/dialog/SignInSuccessDialog.kt b/MainModule/src/main/java/com/xscm/modulemain/dialog/SignInSuccessDialog.kt new file mode 100644 index 00000000..956dbec0 --- /dev/null +++ b/MainModule/src/main/java/com/xscm/modulemain/dialog/SignInSuccessDialog.kt @@ -0,0 +1,57 @@ +package com.xscm.modulemain.dialog + +import android.content.Context +import android.view.Gravity +import android.view.ViewGroup +import com.blankj.utilcode.util.ScreenUtils +import com.xscm.modulemain.R +import com.xscm.modulemain.databinding.DialogSignSuccesBinding +import com.xscm.moduleutil.bean.SignInData +import com.xscm.moduleutil.utils.ImageUtils +import com.xscm.moduleutil.widget.dialog.BaseDialog + +/** + * 项目名称:羽声语音 + * 时间:2025/12/12 9:37 + * 用途:签到成功后展示页面 + */ +class SignInSuccessDialog(context: Context) : BaseDialog(context) { + private var onCloseCallback: (() -> Unit)? = null + + fun setOnCloseListener(callback: () -> Unit) = apply { + onCloseCallback = callback + } + init { + // 设置对话框从底部弹出 + window?.setGravity(Gravity.CENTER) + // 设置对话框的宽度为屏幕宽度 + window?.setLayout( + (ScreenUtils.getScreenWidth() * 315f / 375).toInt(), + ViewGroup.LayoutParams.WRAP_CONTENT + ) + // 添加动画效果 + window?.setWindowAnimations(com.xscm.moduleutil.R.style.DialogAnimationt) + setCancelable(false) + setCanceledOnTouchOutside(false) + } + + override fun getLayoutId(): Int { + return R.layout.dialog_sign_succes + } + + override fun initView() { + mBinding.btnSign.setOnClickListener { + onCloseCallback?.invoke() + dismiss() + } + } + + override fun initData() { + } + + fun viewData(signInData: SignInData) { + ImageUtils.loadHead(signInData.base_image, mBinding.imV) + mBinding.tvSignPrice.text ="签到成功 "+ signInData.gift_name+""+signInData.num + } + +} \ No newline at end of file diff --git a/MainModule/src/main/res/layout/day_sgin.xml b/MainModule/src/main/res/layout/day_sgin.xml new file mode 100644 index 00000000..46447aab --- /dev/null +++ b/MainModule/src/main/res/layout/day_sgin.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/MainModule/src/main/res/layout/day_sgin2.xml b/MainModule/src/main/res/layout/day_sgin2.xml new file mode 100644 index 00000000..971cb9ab --- /dev/null +++ b/MainModule/src/main/res/layout/day_sgin2.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/MainModule/src/main/res/layout/dialog_sign.xml b/MainModule/src/main/res/layout/dialog_sign.xml new file mode 100644 index 00000000..de7ac451 --- /dev/null +++ b/MainModule/src/main/res/layout/dialog_sign.xml @@ -0,0 +1,145 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/MainModule/src/main/res/layout/dialog_sign_succes.xml b/MainModule/src/main/res/layout/dialog_sign_succes.xml new file mode 100644 index 00000000..cc88e3d4 --- /dev/null +++ b/MainModule/src/main/res/layout/dialog_sign_succes.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/MainModule/src/main/res/mipmap-hdpi/ic_collected.png b/MainModule/src/main/res/mipmap-hdpi/ic_collected.png new file mode 100644 index 00000000..39557ab9 Binary files /dev/null and b/MainModule/src/main/res/mipmap-hdpi/ic_collected.png differ diff --git a/MainModule/src/main/res/mipmap-hdpi/shape_dialog_bg.png b/MainModule/src/main/res/mipmap-hdpi/shape_dialog_bg.png new file mode 100644 index 00000000..9c51a961 Binary files /dev/null and b/MainModule/src/main/res/mipmap-hdpi/shape_dialog_bg.png differ diff --git a/MainModule/src/main/res/mipmap-xhdpi/ic_collected.png b/MainModule/src/main/res/mipmap-xhdpi/ic_collected.png new file mode 100644 index 00000000..6d6ba93d Binary files /dev/null and b/MainModule/src/main/res/mipmap-xhdpi/ic_collected.png differ diff --git a/MainModule/src/main/res/mipmap-xhdpi/shape_dialog_bg.png b/MainModule/src/main/res/mipmap-xhdpi/shape_dialog_bg.png new file mode 100644 index 00000000..9172bdfe Binary files /dev/null and b/MainModule/src/main/res/mipmap-xhdpi/shape_dialog_bg.png differ diff --git a/MainModule/src/main/res/mipmap-xxhdpi/ic_collected.png b/MainModule/src/main/res/mipmap-xxhdpi/ic_collected.png new file mode 100644 index 00000000..e10f9319 Binary files /dev/null and b/MainModule/src/main/res/mipmap-xxhdpi/ic_collected.png differ diff --git a/MainModule/src/main/res/mipmap-xxhdpi/shape_dialog_bg.png b/MainModule/src/main/res/mipmap-xxhdpi/shape_dialog_bg.png new file mode 100644 index 00000000..0450b96a Binary files /dev/null and b/MainModule/src/main/res/mipmap-xxhdpi/shape_dialog_bg.png differ