Selaa lähdekoodia

增加创建机构群流程

Pq 1 vuosi sitten
vanhempi
commit
10a0ce3a1d
18 muutettua tiedostoa jossa 1280 lisäystä ja 14 poistoa
  1. 619 0
      BaseLibrary/src/main/java/com/cooleshow/base/bean/StudentPageListBean.java
  2. 1 0
      BaseLibrary/src/main/java/com/cooleshow/base/router/RouterPath.kt
  3. 39 0
      BaseLibrary/src/main/java/com/cooleshow/base/widgets/CommonBottomItemDecoration.java
  4. 5 0
      BaseLibrary/src/main/res/drawable/selector_check_bt_20dp_v2.xml
  5. 41 0
      chatModule/src/main/java/com/cooleshow/chatmodule/adapter/CreateGroupMemberAdapter.java
  6. 10 1
      chatModule/src/main/java/com/cooleshow/chatmodule/presenter/CreateGroupPresenter.java
  7. 117 2
      chatModule/src/main/java/com/cooleshow/chatmodule/ui/CreateGroupActivity.java
  8. 5 0
      chatModule/src/main/res/drawable/shape_ff4d72_8dp.xml
  9. 55 0
      chatModule/src/main/res/layout/item_create_group_member_layout.xml
  10. 11 9
      chatModule/src/main/res/layout/tc_activity_create_group.xml
  11. 6 0
      teacher/src/main/AndroidManifest.xml
  12. 67 0
      teacher/src/main/java/com/cooleshow/teacher/adapter/SelectTenantMemberAdapter.java
  13. 4 2
      teacher/src/main/java/com/cooleshow/teacher/api/APIService.java
  14. 19 0
      teacher/src/main/java/com/cooleshow/teacher/contract/SelectTenantMemberContract.java
  15. 39 0
      teacher/src/main/java/com/cooleshow/teacher/presenter/mine/SelectTenantMemberPresenter.java
  16. 143 0
      teacher/src/main/java/com/cooleshow/teacher/ui/mine/SelectTenantMemberActivity.java
  17. 44 0
      teacher/src/main/res/layout/ac_select_tenant_member_layout.xml
  18. 55 0
      teacher/src/main/res/layout/item_select_tenant_member_layout.xml

+ 619 - 0
BaseLibrary/src/main/java/com/cooleshow/base/bean/StudentPageListBean.java

@@ -0,0 +1,619 @@
+package com.cooleshow.base.bean;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.util.List;
+
+/**
+ * Author by pq, Date on 2023/9/15.
+ */
+public class StudentPageListBean implements Parcelable {
+
+
+    /**
+     * footer : [{"age":0,"avatar":"","birthdate":"","cloudStudySequenceDays":0,"cloudStudyUseLastDay":"","createTime":"","delFlag":"","evaluateTime":0,"gender":"","hideFlag":0,"idCardNo":"","imToken":"","isBank":"","isReal":"","isVip":"","lockFlag":"","memberRankSettingId":0,"membershipEndTime":"","membershipStartTime":"","phone":"","realName":"","sendActiveCodeNum":0,"subjectId":"","subjectName":"","tenantId":0,"tenantName":"","trainTime":0,"unionId":0,"updateTime":"","userId":0,"userStatus":"","userType":"","username":""}]
+     * limit : 0
+     * nextPage : 0
+     * offset : 0
+     * pageNo : 0
+     * prePage : 0
+     * rows : [{"age":0,"avatar":"","birthdate":"","cloudStudySequenceDays":0,"cloudStudyUseLastDay":"","createTime":"","delFlag":"","evaluateTime":0,"gender":"","hideFlag":0,"idCardNo":"","imToken":"","isBank":"","isReal":"","isVip":"","lockFlag":"","memberRankSettingId":0,"membershipEndTime":"","membershipStartTime":"","phone":"","realName":"","sendActiveCodeNum":0,"subjectId":"","subjectName":"","tenantId":0,"tenantName":"","trainTime":0,"unionId":0,"updateTime":"","userId":0,"userStatus":"","userType":"","username":""}]
+     * statInfo : {}
+     * total : 0
+     * totalPage : 0
+     */
+
+    private int limit;
+    private int nextPage;
+    private int offset;
+    private int pageNo;
+    private int prePage;
+    private int total;
+    private int totalPage;
+    private List<RowsBean> rows;
+
+    public int getLimit() {
+        return limit;
+    }
+
+    public void setLimit(int limit) {
+        this.limit = limit;
+    }
+
+    public int getNextPage() {
+        return nextPage;
+    }
+
+    public void setNextPage(int nextPage) {
+        this.nextPage = nextPage;
+    }
+
+    public int getOffset() {
+        return offset;
+    }
+
+    public void setOffset(int offset) {
+        this.offset = offset;
+    }
+
+    public int getPageNo() {
+        return pageNo;
+    }
+
+    public void setPageNo(int pageNo) {
+        this.pageNo = pageNo;
+    }
+
+    public int getPrePage() {
+        return prePage;
+    }
+
+    public void setPrePage(int prePage) {
+        this.prePage = prePage;
+    }
+
+    public int getTotal() {
+        return total;
+    }
+
+    public void setTotal(int total) {
+        this.total = total;
+    }
+
+    public int getTotalPage() {
+        return totalPage;
+    }
+
+    public void setTotalPage(int totalPage) {
+        this.totalPage = totalPage;
+    }
+
+    public List<RowsBean> getRows() {
+        return rows;
+    }
+
+    public void setRows(List<RowsBean> rows) {
+        this.rows = rows;
+    }
+
+    public static class RowsBean implements Parcelable {
+        /**
+         * age : 0
+         * avatar :
+         * birthdate :
+         * cloudStudySequenceDays : 0
+         * cloudStudyUseLastDay :
+         * createTime :
+         * delFlag :
+         * evaluateTime : 0
+         * gender :
+         * hideFlag : 0
+         * idCardNo :
+         * imToken :
+         * isBank :
+         * isReal :
+         * isVip :
+         * lockFlag :
+         * memberRankSettingId : 0
+         * membershipEndTime :
+         * membershipStartTime :
+         * phone :
+         * realName :
+         * sendActiveCodeNum : 0
+         * subjectId :
+         * subjectName :
+         * tenantId : 0
+         * tenantName :
+         * trainTime : 0
+         * unionId : 0
+         * updateTime :
+         * userId : 0
+         * userStatus :
+         * userType :
+         * username :
+         */
+
+        private int age;
+        private String avatar;
+        private String birthdate;
+        private int cloudStudySequenceDays;
+        private String cloudStudyUseLastDay;
+        private String createTime;
+        private String delFlag;
+        private int evaluateTime;
+        private String gender;
+        private int hideFlag;
+        private String idCardNo;
+        private String imToken;
+        private String isBank;
+        private String isReal;
+        private String isVip;
+        private String lockFlag;
+        private int memberRankSettingId;
+        private String membershipEndTime;
+        private String membershipStartTime;
+        private String phone;
+        private String realName;
+        private int sendActiveCodeNum;
+        private String subjectId;
+        private String subjectName;
+        private String tenantId;
+        private String tenantName;
+        private int trainTime;
+        private String unionId;
+        private String updateTime;
+        private String userId;
+        private String userStatus;
+        private String userType;
+        private String username;
+
+        public int getAge() {
+            return age;
+        }
+
+        public void setAge(int age) {
+            this.age = age;
+        }
+
+        public String getAvatar() {
+            return avatar;
+        }
+
+        public void setAvatar(String avatar) {
+            this.avatar = avatar;
+        }
+
+        public String getBirthdate() {
+            return birthdate;
+        }
+
+        public void setBirthdate(String birthdate) {
+            this.birthdate = birthdate;
+        }
+
+        public int getCloudStudySequenceDays() {
+            return cloudStudySequenceDays;
+        }
+
+        public void setCloudStudySequenceDays(int cloudStudySequenceDays) {
+            this.cloudStudySequenceDays = cloudStudySequenceDays;
+        }
+
+        public String getCloudStudyUseLastDay() {
+            return cloudStudyUseLastDay;
+        }
+
+        public void setCloudStudyUseLastDay(String cloudStudyUseLastDay) {
+            this.cloudStudyUseLastDay = cloudStudyUseLastDay;
+        }
+
+        public String getCreateTime() {
+            return createTime;
+        }
+
+        public void setCreateTime(String createTime) {
+            this.createTime = createTime;
+        }
+
+        public String getDelFlag() {
+            return delFlag;
+        }
+
+        public void setDelFlag(String delFlag) {
+            this.delFlag = delFlag;
+        }
+
+        public int getEvaluateTime() {
+            return evaluateTime;
+        }
+
+        public void setEvaluateTime(int evaluateTime) {
+            this.evaluateTime = evaluateTime;
+        }
+
+        public String getGender() {
+            return gender;
+        }
+
+        public void setGender(String gender) {
+            this.gender = gender;
+        }
+
+        public int getHideFlag() {
+            return hideFlag;
+        }
+
+        public void setHideFlag(int hideFlag) {
+            this.hideFlag = hideFlag;
+        }
+
+        public String getIdCardNo() {
+            return idCardNo;
+        }
+
+        public void setIdCardNo(String idCardNo) {
+            this.idCardNo = idCardNo;
+        }
+
+        public String getImToken() {
+            return imToken;
+        }
+
+        public void setImToken(String imToken) {
+            this.imToken = imToken;
+        }
+
+        public String getIsBank() {
+            return isBank;
+        }
+
+        public void setIsBank(String isBank) {
+            this.isBank = isBank;
+        }
+
+        public String getIsReal() {
+            return isReal;
+        }
+
+        public void setIsReal(String isReal) {
+            this.isReal = isReal;
+        }
+
+        public String getIsVip() {
+            return isVip;
+        }
+
+        public void setIsVip(String isVip) {
+            this.isVip = isVip;
+        }
+
+        public String getLockFlag() {
+            return lockFlag;
+        }
+
+        public void setLockFlag(String lockFlag) {
+            this.lockFlag = lockFlag;
+        }
+
+        public int getMemberRankSettingId() {
+            return memberRankSettingId;
+        }
+
+        public void setMemberRankSettingId(int memberRankSettingId) {
+            this.memberRankSettingId = memberRankSettingId;
+        }
+
+        public String getMembershipEndTime() {
+            return membershipEndTime;
+        }
+
+        public void setMembershipEndTime(String membershipEndTime) {
+            this.membershipEndTime = membershipEndTime;
+        }
+
+        public String getMembershipStartTime() {
+            return membershipStartTime;
+        }
+
+        public void setMembershipStartTime(String membershipStartTime) {
+            this.membershipStartTime = membershipStartTime;
+        }
+
+        public String getPhone() {
+            return phone;
+        }
+
+        public void setPhone(String phone) {
+            this.phone = phone;
+        }
+
+        public String getRealName() {
+            return realName;
+        }
+
+        public void setRealName(String realName) {
+            this.realName = realName;
+        }
+
+        public int getSendActiveCodeNum() {
+            return sendActiveCodeNum;
+        }
+
+        public void setSendActiveCodeNum(int sendActiveCodeNum) {
+            this.sendActiveCodeNum = sendActiveCodeNum;
+        }
+
+        public String getSubjectId() {
+            return subjectId;
+        }
+
+        public void setSubjectId(String subjectId) {
+            this.subjectId = subjectId;
+        }
+
+        public String getSubjectName() {
+            return subjectName;
+        }
+
+        public void setSubjectName(String subjectName) {
+            this.subjectName = subjectName;
+        }
+
+        public String getTenantId() {
+            return tenantId;
+        }
+
+        public void setTenantId(String tenantId) {
+            this.tenantId = tenantId;
+        }
+
+        public String getTenantName() {
+            return tenantName;
+        }
+
+        public void setTenantName(String tenantName) {
+            this.tenantName = tenantName;
+        }
+
+        public int getTrainTime() {
+            return trainTime;
+        }
+
+        public void setTrainTime(int trainTime) {
+            this.trainTime = trainTime;
+        }
+
+        public String getUnionId() {
+            return unionId;
+        }
+
+        public void setUnionId(String unionId) {
+            this.unionId = unionId;
+        }
+
+        public String getUpdateTime() {
+            return updateTime;
+        }
+
+        public void setUpdateTime(String updateTime) {
+            this.updateTime = updateTime;
+        }
+
+        public String getUserId() {
+            return userId;
+        }
+
+        public void setUserId(String userId) {
+            this.userId = userId;
+        }
+
+        public String getUserStatus() {
+            return userStatus;
+        }
+
+        public void setUserStatus(String userStatus) {
+            this.userStatus = userStatus;
+        }
+
+        public String getUserType() {
+            return userType;
+        }
+
+        public void setUserType(String userType) {
+            this.userType = userType;
+        }
+
+        public String getUsername() {
+            return username;
+        }
+
+        public void setUsername(String username) {
+            this.username = username;
+        }
+
+
+        @Override
+        public int describeContents() {
+            return 0;
+        }
+
+        @Override
+        public void writeToParcel(Parcel dest, int flags) {
+            dest.writeInt(this.age);
+            dest.writeString(this.avatar);
+            dest.writeString(this.birthdate);
+            dest.writeInt(this.cloudStudySequenceDays);
+            dest.writeString(this.cloudStudyUseLastDay);
+            dest.writeString(this.createTime);
+            dest.writeString(this.delFlag);
+            dest.writeInt(this.evaluateTime);
+            dest.writeString(this.gender);
+            dest.writeInt(this.hideFlag);
+            dest.writeString(this.idCardNo);
+            dest.writeString(this.imToken);
+            dest.writeString(this.isBank);
+            dest.writeString(this.isReal);
+            dest.writeString(this.isVip);
+            dest.writeString(this.lockFlag);
+            dest.writeInt(this.memberRankSettingId);
+            dest.writeString(this.membershipEndTime);
+            dest.writeString(this.membershipStartTime);
+            dest.writeString(this.phone);
+            dest.writeString(this.realName);
+            dest.writeInt(this.sendActiveCodeNum);
+            dest.writeString(this.subjectId);
+            dest.writeString(this.subjectName);
+            dest.writeString(this.tenantId);
+            dest.writeString(this.tenantName);
+            dest.writeInt(this.trainTime);
+            dest.writeString(this.unionId);
+            dest.writeString(this.updateTime);
+            dest.writeString(this.userId);
+            dest.writeString(this.userStatus);
+            dest.writeString(this.userType);
+            dest.writeString(this.username);
+        }
+
+        public void readFromParcel(Parcel source) {
+            this.age = source.readInt();
+            this.avatar = source.readString();
+            this.birthdate = source.readString();
+            this.cloudStudySequenceDays = source.readInt();
+            this.cloudStudyUseLastDay = source.readString();
+            this.createTime = source.readString();
+            this.delFlag = source.readString();
+            this.evaluateTime = source.readInt();
+            this.gender = source.readString();
+            this.hideFlag = source.readInt();
+            this.idCardNo = source.readString();
+            this.imToken = source.readString();
+            this.isBank = source.readString();
+            this.isReal = source.readString();
+            this.isVip = source.readString();
+            this.lockFlag = source.readString();
+            this.memberRankSettingId = source.readInt();
+            this.membershipEndTime = source.readString();
+            this.membershipStartTime = source.readString();
+            this.phone = source.readString();
+            this.realName = source.readString();
+            this.sendActiveCodeNum = source.readInt();
+            this.subjectId = source.readString();
+            this.subjectName = source.readString();
+            this.tenantId = source.readString();
+            this.tenantName = source.readString();
+            this.trainTime = source.readInt();
+            this.unionId = source.readString();
+            this.updateTime = source.readString();
+            this.userId = source.readString();
+            this.userStatus = source.readString();
+            this.userType = source.readString();
+            this.username = source.readString();
+        }
+
+        public RowsBean() {
+        }
+
+        protected RowsBean(Parcel in) {
+            this.age = in.readInt();
+            this.avatar = in.readString();
+            this.birthdate = in.readString();
+            this.cloudStudySequenceDays = in.readInt();
+            this.cloudStudyUseLastDay = in.readString();
+            this.createTime = in.readString();
+            this.delFlag = in.readString();
+            this.evaluateTime = in.readInt();
+            this.gender = in.readString();
+            this.hideFlag = in.readInt();
+            this.idCardNo = in.readString();
+            this.imToken = in.readString();
+            this.isBank = in.readString();
+            this.isReal = in.readString();
+            this.isVip = in.readString();
+            this.lockFlag = in.readString();
+            this.memberRankSettingId = in.readInt();
+            this.membershipEndTime = in.readString();
+            this.membershipStartTime = in.readString();
+            this.phone = in.readString();
+            this.realName = in.readString();
+            this.sendActiveCodeNum = in.readInt();
+            this.subjectId = in.readString();
+            this.subjectName = in.readString();
+            this.tenantId = in.readString();
+            this.tenantName = in.readString();
+            this.trainTime = in.readInt();
+            this.unionId = in.readString();
+            this.updateTime = in.readString();
+            this.userId = in.readString();
+            this.userStatus = in.readString();
+            this.userType = in.readString();
+            this.username = in.readString();
+        }
+
+        public static final Parcelable.Creator<RowsBean> CREATOR = new Parcelable.Creator<RowsBean>() {
+            @Override
+            public RowsBean createFromParcel(Parcel source) {
+                return new RowsBean(source);
+            }
+
+            @Override
+            public RowsBean[] newArray(int size) {
+                return new RowsBean[size];
+            }
+        };
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeInt(this.limit);
+        dest.writeInt(this.nextPage);
+        dest.writeInt(this.offset);
+        dest.writeInt(this.pageNo);
+        dest.writeInt(this.prePage);
+        dest.writeInt(this.total);
+        dest.writeInt(this.totalPage);
+        dest.writeTypedList(this.rows);
+    }
+
+    public void readFromParcel(Parcel source) {
+        this.limit = source.readInt();
+        this.nextPage = source.readInt();
+        this.offset = source.readInt();
+        this.pageNo = source.readInt();
+        this.prePage = source.readInt();
+        this.total = source.readInt();
+        this.totalPage = source.readInt();
+        this.rows = source.createTypedArrayList(RowsBean.CREATOR);
+    }
+
+    public StudentPageListBean() {
+    }
+
+    protected StudentPageListBean(Parcel in) {
+        this.limit = in.readInt();
+        this.nextPage = in.readInt();
+        this.offset = in.readInt();
+        this.pageNo = in.readInt();
+        this.prePage = in.readInt();
+        this.total = in.readInt();
+        this.totalPage = in.readInt();
+        this.rows = in.createTypedArrayList(RowsBean.CREATOR);
+    }
+
+    public static final Parcelable.Creator<StudentPageListBean> CREATOR = new Parcelable.Creator<StudentPageListBean>() {
+        @Override
+        public StudentPageListBean createFromParcel(Parcel source) {
+            return new StudentPageListBean(source);
+        }
+
+        @Override
+        public StudentPageListBean[] newArray(int size) {
+            return new StudentPageListBean[size];
+        }
+    };
+}

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

@@ -165,6 +165,7 @@ object RouterPath {
             const val MINE_UNBIND_BANKCARD = "/teacher/ui/mine/UnBindBankCardActivity"
             const val MINE_COURSE_WARE = "/teacher/ui/mine/CoursewareListActivity"
             const val UNBIND_TENANT = "/teacher/ui/mine/UnBindTenantActivity"
+            const val SELECT_TENANT_MEMBER = "/teacher/ui/mine/SelectTenantMemberActivity"
         }
     }
 

+ 39 - 0
BaseLibrary/src/main/java/com/cooleshow/base/widgets/CommonBottomItemDecoration.java

@@ -0,0 +1,39 @@
+package com.cooleshow.base.widgets;
+
+import android.graphics.Rect;
+import android.view.View;
+
+import androidx.recyclerview.widget.RecyclerView;
+
+/**
+ * Author by pq, Date on 2021/3/18 0018.
+ */
+public class CommonBottomItemDecoration extends RecyclerView.ItemDecoration {
+
+    private int top;
+    private int left;
+    private int bottom;
+    private int right;
+
+    public CommonBottomItemDecoration(int top, int left, int bottom, int right) {
+        this.top = top;
+        this.left = left;
+        this.bottom = bottom;
+        this.right = right;
+    }
+
+    @Override
+    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
+        //每行都只有2个
+        outRect.left = left;
+        outRect.top = top;
+        int childLayoutPosition = parent.getChildLayoutPosition(view);
+        int itemCount = parent.getAdapter().getItemCount();
+        if (childLayoutPosition == itemCount - 1) {
+            outRect.bottom = bottom;
+        } else {
+            outRect.bottom = 0;
+        }
+        outRect.right = right;
+    }
+}

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

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:drawable="@drawable/icon_check_select2" android:state_checked="true" />
+    <item android:drawable="@drawable/icon_check_normal2"/>
+</selector>

+ 41 - 0
chatModule/src/main/java/com/cooleshow/chatmodule/adapter/CreateGroupMemberAdapter.java

@@ -0,0 +1,41 @@
+package com.cooleshow.chatmodule.adapter;
+
+import android.text.TextUtils;
+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.viewholder.BaseViewHolder;
+import com.cooleshow.base.bean.StudentPageListBean;
+import com.cooleshow.base.utils.GlideUtils;
+import com.cooleshow.chatmodule.R;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+
+/**
+ * Author by pq, Date on 2023/9/15.
+ */
+public class CreateGroupMemberAdapter extends BaseQuickAdapter<StudentPageListBean.RowsBean, BaseViewHolder> {
+    private String groupOwnerId;
+
+    public CreateGroupMemberAdapter(String groupOwnerId) {
+        super(R.layout.item_create_group_member_layout);
+        this.groupOwnerId = groupOwnerId;
+    }
+
+    @Override
+    protected void convert(@NonNull BaseViewHolder holder, StudentPageListBean.RowsBean bean) {
+        ImageView iv_avatar = holder.getView(R.id.iv_avatar);
+        GlideUtils.INSTANCE.loadImage(getContext(), bean.getAvatar(), iv_avatar, com.cooleshow.base.R.drawable.icon_default_head);
+        holder.setText(R.id.tv_name, bean.getUsername());
+
+        TextView tv_group_owner_tag = holder.getView(R.id.tv_group_owner_tag);
+        if(TextUtils.equals(bean.getUserId(),groupOwnerId)){
+            tv_group_owner_tag.setVisibility(View.VISIBLE);
+        }else{
+            tv_group_owner_tag.setVisibility(View.GONE);
+        }
+    }
+}

+ 10 - 1
chatModule/src/main/java/com/cooleshow/chatmodule/presenter/CreateGroupPresenter.java

@@ -1,14 +1,18 @@
 package com.cooleshow.chatmodule.presenter;
 
+import com.cooleshow.base.bean.StudentPageListBean;
 import com.cooleshow.base.presenter.BasePresenter;
 import com.cooleshow.base.rx.BaseObserver;
 import com.cooleshow.base.utils.RequestBodyUtil;
 import com.cooleshow.chatmodule.api.IMApi;
 import com.cooleshow.chatmodule.contract.CreateGroupContract;
 
+import org.json.JSONArray;
 import org.json.JSONException;
 import org.json.JSONObject;
 
+import java.util.ArrayList;
+
 /**
  * 创建日期:2022/6/10 17:39
  *
@@ -16,11 +20,16 @@ import org.json.JSONObject;
  * 类说明:
  */
 public class CreateGroupPresenter extends BasePresenter<CreateGroupContract.CreateGroupView> implements CreateGroupContract.Presenter {
-    public void createGroup(String name,String introduce){
+    public void createGroup(String name, String introduce, String type, ArrayList<StudentPageListBean.RowsBean> list) {
         JSONObject jsonObject = new JSONObject();
         try {
             jsonObject.put("name", name);
             jsonObject.put("introduce", introduce);
+            jsonObject.put("type", type);
+            if (list != null) {
+                JSONArray jsonArray =new JSONArray(list);
+                jsonObject.put("studentIdList", jsonArray);
+            }
         } catch (JSONException e) {
             e.printStackTrace();
         }

+ 117 - 2
chatModule/src/main/java/com/cooleshow/chatmodule/ui/CreateGroupActivity.java

@@ -1,22 +1,33 @@
 package com.cooleshow.chatmodule.ui;
 
+import android.content.Intent;
 import android.os.Bundle;
 import android.text.TextUtils;
 import android.view.View;
 
 import com.alibaba.android.arouter.facade.annotation.Route;
+import com.alibaba.android.arouter.launcher.ARouter;
+import com.cooleshow.base.bean.StudentPageListBean;
 import com.cooleshow.base.router.RouterPath;
 import com.cooleshow.base.ui.activity.BaseMVPActivity;
 import com.cooleshow.base.utils.ToastUtil;
 import com.cooleshow.base.utils.UiUtils;
 import com.cooleshow.base.utils.helper.QMUIStatusBarHelper;
 import com.cooleshow.chatmodule.R;
+import com.cooleshow.chatmodule.adapter.CreateGroupMemberAdapter;
 import com.cooleshow.chatmodule.constants.TCChatRouterPath;
 import com.cooleshow.chatmodule.contract.CreateGroupContract;
 import com.cooleshow.chatmodule.databinding.TcActivityCreateGroupBinding;
 import com.cooleshow.chatmodule.presenter.CreateGroupPresenter;
+import com.cooleshow.usercenter.constants.UserConstants;
+import com.cooleshow.usercenter.helper.UserHelper;
 
+import java.util.ArrayList;
+import java.util.List;
+
+import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.LinearLayoutManager;
 
 /**
  * 创建日期:2022/6/10 17:23
@@ -26,9 +37,21 @@ import androidx.annotation.Nullable;
  */
 @Route(path = TCChatRouterPath.CHAT_CREATE_GROUP)
 public class CreateGroupActivity extends BaseMVPActivity<TcActivityCreateGroupBinding, CreateGroupPresenter> implements CreateGroupContract.CreateGroupView, View.OnClickListener {
+    public static final int REQUEST_CODE_SELECT = 10001;
+
+    public static final String GROUP_TYPE_FAN = "FAN";
+    public static final String GROUP_TYPE_ORG = "ORG";
+    private CreateGroupMemberAdapter mMemberAdapter;
+
+    private String groupType = GROUP_TYPE_FAN;
+
+    private ArrayList<StudentPageListBean.RowsBean> memberListResult = null;
+    private String currentUserId;
+
     @Override
     public void onClick(View view) {
-        if (view.getId() == R.id.tv_create) {
+        int id = view.getId();
+        if (id == R.id.tv_create) {
             if (UiUtils.isFastClick()) {
                 return;
             }
@@ -37,11 +60,52 @@ public class CreateGroupActivity extends BaseMVPActivity<TcActivityCreateGroupBi
                 ToastUtil.getInstance().showShort("请输入粉丝群名称!");
                 return;
             }
+            if (!checkTenantCondition()) {
+                return;
+            }
             String introduction = viewBinding.etIntroduction.getText().toString().trim();
-            presenter.createGroup(groupName, introduction);
+            presenter.createGroup(groupName, introduction, GROUP_TYPE_FAN, memberListResult);
+        }
+        if (id == R.id.tv_add_members) {
+            ARouter.getInstance().build(RouterPath.MineCenter.SELECT_TENANT_MEMBER)
+                    .navigation(this, REQUEST_CODE_SELECT);
+            return;
         }
     }
 
+    private boolean checkTenantCondition() {
+        int tenantId = UserHelper.getTenantId();
+        if (tenantId == UserConstants.NO_HAVE_TENANT) {
+            return true;
+        }
+        int checkId = viewBinding.rgGroupType.getCheckedRadioButtonId();
+        if (checkId == -1) {
+            ToastUtil.getInstance().showShort("请选择需要创建的群类型");
+            return false;
+        }
+        if (checkId == R.id.rb_jg_group_type) {
+            groupType = GROUP_TYPE_ORG;
+        } else {
+            groupType = GROUP_TYPE_FAN;
+        }
+
+        List<StudentPageListBean.RowsBean> data = mMemberAdapter.getData();
+        if (data.size() == 0) {
+            ToastUtil.getInstance().showShort("请选择群成员");
+            return false;
+        }
+        for (int i = data.size() - 1; i >= 0; i--) {
+            StudentPageListBean.RowsBean rowsBean = data.get(i);
+            if (TextUtils.equals(currentUserId, rowsBean.getUserId())) {
+                data.remove(i);
+                break;
+            }
+        }
+        memberListResult = new ArrayList<>();
+        memberListResult.addAll(data);
+        return true;
+    }
+
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -52,6 +116,40 @@ public class CreateGroupActivity extends BaseMVPActivity<TcActivityCreateGroupBi
     protected void initView() {
         initMidTitleToolBar(viewBinding.toolbarInclude.toolbar, "创建粉丝群");
         viewBinding.tvCreate.setOnClickListener(this);
+        viewBinding.tvAddMembers.setOnClickListener(this);
+    }
+
+
+    @Override
+    public void initData() {
+        super.initData();
+        currentUserId = UserHelper.getUserId();
+        int tenantId = UserHelper.getTenantId();
+        if (tenantId != UserConstants.NO_HAVE_TENANT) {
+            viewBinding.csGroupType.setVisibility(View.VISIBLE);
+            viewBinding.csMember.setVisibility(View.VISIBLE);
+        }
+        String userId = UserHelper.getUserId();
+        mMemberAdapter = new CreateGroupMemberAdapter(userId);
+        viewBinding.recyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false));
+        viewBinding.recyclerView.setAdapter(mMemberAdapter);
+        addDefault();
+    }
+
+    private void addDefault() {
+        ArrayList<StudentPageListBean.RowsBean> list = getOwnerData();
+        mMemberAdapter.setList(list);
+    }
+
+    @NonNull
+    private ArrayList<StudentPageListBean.RowsBean> getOwnerData() {
+        StudentPageListBean.RowsBean rowsBean = new StudentPageListBean.RowsBean();
+        rowsBean.setUserId(UserHelper.getUserId());
+        rowsBean.setAvatar(UserHelper.getUserAvatar());
+        rowsBean.setUsername(UserHelper.getUserName());
+        ArrayList<StudentPageListBean.RowsBean> list = new ArrayList();
+        list.add(rowsBean);
+        return list;
     }
 
     @Override
@@ -69,4 +167,21 @@ public class CreateGroupActivity extends BaseMVPActivity<TcActivityCreateGroupBi
         ToastUtil.getInstance().showShort("创建成功");
         finish();
     }
+
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
+        super.onActivityResult(requestCode, resultCode, data);
+        if (resultCode == RESULT_OK) {
+            if (requestCode == REQUEST_CODE_SELECT) {
+                assert data != null;
+                ArrayList<StudentPageListBean.RowsBean> selectMembers = data.getParcelableArrayListExtra("result");
+                if (selectMembers != null) {
+                    selectMembers.addAll(0, getOwnerData());
+                    if (mMemberAdapter != null) {
+                        mMemberAdapter.setList(selectMembers);
+                    }
+                }
+            }
+        }
+    }
 }

+ 5 - 0
chatModule/src/main/res/drawable/shape_ff4d72_8dp.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="#ff4d72"/>
+    <corners android:radius="8dp"/>
+</shape>

+ 55 - 0
chatModule/src/main/res/layout/item_create_group_member_layout.xml

@@ -0,0 +1,55 @@
+<?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="wrap_content"
+    android:layout_marginEnd="14dp"
+    android:layout_height="wrap_content">
+
+    <com.cooleshow.base.widgets.QMUIRadiusImageView
+        android:id="@+id/iv_avatar"
+        android:layout_width="45dp"
+        android:layout_height="45dp"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        app:qmui_corner_radius="8dp" />
+
+    <View
+        android:layout_marginTop="3dp"
+        app:layout_constraintLeft_toLeftOf="@+id/iv_avatar"
+        app:layout_constraintTop_toBottomOf="@+id/iv_avatar"
+        android:id="@+id/view_help_point"
+        android:layout_width="1px"
+        android:layout_height="1px"/>
+
+    <TextView
+        android:visibility="gone"
+        app:layout_constraintRight_toRightOf="@+id/iv_avatar"
+        app:layout_constraintLeft_toLeftOf="@+id/iv_avatar"
+        app:layout_constraintBottom_toTopOf="@+id/view_help_point"
+        android:id="@+id/tv_group_owner_tag"
+        android:paddingEnd="9dp"
+        android:paddingStart="9dp"
+        android:textSize="@dimen/sp_11"
+        android:gravity="center"
+        android:text="群主"
+        android:textColor="@color/white"
+        android:background="@drawable/shape_ff4d72_8dp"
+        android:layout_width="wrap_content"
+        android:layout_height="15dp"/>
+
+    <TextView
+        android:id="@+id/tv_name"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="6dp"
+        android:ellipsize="end"
+        android:maxWidth="60dp"
+        android:maxLines="1"
+        android:textColor="@color/color_666666"
+        android:textSize="@dimen/sp_13"
+        app:layout_constraintLeft_toLeftOf="@+id/iv_avatar"
+        app:layout_constraintRight_toRightOf="@+id/iv_avatar"
+        app:layout_constraintTop_toBottomOf="@+id/iv_avatar"
+        tools:text="陈同学" />
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 11 - 9
chatModule/src/main/res/layout/tc_activity_create_group.xml

@@ -1,9 +1,9 @@
 <?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"
-    xmlns:tools="http://schemas.android.com/tools"
     android:orientation="vertical">
 
     <include
@@ -21,7 +21,6 @@
 
 
             <androidx.constraintlayout.widget.ConstraintLayout
-                tools:visibility="visible"
                 android:id="@+id/cs_group_type"
                 android:layout_width="match_parent"
                 android:layout_height="46dp"
@@ -31,7 +30,8 @@
                 android:background="@drawable/bg_white_10dp"
                 android:paddingStart="12dp"
                 android:paddingEnd="12dp"
-                android:visibility="gone">
+                android:visibility="gone"
+                tools:visibility="visible">
 
                 <TextView
                     android:id="@+id/tv_group_type"
@@ -50,6 +50,7 @@
 
 
                 <RadioGroup
+                    android:id="@+id/rg_group_type"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:orientation="horizontal"
@@ -65,7 +66,7 @@
                         android:background="@color/transparent"
                         android:button="@null"
                         android:checked="false"
-                        android:drawableStart="@drawable/selector_check_bt_20dp"
+                        android:drawableStart="@drawable/selector_check_bt_20dp_v2"
                         android:drawablePadding="7dp"
                         android:includeFontPadding="false"
                         android:text="粉丝群"
@@ -74,13 +75,13 @@
 
 
                     <RadioButton
-                        android:checked="false"
                         android:id="@+id/rb_jg_group_type"
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
                         android:background="@color/transparent"
                         android:button="@null"
-                        android:drawableStart="@drawable/selector_check_bt_20dp"
+                        android:checked="true"
+                        android:drawableStart="@drawable/selector_check_bt_20dp_v2"
                         android:drawablePadding="7dp"
                         android:includeFontPadding="false"
                         android:text="机构群"
@@ -207,8 +208,8 @@
                 android:layout_marginRight="@dimen/dp_14"
                 android:background="@drawable/bg_white_10dp"
                 android:paddingStart="12dp"
-                tools:visibility="visible"
-                android:visibility="gone">
+                android:visibility="gone"
+                tools:visibility="visible">
 
                 <TextView
                     android:id="@+id/tv_members_title"
@@ -227,6 +228,7 @@
                 <androidx.recyclerview.widget.RecyclerView
                     android:id="@+id/recyclerView"
                     android:layout_width="0dp"
+                    android:layout_marginTop="20dp"
                     android:layout_height="0dp"
                     android:overScrollMode="never"
                     android:scrollbars="none"
@@ -236,10 +238,10 @@
                     app:layout_constraintTop_toBottomOf="@+id/tv_members_title" />
 
                 <TextView
-                    android:paddingEnd="29dp"
                     android:id="@+id/tv_add_members"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
+                    android:paddingEnd="29dp"
                     android:text="添加"
                     android:textColor="@color/color_333333"
                     android:textSize="@dimen/sp_16"

+ 6 - 0
teacher/src/main/AndroidManifest.xml

@@ -355,6 +355,12 @@
             android:screenOrientation="portrait" />
 
         <activity
+            android:name=".ui.mine.SelectTenantMemberActivity"
+            android:windowSoftInputMode="adjustPan"
+            android:configChanges="orientation|screenSize|keyboardHidden"
+            android:screenOrientation="portrait" />
+
+        <activity
             android:name="com.tencent.tauth.AuthActivity"
             android:launchMode="singleTask"
             android:noHistory="true">

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

@@ -0,0 +1,67 @@
+package com.cooleshow.teacher.adapter;
+
+import android.text.TextUtils;
+import android.widget.ImageView;
+
+import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.chad.library.adapter.base.viewholder.BaseViewHolder;
+import com.cooleshow.base.utils.GlideUtils;
+import com.cooleshow.teacher.R;
+import com.cooleshow.base.bean.StudentPageListBean;
+
+import java.util.ArrayList;
+
+import androidx.annotation.NonNull;
+
+/**
+ * Author by pq, Date on 2023/9/15.
+ */
+public class SelectTenantMemberAdapter extends BaseQuickAdapter<StudentPageListBean.RowsBean, BaseViewHolder> {
+    public ArrayList<StudentPageListBean.RowsBean> selectMembers;
+
+
+    public SelectTenantMemberAdapter() {
+        super(R.layout.item_select_tenant_member_layout);
+        selectMembers = new ArrayList<>();
+    }
+
+    public void addSelect(int pos, StudentPageListBean.RowsBean bean) {
+        int contain = isContain(bean.getUserId());
+        if (contain != -1) {
+            selectMembers.remove(contain);
+        } else {
+            selectMembers.add(bean);
+        }
+        notifyItemChanged(pos);
+    }
+
+    private int isContain(String targetId) {
+        for (int i = 0; i < selectMembers.size(); i++) {
+            StudentPageListBean.RowsBean rowsBean = selectMembers.get(i);
+            if (TextUtils.equals(rowsBean.getUserId(), targetId)) {
+                return i;
+            }
+        }
+        return -1;
+    }
+
+    public ArrayList<StudentPageListBean.RowsBean> getSelect() {
+        return selectMembers;
+    }
+
+    @Override
+    protected void convert(@NonNull BaseViewHolder holder, StudentPageListBean.RowsBean bean) {
+        holder.setText(R.id.tv_name, bean.getUsername());
+
+        ImageView iv_avatar = holder.getView(R.id.iv_avatar);
+        GlideUtils.INSTANCE.loadImage(getContext(), bean.getAvatar(), iv_avatar, com.cooleshow.base.R.drawable.icon_default_head);
+
+        ImageView iv_check = holder.getView(R.id.iv_check);
+
+        if (isContain(bean.getUserId()) != -1) {
+            iv_check.setImageResource(R.drawable.icon_check_select);
+        } else {
+            iv_check.setImageResource(com.cooleshow.base.R.drawable.icon_check_select_default);
+        }
+    }
+}

+ 4 - 2
teacher/src/main/java/com/cooleshow/teacher/api/APIService.java

@@ -10,6 +10,7 @@ import com.cooleshow.teacher.bean.HomeLiveAndVideoBean;
 import com.cooleshow.teacher.bean.HomeMenuBean;
 import com.cooleshow.teacher.bean.LiveListBean;
 import com.cooleshow.teacher.bean.LivePlayBackDataBean;
+import com.cooleshow.base.bean.StudentPageListBean;
 import com.cooleshow.teacher.bean.TeacherPromoteIncomeBean;
 import com.cooleshow.teacher.bean.UnBindTenantDetailBean;
 import com.cooleshow.teacher.bean.request.AssignHomeWorkEntry;
@@ -56,7 +57,6 @@ import com.cooleshow.teacher.bean.request.TeacherPracticeCourseEntry;
 import com.cooleshow.teacher.bean.request.UnBindCardEntry;
 import com.cooleshow.usercenter.bean.SetDetailBean;
 import com.cooleshow.usercenter.bean.TeacherUserInfo;
-import com.cooleshow.usercenter.bean.UserInfo;
 import com.daya.live_teaching.model.CoursewareListBean;
 
 import java.util.ArrayList;
@@ -67,7 +67,6 @@ import io.reactivex.rxjava3.core.Observable;
 import okhttp3.RequestBody;
 import okhttp3.ResponseBody;
 import retrofit2.http.Body;
-import retrofit2.http.Field;
 import retrofit2.http.FieldMap;
 import retrofit2.http.FormUrlEncoded;
 import retrofit2.http.GET;
@@ -828,4 +827,7 @@ public interface APIService {
 
     @POST(TEACHER_GROUP+"teacher/unbindTenantCancel")
     Observable<BaseResponse<Object>> cancelUnbindApply();
+
+    @POST(TEACHER_GROUP+"student/page")
+    Observable<BaseResponse<StudentPageListBean>> getStudentPage(@Body RequestBody requestBody);
 }

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

@@ -0,0 +1,19 @@
+package com.cooleshow.teacher.contract;
+
+import com.cooleshow.base.presenter.view.BaseView;
+import com.cooleshow.base.bean.StudentPageListBean;
+
+/**
+ * 创建日期:2022/5/18 14:11
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public interface SelectTenantMemberContract {
+    interface SelectTenantView extends BaseView {
+
+        void getStudentListSuccess(StudentPageListBean data);
+    }
+    interface Presenter {
+    }
+}

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

@@ -0,0 +1,39 @@
+package com.cooleshow.teacher.presenter.mine;
+
+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.base.bean.StudentPageListBean;
+import com.cooleshow.teacher.contract.SelectTenantMemberContract;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+/**
+ * 创建日期:2022/5/18 14:08
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public class SelectTenantMemberPresenter extends BasePresenter<SelectTenantMemberContract.SelectTenantView> implements SelectTenantMemberContract.Presenter {
+    public void getTenantStudentList() {
+        if (getView() != null) {
+            getView().showLoading();
+        }
+        JSONObject jsonObject = new JSONObject();
+        try {
+            jsonObject.put("bindTenant", 1);
+        } catch (JSONException e) {
+            throw new RuntimeException(e);
+        }
+        addSubscribe(create(APIService.class).getStudentPage(RequestBodyUtil.convertToRequestBodyJson(jsonObject.toString())), new BaseObserver<StudentPageListBean>(getView()) {
+            @Override
+            protected void onSuccess(StudentPageListBean data) {
+                if (getView() != null) {
+                    getView().getStudentListSuccess(data);
+                }
+            }
+        });
+    }
+}

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

@@ -0,0 +1,143 @@
+package com.cooleshow.teacher.ui.mine;
+
+import android.content.Intent;
+import android.os.Bundle;
+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.router.RouterPath;
+import com.cooleshow.base.ui.activity.BaseMVPActivity;
+import com.cooleshow.base.utils.SizeUtils;
+import com.cooleshow.base.utils.ToastUtil;
+import com.cooleshow.base.utils.helper.QMUIStatusBarHelper;
+import com.cooleshow.base.widgets.CommonBottomItemDecoration;
+import com.cooleshow.base.widgets.EmptyViewLayout;
+import com.cooleshow.teacher.R;
+import com.cooleshow.teacher.adapter.SelectTenantMemberAdapter;
+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.scwang.smart.refresh.layout.api.RefreshLayout;
+import com.scwang.smart.refresh.layout.listener.OnRefreshListener;
+
+import java.util.ArrayList;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+import androidx.recyclerview.widget.SimpleItemAnimator;
+
+/**
+ * Author by pq, Date on 2023/9/15.
+ */
+@Route(path = RouterPath.MineCenter.SELECT_TENANT_MEMBER)
+public class SelectTenantMemberActivity extends BaseMVPActivity<AcSelectTenantMemberLayoutBinding, SelectTenantMemberPresenter> implements SelectTenantMemberContract.SelectTenantView, View.OnClickListener {
+
+    private SelectTenantMemberAdapter mMemberAdapter;
+
+
+    @Override
+    protected void onCreate(@Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        QMUIStatusBarHelper.setStatusBarLightMode(this);
+    }
+
+    @Override
+    protected void initView() {
+        initMidTitleToolBar(viewBinding.toolbarInclude.toolbar, "选择群成员");
+    }
+
+    @Override
+    public void initData() {
+        super.initData();
+        mMemberAdapter = new SelectTenantMemberAdapter();
+        EmptyViewLayout emptyViewLayout = new EmptyViewLayout(this);
+        emptyViewLayout.setContent(R.drawable.icon_empty_content, "暂无学员");
+        mMemberAdapter.setEmptyView(emptyViewLayout);
+        SimpleItemAnimator animator = (SimpleItemAnimator) viewBinding.recyclerView.getItemAnimator();
+        if (animator != null) {
+            animator.setSupportsChangeAnimations(false);
+        }
+        CommonBottomItemDecoration commonBottomItemDecoration = new CommonBottomItemDecoration(0, 0, SizeUtils.dp2px(71), 0);
+        viewBinding.recyclerView.addItemDecoration(commonBottomItemDecoration);
+        viewBinding.recyclerView.setLayoutManager(new LinearLayoutManager(this));
+        viewBinding.recyclerView.setAdapter(mMemberAdapter);
+        initListener();
+
+        getData();
+    }
+
+    private void getData() {
+        presenter.getTenantStudentList();
+    }
+
+    private void initListener() {
+        viewBinding.tvConfirm.setOnClickListener(this);
+        mMemberAdapter.setOnItemClickListener(new OnItemClickListener() {
+            @Override
+            public void onItemClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) {
+                if (position < mMemberAdapter.getData().size()) {
+                    StudentPageListBean.RowsBean rowsBean = mMemberAdapter.getData().get(position);
+                    mMemberAdapter.addSelect(position, rowsBean);
+                }
+            }
+        });
+        viewBinding.refreshLayout.setOnRefreshListener(new OnRefreshListener() {
+            @Override
+            public void onRefresh(@NonNull RefreshLayout refreshLayout) {
+                getData();
+            }
+        });
+    }
+
+    @Override
+    protected AcSelectTenantMemberLayoutBinding getLayoutView() {
+        return AcSelectTenantMemberLayoutBinding.inflate(getLayoutInflater());
+    }
+
+    @Override
+    protected SelectTenantMemberPresenter createPresenter() {
+        return new SelectTenantMemberPresenter();
+    }
+
+    @Override
+    public void getStudentListSuccess(StudentPageListBean data) {
+        if (!checkActivityExist()) {
+            return;
+        }
+        if (mMemberAdapter == null) {
+            return;
+        }
+        if (data != null && data.getRows() != null && data.getRows().size() > 0) {
+            mMemberAdapter.setList(data.getRows());
+        } else {
+            mMemberAdapter.getData().clear();
+            mMemberAdapter.notifyDataSetChanged();
+        }
+    }
+
+    @Override
+    public void onClick(View v) {
+        int id = v.getId();
+        if (id == R.id.tv_confirm) {
+            ArrayList<StudentPageListBean.RowsBean> selectList = mMemberAdapter.getSelect();
+            if (selectList == null || selectList.size() == 0) {
+                ToastUtil.getInstance().showShort("请选择学员");
+                return;
+            }
+            returnResult(selectList);
+            return;
+        }
+    }
+
+    private void returnResult(ArrayList<StudentPageListBean.RowsBean> select) {
+        Intent intent = new Intent();
+        intent.putParcelableArrayListExtra("result", select);
+        setResult(RESULT_OK, intent);
+        finish();
+    }
+}

+ 44 - 0
teacher/src/main/res/layout/ac_select_tenant_member_layout.xml

@@ -0,0 +1,44 @@
+<?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"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <include
+        android:id="@+id/toolbar_include"
+        layout="@layout/common_toolbar_layout" />
+
+    <com.scwang.smart.refresh.layout.SmartRefreshLayout
+        android:id="@+id/refresh_layout"
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/toolbar_include"
+        app:srlEnableLoadMore="false"
+        app:srlEnableRefresh="true">
+
+        <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>
+
+
+    <TextView
+        android:id="@+id/tv_confirm"
+        android:layout_width="match_parent"
+        android:layout_height="44dp"
+        android:layout_marginLeft="28dp"
+        android:layout_marginRight="28dp"
+        android:layout_marginBottom="17dp"
+        android:background="@drawable/shape_course_status_ing"
+        android:gravity="center"
+        android:text="完成"
+        android:textColor="@color/white"
+        android:textSize="@dimen/sp_14"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintLeft_toLeftOf="parent" />
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 55 - 0
teacher/src/main/res/layout/item_select_tenant_member_layout.xml

@@ -0,0 +1,55 @@
+<?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="@color/white"
+    android:paddingStart="18dp"
+    android:paddingTop="19dp"
+    android:paddingEnd="30dp">
+
+    <com.cooleshow.base.widgets.QMUIRadiusImageView
+        android:id="@+id/iv_avatar"
+        android:layout_width="39dp"
+        android:layout_height="39dp"
+        android:layout_marginBottom="19dp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        app:qmui_corner_radius="5dp" />
+
+    <TextView
+        android:id="@+id/tv_name"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_marginEnd="5dp"
+        android:ellipsize="end"
+        android:maxLines="1"
+        android:paddingStart="14dp"
+        android:textColor="@color/color_333333"
+        android:textSize="@dimen/sp_17"
+        android:textStyle="bold"
+        app:layout_constraintBottom_toBottomOf="@+id/iv_avatar"
+        app:layout_constraintLeft_toRightOf="@+id/iv_avatar"
+        app:layout_constraintRight_toLeftOf="@+id/iv_check"
+        app:layout_constraintTop_toTopOf="@+id/iv_avatar"
+        tools:text="张子山" />
+
+    <ImageView
+        android:id="@+id/iv_check"
+        android:layout_width="18dp"
+        android:layout_height="18dp"
+        android:src="@drawable/icon_check_select_default"
+        app:layout_constraintBottom_toBottomOf="@+id/iv_avatar"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintTop_toTopOf="@+id/iv_avatar" />
+
+    <View
+        android:id="@+id/view_line"
+        android:layout_width="match_parent"
+        android:layout_height="1px"
+        android:background="@color/color_f2f2f2"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintLeft_toLeftOf="parent" />
+</androidx.constraintlayout.widget.ConstraintLayout>