Sfoglia il codice sorgente

修改老师端我的收入

Pq 2 anni fa
parent
commit
f2c9988bd8
32 ha cambiato i file con 1308 aggiunte e 34 eliminazioni
  1. 2 0
      BaseLibrary/src/main/java/com/cooleshow/base/router/RouterPath.kt
  2. 7 0
      BaseLibrary/src/main/res/drawable/shape_bottom_10dp_0f000000.xml
  3. 7 0
      BaseLibrary/src/main/res/values/colors.xml
  4. 14 5
      teacher/src/main/AndroidManifest.xml
  5. 60 0
      teacher/src/main/java/com/cooleshow/teacher/adapter/OtherAmountListAdapter.java
  6. 5 2
      teacher/src/main/java/com/cooleshow/teacher/bean/AccountDetailBean.java
  7. 25 0
      teacher/src/main/java/com/cooleshow/teacher/contract/FrozenAmountContract.java
  8. 68 0
      teacher/src/main/java/com/cooleshow/teacher/presenter/income/FrozenAmountPresenter.java
  9. 5 3
      teacher/src/main/java/com/cooleshow/teacher/presenter/income/MineIncomePresenter.java
  10. 71 0
      teacher/src/main/java/com/cooleshow/teacher/presenter/income/PendingAmountPresenter.java
  11. 245 0
      teacher/src/main/java/com/cooleshow/teacher/ui/income/FrozenAmountActivity.java
  12. 23 6
      teacher/src/main/java/com/cooleshow/teacher/ui/income/MineIncomeActivity.java
  13. 322 0
      teacher/src/main/java/com/cooleshow/teacher/ui/income/PendingAmountActivity.java
  14. BIN
      teacher/src/main/res/drawable-xhdpi/icon_frozen_amount_list.png
  15. BIN
      teacher/src/main/res/drawable-xhdpi/icon_frozen_amount_tip.png
  16. BIN
      teacher/src/main/res/drawable-xhdpi/icon_frozen_amount_top.png
  17. BIN
      teacher/src/main/res/drawable-xhdpi/icon_income_top_bg.png
  18. BIN
      teacher/src/main/res/drawable-xhdpi/icon_pending_amount_tip.png
  19. BIN
      teacher/src/main/res/drawable-xhdpi/icon_pending_amount_top.png
  20. BIN
      teacher/src/main/res/drawable-xxhdpi/icon_frozen_amount_list.png
  21. BIN
      teacher/src/main/res/drawable-xxhdpi/icon_frozen_amount_tip.png
  22. BIN
      teacher/src/main/res/drawable-xxhdpi/icon_frozen_amount_top.png
  23. BIN
      teacher/src/main/res/drawable-xxhdpi/icon_income_top_bg.png
  24. BIN
      teacher/src/main/res/drawable-xxhdpi/icon_pending_amount_tip.png
  25. BIN
      teacher/src/main/res/drawable-xxhdpi/icon_pending_amount_top.png
  26. 7 0
      teacher/src/main/res/drawable/shape_bg_frozen_amount_top.xml
  27. 7 0
      teacher/src/main/res/drawable/shape_bg_pending_amount_top.xml
  28. 115 0
      teacher/src/main/res/layout/activity_frozen_amount_layout.xml
  29. 117 15
      teacher/src/main/res/layout/activity_mine_income.xml
  30. 115 0
      teacher/src/main/res/layout/activity_pending_amount_layout.xml
  31. 5 3
      teacher/src/main/res/layout/layout_empty_conent.xml
  32. 88 0
      teacher/src/main/res/layout/layout_other_amount_list_item.xml

+ 2 - 0
BaseLibrary/src/main/java/com/cooleshow/base/router/RouterPath.kt

@@ -89,6 +89,8 @@ object RouterPath {
     class IncomeCenter {
         companion object {
             const val TEACHER_MINE_INCOME = "/teacher/ui/income/MineIncomeActivity"
+            const val TEACHER_FROZEN_AMOUNT = "/teacher/ui/income/FrozenAmountActivity"
+            const val TEACHER_PENDING_AMOUNT = "/teacher/ui/income/PendingAmountActivity"
             const val TEACHER_MINE_WITHDRAWAL = "/teacher/ui/income/WithdrawalActivity"
             const val TEACHER_MINE_WITHDRAWAL_SUCCESS =
                 "/teacher/ui/income/WithdrawalSuccessActivity"

+ 7 - 0
BaseLibrary/src/main/res/drawable/shape_bottom_10dp_0f000000.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="@color/color_0f000000" />
+    <corners
+        android:bottomLeftRadius="10dp"
+        android:bottomRightRadius="10dp" />
+</shape>

+ 7 - 0
BaseLibrary/src/main/res/values/colors.xml

@@ -100,6 +100,13 @@
     <color name="color_02c1ac">#02C1AC</color>
     <color name="color_ff4347">#FF4347</color>
     <color name="color_4a4a4a">#4A4A4A</color>
+    <color name="color_0f000000">#0f000000</color>
+    <color name="color_bde6ff">#BDE6FF</color>
+    <color name="color_a1d6ff">#A1D6FF</color>
+    <color name="color_225791">#225791</color>
+    <color name="color_a7fcf2">#A7FCF2</color>
+    <color name="color_69eed5">#69EED5</color>
+    <color name="color_00876e">#00876E</color>
 
     <color name="color_25292e">#25292E</color>
     <color name="color_F8F8F8">#F8F8F8</color>

+ 14 - 5
teacher/src/main/AndroidManifest.xml

@@ -73,7 +73,7 @@
             android:exported="true"
             android:launchMode="singleTask"
             android:screenOrientation="portrait"
-            android:windowSoftInputMode="adjustPan" >
+            android:windowSoftInputMode="adjustPan">
             <intent-filter>
                 <!-- 这个action是给极光推送跳转的 oppo推送要求push的intent-filter应与其他功能的intent-filter区分开,勿添加其他action与data标签-->
                 <action android:name="cn.jiguang.push.customAction" />
@@ -156,8 +156,8 @@
         <activity
             android:name=".ui.homepage.HomePageActivity"
             android:configChanges="orientation|screenSize|keyboardHidden"
-            android:windowSoftInputMode="adjustPan"
-            android:screenOrientation="portrait" />
+            android:screenOrientation="portrait"
+            android:windowSoftInputMode="adjustPan" />
         <activity
             android:name=".ui.minestyle.MineStylePageActivity"
             android:configChanges="orientation|screenSize|keyboardHidden"
@@ -259,8 +259,8 @@
         <activity
             android:name=".ui.score.MineScoreActivity"
             android:configChanges="orientation|screenSize|keyboardHidden"
-            android:windowSoftInputMode="adjustPan"
-            android:screenOrientation="portrait" />
+            android:screenOrientation="portrait"
+            android:windowSoftInputMode="adjustPan" />
         <activity
             android:name=".ui.work.HomeWorkActivity"
             android:configChanges="orientation|screenSize|keyboardHidden"
@@ -269,6 +269,15 @@
             android:name=".ui.income.MineIncomeActivity"
             android:configChanges="orientation|screenSize|keyboardHidden"
             android:screenOrientation="portrait" />
+
+        <activity
+            android:name=".ui.income.FrozenAmountActivity"
+            android:configChanges="orientation|screenSize|keyboardHidden"
+            android:screenOrientation="portrait" />
+        <activity
+            android:name=".ui.income.PendingAmountActivity"
+            android:configChanges="orientation|screenSize|keyboardHidden"
+            android:screenOrientation="portrait" />
         <activity
             android:name=".ui.income.WithdrawalActivity"
             android:configChanges="orientation|screenSize|keyboardHidden"

+ 60 - 0
teacher/src/main/java/com/cooleshow/teacher/adapter/OtherAmountListAdapter.java

@@ -0,0 +1,60 @@
+package com.cooleshow.teacher.adapter;
+
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.chad.library.adapter.base.module.BaseLoadMoreModule;
+import com.chad.library.adapter.base.module.LoadMoreModule;
+import com.chad.library.adapter.base.viewholder.BaseViewHolder;
+import com.cooleshow.base.utils.UiUtils;
+import com.cooleshow.teacher.R;
+import com.cooleshow.teacher.bean.UserAccountBean;
+
+import androidx.annotation.NonNull;
+
+/**
+ * 创建日期:2022/5/23 14:49
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public class OtherAmountListAdapter extends BaseQuickAdapter<UserAccountBean.RowsBean, BaseViewHolder> implements LoadMoreModule {
+
+    public OtherAmountListAdapter() {
+        super(R.layout.layout_other_amount_list_item);
+    }
+
+
+    @Override
+    protected void convert(BaseViewHolder helper, UserAccountBean.RowsBean item) {
+        TextView tv_time = helper.getView(R.id.tv_time);
+        ImageView im_state = helper.getView(R.id.im_state);
+        TextView tv_name = helper.getView(R.id.tv_name);
+        TextView tv_date = helper.getView(R.id.tv_date);
+        TextView tv_price = helper.getView(R.id.tv_price);
+        if (getItemPosition(item) > 0) {
+            int lastPosition = getItemPosition(item) - 1;
+            if (getData().get(lastPosition).timeDay.equals(item.timeDay)) {
+                tv_time.setVisibility(View.GONE);
+            } else {
+                tv_time.setVisibility(View.VISIBLE);
+                tv_time.setText(item.timeDay);
+            }
+        } else {
+            tv_time.setVisibility(View.VISIBLE);
+            tv_time.setText(item.timeDay);
+        }
+        im_state.setBackgroundResource(R.drawable.icon_frozen_amount_list);
+        tv_date.setText(UiUtils.getCourseTimeString(item.startTime, item.endTime));
+        tv_name.setText(item.bizName);
+        tv_price.setText(item.transAmount);
+    }
+
+    @NonNull
+    @Override
+    public BaseLoadMoreModule addLoadMoreModule(@NonNull BaseQuickAdapter<?, ?> baseQuickAdapter) {
+        return new BaseLoadMoreModule(baseQuickAdapter);
+    }
+}

+ 5 - 2
teacher/src/main/java/com/cooleshow/teacher/bean/AccountDetailBean.java

@@ -16,11 +16,14 @@ public class AccountDetailBean {
 		"updateTime": "",
 		"userId": 0
      */
-    public float amountFrozen;
+    public String amountFrozen;//冻结
+    public String amountRecorded;
+    public String amountShare;
     public String amountTotal;
+    public String amountUnrecorded;
     public String amountUsable;
     public String createTime;
     public int status;
     public String updateTime;
-    public int userId;
+    public String userId;
 }

+ 25 - 0
teacher/src/main/java/com/cooleshow/teacher/contract/FrozenAmountContract.java

@@ -0,0 +1,25 @@
+package com.cooleshow.teacher.contract;
+
+import com.cooleshow.base.presenter.view.BaseView;
+import com.cooleshow.teacher.bean.AccountDetailBean;
+import com.cooleshow.teacher.bean.UserAccountBean;
+import com.cooleshow.teacher.bean.WithdrawalInfoBean;
+
+/**
+ * 创建日期:2022/5/23 17:31
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public interface FrozenAmountContract {
+    interface FrozenAmountView extends BaseView {
+        void userAccountPageSuccess(int page, UserAccountBean data);
+
+        void userAccountPageError(int page);
+
+        void userAccountDetailSuccess(AccountDetailBean detailBean);
+    }
+
+    interface Presenter {
+    }
+}

+ 68 - 0
teacher/src/main/java/com/cooleshow/teacher/presenter/income/FrozenAmountPresenter.java

@@ -0,0 +1,68 @@
+package com.cooleshow.teacher.presenter.income;
+
+import com.cooleshow.base.constanst.Constants;
+import com.cooleshow.base.presenter.BasePresenter;
+import com.cooleshow.base.rx.BaseObserver;
+import com.cooleshow.base.utils.RequestBodyUtil;
+import com.cooleshow.teacher.api.APIService;
+import com.cooleshow.teacher.bean.AccountDetailBean;
+import com.cooleshow.teacher.bean.UserAccountBean;
+import com.cooleshow.teacher.bean.WithdrawalInfoBean;
+import com.cooleshow.teacher.contract.FrozenAmountContract;
+import com.cooleshow.teacher.contract.WithdrawalContract;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+/**
+ * 创建日期:2022/5/23 17:30
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public class FrozenAmountPresenter extends BasePresenter<FrozenAmountContract.FrozenAmountView> implements FrozenAmountContract.Presenter {
+    public void getUserAccountDetail() {
+        getView().showLoading();
+        addSubscribe(create(APIService.class).getUserAccountDetail(), new BaseObserver<AccountDetailBean>(getView()) {
+            @Override
+            protected void onSuccess(AccountDetailBean data) {
+                if (getView() != null) {
+                    getView().userAccountDetailSuccess(data);
+                }
+            }
+        });
+    }
+
+    public void userAccountPage(boolean isLoading,int page, String searchDate) {
+        if (isLoading && getView() != null) {
+            getView().showLoading();
+        }
+        JSONObject jsonObject = new JSONObject();
+        try {
+            jsonObject.put("searchDate", searchDate);
+            jsonObject.put("postStatus", "FROZEN");
+            jsonObject.put("paymentStatus", "OUT");
+            jsonObject.putOpt("page", page);
+            jsonObject.putOpt("rows", Constants.DEFAULT_DATA_SIZE);
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+        addSubscribe(create(APIService.class).userAccountPage(RequestBodyUtil.convertToRequestBodyJson(jsonObject.toString())), new BaseObserver<UserAccountBean>(getView()) {
+            @Override
+            protected void onSuccess(UserAccountBean data) {
+                if (getView() != null) {
+                    getView().userAccountPageSuccess(page, data);
+                }
+            }
+
+            @Override
+            public void onError(Throwable e) {
+                super.onError(e);
+                if (getView() != null) {
+                    getView().userAccountPageError(page);
+                }
+            }
+        });
+    }
+
+}

+ 5 - 3
teacher/src/main/java/com/cooleshow/teacher/presenter/income/MineIncomePresenter.java

@@ -52,14 +52,16 @@ public class MineIncomePresenter extends BasePresenter<MineIncomeContract.MineIn
     }
 
 
-    public void userAccountPage(boolean isLoading,int page,String bizType,String searchDate){
+    public void userAccountPage(boolean isLoading, int page, String bizType, String searchDate) {
         if (isLoading && getView() != null) {
             getView().showLoading();
         }
         JSONObject jsonObject = new JSONObject();
         try {
-            jsonObject.put("bizType",bizType);
-            jsonObject.put("searchDate",searchDate);
+            jsonObject.put("bizType", bizType);
+            jsonObject.put("searchDate", searchDate);
+            jsonObject.put("postStatus", "RECORDED");
+            jsonObject.put("paymentStatus", "IN");
             jsonObject.putOpt("page", page);
             jsonObject.putOpt("rows", Constants.DEFAULT_DATA_SIZE);
         } catch (JSONException e) {

+ 71 - 0
teacher/src/main/java/com/cooleshow/teacher/presenter/income/PendingAmountPresenter.java

@@ -0,0 +1,71 @@
+package com.cooleshow.teacher.presenter.income;
+
+import com.cooleshow.base.constanst.Constants;
+import com.cooleshow.base.data.net.ApiException;
+import com.cooleshow.base.presenter.BasePresenter;
+import com.cooleshow.base.rx.BaseObserver;
+import com.cooleshow.base.utils.ErrorParse;
+import com.cooleshow.base.utils.RequestBodyUtil;
+import com.cooleshow.base.utils.ToastUtil;
+import com.cooleshow.teacher.api.APIService;
+import com.cooleshow.teacher.bean.AccountDetailBean;
+import com.cooleshow.teacher.bean.UserAccountBean;
+import com.cooleshow.teacher.contract.FrozenAmountContract;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+/**
+ * 创建日期:2022/5/23 17:30
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public class PendingAmountPresenter extends BasePresenter<FrozenAmountContract.FrozenAmountView> implements FrozenAmountContract.Presenter {
+
+    public void getUserAccountDetail() {
+        getView().showLoading();
+        addSubscribe(create(APIService.class).getUserAccountDetail(), new BaseObserver<AccountDetailBean>(getView()) {
+            @Override
+            protected void onSuccess(AccountDetailBean data) {
+                if (getView() != null) {
+                    getView().userAccountDetailSuccess(data);
+                }
+            }
+        });
+    }
+
+    public void userAccountPage(boolean isLoading, int page,String bizType, String searchDate) {
+        if (isLoading && getView() != null) {
+            getView().showLoading();
+        }
+        JSONObject jsonObject = new JSONObject();
+        try {
+            jsonObject.put("bizType", bizType);
+            jsonObject.put("searchDate", searchDate);
+            jsonObject.put("postStatus", "WAIT");
+            jsonObject.put("paymentStatus", "IN");
+            jsonObject.putOpt("page", page);
+            jsonObject.putOpt("rows", Constants.DEFAULT_DATA_SIZE);
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+        addSubscribe(create(APIService.class).userAccountPage(RequestBodyUtil.convertToRequestBodyJson(jsonObject.toString())), new BaseObserver<UserAccountBean>(getView()) {
+            @Override
+            protected void onSuccess(UserAccountBean data) {
+                if (getView() != null) {
+                    getView().userAccountPageSuccess(page, data);
+                }
+            }
+
+            @Override
+            public void onError(Throwable e) {
+                super.onError(e);
+                if (getView() != null) {
+                    getView().userAccountPageError(page);
+                }
+            }
+        });
+    }
+
+}

+ 245 - 0
teacher/src/main/java/com/cooleshow/teacher/ui/income/FrozenAmountActivity.java

@@ -0,0 +1,245 @@
+package com.cooleshow.teacher.ui.income;
+
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.TextView;
+
+import com.alibaba.android.arouter.facade.annotation.Route;
+import com.bigkoo.pickerview.builder.TimePickerBuilder;
+import com.bigkoo.pickerview.listener.CustomListener;
+import com.bigkoo.pickerview.view.TimePickerView;
+import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.chad.library.adapter.base.listener.OnItemClickListener;
+import com.chad.library.adapter.base.listener.OnLoadMoreListener;
+import com.cooleshow.base.constanst.Constants;
+import com.cooleshow.base.router.RouterPath;
+import com.cooleshow.base.ui.activity.BaseMVPActivity;
+import com.cooleshow.base.utils.TimeUtils;
+import com.cooleshow.base.utils.helper.QMUIStatusBarHelper;
+import com.cooleshow.teacher.R;
+import com.cooleshow.teacher.adapter.MineIncomeAdapter;
+import com.cooleshow.teacher.adapter.OtherAmountListAdapter;
+import com.cooleshow.teacher.bean.AccountDetailBean;
+import com.cooleshow.teacher.bean.UserAccountBean;
+import com.cooleshow.teacher.contract.FrozenAmountContract;
+import com.cooleshow.teacher.databinding.ActivityFrozenAmountLayoutBinding;
+import com.cooleshow.teacher.presenter.income.FrozenAmountPresenter;
+
+import java.util.Calendar;
+import java.util.Date;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+/**
+ * Author by pq, Date on 2022/7/28.
+ */
+@Route(path = RouterPath.IncomeCenter.TEACHER_FROZEN_AMOUNT)
+public class FrozenAmountActivity extends BaseMVPActivity<ActivityFrozenAmountLayoutBinding, FrozenAmountPresenter> implements FrozenAmountContract.FrozenAmountView, View.OnClickListener {
+
+    private OtherAmountListAdapter mIncomeAdapter;
+    private int currentPage = 1;
+    private String currentFilterDate;
+    private Date currentSelectDate;
+    private TimePickerView pvTime;
+
+    @Override
+    protected void onCreate(@Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        QMUIStatusBarHelper.setStatusBarLightMode(this);
+    }
+
+    @Override
+    protected void initView() {
+        initMidTitleToolBar(viewBinding.toolbarInclude.toolbar, "冻结明细");
+        viewBinding.tvDate.setOnClickListener(this);
+        RecyclerView rvAddress = viewBinding.recyclerView;
+        LinearLayoutManager manager = new LinearLayoutManager(this);
+        rvAddress.setLayoutManager(manager);
+        mIncomeAdapter = new OtherAmountListAdapter();
+        LayoutInflater inflater = LayoutInflater.from(this);
+        View emptyLayout = inflater.inflate(R.layout.layout_empty_conent, null);
+        mIncomeAdapter.setEmptyView(emptyLayout);
+        rvAddress.setAdapter(mIncomeAdapter);
+        mIncomeAdapter.setOnItemClickListener(new OnItemClickListener() {
+            @Override
+            public void onItemClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) {
+
+            }
+        });
+
+    }
+
+    @Override
+    public void initData() {
+        super.initData();
+        viewBinding.refreshLayout.setOnRefreshListener(refreshLayout -> {
+            currentPage = 1;
+            queryList(true);
+        });
+        mIncomeAdapter.getLoadMoreModule().setOnLoadMoreListener(new OnLoadMoreListener() {
+            @Override
+            public void onLoadMore() {
+                //上拉加载
+                if (hasNext) {
+                    currentPage++;
+                    queryList(false);
+                } else {
+                    mIncomeAdapter.getLoadMoreModule().loadMoreEnd();
+                }
+            }
+        });
+        reBuildFilter(null);
+    }
+
+    private void reBuildFilter(Date date) {
+        currentSelectDate = date != null ? date : TimeUtils.getNowDate();
+        String targetDateTimeStr = TimeUtils.date2String(currentSelectDate, TimeUtils.getSafeDateFormat("yyyy-MM"));
+        if (TextUtils.equals(targetDateTimeStr, currentFilterDate)) {
+            //防止重复条件触发
+            return;
+        }
+        currentFilterDate = targetDateTimeStr;
+        currentPage = 1;
+        viewBinding.tvDate.setText(currentFilterDate);
+        queryList(true);
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+        if (presenter != null) {
+            presenter.getUserAccountDetail();
+        }
+    }
+
+    private void queryList(boolean isLoading) {
+        presenter.userAccountPage(isLoading, currentPage, currentFilterDate);
+    }
+
+    @Override
+    protected ActivityFrozenAmountLayoutBinding getLayoutView() {
+        return ActivityFrozenAmountLayoutBinding.inflate(getLayoutInflater());
+    }
+
+    @Override
+    protected FrozenAmountPresenter createPresenter() {
+        return new FrozenAmountPresenter();
+    }
+
+    @Override
+    public void userAccountDetailSuccess(AccountDetailBean detailBean) {
+        if (!checkActivityExist()) {
+            return;
+        }
+        //冻结金额
+        viewBinding.tvAmountValue.setText(detailBean.amountFrozen);
+    }
+
+    @Override
+    public void userAccountPageSuccess(int page, UserAccountBean data) {
+        if (!checkActivityExist()) {
+            return;
+        }
+        if (data != null) {
+            if (page == 1) {
+                viewBinding.refreshLayout.finishRefresh();
+                mIncomeAdapter.getData().clear();
+                mIncomeAdapter.notifyDataSetChanged();
+                if (data.rows != null && data.rows.size() > 0) {
+                    checkHasNext(data.rows.size());
+                    mIncomeAdapter.setNewInstance(data.rows);
+                }
+            } else {
+                if (data.rows != null && data.rows.size() > 0) {
+                    mIncomeAdapter.getLoadMoreModule().loadMoreComplete();
+                    mIncomeAdapter.addData(data.rows);
+                    checkHasNext(data.rows.size());
+                } else {
+                    mIncomeAdapter.getLoadMoreModule().loadMoreEnd();
+                }
+            }
+        }
+    }
+
+    @Override
+    public void userAccountPageError(int page) {
+        if (!checkActivityExist()) {
+            return;
+        }
+        if (page == 1) {
+            viewBinding.refreshLayout.finishRefresh();
+        } else {
+            if (mIncomeAdapter != null) {
+                currentPage--;
+                mIncomeAdapter.getLoadMoreModule().loadMoreFail();
+            }
+        }
+    }
+
+
+    private boolean hasNext = true;
+
+    /**
+     * 检查是否还有下一页
+     *
+     * @param dataSize
+     */
+    private void checkHasNext(int dataSize) {
+        hasNext = dataSize >= Constants.DEFAULT_DATA_SIZE;
+    }
+
+    private void showTimeSelectPicker() {
+        if (pvTime == null) {
+            pvTime = new TimePickerBuilder(this, (date, v) -> {//选中事件回调
+                reBuildFilter(date);
+            }).setLayoutRes(com.cooleshow.base.R.layout.pickerview_default_layout, new CustomListener() {
+                @Override
+                public void customLayout(View v) {
+                    //自定义布局中的控件初始化及事件处理
+                    final TextView tvSubmit = (TextView) v.findViewById(com.cooleshow.base.R.id.tv_finish);
+                    TextView ivCancel = (TextView) v.findViewById(com.cooleshow.base.R.id.tv_cancel);
+                    tvSubmit.setOnClickListener(new View.OnClickListener() {
+                        @Override
+                        public void onClick(View v) {
+                            pvTime.returnData();
+                            pvTime.dismiss();
+                        }
+                    });
+                    ivCancel.setOnClickListener(new View.OnClickListener() {
+                        @Override
+                        public void onClick(View v) {
+                            pvTime.dismiss();
+                        }
+                    });
+
+                }
+            })
+                    .setLineSpacingMultiplier(2.5f)
+                    .setType(new boolean[]{true, true, false, false, false, false})// 默认全部显示
+                    .setTextColorCenter(getResources().getColor(com.cooleshow.base.R.color.color_1a1a1a))//设置选中项的颜色
+                    .isDialog(false)//是否显示为对话框样式
+                    .setLabel("年", "月", "", "", "", "")
+                    .build();
+        }
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(currentSelectDate);
+        pvTime.setDate(calendar);
+        if (!pvTime.isShowing()) {
+            pvTime.show();
+        }
+    }
+
+    @Override
+    public void onClick(View v) {
+        int id = v.getId();
+        if (id == R.id.tv_date) {
+            showTimeSelectPicker();
+            return;
+        }
+    }
+}

+ 23 - 6
teacher/src/main/java/com/cooleshow/teacher/ui/income/MineIncomeActivity.java

@@ -80,6 +80,16 @@ public class MineIncomeActivity extends BaseMVPActivity<ActivityMineIncomeBindin
                 ARouter.getInstance().build(RouterPath.IncomeCenter.TEACHER_MINE_WITHDRAWAL)
                         .navigation();
                 break;
+            case R.id.view_frozen_amount:
+                //冻结金额
+                ARouter.getInstance().build(RouterPath.IncomeCenter.TEACHER_FROZEN_AMOUNT)
+                        .navigation();
+                break;
+            case R.id.view_pending_amount:
+                //待入账金额
+                ARouter.getInstance().build(RouterPath.IncomeCenter.TEACHER_PENDING_AMOUNT)
+                        .navigation();
+                break;
         }
 
     }
@@ -102,6 +112,8 @@ public class MineIncomeActivity extends BaseMVPActivity<ActivityMineIncomeBindin
         viewBinding.tvDate.setOnClickListener(this);
         viewBinding.tvIncomeType.setOnClickListener(this);
         viewBinding.tvWithdrawal.setOnClickListener(this);
+        viewBinding.viewFrozenAmount.setOnClickListener(this);
+        viewBinding.viewPendingAmount.setOnClickListener(this);
         RecyclerView rvAddress = viewBinding.recyclerView;
         LinearLayoutManager manager = new LinearLayoutManager(this);
         rvAddress.setLayoutManager(manager);
@@ -172,11 +184,11 @@ public class MineIncomeActivity extends BaseMVPActivity<ActivityMineIncomeBindin
         mFilterStatusBeans.add(new IncomeFilterBean("LIVE", "直播课"));
         mFilterStatusBeans.add(new IncomeFilterBean("VIDEO", "视频课"));
         mFilterStatusBeans.add(new IncomeFilterBean("MUSIC", "乐谱"));
-        mFilterStatusBeans.add(new IncomeFilterBean("LIVE_SHARE", "直播课分润"));
-        mFilterStatusBeans.add(new IncomeFilterBean("VIDEO_SHARE", "视频课分润"));
-        mFilterStatusBeans.add(new IncomeFilterBean("MUSIC_SHARE", "乐谱分润"));
-        mFilterStatusBeans.add(new IncomeFilterBean("VIP_SHARE", "会员分润"));
-        mFilterStatusBeans.add(new IncomeFilterBean("MALL_SHARE", "商品分润"));
+        mFilterStatusBeans.add(new IncomeFilterBean("LIVE_SHARE", "直播课推荐"));
+        mFilterStatusBeans.add(new IncomeFilterBean("VIDEO_SHARE", "视频课推荐"));
+        mFilterStatusBeans.add(new IncomeFilterBean("MUSIC_SHARE", "乐谱推荐"));
+        mFilterStatusBeans.add(new IncomeFilterBean("VIP_SHARE", "小酷Ai推荐"));
+        mFilterStatusBeans.add(new IncomeFilterBean("MALL_SHARE", "商品推荐"));
 
     }
 
@@ -201,7 +213,12 @@ public class MineIncomeActivity extends BaseMVPActivity<ActivityMineIncomeBindin
         if (null == data) {
             return;
         }
-        viewBinding.tvBalance.setText(data.amountUsable + "");
+        //冻结金额
+        viewBinding.tvFreezeAmountValue.setText(data.amountFrozen);
+        //余额
+        viewBinding.tvBalance.setText(data.amountUsable);
+        //待入账金额
+        viewBinding.tvPendingAmountValue.setText(data.amountUnrecorded);
     }
 
     @Override

+ 322 - 0
teacher/src/main/java/com/cooleshow/teacher/ui/income/PendingAmountActivity.java

@@ -0,0 +1,322 @@
+package com.cooleshow.teacher.ui.income;
+
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.TextView;
+
+import com.alibaba.android.arouter.facade.annotation.Route;
+import com.bigkoo.pickerview.builder.OptionsPickerBuilder;
+import com.bigkoo.pickerview.builder.TimePickerBuilder;
+import com.bigkoo.pickerview.listener.CustomListener;
+import com.bigkoo.pickerview.listener.OnOptionsSelectListener;
+import com.bigkoo.pickerview.view.OptionsPickerView;
+import com.bigkoo.pickerview.view.TimePickerView;
+import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.chad.library.adapter.base.listener.OnItemClickListener;
+import com.chad.library.adapter.base.listener.OnLoadMoreListener;
+import com.cooleshow.base.constanst.Constants;
+import com.cooleshow.base.router.RouterPath;
+import com.cooleshow.base.ui.activity.BaseMVPActivity;
+import com.cooleshow.base.utils.TimeUtils;
+import com.cooleshow.base.utils.helper.QMUIStatusBarHelper;
+import com.cooleshow.teacher.R;
+import com.cooleshow.teacher.adapter.MineIncomeAdapter;
+import com.cooleshow.teacher.adapter.OtherAmountListAdapter;
+import com.cooleshow.teacher.bean.AccountDetailBean;
+import com.cooleshow.teacher.bean.IncomeFilterBean;
+import com.cooleshow.teacher.bean.UserAccountBean;
+import com.cooleshow.teacher.contract.FrozenAmountContract;
+import com.cooleshow.teacher.databinding.ActivityFrozenAmountLayoutBinding;
+import com.cooleshow.teacher.databinding.ActivityPendingAmountLayoutBinding;
+import com.cooleshow.teacher.presenter.income.FrozenAmountPresenter;
+import com.cooleshow.teacher.presenter.income.PendingAmountPresenter;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+/**
+ * Author by pq, Date on 2022/7/28.
+ */
+@Route(path = RouterPath.IncomeCenter.TEACHER_PENDING_AMOUNT)
+public class PendingAmountActivity extends BaseMVPActivity<ActivityPendingAmountLayoutBinding, PendingAmountPresenter> implements FrozenAmountContract.FrozenAmountView, View.OnClickListener {
+
+    private MineIncomeAdapter mIncomeAdapter;
+    private String currentIncomeFilterStatus = "";
+    private int currentPage = 1;
+    private String currentFilterDate;
+    private Date currentSelectDate;
+    private TimePickerView pvTime;
+    private ArrayList<IncomeFilterBean> mFilterStatusBeans;
+    private OptionsPickerView mIncomeTypeSelector;
+
+    @Override
+    protected void onCreate(@Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        QMUIStatusBarHelper.setStatusBarLightMode(this);
+    }
+
+    @Override
+    protected void initView() {
+        initMidTitleToolBar(viewBinding.toolbarInclude.toolbar, "待入账金额");
+        viewBinding.tvDate.setOnClickListener(this);
+        viewBinding.tvIncomeType.setOnClickListener(this);
+        RecyclerView rvAddress = viewBinding.recyclerView;
+        LinearLayoutManager manager = new LinearLayoutManager(this);
+        rvAddress.setLayoutManager(manager);
+        mIncomeAdapter = new MineIncomeAdapter();
+        LayoutInflater inflater = LayoutInflater.from(this);
+        View emptyLayout = inflater.inflate(R.layout.layout_empty_conent, null);
+        mIncomeAdapter.setEmptyView(emptyLayout);
+        rvAddress.setAdapter(mIncomeAdapter);
+        mIncomeAdapter.setOnItemClickListener(new OnItemClickListener() {
+            @Override
+            public void onItemClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) {
+
+            }
+        });
+
+    }
+
+    @Override
+    public void initData() {
+        super.initData();
+        viewBinding.refreshLayout.setOnRefreshListener(refreshLayout -> {
+            currentPage = 1;
+            queryList(true);
+        });
+        mIncomeAdapter.getLoadMoreModule().setOnLoadMoreListener(new OnLoadMoreListener() {
+            @Override
+            public void onLoadMore() {
+                //上拉加载
+                if (hasNext) {
+                    currentPage++;
+                    queryList(false);
+                } else {
+                    mIncomeAdapter.getLoadMoreModule().loadMoreEnd();
+                }
+            }
+        });
+        buildDefaultStatusFilterList();
+        reBuildFilter(null, "");
+    }
+
+    private void buildDefaultStatusFilterList() {
+        mFilterStatusBeans = new ArrayList<>();
+        mFilterStatusBeans.add(new IncomeFilterBean("", "全部收入"));
+        mFilterStatusBeans.add(new IncomeFilterBean("PRACTICE", "陪练课"));
+        mFilterStatusBeans.add(new IncomeFilterBean("LIVE", "直播课"));
+        mFilterStatusBeans.add(new IncomeFilterBean("VIDEO", "视频课"));
+        mFilterStatusBeans.add(new IncomeFilterBean("MUSIC", "乐谱"));
+        mFilterStatusBeans.add(new IncomeFilterBean("LIVE_SHARE", "直播课推荐"));
+        mFilterStatusBeans.add(new IncomeFilterBean("VIDEO_SHARE", "视频课推荐"));
+        mFilterStatusBeans.add(new IncomeFilterBean("MUSIC_SHARE", "乐谱推荐"));
+        mFilterStatusBeans.add(new IncomeFilterBean("VIP_SHARE", "小酷Ai推荐"));
+        mFilterStatusBeans.add(new IncomeFilterBean("MALL_SHARE", "商品推荐"));
+
+    }
+
+
+    private void reBuildFilter(Date date, String status) {
+        currentSelectDate = date != null ? date : TimeUtils.getNowDate();
+        String targetDateTimeStr = TimeUtils.date2String(currentSelectDate, TimeUtils.getSafeDateFormat("yyyy-MM"));
+        if (TextUtils.equals(targetDateTimeStr, currentFilterDate) && TextUtils.equals(currentIncomeFilterStatus, status)) {
+            //防止重复条件触发
+            return;
+        }
+        currentFilterDate = targetDateTimeStr;
+        currentIncomeFilterStatus = !TextUtils.isEmpty(status) ? status : "";
+        currentPage = 1;
+        viewBinding.tvDate.setText(currentFilterDate);
+        queryList(true);
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+        if (presenter != null) {
+            presenter.getUserAccountDetail();
+        }
+    }
+
+    private void queryList(boolean isLoading) {
+        presenter.userAccountPage(isLoading, currentPage, currentIncomeFilterStatus, currentFilterDate);
+    }
+
+    @Override
+    protected ActivityPendingAmountLayoutBinding getLayoutView() {
+        return ActivityPendingAmountLayoutBinding.inflate(getLayoutInflater());
+    }
+
+    @Override
+    protected PendingAmountPresenter createPresenter() {
+        return new PendingAmountPresenter();
+    }
+
+    @Override
+    public void userAccountPageSuccess(int page, UserAccountBean data) {
+        if (!checkActivityExist()) {
+            return;
+        }
+        if (data != null) {
+            if (page == 1) {
+                viewBinding.refreshLayout.finishRefresh();
+                mIncomeAdapter.getData().clear();
+                mIncomeAdapter.notifyDataSetChanged();
+                if (data.rows != null && data.rows.size() > 0) {
+                    checkHasNext(data.rows.size());
+                    mIncomeAdapter.setNewInstance(data.rows);
+                }
+            } else {
+                if (data.rows != null && data.rows.size() > 0) {
+                    mIncomeAdapter.getLoadMoreModule().loadMoreComplete();
+                    mIncomeAdapter.addData(data.rows);
+                    checkHasNext(data.rows.size());
+                } else {
+                    mIncomeAdapter.getLoadMoreModule().loadMoreEnd();
+                }
+            }
+        }
+    }
+
+    @Override
+    public void userAccountPageError(int page) {
+        if (!checkActivityExist()) {
+            return;
+        }
+        if (page == 1) {
+            viewBinding.refreshLayout.finishRefresh();
+        } else {
+            if (mIncomeAdapter != null) {
+                currentPage--;
+                mIncomeAdapter.getLoadMoreModule().loadMoreFail();
+            }
+        }
+    }
+
+    @Override
+    public void userAccountDetailSuccess(AccountDetailBean detailBean) {
+        if (!checkActivityExist()) {
+            return;
+        }
+        //待入账金额
+        viewBinding.tvAmountValue.setText(detailBean.amountUnrecorded);
+    }
+
+
+    private boolean hasNext = true;
+
+    /**
+     * 检查是否还有下一页
+     *
+     * @param dataSize
+     */
+    private void checkHasNext(int dataSize) {
+        hasNext = dataSize >= Constants.DEFAULT_DATA_SIZE;
+    }
+
+    private void showTimeSelectPicker() {
+        if (pvTime == null) {
+            pvTime = new TimePickerBuilder(this, (date, v) -> {//选中事件回调
+                reBuildFilter(date, currentIncomeFilterStatus);
+            }).setLayoutRes(com.cooleshow.base.R.layout.pickerview_default_layout, new CustomListener() {
+                @Override
+                public void customLayout(View v) {
+                    //自定义布局中的控件初始化及事件处理
+                    final TextView tvSubmit = (TextView) v.findViewById(com.cooleshow.base.R.id.tv_finish);
+                    TextView ivCancel = (TextView) v.findViewById(com.cooleshow.base.R.id.tv_cancel);
+                    tvSubmit.setOnClickListener(new View.OnClickListener() {
+                        @Override
+                        public void onClick(View v) {
+                            pvTime.returnData();
+                            pvTime.dismiss();
+                        }
+                    });
+                    ivCancel.setOnClickListener(new View.OnClickListener() {
+                        @Override
+                        public void onClick(View v) {
+                            pvTime.dismiss();
+                        }
+                    });
+
+                }
+            })
+                    .setLineSpacingMultiplier(2.5f)
+                    .setType(new boolean[]{true, true, false, false, false, false})// 默认全部显示
+                    .setTextColorCenter(getResources().getColor(com.cooleshow.base.R.color.color_1a1a1a))//设置选中项的颜色
+                    .isDialog(false)//是否显示为对话框样式
+                    .setLabel("年", "月", "", "", "", "")
+                    .build();
+        }
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(currentSelectDate);
+        pvTime.setDate(calendar);
+        if (!pvTime.isShowing()) {
+            pvTime.show();
+        }
+    }
+
+    private void showIncomeTypeFilter() {
+        if (mIncomeTypeSelector == null) {
+            mIncomeTypeSelector = new OptionsPickerBuilder(this, new OnOptionsSelectListener() {
+                @Override
+                public void onOptionsSelect(int options1, int option2, int options3, View v) {
+                    //返回的分别是三个级别的选中位置
+                    if (options1 < mFilterStatusBeans.size()) {
+                        IncomeFilterBean incomeFilterBean = mFilterStatusBeans.get(options1);
+                        viewBinding.tvIncomeType.setText(incomeFilterBean.showText);
+                        reBuildFilter(currentSelectDate, incomeFilterBean.value);
+                    }
+                }
+            }).setLayoutRes(com.cooleshow.base.R.layout.pickerview_options_default_layout, new CustomListener() {
+                @Override
+                public void customLayout(View v) {
+                    //自定义布局中的控件初始化及事件处理
+                    final TextView tvSubmit = (TextView) v.findViewById(R.id.tv_finish);
+                    TextView ivCancel = (TextView) v.findViewById(R.id.tv_cancel);
+                    tvSubmit.setOnClickListener(new View.OnClickListener() {
+                        @Override
+                        public void onClick(View v) {
+                            mIncomeTypeSelector.returnData();
+                            mIncomeTypeSelector.dismiss();
+                        }
+                    });
+                    ivCancel.setOnClickListener(new View.OnClickListener() {
+                        @Override
+                        public void onClick(View v) {
+                            mIncomeTypeSelector.dismiss();
+                        }
+                    });
+                }
+            })
+                    .setLineSpacingMultiplier(2.5f)
+                    .isCenterLabel(false) //是否只显示中间选中项的label文字,false则每项item全部都带有label。
+                    .setLabels("", "", "")
+                    .build();
+            mIncomeTypeSelector.setPicker(mFilterStatusBeans);//一级选择器*/
+        }
+        if (!mIncomeTypeSelector.isShowing()) {
+            mIncomeTypeSelector.show();
+        }
+    }
+
+    @Override
+    public void onClick(View v) {
+        int id = v.getId();
+        if (id == R.id.tv_date) {
+            showTimeSelectPicker();
+            return;
+        }
+        if (id == R.id.tv_income_type) {
+            showIncomeTypeFilter();
+            return;
+        }
+    }
+}

BIN
teacher/src/main/res/drawable-xhdpi/icon_frozen_amount_list.png


BIN
teacher/src/main/res/drawable-xhdpi/icon_frozen_amount_tip.png


BIN
teacher/src/main/res/drawable-xhdpi/icon_frozen_amount_top.png


BIN
teacher/src/main/res/drawable-xhdpi/icon_income_top_bg.png


BIN
teacher/src/main/res/drawable-xhdpi/icon_pending_amount_tip.png


BIN
teacher/src/main/res/drawable-xhdpi/icon_pending_amount_top.png


BIN
teacher/src/main/res/drawable-xxhdpi/icon_frozen_amount_list.png


BIN
teacher/src/main/res/drawable-xxhdpi/icon_frozen_amount_tip.png


BIN
teacher/src/main/res/drawable-xxhdpi/icon_frozen_amount_top.png


BIN
teacher/src/main/res/drawable-xxhdpi/icon_income_top_bg.png


BIN
teacher/src/main/res/drawable-xxhdpi/icon_pending_amount_tip.png


BIN
teacher/src/main/res/drawable-xxhdpi/icon_pending_amount_top.png


+ 7 - 0
teacher/src/main/res/drawable/shape_bg_frozen_amount_top.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <gradient android:startColor="@color/color_bde6ff"
+        android:angle="-90"
+        android:endColor="@color/color_a1d6ff"/>
+    <corners android:radius="10dp"/>
+</shape>

+ 7 - 0
teacher/src/main/res/drawable/shape_bg_pending_amount_top.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <gradient android:startColor="@color/color_a7fcf2"
+        android:angle="-90"
+        android:endColor="@color/color_69eed5"/>
+    <corners android:radius="10dp"/>
+</shape>

+ 115 - 0
teacher/src/main/res/layout/activity_frozen_amount_layout.xml

@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <include
+        android:id="@+id/toolbar_include"
+        layout="@layout/common_toolbar_layout"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <View
+        android:id="@+id/view_top"
+        android:layout_width="match_parent"
+        android:layout_height="92dp"
+        android:layout_marginStart="14dp"
+        android:layout_marginTop="10dp"
+        android:layout_marginEnd="14dp"
+        android:background="@drawable/shape_bg_frozen_amount_top"
+        app:layout_constraintTop_toBottomOf="@+id/toolbar_include" />
+
+    <TextView
+        android:id="@+id/tv_amount_value"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="20dp"
+        android:layout_marginTop="20dp"
+        android:includeFontPadding="false"
+        android:text="0"
+        android:textColor="@color/color_225791"
+        android:textSize="@dimen/sp_28"
+        android:textStyle="bold"
+        app:layout_constraintLeft_toLeftOf="@+id/view_top"
+        app:layout_constraintTop_toTopOf="@+id/view_top"
+        tools:text="280.00" />
+
+    <TextView
+        android:gravity="center"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="6dp"
+        android:drawableLeft="@drawable/icon_frozen_amount_tip"
+        android:drawablePadding="4dp"
+        android:includeFontPadding="false"
+        android:text="冻结金额(元)"
+        android:textColor="@color/color_225791"
+        android:textSize="@dimen/sp_13"
+        app:layout_constraintLeft_toLeftOf="@+id/tv_amount_value"
+        app:layout_constraintTop_toBottomOf="@+id/tv_amount_value" />
+
+    <ImageView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginEnd="10dp"
+        android:src="@drawable/icon_frozen_amount_top"
+        app:layout_constraintBottom_toBottomOf="@+id/view_top"
+        app:layout_constraintRight_toRightOf="@+id/view_top"
+        app:layout_constraintTop_toTopOf="@+id/view_top" />
+
+
+    <RelativeLayout
+        android:id="@+id/rl_filter"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        app:layout_constraintTop_toBottomOf="@+id/view_top">
+
+        <TextView
+            android:id="@+id/tv_date"
+            android:layout_width="wrap_content"
+            android:layout_height="@dimen/dp_40"
+            android:layout_marginLeft="14dp"
+            android:drawableRight="@drawable/icon_arrow_down"
+            android:drawablePadding="5dp"
+            android:gravity="center"
+            android:text="2021年9月"
+            android:textColor="@color/black_333"
+            android:textSize="@dimen/sp_14" />
+
+        <TextView
+            android:id="@+id/tv_income_type"
+            android:layout_width="wrap_content"
+            android:layout_height="@dimen/dp_50"
+            android:layout_marginLeft="145dp"
+            android:drawableRight="@drawable/icon_arrow_down"
+            android:gravity="center"
+            android:text="全部收入"
+            android:textColor="@color/black_333"
+            android:textSize="@dimen/sp_14"
+            android:visibility="gone" />
+    </RelativeLayout>
+
+    <com.scwang.smart.refresh.layout.SmartRefreshLayout
+        android:id="@+id/refreshLayout"
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/rl_filter">
+
+        <com.scwang.smart.refresh.header.ClassicsHeader
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content" />
+
+        <androidx.recyclerview.widget.RecyclerView
+            android:id="@+id/recyclerView"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:overScrollMode="never"
+            android:scrollbars="none" />
+    </com.scwang.smart.refresh.layout.SmartRefreshLayout>
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 117 - 15
teacher/src/main/res/layout/activity_mine_income.xml

@@ -1,9 +1,11 @@
 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:orientation="vertical">
+
     <include
         android:id="@+id/toolbar_include"
         layout="@layout/common_toolbar_layout" />
@@ -19,40 +21,140 @@
         <TextView
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:layout_marginLeft="21dp"
-            android:layout_marginTop="40dp"
-            android:text="钱包余额(元)"
+            android:layout_marginTop="5dp"
+            android:includeFontPadding="false"
+            android:text="收益金额(元)"
             android:textColor="@color/white"
-            android:textSize="@dimen/sp_15"
-            app:layout_constraintLeft_toLeftOf="parent"
-            app:layout_constraintTop_toTopOf="parent" />
+            android:textSize="@dimen/sp_14"
+            app:layout_constraintLeft_toLeftOf="@+id/tv_balance"
+            app:layout_constraintTop_toBottomOf="@+id/tv_balance" />
 
 
         <TextView
             android:id="@+id/tv_balance"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:layout_marginLeft="21dp"
-            android:layout_marginBottom="40dp"
+            android:layout_marginLeft="18dp"
+            android:layout_marginTop="14dp"
+            android:includeFontPadding="false"
             android:text="1,230.00"
             android:textColor="@color/white"
-            android:textSize="@dimen/sp_30"
-            app:layout_constraintBottom_toBottomOf="parent"
-            app:layout_constraintLeft_toLeftOf="parent" />
+            android:textSize="@dimen/sp_26"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
 
         <TextView
             android:id="@+id/tv_withdrawal"
             android:layout_width="@dimen/dp_80"
             android:layout_height="@dimen/dp_32"
-            android:layout_marginTop="51dp"
-            android:layout_marginRight="22dp"
+            android:layout_marginTop="26dp"
+            android:layout_marginRight="26dp"
             android:background="@drawable/bg_white_border"
             android:gravity="center"
-            android:text="结算"
+            android:text="提现"
             android:textColor="@color/white"
             android:textSize="@dimen/sp_16"
             app:layout_constraintRight_toRightOf="parent"
             app:layout_constraintTop_toTopOf="parent" />
+
+        <View
+            android:id="@+id/view_bottom_bg"
+            android:layout_width="match_parent"
+            android:layout_height="44dp"
+            android:background="@drawable/shape_bottom_10dp_0f000000"
+            app:layout_constraintBottom_toBottomOf="parent" />
+
+        <View
+            android:id="@+id/view_frozen_amount"
+            android:layout_width="0dp"
+            android:layout_height="0dp"
+            app:layout_constraintBottom_toBottomOf="@+id/view_bottom_bg"
+            app:layout_constraintLeft_toLeftOf="@+id/view_bottom_bg"
+            app:layout_constraintRight_toLeftOf="@+id/view_bottom_center_line"
+            app:layout_constraintTop_toTopOf="@+id/view_bottom_bg" />
+
+        <View
+            android:id="@+id/view_pending_amount"
+            android:layout_width="0dp"
+            android:layout_height="0dp"
+            app:layout_constraintBottom_toBottomOf="@+id/view_bottom_bg"
+            app:layout_constraintLeft_toRightOf="@+id/view_frozen_amount"
+            app:layout_constraintRight_toRightOf="@+id/view_bottom_bg"
+            app:layout_constraintTop_toTopOf="@+id/view_bottom_bg" />
+
+        <TextView
+            android:id="@+id/tv_freeze_amount_title"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="24dp"
+            android:text="冻结金额"
+            android:textColor="@color/white"
+            android:textSize="@dimen/sp_14"
+            app:layout_constraintBottom_toBottomOf="@+id/view_bottom_bg"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintTop_toTopOf="@+id/view_bottom_bg" />
+
+        <TextView
+            android:id="@+id/tv_freeze_amount_value"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_marginEnd="10dp"
+            android:ellipsize="end"
+            android:includeFontPadding="false"
+            android:maxLines="1"
+            android:paddingStart="5dp"
+            android:text="0"
+            android:textColor="@color/white"
+            android:textSize="@dimen/sp_16"
+            android:textStyle="bold"
+            app:layout_constraintBottom_toBottomOf="@+id/tv_freeze_amount_title"
+            app:layout_constraintLeft_toRightOf="@+id/tv_freeze_amount_title"
+            app:layout_constraintRight_toLeftOf="@+id/view_bottom_center_line"
+            app:layout_constraintTop_toTopOf="@+id/tv_freeze_amount_title"
+            tools:text="290.0" />
+
+        <View
+            android:id="@+id/view_bottom_center_line"
+            android:layout_width="1dp"
+            android:layout_height="16dp"
+            android:background="@color/white"
+            app:layout_constraintBottom_toBottomOf="@+id/view_bottom_bg"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintRight_toRightOf="parent"
+            app:layout_constraintTop_toTopOf="@+id/view_bottom_bg" />
+
+
+        <TextView
+            android:id="@+id/tv_pending_amount_title"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="24dp"
+            android:text="待入账金额"
+            android:textColor="@color/white"
+            android:textSize="@dimen/sp_14"
+            app:layout_constraintBottom_toBottomOf="@+id/view_bottom_bg"
+            app:layout_constraintLeft_toRightOf="@+id/view_bottom_center_line"
+            app:layout_constraintTop_toTopOf="@+id/view_bottom_bg" />
+
+        <TextView
+            android:id="@+id/tv_pending_amount_value"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_marginEnd="10dp"
+            android:ellipsize="end"
+            android:includeFontPadding="false"
+            android:maxLines="1"
+            android:paddingStart="5dp"
+            android:text="0"
+            android:textColor="@color/white"
+            android:textSize="@dimen/sp_16"
+            android:textStyle="bold"
+            app:layout_constraintBottom_toBottomOf="@+id/tv_pending_amount_title"
+            app:layout_constraintLeft_toRightOf="@+id/tv_pending_amount_title"
+            app:layout_constraintRight_toRightOf="parent"
+            app:layout_constraintTop_toTopOf="@+id/tv_pending_amount_title"
+            tools:text="290.0" />
+
     </androidx.constraintlayout.widget.ConstraintLayout>
 
     <RelativeLayout
@@ -64,8 +166,8 @@
             android:layout_width="wrap_content"
             android:layout_height="@dimen/dp_50"
             android:layout_marginLeft="14dp"
-            android:drawablePadding="5dp"
             android:drawableRight="@drawable/icon_arrow_down"
+            android:drawablePadding="5dp"
             android:gravity="center"
             android:text="2021年9月"
             android:textColor="@color/black_333"

+ 115 - 0
teacher/src/main/res/layout/activity_pending_amount_layout.xml

@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <include
+        android:id="@+id/toolbar_include"
+        layout="@layout/common_toolbar_layout"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <View
+        android:id="@+id/view_top"
+        android:layout_width="match_parent"
+        android:layout_height="92dp"
+        android:layout_marginStart="14dp"
+        android:layout_marginTop="10dp"
+        android:layout_marginEnd="14dp"
+        android:background="@drawable/shape_bg_pending_amount_top"
+        app:layout_constraintTop_toBottomOf="@+id/toolbar_include" />
+
+    <TextView
+        android:id="@+id/tv_amount_value"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="20dp"
+        android:layout_marginTop="20dp"
+        android:includeFontPadding="false"
+        android:text="0"
+        android:textColor="@color/color_00876e"
+        android:textSize="@dimen/sp_28"
+        android:textStyle="bold"
+        app:layout_constraintLeft_toLeftOf="@+id/view_top"
+        app:layout_constraintTop_toTopOf="@+id/view_top"
+        tools:text="280.00" />
+
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="6dp"
+        android:drawableLeft="@drawable/icon_pending_amount_tip"
+        android:drawablePadding="4dp"
+        android:gravity="center"
+        android:includeFontPadding="false"
+        android:text="待入账金额(元)"
+        android:textColor="@color/color_00876e"
+        android:textSize="@dimen/sp_13"
+        app:layout_constraintLeft_toLeftOf="@+id/tv_amount_value"
+        app:layout_constraintTop_toBottomOf="@+id/tv_amount_value" />
+
+    <ImageView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginEnd="10dp"
+        android:src="@drawable/icon_pending_amount_top"
+        app:layout_constraintBottom_toBottomOf="@+id/view_top"
+        app:layout_constraintRight_toRightOf="@+id/view_top"
+        app:layout_constraintTop_toTopOf="@+id/view_top" />
+
+
+    <RelativeLayout
+        android:id="@+id/rl_filter"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        app:layout_constraintTop_toBottomOf="@+id/view_top">
+
+        <TextView
+            android:id="@+id/tv_date"
+            android:layout_width="wrap_content"
+            android:layout_height="@dimen/dp_40"
+            android:layout_marginLeft="14dp"
+            android:drawableRight="@drawable/icon_arrow_down"
+            android:drawablePadding="5dp"
+            android:gravity="center"
+            android:text="2021年9月"
+            android:textColor="@color/black_333"
+            android:textSize="@dimen/sp_14" />
+
+        <TextView
+            android:id="@+id/tv_income_type"
+            android:layout_width="wrap_content"
+            android:layout_height="@dimen/dp_40"
+            android:layout_marginLeft="145dp"
+            android:drawableRight="@drawable/icon_arrow_down"
+            android:gravity="center"
+            android:text="全部类型"
+            android:textColor="@color/black_333"
+            android:textSize="@dimen/sp_14"
+            android:visibility="visible" />
+    </RelativeLayout>
+
+    <com.scwang.smart.refresh.layout.SmartRefreshLayout
+        android:id="@+id/refreshLayout"
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/rl_filter">
+
+        <com.scwang.smart.refresh.header.ClassicsHeader
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content" />
+
+        <androidx.recyclerview.widget.RecyclerView
+            android:id="@+id/recyclerView"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:overScrollMode="never"
+            android:scrollbars="none" />
+    </com.scwang.smart.refresh.layout.SmartRefreshLayout>
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 5 - 3
teacher/src/main/res/layout/layout_empty_conent.xml

@@ -1,8 +1,10 @@
 <?xml version="1.0" encoding="utf-8"?>
-<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
-    android:layout_height="wrap_content">
+    android:orientation="vertical"
+    android:gravity="center"
+    android:layout_height="match_parent">
 
 
     <ImageView
@@ -29,4 +31,4 @@
         app:layout_constraintRight_toRightOf="parent"
         app:layout_constraintTop_toBottomOf="@+id/im_empty_logo" />
 
-</androidx.constraintlayout.widget.ConstraintLayout>
+</LinearLayout>

+ 88 - 0
teacher/src/main/res/layout/layout_other_amount_list_item.xml

@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical">
+
+    <TextView
+        android:id="@+id/tv_time"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginLeft="14dp"
+        android:layout_marginTop="11dp"
+        android:text="--"
+        android:textColor="@color/color_999999"
+        android:textSize="@dimen/sp_14"
+        android:visibility="gone" />
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/dp_82"
+        android:layout_marginLeft="14dp"
+        android:layout_marginTop="10dp"
+        android:layout_marginRight="14dp"
+        android:layout_marginBottom="2dp"
+        android:background="@drawable/bg_white_10dp">
+
+        <ImageView
+            android:id="@+id/im_state"
+            android:layout_width="@dimen/dp_42"
+            android:layout_height="@dimen/dp_42"
+            android:layout_marginLeft="13dp"
+            android:background="@drawable/icon_frozen_amount_list"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <TextView
+            android:id="@+id/tv_name"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="13dp"
+            android:includeFontPadding="false"
+            android:text="李晓明"
+            android:textColor="@color/color_1a1a1a"
+            android:textSize="@dimen/sp_16"
+            android:textStyle="bold"
+            app:layout_constraintLeft_toRightOf="@+id/im_state"
+            app:layout_constraintTop_toTopOf="@+id/im_state" />
+
+
+        <ImageView
+            android:id="@+id/im_clock"
+            android:layout_width="@dimen/dp_16"
+            android:layout_height="@dimen/dp_16"
+            android:layout_marginLeft="13dp"
+            android:background="@drawable/icon_clock"
+            app:layout_constraintBottom_toBottomOf="@+id/im_state"
+            app:layout_constraintLeft_toRightOf="@+id/im_state" />
+
+        <TextView
+            android:id="@+id/tv_date"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="7dp"
+            android:text="2021/09/17 14:00~14:25"
+            android:textColor="@color/color_666666"
+            android:textSize="@dimen/sp_13"
+            app:layout_constraintBottom_toBottomOf="@+id/im_clock"
+            app:layout_constraintLeft_toRightOf="@+id/im_clock"
+            app:layout_constraintTop_toTopOf="@+id/im_clock" />
+
+
+        <TextView
+            android:id="@+id/tv_price"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="18dp"
+            android:layout_marginRight="13dp"
+            android:text="¥20"
+            android:textColor="@color/color_ff4e19"
+            android:textSize="@dimen/sp_18"
+            android:textStyle="bold"
+            app:layout_constraintRight_toRightOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+</LinearLayout>