Browse Source

增加创建机构群筛选流程

Pq 1 year ago
parent
commit
43596f247f

File diff suppressed because it is too large
+ 19 - 0
BaseLibrary/src/main/java/com/cooleshow/base/bean/SubjectListBean.java


+ 212 - 0
BaseLibrary/src/main/java/com/cooleshow/base/bean/TenantGroupListBean.java

@@ -0,0 +1,212 @@
+package com.cooleshow.base.bean;
+
+import com.cooleshow.base.iml.ICommonFilterData;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Author by pq, Date on 2023/10/17.
+ */
+public class TenantGroupListBean {
+
+    /**
+     * current : 1
+     * extra : null
+     * limit : 2147483647
+     * next : false
+     * pages : 1
+     * prev : false
+     * rows : [{"adminId":8679,"createBy":5613,"createTime":"2023-10-11 17:07:04","groupUserCount":0,"id":1,"imGroupExist":false,"imGroupId":"","name":"001","tenantId":1000000,"userIds":[]},{"adminId":8679,"createBy":5613,"createTime":"2023-10-11 17:08:15","groupUserCount":1,"id":2,"imGroupExist":false,"imGroupId":"1712032357211033601:ORG","name":"002","tenantId":1000000,"userIds":[]},{"adminId":8679,"createBy":5613,"createTime":"2023-10-11 17:09:33","groupUserCount":3,"id":3,"imGroupExist":false,"imGroupId":"1712032683473358850:ORG","name":"002\u20143","tenantId":1000000,"userIds":[]},{"adminId":8679,"createBy":5613,"createTime":"2023-10-11 17:13:01","groupUserCount":0,"id":4,"imGroupExist":false,"imGroupId":"1712033557503397889:ORG","name":"002\u20142","tenantId":1000000,"userIds":[]}]
+     * total : 4
+     */
+
+    private int current;
+    private Object extra;
+    private int limit;
+    private boolean next;
+    private int pages;
+    private boolean prev;
+    private int total;
+    private ArrayList<RowsBean> rows;
+
+    public int getCurrent() {
+        return current;
+    }
+
+    public void setCurrent(int current) {
+        this.current = current;
+    }
+
+    public Object getExtra() {
+        return extra;
+    }
+
+    public void setExtra(Object extra) {
+        this.extra = extra;
+    }
+
+    public int getLimit() {
+        return limit;
+    }
+
+    public void setLimit(int limit) {
+        this.limit = limit;
+    }
+
+    public boolean isNext() {
+        return next;
+    }
+
+    public void setNext(boolean next) {
+        this.next = next;
+    }
+
+    public int getPages() {
+        return pages;
+    }
+
+    public void setPages(int pages) {
+        this.pages = pages;
+    }
+
+    public boolean isPrev() {
+        return prev;
+    }
+
+    public void setPrev(boolean prev) {
+        this.prev = prev;
+    }
+
+    public int getTotal() {
+        return total;
+    }
+
+    public void setTotal(int total) {
+        this.total = total;
+    }
+
+    public ArrayList<RowsBean> getRows() {
+        return rows;
+    }
+
+    public void setRows(ArrayList<RowsBean> rows) {
+        this.rows = rows;
+    }
+
+    public static class RowsBean implements ICommonFilterData {
+        /**
+         * adminId : 8679
+         * createBy : 5613
+         * createTime : 2023-10-11 17:07:04
+         * groupUserCount : 0
+         * id : 1
+         * imGroupExist : false
+         * imGroupId :
+         * name : 001
+         * tenantId : 1000000
+         * userIds : []
+         */
+
+        private String adminId;
+        private String createBy;
+        private String createTime;
+        private String groupUserCount;
+        private String id;
+        private boolean imGroupExist;
+        private String imGroupId;
+        private String name;
+        private String tenantId;
+        private List<String> userIds;
+
+        public String getAdminId() {
+            return adminId;
+        }
+
+        public void setAdminId(String adminId) {
+            this.adminId = adminId;
+        }
+
+        public String getCreateBy() {
+            return createBy;
+        }
+
+        public void setCreateBy(String createBy) {
+            this.createBy = createBy;
+        }
+
+        public String getCreateTime() {
+            return createTime;
+        }
+
+        public void setCreateTime(String createTime) {
+            this.createTime = createTime;
+        }
+
+        public String getGroupUserCount() {
+            return groupUserCount;
+        }
+
+        public void setGroupUserCount(String groupUserCount) {
+            this.groupUserCount = groupUserCount;
+        }
+
+        public String getId() {
+            return id;
+        }
+
+        public void setId(String id) {
+            this.id = id;
+        }
+
+        public boolean isImGroupExist() {
+            return imGroupExist;
+        }
+
+        public void setImGroupExist(boolean imGroupExist) {
+            this.imGroupExist = imGroupExist;
+        }
+
+        public String getImGroupId() {
+            return imGroupId;
+        }
+
+        public void setImGroupId(String imGroupId) {
+            this.imGroupId = imGroupId;
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public String getTenantId() {
+            return tenantId;
+        }
+
+        public void setTenantId(String tenantId) {
+            this.tenantId = tenantId;
+        }
+
+        public List<String> getUserIds() {
+            return userIds;
+        }
+
+        public void setUserIds(List<String> userIds) {
+            this.userIds = userIds;
+        }
+
+        @Override
+        public String getText() {
+            return getName();
+        }
+
+        @Override
+        public String getFilterId() {
+            return getId();
+        }
+    }
+}

+ 10 - 0
BaseLibrary/src/main/java/com/cooleshow/base/iml/ICommonFilterData.java

@@ -0,0 +1,10 @@
+package com.cooleshow.base.iml;
+
+/**
+ * Author by pq, Date on 2023/10/17.
+ */
+public interface ICommonFilterData {
+    String getText();
+
+    String getFilterId();
+}

+ 5 - 0
BaseLibrary/src/main/res/drawable/shape_24dp_border_2dc7aa_1dp.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <stroke android:width="1dp" android:color="@color/color_2dc7aa"/>
+    <corners android:radius="24dp"/>
+</shape>

+ 6 - 0
BaseLibrary/src/main/res/drawable/shape_f0fffc_16dp_border_2dc7aa_1dp.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="#F0FFFC"/>
+    <corners android:radius="16dp"/>
+    <stroke android:color="@color/color_2dc7aa" android:width="1dp"/>
+</shape>

+ 5 - 0
BaseLibrary/src/main/res/drawable/shape_f2f2f2_16dp.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="@color/color_f2f2f2"/>
+    <corners android:radius="16dp"/>
+</shape>

+ 6 - 0
teacher/src/main/java/com/cooleshow/teacher/adapter/SelectTenantMemberAdapter.java

@@ -42,6 +42,12 @@ public class SelectTenantMemberAdapter extends BaseQuickAdapter<StudentPageListB
         notifyItemChanged(pos);
     }
 
+    public void addSelects(ArrayList<StudentPageListBean.RowsBean> list) {
+        selectMembers.clear();
+        selectMembers.addAll(list);
+        notifyDataSetChanged();
+    }
+
     private int isContain(String targetId) {
         for (int i = 0; i < selectMembers.size(); i++) {
             StudentPageListBean.RowsBean rowsBean = selectMembers.get(i);

+ 65 - 0
teacher/src/main/java/com/cooleshow/teacher/adapter/SelectTenantMemberFilterAdapter.java

@@ -0,0 +1,65 @@
+package com.cooleshow.teacher.adapter;
+
+import android.text.TextUtils;
+import android.widget.TextView;
+
+import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.chad.library.adapter.base.viewholder.BaseViewHolder;
+import com.cooleshow.base.bean.SubjectListBean;
+import com.cooleshow.base.iml.ICommonFilterData;
+import com.cooleshow.base.presenter.view.BaseView;
+import com.cooleshow.teacher.R;
+
+import java.util.ArrayList;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+
+/**
+ * Author by pq, Date on 2023/10/17.
+ */
+public class SelectTenantMemberFilterAdapter extends BaseQuickAdapter<ICommonFilterData, BaseViewHolder> {
+    private ArrayList<String> selectIds;
+
+
+    public SelectTenantMemberFilterAdapter() {
+        super(R.layout.item_common_filter_layout);
+        selectIds = new ArrayList<>();
+    }
+
+    public void clearSelect() {
+        selectIds.clear();
+        notifyDataSetChanged();
+    }
+
+    public ArrayList<String> getSelectList() {
+        return selectIds;
+    }
+
+    public void setSelectId(String id) {
+        if (isContain(id)) {
+            selectIds.remove(id);
+        } else {
+            selectIds.add(id);
+        }
+        notifyDataSetChanged();
+    }
+
+    @Override
+    protected void convert(@NonNull BaseViewHolder holder, ICommonFilterData rowsBean) {
+        TextView tv_text = holder.getView(R.id.tv_text);
+        tv_text.setSelected(isContain(rowsBean.getFilterId()));
+        tv_text.setText(rowsBean.getText());
+    }
+
+    private boolean isContain(String id) {
+        for (int i = 0; i < selectIds.size(); i++) {
+            String s = selectIds.get(i);
+            if (TextUtils.equals(s, id)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+}

+ 8 - 0
teacher/src/main/java/com/cooleshow/teacher/api/APIService.java

@@ -2,6 +2,8 @@ package com.cooleshow.teacher.api;
 
 import com.cooleshow.base.bean.CommonCourseConfigBean;
 import com.cooleshow.base.bean.QueryParamsConfigBean;
+import com.cooleshow.base.bean.SubjectListBean;
+import com.cooleshow.base.bean.TenantGroupListBean;
 import com.cooleshow.base.data.net.BaseResponse;
 import com.cooleshow.chatmodule.bean.ContactRoomListBean;
 import com.cooleshow.teacher.bean.AwardStatusBean;
@@ -835,4 +837,10 @@ public interface APIService {
 
     @GET(TEACHER_GROUP+"courseSchedule/selectRoomConfig")
     Observable<BaseResponse<CommonCourseConfigBean>> getCourseConfig();
+
+    @GET(TEACHER_GROUP+"open/subject/queryPage")
+    Observable<BaseResponse<SubjectListBean>> getSubjectList(@Query("queryType") String queryType, @Query("page") int page, @Query("rows") int rows);
+
+    @POST(TEACHER_GROUP+"tenantGroup/page")
+    Observable<BaseResponse<TenantGroupListBean>> getTenantGroupList(@Body RequestBody body);
 }

+ 7 - 0
teacher/src/main/java/com/cooleshow/teacher/contract/SelectTenantMemberContract.java

@@ -1,5 +1,7 @@
 package com.cooleshow.teacher.contract;
 
+import com.cooleshow.base.bean.SubjectListBean;
+import com.cooleshow.base.bean.TenantGroupListBean;
 import com.cooleshow.base.presenter.view.BaseView;
 import com.cooleshow.base.bean.StudentPageListBean;
 
@@ -13,6 +15,11 @@ public interface SelectTenantMemberContract {
     interface SelectTenantView extends BaseView {
 
         void getStudentListSuccess(StudentPageListBean data);
+
+        void getSubjectListSuccess(SubjectListBean data);
+
+        void getTenantGroupListSuccess(TenantGroupListBean data);
+
     }
     interface Presenter {
     }

+ 31 - 0
teacher/src/main/java/com/cooleshow/teacher/presenter/mine/SelectTenantMemberPresenter.java

@@ -1,5 +1,7 @@
 package com.cooleshow.teacher.presenter.mine;
 
+import com.cooleshow.base.bean.SubjectListBean;
+import com.cooleshow.base.bean.TenantGroupListBean;
 import com.cooleshow.base.presenter.BasePresenter;
 import com.cooleshow.base.rx.BaseObserver;
 import com.cooleshow.base.utils.RequestBodyUtil;
@@ -38,4 +40,33 @@ public class SelectTenantMemberPresenter extends BasePresenter<SelectTenantMembe
             }
         });
     }
+
+    public void getSubjectList(){
+        addSubscribe(create(APIService.class).getSubjectList("list",1,Integer.MAX_VALUE), new BaseObserver<SubjectListBean>(getView()) {
+            @Override
+            protected void onSuccess(SubjectListBean data) {
+                if (getView() != null) {
+                    getView().getSubjectListSuccess(data);
+                }
+            }
+        });
+    }
+
+    public void getTenantGroupList(){
+        JSONObject jsonObject =new JSONObject();
+        try {
+            jsonObject.put("page",1);
+            jsonObject.put("rows",Integer.MAX_VALUE);
+        } catch (JSONException e) {
+            throw new RuntimeException(e);
+        }
+        addSubscribe(create(APIService.class).getTenantGroupList(RequestBodyUtil.convertToRequestBodyJson(jsonObject.toString())), new BaseObserver<TenantGroupListBean>(getView()) {
+            @Override
+            protected void onSuccess(TenantGroupListBean data) {
+                if (getView() != null) {
+                    getView().getTenantGroupListSuccess(data);
+                }
+            }
+        });
+    }
 }

+ 114 - 0
teacher/src/main/java/com/cooleshow/teacher/ui/mine/SelectTenantMemberActivity.java

@@ -10,6 +10,8 @@ import android.view.View;
 import com.alibaba.android.arouter.facade.annotation.Route;
 import com.chad.library.adapter.base.BaseQuickAdapter;
 import com.chad.library.adapter.base.listener.OnItemClickListener;
+import com.cooleshow.base.bean.SubjectListBean;
+import com.cooleshow.base.bean.TenantGroupListBean;
 import com.cooleshow.base.router.RouterPath;
 import com.cooleshow.base.ui.activity.BaseMVPActivity;
 import com.cooleshow.base.utils.SizeUtils;
@@ -26,6 +28,7 @@ import com.cooleshow.base.bean.StudentPageListBean;
 import com.cooleshow.teacher.contract.SelectTenantMemberContract;
 import com.cooleshow.teacher.databinding.AcSelectTenantMemberLayoutBinding;
 import com.cooleshow.teacher.presenter.mine.SelectTenantMemberPresenter;
+import com.cooleshow.teacher.widgets.dialog.SelectTenantMemberFilterBottomDialog;
 import com.scwang.smart.refresh.layout.api.RefreshLayout;
 import com.scwang.smart.refresh.layout.listener.OnRefreshListener;
 
@@ -47,6 +50,9 @@ public class SelectTenantMemberActivity extends BaseMVPActivity<AcSelectTenantMe
     private SelectTenantMemberAdapter mMemberAdapter;
     private CustomSuspensionDecoration mDecoration;
     private ArrayList<GroupMemberBean> mFilterList;
+    private ArrayList<SubjectListBean.RowsBean> subjectList;
+    private ArrayList<TenantGroupListBean.RowsBean> groupList;
+    private SelectTenantMemberFilterBottomDialog mFilterDialog;
 
 
     @Override
@@ -65,6 +71,14 @@ public class SelectTenantMemberActivity extends BaseMVPActivity<AcSelectTenantMe
         super.initData();
         ArrayList<StudentPageListBean.RowsBean> list = getIntent().getParcelableArrayListExtra("list");
         mFilterList = getIntent().getParcelableArrayListExtra("filterList");
+
+        viewBinding.toolbarInclude.tvRightText.setText("筛选");
+        viewBinding.toolbarInclude.tvRightText.setVisibility(View.VISIBLE);
+        viewBinding.toolbarInclude.tvRightText.setCompoundDrawablePadding(SizeUtils.dp2px(4));
+        viewBinding.toolbarInclude.tvRightText.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.icon_arrow_down, 0);
+        viewBinding.toolbarInclude.tvRightText.setTextColor(getResources().getColor(com.cooleshow.base.R.color.common_black));
+        viewBinding.toolbarInclude.tvRightText.setOnClickListener(this);
+
         mMemberAdapter = new SelectTenantMemberAdapter(list);
         EmptyViewLayout emptyViewLayout = new EmptyViewLayout(this);
         emptyViewLayout.setContent(R.drawable.icon_empty_content, "暂无学员");
@@ -97,6 +111,40 @@ public class SelectTenantMemberActivity extends BaseMVPActivity<AcSelectTenantMe
         presenter.getTenantStudentList();
     }
 
+    private void showFilterDialog() {
+        if (subjectList == null) {
+            presenter.getTenantStudentList();
+            return;
+        }
+        if (groupList == null) {
+            presenter.getTenantGroupList();
+            return;
+        }
+        if (mFilterDialog == null) {
+            mFilterDialog = new SelectTenantMemberFilterBottomDialog(this);
+            mFilterDialog.setOnEventListener(new SelectTenantMemberFilterBottomDialog.OnEventListener() {
+                @Override
+                public void onCheckResult(ArrayList<String> subjectIds, ArrayList<String> groupList) {
+                    ArrayList<StudentPageListBean.RowsBean> bySubjectId = findBySubjectId(subjectIds);
+                    ArrayList<StudentPageListBean.RowsBean> byGroupId = findByGroupId(groupList);
+                    ArrayList<StudentPageListBean.RowsBean> result = new ArrayList<>();
+                    if (bySubjectId != null) {
+                        result.addAll(bySubjectId);
+                    }
+                    if (byGroupId != null) {
+                        result.addAll(byGroupId);
+                    }
+                    mMemberAdapter.addSelects(result);
+                }
+            });
+        }
+        if (!mFilterDialog.isShowing()) {
+            mFilterDialog.show();
+        }
+        mFilterDialog.setSubjectList(subjectList);
+        mFilterDialog.setGroupList(groupList);
+    }
+
     private void initListener() {
         viewBinding.tvConfirm.setOnClickListener(this);
         mMemberAdapter.setOnItemClickListener(new OnItemClickListener() {
@@ -112,11 +160,20 @@ public class SelectTenantMemberActivity extends BaseMVPActivity<AcSelectTenantMe
             @Override
             public void onRefresh(@NonNull RefreshLayout refreshLayout) {
                 getData();
+                presenter.getSubjectList();
+                presenter.getTenantGroupList();
             }
         });
     }
 
     @Override
+    protected void onResume() {
+        super.onResume();
+        presenter.getSubjectList();
+        presenter.getTenantGroupList();
+    }
+
+    @Override
     protected AcSelectTenantMemberLayoutBinding getLayoutView() {
         return AcSelectTenantMemberLayoutBinding.inflate(getLayoutInflater());
     }
@@ -147,6 +204,22 @@ public class SelectTenantMemberActivity extends BaseMVPActivity<AcSelectTenantMe
         }
     }
 
+    @Override
+    public void getSubjectListSuccess(SubjectListBean data) {
+        if (!checkActivityExist()) {
+            return;
+        }
+        subjectList = data.getRows();
+    }
+
+    @Override
+    public void getTenantGroupListSuccess(TenantGroupListBean data) {
+        if (!checkActivityExist()) {
+            return;
+        }
+        groupList = data.getRows();
+    }
+
     private ArrayList<StudentPageListBean.RowsBean> filterExist(List<StudentPageListBean.RowsBean> list) {
         ArrayList<StudentPageListBean.RowsBean> listResult = new ArrayList<>();
         for (int i = 0; i < list.size(); i++) {
@@ -159,6 +232,42 @@ public class SelectTenantMemberActivity extends BaseMVPActivity<AcSelectTenantMe
         return listResult;
     }
 
+    private ArrayList<StudentPageListBean.RowsBean> findBySubjectId(ArrayList<String> subjectIds) {
+        if (subjectIds != null && subjectIds.size() > 0) {
+            ArrayList<StudentPageListBean.RowsBean> list = new ArrayList<>();
+            for (int i = 0; i < subjectIds.size(); i++) {
+                String subjectId = subjectIds.get(i);
+                List<StudentPageListBean.RowsBean> data = mMemberAdapter.getData();
+                for (int j = 0; j < data.size(); j++) {
+                    StudentPageListBean.RowsBean rowsBean = data.get(j);
+                    if (TextUtils.equals(subjectId, rowsBean.getSubjectId())) {
+                        list.add(rowsBean);
+                    }
+                }
+            }
+            return list;
+        }
+        return null;
+    }
+
+    private ArrayList<StudentPageListBean.RowsBean> findByGroupId(ArrayList<String> groupIds) {
+        if (groupIds != null && groupIds.size() > 0) {
+            ArrayList<StudentPageListBean.RowsBean> list = new ArrayList<>();
+            for (int i = 0; i < groupIds.size(); i++) {
+                String groupId = groupIds.get(i);
+                List<StudentPageListBean.RowsBean> data = mMemberAdapter.getData();
+                for (int j = 0; j < data.size(); j++) {
+                    StudentPageListBean.RowsBean rowsBean = data.get(j);
+                    if (TextUtils.equals(groupId, rowsBean.getTenantGroupId())) {
+                        list.add(rowsBean);
+                    }
+                }
+            }
+            return list;
+        }
+        return null;
+    }
+
     private boolean isContainInFilterList(String targetId) {
         if (mFilterList != null && mFilterList.size() > 0) {
             for (int j = 0; j < mFilterList.size(); j++) {
@@ -179,6 +288,11 @@ public class SelectTenantMemberActivity extends BaseMVPActivity<AcSelectTenantMe
             returnResult(selectList);
             return;
         }
+
+        if (id == com.cooleshow.base.R.id.tv_right_text) {
+            showFilterDialog();
+            return;
+        }
     }
 
     private void returnResult(ArrayList<StudentPageListBean.RowsBean> select) {

+ 174 - 0
teacher/src/main/java/com/cooleshow/teacher/widgets/dialog/SelectTenantMemberFilterBottomDialog.java

@@ -0,0 +1,174 @@
+package com.cooleshow.teacher.widgets.dialog;
+
+import android.app.Dialog;
+import android.content.Context;
+import android.os.Bundle;
+import android.view.Gravity;
+import android.view.View;
+import android.view.Window;
+import android.view.WindowManager;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.chad.library.adapter.base.listener.OnItemClickListener;
+import com.cooleshow.base.bean.SubjectListBean;
+import com.cooleshow.base.bean.TenantGroupListBean;
+import com.cooleshow.base.iml.ICommonFilterData;
+import com.cooleshow.teacher.R;
+import com.cooleshow.teacher.adapter.SelectTenantMemberFilterAdapter;
+import com.google.android.flexbox.FlexDirection;
+import com.google.android.flexbox.FlexWrap;
+import com.google.android.flexbox.FlexboxLayoutManager;
+
+import java.util.ArrayList;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+
+/**
+ * Author by pq, Date on 2023/10/17.
+ */
+public class SelectTenantMemberFilterBottomDialog extends Dialog implements View.OnClickListener {
+
+    private ImageView mIvClose;
+    private RecyclerView mRecyclerViewSubject;
+    private RecyclerView mRecyclerViewGroup;
+    private TextView mTvCancel;
+    private TextView mTvConfirm;
+    private SelectTenantMemberFilterAdapter mSubjectAdapter;
+    private SelectTenantMemberFilterAdapter mGroupAdapter;
+
+    private OnEventListener mEventListener;
+
+    public SelectTenantMemberFilterBottomDialog(@NonNull Context context) {
+        super(context, R.style.MyBottomDialogStyle);
+    }
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.dialog_select_tenant_member_filter_layout);
+        initParams();
+        initViews();
+        initData();
+        initListener();
+    }
+
+
+    private void initViews() {
+        mIvClose = findViewById(R.id.iv_close);
+        mRecyclerViewSubject = findViewById(R.id.recyclerView_subject);
+        mRecyclerViewGroup = findViewById(R.id.recyclerView_group);
+        mTvCancel = findViewById(R.id.tv_cancel);
+        mTvConfirm = findViewById(R.id.tv_confirm);
+    }
+
+    private void initData() {
+        FlexboxLayoutManager flexboxLayoutManager = new FlexboxLayoutManager(getContext());
+        flexboxLayoutManager.setFlexDirection(FlexDirection.ROW);
+        flexboxLayoutManager.setFlexWrap(FlexWrap.WRAP);
+        mRecyclerViewSubject.setLayoutManager(flexboxLayoutManager);
+        mSubjectAdapter = new SelectTenantMemberFilterAdapter();
+        mRecyclerViewSubject.setAdapter(mSubjectAdapter);
+
+
+        FlexboxLayoutManager flexboxLayoutManager2 = new FlexboxLayoutManager(getContext());
+        flexboxLayoutManager2.setFlexDirection(FlexDirection.ROW);
+        flexboxLayoutManager2.setFlexWrap(FlexWrap.WRAP);
+        mRecyclerViewGroup.setLayoutManager(flexboxLayoutManager2);
+        mGroupAdapter = new SelectTenantMemberFilterAdapter();
+        mRecyclerViewGroup.setAdapter(mGroupAdapter);
+
+    }
+
+    private void initListener() {
+        mIvClose.setOnClickListener(this);
+        mTvConfirm.setOnClickListener(this);
+        mTvCancel.setOnClickListener(this);
+
+        mSubjectAdapter.setOnItemClickListener(new OnItemClickListener() {
+            @Override
+            public void onItemClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) {
+                if (position < mSubjectAdapter.getData().size()) {
+                    ICommonFilterData filterData = mSubjectAdapter.getData().get(position);
+                    mSubjectAdapter.setSelectId(filterData.getFilterId());
+                }
+            }
+        });
+
+        mGroupAdapter.setOnItemClickListener(new OnItemClickListener() {
+            @Override
+            public void onItemClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) {
+                if (position < mGroupAdapter.getData().size()) {
+                    ICommonFilterData filterData = mGroupAdapter.getData().get(position);
+                    mGroupAdapter.setSelectId(filterData.getFilterId());
+                }
+            }
+        });
+    }
+
+    private void initParams() {
+        Window window = getWindow();
+        //设置dialog在屏幕底部
+        window.setGravity(Gravity.BOTTOM);
+        //设置dialog弹出时的动画效果,从屏幕底部向上弹出
+        window.setWindowAnimations(com.cooleshow.base.R.style.BottomAnimation);
+        window.getDecorView().setPadding(0, 0, 0, 0);
+        //获得window窗口的属性
+        WindowManager.LayoutParams lp = window.getAttributes();
+        //设置窗口宽度为充满全屏
+        lp.width = WindowManager.LayoutParams.MATCH_PARENT;
+        //设置窗口高度为包裹内容
+        lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
+        lp.horizontalMargin = 0;
+        lp.verticalMargin = 0;
+        //将设置好的属性set回去
+        window.setAttributes(lp);
+    }
+
+    @Override
+    public void onClick(View v) {
+        int id = v.getId();
+        if (id == R.id.iv_close) {
+            dismiss();
+            return;
+        }
+
+        if (id == R.id.tv_cancel) {
+            mSubjectAdapter.clearSelect();
+            mGroupAdapter.clearSelect();
+            return;
+        }
+
+        if (id == R.id.tv_confirm) {
+            ArrayList<String> selectList = mSubjectAdapter.getSelectList();
+            ArrayList<String> groupSelectList = mGroupAdapter.getSelectList();
+            if (mEventListener != null) {
+                mEventListener.onCheckResult(selectList, groupSelectList);
+                dismiss();
+            }
+            return;
+        }
+    }
+
+    public void setSubjectList(ArrayList<SubjectListBean.RowsBean> subjectList) {
+        if (mSubjectAdapter != null) {
+            mSubjectAdapter.setList(subjectList);
+        }
+    }
+
+    public void setGroupList(ArrayList<TenantGroupListBean.RowsBean> groupList) {
+        if (mGroupAdapter != null) {
+            mGroupAdapter.setList(groupList);
+        }
+    }
+
+    public void setOnEventListener(OnEventListener listener) {
+        this.mEventListener = listener;
+    }
+
+    public interface OnEventListener {
+        void onCheckResult(ArrayList<String> subjectIds, ArrayList<String> groupList);
+    }
+}

+ 5 - 0
teacher/src/main/res/color/selector_common_filter_item_text_color.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:color="@color/color_2dc7aa" android:state_selected="true"/>
+    <item android:color="@color/color_aaaaaa"/>
+</selector>

+ 6 - 0
teacher/src/main/res/drawable/selector_common_filter_item.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:drawable="@drawable/shape_f0fffc_16dp_border_2dc7aa_1dp" android:state_selected="true"/>
+    <item android:drawable="@drawable/shape_f2f2f2_16dp"/>
+
+</selector>

+ 140 - 0
teacher/src/main/res/layout/dialog_select_tenant_member_filter_layout.xml

@@ -0,0 +1,140 @@
+<?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="wrap_content"
+    android:background="@drawable/bg_white_top_10dp"
+    tools:ignore="MissingDefaultResource">
+
+    <TextView
+        android:layout_marginBottom="12dp"
+        app:layout_constraintBottom_toTopOf="@+id/scrollView"
+        android:id="@+id/tv_title"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:paddingTop="19dp"
+        android:text="筛选"
+        android:textColor="@color/color_333333"
+        android:textSize="@dimen/sp_18"
+        android:textStyle="bold"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <ImageView
+        android:id="@+id/iv_close"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:padding="19dp"
+        android:src="@drawable/icon_close_gray"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <androidx.core.widget.NestedScrollView
+        app:layout_constraintHeight_max="350dp"
+        android:id="@+id/scrollView"
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintBottom_toTopOf="@+id/view_line">
+
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content">
+
+            <TextView
+                android:id="@+id/tv_subject_title"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="12dp"
+                android:paddingStart="16dp"
+                android:text="声部"
+                android:textColor="@color/color_333333"
+                android:textSize="@dimen/sp_16"
+                android:textStyle="bold"
+                app:layout_constraintLeft_toLeftOf="parent"
+                app:layout_constraintTop_toTopOf="parent" />
+
+            <androidx.recyclerview.widget.RecyclerView
+                android:id="@+id/recyclerView_subject"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="20dp"
+                android:overScrollMode="never"
+                android:paddingStart="12dp"
+                android:paddingEnd="12dp"
+                android:scrollbars="none"
+                app:layout_constraintLeft_toLeftOf="parent"
+                app:layout_constraintRight_toRightOf="parent"
+                app:layout_constraintTop_toBottomOf="@+id/tv_subject_title" />
+
+            <TextView
+                android:id="@+id/tv_group_title"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="13dp"
+                android:paddingStart="16dp"
+                android:text="小组"
+                android:textColor="@color/color_333333"
+                android:textSize="@dimen/sp_16"
+                android:textStyle="bold"
+                app:layout_constraintLeft_toLeftOf="parent"
+                app:layout_constraintTop_toBottomOf="@+id/recyclerView_subject" />
+
+            <androidx.recyclerview.widget.RecyclerView
+                android:id="@+id/recyclerView_group"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="20dp"
+                android:overScrollMode="never"
+                android:paddingStart="12dp"
+                android:paddingEnd="12dp"
+                android:scrollbars="none"
+                app:layout_constraintLeft_toLeftOf="parent"
+                app:layout_constraintRight_toRightOf="parent"
+                app:layout_constraintTop_toBottomOf="@+id/tv_group_title" />
+        </androidx.constraintlayout.widget.ConstraintLayout>
+
+    </androidx.core.widget.NestedScrollView>
+    
+    
+    <TextView
+        android:id="@+id/tv_confirm"
+        android:gravity="center"
+        android:textColor="@color/white"
+        android:textSize="@dimen/sp_18"
+        android:text="@string/common_confirm"
+        app:layout_constraintLeft_toRightOf="@+id/tv_cancel"
+        app:layout_constraintTop_toTopOf="@+id/tv_cancel"
+        app:layout_constraintRight_toRightOf="parent"
+        android:background="@drawable/shape_2dc7aa_24dp"
+        android:layout_width="0dp"
+        android:layout_marginStart="7dp"
+        android:layout_marginEnd="16dp"
+        android:layout_height="44dp"/>
+
+    <TextView
+        app:layout_constraintRight_toLeftOf="@+id/tv_confirm"
+        android:layout_marginEnd="7dp"
+        android:id="@+id/tv_cancel"
+        android:gravity="center"
+        android:textColor="@color/color_2dc7aa"
+        android:textSize="@dimen/sp_18"
+        android:text="重置"
+        android:layout_marginBottom="34dp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintLeft_toLeftOf="parent"
+        android:background="@drawable/shape_24dp_border_2dc7aa_1dp"
+        android:layout_width="0dp"
+        android:layout_marginStart="16dp"
+        android:layout_height="44dp"/>
+
+    <View
+        app:layout_constraintBottom_toTopOf="@+id/tv_cancel"
+        android:layout_marginBottom="24dp"
+        android:id="@+id/view_line"
+        android:background="@color/color_f2f2f2"
+        android:layout_width="match_parent"
+        android:layout_height="1dp"/>
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 22 - 0
teacher/src/main/res/layout/item_common_filter_layout.xml

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:layout_marginStart="4dp"
+    android:layout_marginEnd="4dp"
+    android:layout_marginBottom="12dp"
+    xmlns:tools="http://schemas.android.com/tools">
+    <TextView
+        android:id="@+id/tv_text"
+        tools:text="长笛"
+        android:paddingEnd="8dp"
+        android:paddingStart="8dp"
+        android:gravity="center"
+        android:minWidth="70dp"
+        android:background="@drawable/selector_common_filter_item"
+        android:textSize="@dimen/sp_14"
+        android:textColor="@color/selector_common_filter_item_text_color"
+        android:layout_width="wrap_content"
+        android:layout_height="32dp"/>
+</FrameLayout>

Some files were not shown because too many files changed in this diff