diff --git a/baselib/src/main/java/com/tenlionsoft/baselib/constant/PathConfig.java b/baselib/src/main/java/com/tenlionsoft/baselib/constant/PathConfig.java
index 78dcfb8..e59d555 100755
--- a/baselib/src/main/java/com/tenlionsoft/baselib/constant/PathConfig.java
+++ b/baselib/src/main/java/com/tenlionsoft/baselib/constant/PathConfig.java
@@ -246,4 +246,21 @@ public class PathConfig {
public static final String PATH_MODULE_PAD_OA_FRAGMENT_DOCUMENT_DETAIL = "/oamodule/fragment/documentDetail";//文档详情
public static final String PATH_MODULE_PAD_OA_FRAGMENT_DOCUMENT_EDIT = "/oamodule/fragment/documentEdit";//文档编辑
+ public static final String PATH_MODULE_PAD_OA_FRAGMENT_EMAIL_IN_BOX = "/oamodule/fragment/emailInBox";//邮件收件箱
+ public static final String PATH_MODULE_PAD_OA_FRAGMENT_EMAIL_SEND_BOX = "/oamodule/fragment/emailSendBox";//邮件发件箱
+ public static final String PATH_MODULE_PAD_OA_FRAGMENT_EMAIL_DRAFT_BOX = "/oamodule/fragment/emailDraftBox";//邮件草稿箱
+ public static final String PATH_MODULE_PAD_OA_FRAGMENT_EMAIL_RECYCLE_BOX = "/oamodule/fragment/emailRecycleBox";//邮件回收站
+
+ public static final String PATH_MODULE_PAD_OA_FRAGMENT_EMAIL_IN_DETAIL = "/oamodule/fragment/emailInDetail";//邮件收件详情
+ public static final String PATH_MODULE_PAD_OA_FRAGMENT_EMAIL_SEND_DETAIL = "/oamodule/fragment/emailSendDetail";//邮件发件详情
+ public static final String PATH_MODULE_PAD_OA_FRAGMENT_EMAIL_DRAFT_DETAIL = "/oamodule/fragment/emailDraftDetail";//邮件草稿详情
+ public static final String PATH_MODULE_PAD_OA_FRAGMENT_EMAIL_RECYCLE_DETAIL = "/oamodule/fragment/emailRecycleDetail";//回收站邮件详情
+
+ public static final String PATH_MODULE_PAD_OA_FRAGMENT_EMAIL_SEND = "/oamodule/fragment/emailSend";//邮件发信
+
+ public static final String PATH_MODULE_PAD_OA_FRAGMENT_USER_RECORD_ADD = "/oamodule/fragment/userRecordAdd";//个人档案添加
+ public static final String PATH_MODULE_PAD_OA_FRAGMENT_USER_RECORD_EDIT = "/oamodule/fragment/userRecordEdit";//个人档案添加
+ public static final String PATH_MODULE_PAD_OA_FRAGMENT_USER_RECORD_DETAIL = "/oamodule/fragment/userRecordDetail";//个人档案详情
+
+
}
diff --git a/baselib/src/main/res/drawable-xhdpi/ic_step_start_one.png b/baselib/src/main/res/drawable-xhdpi/ic_step_start_one.png
new file mode 100644
index 0000000..cb31745
Binary files /dev/null and b/baselib/src/main/res/drawable-xhdpi/ic_step_start_one.png differ
diff --git a/baselib/src/main/res/drawable/shp_rectangle_gray_no_f.xml b/baselib/src/main/res/drawable/shp_rectangle_gray_no_f.xml
new file mode 100755
index 0000000..531ffc7
--- /dev/null
+++ b/baselib/src/main/res/drawable/shp_rectangle_gray_no_f.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/baselib/src/main/res/drawable/switch_custom_w_g.xml b/baselib/src/main/res/drawable/switch_custom_w_g.xml
new file mode 100755
index 0000000..6484ee0
--- /dev/null
+++ b/baselib/src/main/res/drawable/switch_custom_w_g.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/oamodule/src/main/java/com/tenlionsoft/oamodule/adapter/EmailAdapter.java b/oamodule/src/main/java/com/tenlionsoft/oamodule/adapter/EmailAdapter.java
index 50c9733..0d55ebd 100644
--- a/oamodule/src/main/java/com/tenlionsoft/oamodule/adapter/EmailAdapter.java
+++ b/oamodule/src/main/java/com/tenlionsoft/oamodule/adapter/EmailAdapter.java
@@ -74,8 +74,10 @@ public class EmailAdapter extends BaseRecyclerAdapter {
EmailInboxListBean.RowsBean bean = (EmailInboxListBean.RowsBean) o;
if (bean.getReadTag() == 1) {
h.mTvTitle.setTextColor(Color.GRAY);
+ h.mTvContent.setTextColor(Color.GRAY);
} else {
h.mTvTitle.setTextColor(Color.BLACK);
+ h.mTvContent.setTextColor(Color.BLACK);
}
h.mTvTitle.setText(bean.getTitle());
h.mTvContent.setText(Html.fromHtml(bean.getContent()));
diff --git a/oamodule/src/main/java/com/tenlionsoft/oamodule/adapter/ScheduleTimeLineAdapter.java b/oamodule/src/main/java/com/tenlionsoft/oamodule/adapter/ScheduleTimeLineAdapter.java
index 7404f28..2d58f8f 100644
--- a/oamodule/src/main/java/com/tenlionsoft/oamodule/adapter/ScheduleTimeLineAdapter.java
+++ b/oamodule/src/main/java/com/tenlionsoft/oamodule/adapter/ScheduleTimeLineAdapter.java
@@ -36,7 +36,11 @@ public class ScheduleTimeLineAdapter extends BaseRecyclerAdapter 1) {
+ h.mIvStep.setImageResource(R.drawable.ic_step_start);
+ } else {
+ h.mIvStep.setImageResource(R.drawable.ic_step_start_one);
+ }
} else if (i == (mData.size() - 1)) {
//最后一条
int i1 = TimeUtils.compareDateExac(b.getScheduleStartTime(), TimeUtils.getNowHourMMss());
diff --git a/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/activitys/home/PadMainActivity.java b/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/activitys/home/PadMainActivity.java
index 4aa8751..c904d39 100644
--- a/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/activitys/home/PadMainActivity.java
+++ b/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/activitys/home/PadMainActivity.java
@@ -1,6 +1,7 @@
package com.tenlionsoft.oamodule.pad.activitys.home;
import android.content.Intent;
+import android.text.TextUtils;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.ImageView;
@@ -16,6 +17,7 @@ import com.google.gson.Gson;
import com.gyf.immersionbar.ImmersionBar;
import com.hjq.toast.ToastUtils;
import com.tenlionsoft.baselib.constant.PathConfig;
+import com.tenlionsoft.baselib.core.beans.BaseSuccessBean;
import com.tenlionsoft.baselib.core.beans.UserInfoBean;
import com.tenlionsoft.baselib.core.network.update.CheckUpdateUtils;
import com.tenlionsoft.baselib.core.network.update.service.DownloadService;
@@ -33,6 +35,7 @@ import com.tenlionsoft.baselib.utils.KeyBoardListener;
import com.tenlionsoft.baselib.utils.UserLgUtils;
import com.tenlionsoft.oamodule.R;
import com.tenlionsoft.oamodule.R2;
+import com.tenlionsoft.oamodule.net.OAApi;
import java.util.ArrayList;
import java.util.HashMap;
@@ -204,6 +207,37 @@ public class PadMainActivity extends BaseActivity {
super.onDestroy();
}
+ /**
+ * 获取提示数量
+ */
+ public void getHintNum() {
+ RetrofitManager.getInstance()
+ .create(OAApi.class)
+ .getEmailUnReadCount()
+ .compose(RxTransformer.getTransformer())
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(@NonNull BaseSuccessBean bean) {
+ setEmailHint(bean.getData());
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ mTvEmailHint.setVisibility(View.GONE);
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+ }
+
@Override
protected void onResume() {
super.onResume();
@@ -216,6 +250,7 @@ public class PadMainActivity extends BaseActivity {
.error(R.drawable.ic_user_default)
.placeholder(R.drawable.ic_user_default))
.into(mIvUserIcon);
+ getHintNum();
}
//适配虚拟按钮
@@ -246,7 +281,6 @@ public class PadMainActivity extends BaseActivity {
break;
}
setStatusBarStyle();
-
}
private void chooseHome() {
@@ -333,24 +367,28 @@ public class PadMainActivity extends BaseActivity {
//隐藏上一个fragment
if (mPreFragment != null) {
fragmentTransaction.hide(mPreFragment)
- .setCustomAnimations(R.anim.slide_right_in,
+ .setCustomAnimations(
+ R.anim.slide_right_in,
R.anim.slide_left_out,
R.anim.slide_left_in,
R.anim.slide_right_out);
}
if (fragment.isAdded()) {
- fragmentTransaction.show(fragment)
- .setCustomAnimations(R.anim.slide_right_in,
- R.anim.slide_left_out,
- R.anim.slide_left_in,
- R.anim.slide_right_out)
+ fragmentTransaction.setCustomAnimations(
+ R.anim.slide_right_in,
+ R.anim.slide_left_out,
+ R.anim.slide_left_in,
+ R.anim.slide_right_out)
+ .show(fragment)
.commit();
} else {
- fragmentTransaction.add(R.id.fl_content, fragment, tag)
- .setCustomAnimations(R.anim.slide_right_in,
+ fragmentTransaction
+ .setCustomAnimations(
+ R.anim.slide_right_in,
R.anim.slide_left_out,
R.anim.slide_left_in,
R.anim.slide_right_out)
+ .add(R.id.fl_content, fragment, tag)
.commit();
}
mPreFragment = fragment;
@@ -404,18 +442,28 @@ public class PadMainActivity extends BaseActivity {
@Override
public void refreshContent(String... s) {
- if (s != null && s.length > 0) {
- int i = Integer.parseInt(s[0]);
- if (i <= 0) {
- mTvEmailHint.setVisibility(View.GONE);
- } else {
- mTvEmailHint.setVisibility(View.VISIBLE);
- if (i > 99) {
- mTvEmailHint.setText("99+");
+ setEmailHint(s[0]);
+ }
+
+ private void setEmailHint(String num) {
+ try {
+ if (!TextUtils.isEmpty(num)) {
+ int i = Integer.parseInt(num);
+ if (i <= 0) {
+ mTvEmailHint.setVisibility(View.GONE);
} else {
- mTvEmailHint.setText(s[0]);
+ mTvEmailHint.setVisibility(View.VISIBLE);
+ if (i > 99) {
+ mTvEmailHint.setText("99+");
+ } else {
+ mTvEmailHint.setText(num);
+ }
}
+ } else {
+ mTvEmailHint.setVisibility(View.GONE);
}
+ } catch (Exception e) {
+ mTvEmailHint.setVisibility(View.GONE);
}
}
@@ -443,6 +491,10 @@ public class PadMainActivity extends BaseActivity {
list.remove(fragment);
BaseFragment showFragment = list.get(list.size() - 1);
getSupportFragmentManager().beginTransaction()
+ .setCustomAnimations(R.anim.slide_right_in,
+ R.anim.slide_left_out,
+ R.anim.slide_left_in,
+ R.anim.slide_right_out)
.remove(fragment)
.show(showFragment)
.commit();
@@ -503,4 +555,16 @@ public class PadMainActivity extends BaseActivity {
@Override
protected void doSearchByTitle() {
}
+
+ /**
+ * 刷新用户头像
+ */
+ public void notifyUserIcon() {
+ Glide.with(mActivity)
+ .load(BaseUrlApi.BASE_IMG_URL + UserLgUtils.getAvatar())
+ .apply(RequestOptions.bitmapTransform(new CircleCrop())
+ .error(R.drawable.ic_user_default)
+ .placeholder(R.drawable.ic_user_default))
+ .into(mIvUserIcon);
+ }
}
\ No newline at end of file
diff --git a/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/PadEmailFragment.java b/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/PadEmailFragment.java
index 0b766e8..d877f3e 100644
--- a/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/PadEmailFragment.java
+++ b/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/PadEmailFragment.java
@@ -1,5 +1,6 @@
package com.tenlionsoft.oamodule.pad.fragments;
+import android.content.Context;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
@@ -7,15 +8,18 @@ import android.widget.RelativeLayout;
import android.widget.TextView;
import com.alibaba.android.arouter.facade.annotation.Route;
-import com.alibaba.android.arouter.launcher.ARouter;
import com.tenlionsoft.baselib.constant.PathConfig;
import com.tenlionsoft.baselib.core.beans.BaseSuccessBean;
import com.tenlionsoft.baselib.core.retrofit_net.RetrofitManager;
import com.tenlionsoft.baselib.core.retrofit_net.conver.RxTransformer;
import com.tenlionsoft.baselib.core.widget.base.BaseFragment;
+import com.tenlionsoft.baselib.core.widget.base.FragmentUtils;
import com.tenlionsoft.oamodule.R;
import com.tenlionsoft.oamodule.R2;
import com.tenlionsoft.oamodule.net.OAApi;
+import com.tenlionsoft.oamodule.pad.activitys.home.PadMainActivity;
+
+import org.jetbrains.annotations.NotNull;
import butterknife.BindView;
import butterknife.ButterKnife;
@@ -58,6 +62,7 @@ public class PadEmailFragment extends BaseFragment {
LinearLayout mLlRecycleBox;
@BindView(R2.id.ll_content)
LinearLayout mLlContent;
+ private PadMainActivity mMainActivity;
@Override
protected int getContentViewId() {
@@ -70,34 +75,35 @@ public class PadEmailFragment extends BaseFragment {
setStateView(STATE_SUCCESS);
mSrlView.setEnableLoadMore(false);
mSrlView.setEnableRefresh(false);
- mIvAdd.setOnClickListener(v -> ARouter.getInstance()
- .build(PathConfig.PATH_MODULE_OA_ACTIVITY_EMAIL_SEND)
- .navigation());
- mLlSendBox.setOnClickListener(v -> ARouter.getInstance()
- .build(PathConfig.PATH_MODULE_OA_ACTIVITY_EMAIL_SENTBOX)
- .navigation());//发件箱
- mLlRecycleBox.setOnClickListener(v -> ARouter.getInstance()
- .build(PathConfig.PATH_MODULE_OA_ACTIVITY_EMAIL_RECYCLE)
- .navigation());//回收站
- mLlDraftBox.setOnClickListener(v -> ARouter.getInstance()
- .build(PathConfig.PATH_MODULE_OA_ACTIVITY_EMAIL_DRAFT)
- .navigation());//草稿箱
- mRlInbox.setOnClickListener(v -> ARouter.getInstance()
- .build(PathConfig.PATH_MODULE_OA_ACTIVITY_EMAIL_INBOX)
- .navigation());//收件箱
- mLlBaseSearchCancelTitle.setOnClickListener(v -> ARouter.getInstance()
- .build(PathConfig.PATH_MODULE_OA_ACTIVITY_EMAIL_INBOX)
- .withString("key", "search")
- .withTransition(R.anim.anim_fade_in, R.anim.anim_fade_out)
- .navigation(mActivity));
+ mIvAdd.setOnClickListener(v -> openFragment(PathConfig.PATH_MODULE_PAD_OA_FRAGMENT_EMAIL_SEND));//发邮件
+ mLlSendBox.setOnClickListener(v -> openFragment(PathConfig.PATH_MODULE_PAD_OA_FRAGMENT_EMAIL_SEND_BOX));//发件箱
+ mLlRecycleBox.setOnClickListener(v -> openFragment(PathConfig.PATH_MODULE_PAD_OA_FRAGMENT_EMAIL_RECYCLE_BOX));//回收站
+ mLlDraftBox.setOnClickListener(v -> openFragment(PathConfig.PATH_MODULE_PAD_OA_FRAGMENT_EMAIL_DRAFT_BOX));//草稿箱
+ mRlInbox.setOnClickListener(v -> openFragment(PathConfig.PATH_MODULE_PAD_OA_FRAGMENT_EMAIL_IN_BOX));//收件箱
+ mLlBaseSearchCancelTitle.setOnClickListener(v -> {
+ BaseFragment fragment = FragmentUtils.getFragmentOne(PathConfig.PATH_MODULE_PAD_OA_FRAGMENT_EMAIL_IN_BOX, "key", "search");
+ mMainActivity.addFragment(3, fragment);
+ });
getInboxList();
}
+ private void openFragment(String path) {
+ BaseFragment fragment = FragmentUtils.getFragment(path);
+ mMainActivity.addFragment(3, fragment);
+ }
+
@Override
- public void onResume() {
- super.onResume();
- //获取各个类型个数
- getInboxList();
+ public void onAttach(@androidx.annotation.NonNull @NotNull Context context) {
+ super.onAttach(context);
+ mMainActivity = (PadMainActivity) getActivity();
+ }
+
+ @Override
+ public void onHiddenChanged(boolean hidden) {
+ super.onHiddenChanged(hidden);
+ if (!hidden) {
+ getInboxList();
+ }
}
/**
@@ -117,13 +123,11 @@ public class PadEmailFragment extends BaseFragment {
@Override
public void onNext(@NonNull BaseSuccessBean bean) {
mTvInboxNum.setText(bean.getData() + "");
- mActivity.refreshContent(bean.getData());
}
@Override
public void onError(@NonNull Throwable e) {
mTvInboxNum.setText("0");
- mActivity.refreshContent("0");
}
@Override
diff --git a/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/PadMineFragment.java b/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/PadMineFragment.java
index c95dfe7..e1d8602 100644
--- a/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/PadMineFragment.java
+++ b/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/PadMineFragment.java
@@ -1,6 +1,8 @@
package com.tenlionsoft.oamodule.pad.fragments;
+import android.app.AlertDialog;
import android.app.ProgressDialog;
+import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
@@ -17,7 +19,6 @@ import android.widget.RelativeLayout;
import android.widget.TextView;
import com.alibaba.android.arouter.facade.annotation.Route;
-import com.alibaba.android.arouter.launcher.ARouter;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.resource.bitmap.CircleCrop;
import com.bumptech.glide.request.RequestOptions;
@@ -34,7 +35,9 @@ import com.tenlionsoft.baselib.core.beans.UserInfoBean;
import com.tenlionsoft.baselib.core.retrofit_net.BaseUrlApi;
import com.tenlionsoft.baselib.core.retrofit_net.RetrofitManager;
import com.tenlionsoft.baselib.core.retrofit_net.api.BaseApiService;
+import com.tenlionsoft.baselib.core.retrofit_net.conver.RxTransformer;
import com.tenlionsoft.baselib.core.widget.base.BaseFragment;
+import com.tenlionsoft.baselib.core.widget.base.FragmentUtils;
import com.tenlionsoft.baselib.core.widget.views.ButtomDialogView;
import com.tenlionsoft.baselib.utils.AesUtil;
import com.tenlionsoft.baselib.utils.AppUtils;
@@ -46,12 +49,18 @@ import com.tenlionsoft.baselib.utils.UIUtil;
import com.tenlionsoft.baselib.utils.UserLgUtils;
import com.tenlionsoft.oamodule.R;
import com.tenlionsoft.oamodule.R2;
+import com.tenlionsoft.oamodule.beans.UserRecordDetailBean;
+import com.tenlionsoft.oamodule.net.OAApi;
+import com.tenlionsoft.oamodule.pad.activitys.home.PadMainActivity;
+
+import org.jetbrains.annotations.NotNull;
import java.io.File;
import java.util.ArrayList;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
+import androidx.annotation.NonNull;
import androidx.core.content.FileProvider;
import butterknife.BindView;
import butterknife.ButterKnife;
@@ -97,6 +106,7 @@ public class PadMineFragment extends BaseFragment {
@BindView(R2.id.ll_login_out)
LinearLayout mLlLoginOut;
private String mPicPath;
+ private PadMainActivity mMainActivity;
private ActivityResultLauncher mLauncher = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
result -> {
@@ -120,6 +130,7 @@ public class PadMineFragment extends BaseFragment {
}
});
+
@Override
protected int getContentViewId() {
return R.layout.fragment_pad_mine;
@@ -132,20 +143,72 @@ public class PadMineFragment extends BaseFragment {
mSrlView.setEnableLoadMore(false);
mSrlView.setEnableRefresh(false);
-
mLlLoginOut.setOnClickListener(v -> doLoginOut());//退出登录
-
- mLlAboutUs.setOnClickListener(v -> ARouter.getInstance()
- .build(PathConfig.PATH_MODULE_OA_ACTIVITY_RECORD_USER_DETAIL)
- .navigation());
- mLlSchedule.setOnClickListener(v -> ARouter.getInstance()
- .build(PathConfig.PATH_MODULE_OA_ACTIVITY_SCHEDULE)
- .navigation());//我的日程
- mLlDayWork.setOnClickListener(v -> ARouter.getInstance()
- .build(PathConfig.PATH_MODULE_OA_ACTIVITY_ROUTINE_WORK)
- .navigation());//日常工作
+ mLlAboutUs.setOnClickListener(v -> getDetailData());//个人档案
+ mLlSchedule.setOnClickListener(v -> {
+ BaseFragment fragment = FragmentUtils.getFragment(PathConfig.PATH_MODULE_PAD_OA_FRAGMENT_SCHEDULE);
+ mMainActivity.addFragment(4, fragment);
+ });//我的日程
+ mLlDayWork.setOnClickListener(v -> {
+ BaseFragment fragment = FragmentUtils.getFragment(PathConfig.PATH_MODULE_PAD_OA_FRAGMENT_ROUTINE_WORK);
+ mMainActivity.addFragment(4, fragment);
+ });//日常工作
mIvUserIcon.setOnClickListener(v -> changeUserIcon());
+ setUserInfo();
+ }
+ /**
+ * 获取个人档案是否录入
+ */
+ private void getDetailData() {
+ ProgressDialog dialog = UIUtil.initDialog(mActivity, "获取中...");
+ dialog.show();
+ RetrofitManager.getInstance()
+ .create(OAApi.class)
+ .getUserRecordDetailById()
+ .compose(RxTransformer.getTransformer())
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(@io.reactivex.rxjava3.annotations.NonNull Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(@io.reactivex.rxjava3.annotations.NonNull UserRecordDetailBean userRecordDetailBean) {
+ if (dialog.isShowing()) dialog.dismiss();
+ if (!TextUtils.isEmpty(userRecordDetailBean.getUserArchivesId())) {
+ BaseFragment fragment = FragmentUtils.getFragment(PathConfig.PATH_MODULE_PAD_OA_FRAGMENT_USER_RECORD_DETAIL);
+ mMainActivity.addFragment(4, fragment);
+ } else {
+ showConfirmDialog();
+ }
+ }
+
+ @Override
+ public void onError(@io.reactivex.rxjava3.annotations.NonNull Throwable e) {
+ if (dialog.isShowing()) dialog.dismiss();
+ ExceptionHandler.handleException(e);
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+ }
+
+ private void showConfirmDialog() {
+ new AlertDialog.Builder(mActivity)
+ .setTitle("提示")
+ .setMessage("您目前未录入个人档案,现在是否去录入?")
+ .setPositiveButton("确定", (dialog, which) -> {
+ dialog.dismiss();
+ BaseFragment fragment = FragmentUtils.getFragment(PathConfig.PATH_MODULE_PAD_OA_FRAGMENT_USER_RECORD_ADD);
+ mMainActivity.addFragment(4, fragment);
+ })
+ .setNegativeButton("取消", (dialog, which) -> dialog.dismiss())
+ .create()
+ .show();
}
@@ -154,8 +217,14 @@ public class PadMineFragment extends BaseFragment {
}
@Override
- public void onResume() {
- super.onResume();
+ public void onHiddenChanged(boolean hidden) {
+ super.onHiddenChanged(hidden);
+ if (!hidden) {
+ setUserInfo();
+ }
+ }
+
+ private void setUserInfo() {
Glide.with(mActivity)
.load(BaseUrlApi.BASE_IMG_URL + UserLgUtils.getAvatar())
.apply(RequestOptions.bitmapTransform(new CircleCrop())
@@ -172,9 +241,13 @@ public class PadMineFragment extends BaseFragment {
mTvDept.setText(depts.get(0).getDepartmentName());
}
}
-
}
+ @Override
+ public void onAttach(@NonNull @NotNull Context context) {
+ super.onAttach(context);
+ mMainActivity = (PadMainActivity) getActivity();
+ }
/**
* 选择上传的图片
@@ -366,6 +439,7 @@ public class PadMineFragment extends BaseFragment {
.placeholder(R.drawable.ic_user_default))
.into(mIvUserIcon);
ToastUtils.show("头像修改成功.");
+ mMainActivity.notifyUserIcon();
} else {
ToastUtils.show("头像修改失败,请稍后重试.");
}
diff --git a/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/email/DraftBoxFragment.java b/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/email/DraftBoxFragment.java
new file mode 100644
index 0000000..bee312c
--- /dev/null
+++ b/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/email/DraftBoxFragment.java
@@ -0,0 +1,227 @@
+package com.tenlionsoft.oamodule.pad.fragments.email;
+
+import android.content.Context;
+import android.text.TextUtils;
+import android.view.View;
+import android.view.inputmethod.EditorInfo;
+import android.widget.EditText;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import com.alibaba.android.arouter.facade.annotation.Route;
+import com.hjq.toast.ToastUtils;
+import com.scwang.smart.refresh.layout.SmartRefreshLayout;
+import com.tenlionsoft.baselib.constant.PathConfig;
+import com.tenlionsoft.baselib.core.retrofit_net.RetrofitManager;
+import com.tenlionsoft.baselib.core.retrofit_net.conver.RxTransformer;
+import com.tenlionsoft.baselib.core.widget.base.BaseFragment;
+import com.tenlionsoft.baselib.core.widget.base.FragmentUtils;
+import com.tenlionsoft.baselib.core.widget.views.CustomStateView;
+import com.tenlionsoft.baselib.utils.ExceptionHandler;
+import com.tenlionsoft.baselib.utils.LogUtils;
+import com.tenlionsoft.oamodule.R;
+import com.tenlionsoft.oamodule.R2;
+import com.tenlionsoft.oamodule.adapter.EmailAdapter;
+import com.tenlionsoft.oamodule.beans.EmailDraftListBean;
+import com.tenlionsoft.oamodule.net.OAApi;
+import com.tenlionsoft.oamodule.pad.activitys.home.PadMainActivity;
+
+import org.jetbrains.annotations.NotNull;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import io.reactivex.rxjava3.core.Observer;
+import io.reactivex.rxjava3.disposables.Disposable;
+
+/**
+ * 作者: adam
+ * 日期: 2022/5/11 - 10:16
+ * 邮箱: itgaojian@163.com
+ * 描述: 平板草稿箱
+ */
+@Route(path = PathConfig.PATH_MODULE_PAD_OA_FRAGMENT_EMAIL_DRAFT_BOX)
+public class DraftBoxFragment extends BaseFragment {
+
+ @BindView(R2.id.et_base_search_cancel)
+ EditText mEtBaseSearchCancel;
+ @BindView(R2.id.tv_base_search_cancel)
+ TextView mTvBaseSearchCancel;
+ @BindView(R2.id.ll_base_search_cancel)
+ LinearLayout mLlBaseSearchCancel;
+ @BindView(R2.id.rlv_content)
+ RecyclerView mRlvContent;
+ @BindView(R2.id.srl_content)
+ SmartRefreshLayout mSrlContent;
+ @BindView(R2.id.csv_state)
+ CustomStateView mCsvState;
+ private PadMainActivity mMainActivity;
+ private EmailAdapter mAdapter;
+ private List mDatas;
+ private int mCurrentPage = 1;
+ private String mKeywords = "";
+
+ @Override
+ protected int getContentViewId() {
+ return R.layout.fragment_draft_box;
+ }
+
+ @Override
+ protected void setDataToView(View dataView) {
+ ButterKnife.bind(this, dataView);
+ setStateView(STATE_SUCCESS);
+ mSrlView.setEnableRefresh(false);
+ mSrlView.setEnableLoadMore(false);
+ setTitleView(true);
+ mTvFragmentTitle.setText("草稿箱");
+ mIvFragmentBack.setOnClickListener(v -> mMainActivity.backFragment(3, this));
+
+
+ mSrlContent.setOnLoadMoreListener(v -> doLoadMore());
+ mSrlContent.setOnRefreshListener(v -> doRefresh());
+ mDatas = new ArrayList<>();
+ mAdapter = new EmailAdapter(mActivity, mDatas);
+ mRlvContent.setLayoutManager(new LinearLayoutManager(mActivity));
+ mRlvContent.setAdapter(mAdapter);
+ mAdapter.addOnItemClickListener(rowsBean -> {
+ BaseFragment fragment = FragmentUtils.getFragmentOne(PathConfig.PATH_MODULE_PAD_OA_FRAGMENT_EMAIL_DRAFT_DETAIL, "id", ((EmailDraftListBean.RowsBean) rowsBean).getMailId());
+ mMainActivity.addFragment(3, fragment);
+ });
+ mCsvState.setState(CustomStateView.STATE_LOAD);
+ doRefresh();
+ mEtBaseSearchCancel.setOnEditorActionListener((v, actionId, event) -> {
+ LogUtils.e("搜索==" + actionId);
+ if (actionId == EditorInfo.IME_ACTION_SEARCH) {
+ mActivity.hideSoftKeyboard();
+ mEtBaseSearchCancel.clearFocus();
+ mKeywords = v.getText().toString();
+ doRefresh();
+ return true;
+ } else {
+ return false;
+ }
+ });
+ mTvBaseSearchCancel.setOnClickListener(v -> {
+ mEtBaseSearchCancel.setText("");
+ mEtBaseSearchCancel.clearFocus();
+ mKeywords = "";
+ doRefresh();
+ });
+ }
+
+
+ /**
+ * 加载更多
+ */
+ private void doLoadMore() {
+ getDraftList(mCurrentPage);
+ }
+
+ /**
+ * 刷新
+ */
+ private void doRefresh() {
+ mDatas.clear();
+ mAdapter.setData(mDatas);
+ getDraftList(1);
+ }
+
+ @Override
+ public void onHiddenChanged(boolean hidden) {
+ super.onHiddenChanged(hidden);
+ if (!hidden) {
+ if (mIsRefresh) {
+ mIsRefresh = false;
+ doRefresh();
+ }
+ }
+ }
+
+ /**
+ * 获取文档列表
+ */
+ private void getDraftList(int currentPage) {
+ mCurrentPage = currentPage;
+ RetrofitManager.getInstance()
+ .create(OAApi.class)
+ .getEmailDraftList(mKeywords, mCurrentPage + "")
+ .compose(RxTransformer.getTransformer())
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(@io.reactivex.rxjava3.annotations.NonNull Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(@io.reactivex.rxjava3.annotations.NonNull EmailDraftListBean listBean) {
+ if (listBean.getRows() != null && listBean.getRows().size() > 0) {
+ ++mCurrentPage;
+ if (currentPage == 1) {
+ mDatas.clear();
+ mDatas.addAll(listBean.getRows());
+ } else {
+ mDatas.addAll(listBean.getRows());
+ }
+ mCsvState.setState(CustomStateView.STATE_SUCCESS);
+ mAdapter.notifyDataSetChanged();
+ mSrlContent.finishRefresh();
+ if (mDatas.size() >= listBean.getTotal()) {
+ mSrlContent.finishLoadMore();
+ mSrlContent.setNoMoreData(true);
+ } else {
+ mSrlContent.finishLoadMore();
+ mSrlContent.setNoMoreData(false);
+ }
+ } else {
+ mSrlContent.finishRefresh();
+ mSrlContent.finishLoadMore();
+ if (currentPage > 1) {
+ mSrlContent.setNoMoreData(true);
+ } else {
+ if (TextUtils.isEmpty(mKeywords)) {
+ //无数据
+ mCsvState.setState(CustomStateView.STATE_EMPTY);
+ } else {
+ mCsvState.setState(CustomStateView.STATE_EMPTY);
+ ToastUtils.show("未查询到相关内容");
+ }
+ }
+ }
+ }
+
+ @Override
+ public void onError(@io.reactivex.rxjava3.annotations.NonNull Throwable e) {
+ mSrlContent.finishLoadMore();
+ mSrlContent.finishRefresh();
+ ExceptionHandler.handleException(e);
+ mCsvState.setState(CustomStateView.STATE_ERROR);
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+ }
+
+ @Override
+ public void onAttach(@NonNull @NotNull Context context) {
+ super.onAttach(context);
+ mMainActivity = (PadMainActivity) getActivity();
+ }
+
+ @Override
+ protected void refreshView() {
+
+ }
+
+ @Override
+ protected void loadMoreData() {
+
+ }
+}
diff --git a/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/email/DraftDetailFragment.java b/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/email/DraftDetailFragment.java
new file mode 100644
index 0000000..5498595
--- /dev/null
+++ b/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/email/DraftDetailFragment.java
@@ -0,0 +1,325 @@
+package com.tenlionsoft.oamodule.pad.fragments.email;
+
+import android.app.AlertDialog;
+import android.app.ProgressDialog;
+import android.content.Context;
+import android.os.Bundle;
+import android.text.Html;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.alibaba.android.arouter.facade.annotation.Route;
+import com.alibaba.android.arouter.launcher.ARouter;
+import com.hjq.toast.ToastUtils;
+import com.tenlionsoft.baselib.constant.PathConfig;
+import com.tenlionsoft.baselib.core.beans.AddFileBean;
+import com.tenlionsoft.baselib.core.beans.BaseSuccessBean;
+import com.tenlionsoft.baselib.core.retrofit_net.BaseUrlApi;
+import com.tenlionsoft.baselib.core.retrofit_net.RetrofitManager;
+import com.tenlionsoft.baselib.core.retrofit_net.api.BaseApiService;
+import com.tenlionsoft.baselib.core.retrofit_net.bean.FileInfoBean;
+import com.tenlionsoft.baselib.core.retrofit_net.conver.RxTransformer;
+import com.tenlionsoft.baselib.core.widget.base.AddFileAdapter;
+import com.tenlionsoft.baselib.core.widget.base.BaseFragment;
+import com.tenlionsoft.baselib.core.widget.base.FragmentUtils;
+import com.tenlionsoft.baselib.utils.ExceptionHandler;
+import com.tenlionsoft.baselib.utils.FileUtils;
+import com.tenlionsoft.baselib.utils.UIUtil;
+import com.tenlionsoft.oamodule.R;
+import com.tenlionsoft.oamodule.R2;
+import com.tenlionsoft.oamodule.beans.EmailDraftDetailBean;
+import com.tenlionsoft.oamodule.net.OAApi;
+import com.tenlionsoft.oamodule.pad.activitys.home.PadMainActivity;
+
+import org.jetbrains.annotations.NotNull;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.GridLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import io.reactivex.rxjava3.core.Observer;
+import io.reactivex.rxjava3.disposables.Disposable;
+
+import static com.tenlionsoft.baselib.core.widget.PhotoActivity.TAG_IMGURL;
+
+/**
+ * 作者: adam
+ * 日期: 2022/5/11 - 10:44
+ * 邮箱: itgaojian@163.com
+ * 描述:
+ */
+@Route(path = PathConfig.PATH_MODULE_PAD_OA_FRAGMENT_EMAIL_DRAFT_DETAIL)
+public class DraftDetailFragment extends BaseFragment {
+ @BindView(R2.id.tv_title)
+ TextView mTvTitle;
+ @BindView(R2.id.tv_receiver)
+ TextView mTvReceiver;
+ @BindView(R2.id.tv_copy)
+ TextView mTvCopy;
+ @BindView(R2.id.tv_secret)
+ TextView mTvSecret;
+ @BindView(R2.id.tv_time)
+ TextView mTvTime;
+ @BindView(R2.id.tv_content)
+ TextView mTvContent;
+ @BindView(R2.id.rlv_files)
+ RecyclerView mRlvFiles;
+ @BindView(R2.id.iv_del)
+ ImageView mIvDel;
+ @BindView(R2.id.iv_transfer)
+ ImageView mIvTransfer;
+ private PadMainActivity mMainActivity;
+ private String mId;
+
+ @Override
+ protected int getContentViewId() {
+ return R.layout.fragment_draft_detail;
+ }
+
+ @Override
+ protected void setDataToView(View dataView) {
+ ButterKnife.bind(this, dataView);
+ setTitleView(true);
+ mTvFragmentTitle.setText("邮件");
+ mIvFragmentBack.setOnClickListener(v -> mMainActivity.backFragment(3, this));
+ Bundle bundle = getArguments();
+ if (bundle != null) {
+ mId = bundle.getString("id");
+ }
+
+ if (TextUtils.isEmpty(mId)) {
+ ToastUtils.show("数据有误");
+ mMainActivity.backFragment(3, this);
+ } else {
+ getDetailById();
+ }
+ mActivity.setTouchDelegate(mIvDel, 30);
+ mActivity.setTouchDelegate(mIvTransfer, 30);
+ }
+
+
+ @Override
+ public void onAttach(@NonNull @NotNull Context context) {
+ super.onAttach(context);
+ mMainActivity = (PadMainActivity) getActivity();
+ }
+
+
+ private void getDetailById() {
+ RetrofitManager.getInstance()
+ .create(OAApi.class)
+ .getEmailDraftDetail(mId)
+ .compose(RxTransformer.getTransformer())
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(@io.reactivex.rxjava3.annotations.NonNull Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(@io.reactivex.rxjava3.annotations.NonNull EmailDraftDetailBean emailSendDetailBean) {
+ setDataToView(emailSendDetailBean);
+ }
+
+ @Override
+ public void onError(@io.reactivex.rxjava3.annotations.NonNull Throwable e) {
+ setStateView(STATE_ERROR);
+ mSrlView.setEnableLoadMore(false);
+ mSrlView.setEnableRefresh(false);
+ ExceptionHandler.handleException(e);
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+ }
+
+ private void setDataToView(EmailDraftDetailBean b) {
+ setStateView(STATE_SUCCESS);
+ mSrlView.setEnableLoadMore(false);
+ mSrlView.setEnableRefresh(false);
+ mTvTitle.setText(b.getTitle());
+ mTvReceiver.setText("收件: " + b.getRecipientNames());
+ mTvCopy.setText("抄送: " + b.getCopyForNames());
+ mTvSecret.setText("密送: " + b.getSecretNames());
+ mTvTime.setText(b.getGmtCreate() + "(草稿)");
+ mTvContent.setText(Html.fromHtml(b.getContent()));
+ mIvDel.setOnClickListener(v -> onShowConfirm(1));
+ mIvTransfer.setOnClickListener(v -> onShowConfirm(2));
+ if (!TextUtils.isEmpty(b.getMailFiles())) {
+ doGetFileInfo(b.getMailFiles(), null);
+ }
+ }
+
+ private List mFileBeans;
+ private AddFileAdapter mAddFileAdapter;
+
+ private void doGetFileInfo(String fileId, List files) {
+ ProgressDialog dialog = UIUtil.initDialog(mActivity, "获取中...");
+ dialog.show();
+ RetrofitManager.getInstance()
+ .create(BaseApiService.class)
+ .getFileInfoList(fileId)
+ .compose(RxTransformer.getTransformer())
+ .subscribe(new Observer>() {
+
+
+ @Override
+ public void onSubscribe(@io.reactivex.rxjava3.annotations.NonNull Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(@io.reactivex.rxjava3.annotations.NonNull List fileInfoBeans) {
+ if (dialog.isShowing()) dialog.dismiss();
+ if (fileInfoBeans.size() > 0) {
+ mFileBeans = new ArrayList<>();
+ mAddFileAdapter = new AddFileAdapter(mActivity, mFileBeans);
+ mRlvFiles.setLayoutManager(new GridLayoutManager(mActivity, 5));
+ mRlvFiles.setAdapter(mAddFileAdapter);
+ for (int i = 0; i < fileInfoBeans.size(); i++) {
+ FileInfoBean infoBean = fileInfoBeans.get(i);
+ AddFileBean bean = new AddFileBean();
+ bean.setId(infoBean.getFileId());
+ bean.setFileName(infoBean.getFileName());
+ bean.setFileType(FileUtils.getFileType(infoBean.getFileName()));
+ bean.setPath(BaseUrlApi.BASE_FILE_URL + infoBean.getFileId());
+ mFileBeans.add(0, bean);
+ }
+ mAddFileAdapter.setData(mFileBeans);
+ mAddFileAdapter.addOnItemClickListener(addFileBean -> {
+ if (addFileBean.getFileType() == 1) {
+ //文档
+ ARouter.getInstance()
+ .build(PathConfig.PATH_MODULE_BASELIB_ACTIVITY_PREVIEW_FILE)
+ .withString("fileName", addFileBean.getFileName())
+ .withString("fileId", addFileBean.getId())
+ .navigation();
+ } else if (2 == addFileBean.getFileType()) {
+ //图片预览
+ //遍历文件获取所有图片文件
+ ArrayList imgUrls = new ArrayList<>();
+ for (int i = 0; i < mFileBeans.size(); i++) {
+ if (mFileBeans.get(i).getFileType() == 2) {
+ AddFileBean fileBean = mFileBeans.get(i);
+ String url = BaseUrlApi.BASE_IMG_URL + fileBean.getId();
+ imgUrls.add(url);
+ }
+ }
+ ARouter.getInstance()
+ .build(PathConfig.PATH_MODULE_BASELIB_SHOW_IMG)
+ .withStringArrayList(TAG_IMGURL, imgUrls)
+ .navigation();
+ } else if (3 == addFileBean.getFileType() || 4 == addFileBean.getFileType()) {
+ //TODO 视频或音频预览
+ }
+ });
+ } else {
+ ToastUtils.show("未找到文档信息");
+ }
+ }
+
+ @Override
+ public void onError(@io.reactivex.rxjava3.annotations.NonNull Throwable e) {
+ if (dialog.isShowing()) dialog.dismiss();
+ ExceptionHandler.handleException(e);
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+ }
+
+ private void onShowConfirm(int type) {
+ new AlertDialog.Builder(mActivity)
+ .setTitle("提示")
+ .setMessage(type == 1 ? "确定要删除该邮件到回收站吗?" : "是否要去发送邮件?")
+ .setPositiveButton("确定", (dialog, which) -> {
+ dialog.dismiss();
+ if (type == 1) {
+ doDelEmail();
+ } else {
+ mMainActivity.backFragment(3, DraftDetailFragment.this);
+ Map params = new HashMap<>();
+ params.put("id", mId);
+ params.put("type", "draft");
+ BaseFragment fragment = FragmentUtils.getFragmentMap(PathConfig.PATH_MODULE_PAD_OA_FRAGMENT_EMAIL_SEND, params);
+ mMainActivity.addFragment(3, fragment);
+ }
+ })
+ .setNegativeButton("取消", (dialog, which) -> dialog.dismiss())
+ .create()
+ .show();
+ }
+
+
+ @Override
+ public void onHiddenChanged(boolean hidden) {
+ super.onHiddenChanged(hidden);
+ if (!hidden) {
+ if (mIsRefresh) {
+ setStateView(STATE_LOAD);
+ getDetailById();
+ }
+ }
+ }
+
+ private void doDelEmail() {
+ ProgressDialog dialog = UIUtil.initDialog(mActivity, "删除中...");
+ dialog.show();
+ RetrofitManager.getInstance()
+ .create(OAApi.class)
+ .doDelEmailDraft(mId)
+ .compose(RxTransformer.getTransformer())
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(@io.reactivex.rxjava3.annotations.NonNull Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(@io.reactivex.rxjava3.annotations.NonNull BaseSuccessBean baseSuccessBean) {
+ if (dialog.isShowing()) dialog.dismiss();
+ ToastUtils.show("删除成功");
+ BaseFragment preFragment = mMainActivity.getPreFragment();
+ if (preFragment != null) {
+ preFragment.mIsRefresh = true;
+ }
+ mMainActivity.backFragment(3, DraftDetailFragment.this);
+ }
+
+ @Override
+ public void onError(@io.reactivex.rxjava3.annotations.NonNull Throwable e) {
+ if (dialog.isShowing()) dialog.dismiss();
+ ExceptionHandler.handleException(e);
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+ }
+
+ @Override
+ protected void refreshView() {
+
+ }
+
+ @Override
+ protected void loadMoreData() {
+
+ }
+}
diff --git a/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/email/EmailSendFragment.java b/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/email/EmailSendFragment.java
new file mode 100644
index 0000000..3649500
--- /dev/null
+++ b/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/email/EmailSendFragment.java
@@ -0,0 +1,1088 @@
+package com.tenlionsoft.oamodule.pad.fragments.email;
+
+import android.annotation.SuppressLint;
+import android.app.AlertDialog;
+import android.app.ProgressDialog;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.text.Html;
+import android.text.TextUtils;
+import android.view.MotionEvent;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.ImageView;
+
+import com.alibaba.android.arouter.facade.annotation.Route;
+import com.google.gson.Gson;
+import com.hjq.toast.ToastUtils;
+import com.leon.lfilepickerlibrary.LFilePicker;
+import com.leon.lfilepickerlibrary.utils.Constant;
+import com.tenlionsoft.baselib.constant.LionActions;
+import com.tenlionsoft.baselib.constant.PathConfig;
+import com.tenlionsoft.baselib.core.beans.AddFileBean;
+import com.tenlionsoft.baselib.core.beans.BaseSuccessBean;
+import com.tenlionsoft.baselib.core.retrofit_net.BaseUrlApi;
+import com.tenlionsoft.baselib.core.retrofit_net.RetrofitManager;
+import com.tenlionsoft.baselib.core.retrofit_net.api.BaseApiService;
+import com.tenlionsoft.baselib.core.retrofit_net.bean.FileInfoBean;
+import com.tenlionsoft.baselib.core.retrofit_net.conver.RxTransformer;
+import com.tenlionsoft.baselib.core.widget.base.AddFileAdapter;
+import com.tenlionsoft.baselib.core.widget.base.BaseFragment;
+import com.tenlionsoft.baselib.core.widget.base.BaseRecyclerAdapter;
+import com.tenlionsoft.baselib.utils.ExceptionHandler;
+import com.tenlionsoft.baselib.utils.FileUtils;
+import com.tenlionsoft.baselib.utils.UIUtil;
+import com.tenlionsoft.oamodule.R;
+import com.tenlionsoft.oamodule.R2;
+import com.tenlionsoft.oamodule.activity.car.ChooseUserActivity;
+import com.tenlionsoft.oamodule.adapter.BasePersonShowAdapter;
+import com.tenlionsoft.oamodule.beans.EmailDraftDetailBean;
+import com.tenlionsoft.oamodule.beans.EmailInboxDetailBean;
+import com.tenlionsoft.oamodule.beans.EmailSendDetailBean;
+import com.tenlionsoft.oamodule.beans.MeetingAttachListBean;
+import com.tenlionsoft.oamodule.beans.SaveEmailBean;
+import com.tenlionsoft.oamodule.net.OAApi;
+import com.tenlionsoft.oamodule.pad.activitys.home.PadMainActivity;
+
+import org.jetbrains.annotations.NotNull;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import androidx.activity.result.ActivityResultLauncher;
+import androidx.activity.result.contract.ActivityResultContracts;
+import androidx.annotation.NonNull;
+import androidx.core.widget.NestedScrollView;
+import androidx.recyclerview.widget.GridLayoutManager;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import io.reactivex.rxjava3.core.Observable;
+import io.reactivex.rxjava3.core.Observer;
+import io.reactivex.rxjava3.disposables.Disposable;
+import okhttp3.MediaType;
+import okhttp3.MultipartBody;
+import okhttp3.RequestBody;
+
+/**
+ * 作者: adam
+ * 日期: 2022/5/11 - 09:04
+ * 邮箱: itgaojian@163.com
+ * 描述: 平板发件
+ */
+@Route(path = PathConfig.PATH_MODULE_PAD_OA_FRAGMENT_EMAIL_SEND)
+public class EmailSendFragment extends BaseFragment {
+ @BindView(R2.id.et_title)
+ EditText mEtTitle;
+ @BindView(R2.id.rlv_receiver)
+ RecyclerView mRlvReceiver;
+ @BindView(R2.id.rlv_copy_to)
+ RecyclerView mRlvCopyTo;
+ @BindView(R2.id.rlv_secret)
+ RecyclerView mRlvSecret;
+ @BindView(R2.id.et_content)
+ EditText mEtContent;
+ @BindView(R2.id.rlv_files)
+ RecyclerView mRlvFiles;
+ @BindView(R2.id.iv_add_img)
+ ImageView mIvAddImg;
+ @BindView(R2.id.iv_add_file)
+ ImageView mIvAddFile;
+ @BindView(R2.id.iv_draft)
+ ImageView mIvDraft;
+ @BindView(R2.id.nsv_content)
+ NestedScrollView mNsvContent;
+ private PadMainActivity mMainActivity;
+ //收件人
+ private List mReceiverList;
+ private BasePersonShowAdapter mReceiverAdapter;
+ //抄送人
+ private List mCopyToList;
+ private BasePersonShowAdapter mCopyToAdapter;
+ //密送人
+ private List mSecretList;
+ private BasePersonShowAdapter mSecretAdapter;
+
+
+ private List mFileBeans = new ArrayList<>();
+ private AddFileAdapter mAddFileAdapter;
+ private String[] fileFilter = new String[]{".doc", ".docx", ".xls", ".xlsx", ".pptx", ".ppt", ".txt", ".pdf"};
+ private String[] imageFilter = new String[]{".jpg", ".jpeg", ".png"};
+ private int mFileMax = 9;
+ private String mId;
+ private String mType;//null 直接发送 inbox收件箱 draft草稿箱 send发件箱
+ private ActivityResultLauncher mReceiveLauncher;
+ private ActivityResultLauncher mCopyLauncher;
+ private ActivityResultLauncher mSecretLauncher;
+ private ActivityResultLauncher mFileLauncher;
+
+ @Override
+ protected int getContentViewId() {
+ return R.layout.fragment_email_send;
+ }
+
+ @Override
+ protected void setDataToView(View dataView) {
+ ButterKnife.bind(this, dataView);
+ setTitleView(true);
+ mTvFragmentTitle.setText("发送邮件");
+ mTvFragmentOption.setText("发送");
+ mTvFragmentOption.setOnClickListener(v -> doSend());
+ mIvFragmentBack.setOnClickListener(v -> back(false));
+ initViews();
+ Bundle bundle = getArguments();
+ if (bundle != null) {
+ mType = bundle.getString("type");
+ mId = bundle.getString("id");
+ }
+ if ("inbox".equals(mType)) {
+ //收件箱
+ getEmailDetailFromInbox();
+ } else if ("draft".equals(mType)) {
+ //草稿箱
+ getEmailDetailFromDraft();
+ } else if ("send".equals(mType)) {
+ //发件箱
+ getEmailDetailFromSendBox();
+ } else {
+ setStateView(STATE_SUCCESS);
+ mSrlView.setEnableLoadMore(false);
+ mSrlView.setEnableRefresh(false);
+ }
+ }
+
+ @Override
+ public void onAttach(@NonNull @NotNull Context context) {
+ super.onAttach(context);
+ mMainActivity = (PadMainActivity) getActivity();
+ //收件人
+ mReceiveLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> {
+ Intent data = result.getData();
+ if (data != null) {
+ String name = data.getStringExtra("name");
+ String id = data.getStringExtra("id");
+ String[] names = name.split(",");
+ String[] ids = id.split(",");
+ for (int i = 0; i < names.length; i++) {
+ boolean isExist = false;
+ for (MeetingAttachListBean person : mReceiverList) {
+ if (TextUtils.isEmpty(person.getUserId())) continue;
+ if (person.getUserId().equals(ids[i])) {
+ isExist = true;
+ break;
+ }
+ }
+ if (!isExist) {
+ MeetingAttachListBean bean = new MeetingAttachListBean();
+ bean.setUserName(names[i]);
+ bean.setUserId(ids[i]);
+ mReceiverList.add(0, bean);
+ }
+ }
+ mReceiverAdapter.notifyDataSetChanged();
+ }
+ });
+ //抄送人
+ mCopyLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> {
+ Intent data = result.getData();
+ if (data != null) {
+ String name = data.getStringExtra("name");
+ String id = data.getStringExtra("id");
+ String[] names = name.split(",");
+ String[] ids = id.split(",");
+ for (int i = 0; i < names.length; i++) {
+ boolean isExist = false;
+ for (MeetingAttachListBean person : mCopyToList) {
+ if (TextUtils.isEmpty(person.getUserId())) continue;
+ if (person.getUserId().equals(ids[i])) {
+ isExist = true;
+ break;
+ }
+ }
+ if (!isExist) {
+ MeetingAttachListBean bean = new MeetingAttachListBean();
+ bean.setUserName(names[i]);
+ bean.setUserId(ids[i]);
+ mCopyToList.add(0, bean);
+ }
+ }
+ mCopyToAdapter.notifyDataSetChanged();
+ }
+ });
+ //密送人
+ mSecretLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> {
+ Intent data = result.getData();
+ if (data != null) {
+ String name = data.getStringExtra("name");
+ String id = data.getStringExtra("id");
+ String[] names = name.split(",");
+ String[] ids = id.split(",");
+ for (int i = 0; i < names.length; i++) {
+ boolean isExist = false;
+ for (MeetingAttachListBean person : mSecretList) {
+ if (TextUtils.isEmpty(person.getUserId())) continue;
+ if (person.getUserId().equals(ids[i])) {
+ isExist = true;
+ break;
+ }
+ }
+ if (!isExist) {
+ MeetingAttachListBean bean = new MeetingAttachListBean();
+ bean.setUserName(names[i]);
+ bean.setUserId(ids[i]);
+ mSecretList.add(0, bean);
+ }
+ }
+ mSecretAdapter.notifyDataSetChanged();
+ }
+ });
+ //附件
+ mFileLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> {
+ Intent data = result.getData();
+ if (data != null) {
+ ArrayList paths = data.getStringArrayListExtra(Constant.RESULT_INFO);
+ if (paths != null && paths.size() > 0) {
+ doUploadFiles(paths);
+ } else {
+ ToastUtils.show("未选择文件");
+ }
+ } else {
+ ToastUtils.show("路径有误,请稍后重试");
+ }
+ });
+ }
+
+ /**
+ * 获取发件详情
+ */
+ private void getEmailDetailFromSendBox() {
+ RetrofitManager.getInstance()
+ .create(OAApi.class)
+ .getEmailSendDetail(mId)
+ .compose(RxTransformer.getTransformer())
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(@io.reactivex.rxjava3.annotations.NonNull Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(@io.reactivex.rxjava3.annotations.NonNull EmailSendDetailBean emailSendDetailBean) {
+ setSendDetail(emailSendDetailBean);
+ }
+
+ @Override
+ public void onError(@io.reactivex.rxjava3.annotations.NonNull Throwable e) {
+ setStateView(STATE_ERROR);
+ mSrlView.setEnableRefresh(false);
+ mSrlView.setEnableLoadMore(false);
+ ExceptionHandler.handleException(e);
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+ }
+
+
+ /**
+ * 获取草稿详情
+ */
+ private void getEmailDetailFromDraft() {
+ RetrofitManager.getInstance()
+ .create(OAApi.class)
+ .getEmailDraftDetail(mId)
+ .compose(RxTransformer.getTransformer())
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(@io.reactivex.rxjava3.annotations.NonNull Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(@io.reactivex.rxjava3.annotations.NonNull EmailDraftDetailBean emailDraftDetailBean) {
+ setDraftDetail(emailDraftDetailBean);
+ }
+
+ @Override
+ public void onError(@io.reactivex.rxjava3.annotations.NonNull Throwable e) {
+ setStateView(STATE_ERROR);
+ mSrlView.setEnableRefresh(false);
+ mSrlView.setEnableLoadMore(false);
+ ExceptionHandler.handleException(e);
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+ }
+
+
+ /**
+ * 获取收件详情
+ */
+ private void getEmailDetailFromInbox() {
+ RetrofitManager.getInstance()
+ .create(OAApi.class)
+ .getEmailInboxDetail(mId)
+ .compose(RxTransformer.getTransformer())
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(@io.reactivex.rxjava3.annotations.NonNull Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(@io.reactivex.rxjava3.annotations.NonNull EmailInboxDetailBean emailInboxDetailBean) {
+ setInboxDetail(emailInboxDetailBean);
+ }
+
+ @Override
+ public void onError(@io.reactivex.rxjava3.annotations.NonNull Throwable e) {
+ setStateView(STATE_ERROR);
+ mSrlView.setEnableRefresh(false);
+ mSrlView.setEnableLoadMore(false);
+ ExceptionHandler.handleException(e);
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+ }
+
+ /**
+ * 回显草稿数据
+ */
+ private void setDraftDetail(EmailDraftDetailBean b) {
+ setStateView(STATE_SUCCESS);
+ mSrlView.setEnableRefresh(false);
+ mSrlView.setEnableLoadMore(false);
+ mEtTitle.setText(b.getTitle());
+ //收件人
+ if (!TextUtils.isEmpty(b.getRecipientIds())) {
+ String[] ids = b.getRecipientIds().split(",");
+ String[] names = b.getRecipientNames().split(",");
+ for (int i = 0; i < ids.length; i++) {
+ MeetingAttachListBean bean = new MeetingAttachListBean();
+ bean.setUserName(names[i]);
+ bean.setUserId(ids[i]);
+ mReceiverList.add(0, bean);
+ }
+ }
+ mReceiverAdapter.setData(mReceiverList);
+ //抄送人
+ if (!TextUtils.isEmpty(b.getCopyForIds())) {
+ String[] ids = b.getCopyForIds().split(",");
+ String[] names = b.getCopyForNames().split(",");
+ for (int i = 0; i < ids.length; i++) {
+ MeetingAttachListBean bean = new MeetingAttachListBean();
+ bean.setUserName(names[i]);
+ bean.setUserId(ids[i]);
+ mCopyToList.add(0, bean);
+ }
+ }
+ mCopyToAdapter.setData(mCopyToList);
+ //密送人
+ if (!TextUtils.isEmpty(b.getSecretIds())) {
+ String[] ids = b.getSecretIds().split(",");
+ String[] names = b.getSecretNames().split(",");
+ for (int i = 0; i < ids.length; i++) {
+ MeetingAttachListBean bean = new MeetingAttachListBean();
+ bean.setUserName(names[i]);
+ bean.setUserId(ids[i]);
+ mSecretList.add(0, bean);
+ }
+ }
+ mSecretAdapter.setData(mSecretList);
+ mEtContent.setText(Html.fromHtml(b.getContent()));
+ //附件
+ if (!TextUtils.isEmpty(b.getMailFiles())) {
+ //获取文件详细信息
+ doGetFileInfo(b.getMailFiles(), new ArrayList<>());
+ }
+ }
+
+ /**
+ * 回显收件箱数据
+ */
+ private void setInboxDetail(EmailInboxDetailBean b) {
+ setStateView(STATE_SUCCESS);
+ mSrlView.setEnableRefresh(false);
+ mSrlView.setEnableLoadMore(false);
+ mEtTitle.setText(b.getTitle());
+ mEtContent.setText(Html.fromHtml(b.getContent()));
+ //附件
+ if (!TextUtils.isEmpty(b.getMailFiles())) {
+ //获取文件详细信息
+ doGetFileInfo(b.getMailFiles(), new ArrayList<>());
+ }
+ }
+
+ /**
+ * 回显发件数据
+ */
+ private void setSendDetail(EmailSendDetailBean b) {
+ setStateView(STATE_SUCCESS);
+ mSrlView.setEnableRefresh(false);
+ mSrlView.setEnableLoadMore(false);
+ mEtTitle.setText(b.getTitle());
+ //收件人
+ if (!TextUtils.isEmpty(b.getRecipientIds())) {
+ String[] ids = b.getRecipientIds().split(",");
+ String[] names = b.getRecipientNames().split(",");
+ for (int i = 0; i < ids.length; i++) {
+ MeetingAttachListBean bean = new MeetingAttachListBean();
+ bean.setUserName(names[i]);
+ bean.setUserId(ids[i]);
+ mReceiverList.add(0, bean);
+ }
+ }
+ mReceiverAdapter.setData(mReceiverList);
+ //抄送人
+ if (!TextUtils.isEmpty(b.getCopyForIds())) {
+ String[] ids = b.getCopyForIds().split(",");
+ String[] names = b.getCopyForNames().split(",");
+ for (int i = 0; i < ids.length; i++) {
+ MeetingAttachListBean bean = new MeetingAttachListBean();
+ bean.setUserName(names[i]);
+ bean.setUserId(ids[i]);
+ mCopyToList.add(0, bean);
+ }
+ }
+ mCopyToAdapter.setData(mCopyToList);
+ //密送人
+ if (!TextUtils.isEmpty(b.getSecretIds())) {
+ String[] ids = b.getSecretIds().split(",");
+ String[] names = b.getSecretNames().split(",");
+ for (int i = 0; i < ids.length; i++) {
+ MeetingAttachListBean bean = new MeetingAttachListBean();
+ bean.setUserName(names[i]);
+ bean.setUserId(ids[i]);
+ mSecretList.add(0, bean);
+ }
+ }
+ mSecretAdapter.setData(mSecretList);
+ mEtContent.setText(Html.fromHtml(b.getContent()));
+ //附件
+ if (!TextUtils.isEmpty(b.getMailFiles())) {
+ //获取文件详细信息
+ doGetFileInfo(b.getMailFiles(), new ArrayList<>());
+ }
+ }
+
+ private void doGetFileInfo(String fileId, List files) {
+ ProgressDialog dialog = UIUtil.initDialog(mActivity, "获取中...");
+ dialog.show();
+ RetrofitManager.getInstance()
+ .create(BaseApiService.class)
+ .getFileInfoList(fileId)
+ .compose(RxTransformer.getTransformer())
+ .subscribe(new Observer>() {
+ @Override
+ public void onSubscribe(@io.reactivex.rxjava3.annotations.NonNull Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(@io.reactivex.rxjava3.annotations.NonNull List fileInfoBeans) {
+ if (dialog.isShowing()) dialog.dismiss();
+ if (fileInfoBeans.size() > 0) {
+ for (int i = 0; i < fileInfoBeans.size(); i++) {
+ FileInfoBean infoBean = fileInfoBeans.get(i);
+ AddFileBean bean = new AddFileBean();
+ bean.setId(infoBean.getFileId());
+ bean.setFileName(infoBean.getFileName());
+ bean.setFileType(FileUtils.getFileType(infoBean.getFileName()));
+ bean.setPath(BaseUrlApi.BASE_IMG_URL + infoBean.getFileId());
+ --mFileMax;
+ mFileBeans.add(0, bean);
+ }
+ mAddFileAdapter.setData(mFileBeans);
+ } else {
+ ToastUtils.show("未找到文档信息");
+ }
+ }
+
+ @Override
+ public void onError(@io.reactivex.rxjava3.annotations.NonNull Throwable e) {
+ if (dialog.isShowing()) dialog.dismiss();
+ ExceptionHandler.handleException(e);
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+ }
+
+ private boolean checkParams() {
+ String title = mEtTitle.getText().toString().trim();
+ if (TextUtils.isEmpty(title)) {
+ ToastUtils.show("请输入邮件主题");
+ return false;
+ }
+ if (mReceiverList.size() < 2) {
+ ToastUtils.show("请选择收件人");
+ return false;
+ }
+ String content = mEtContent.getText().toString().trim();
+ if (TextUtils.isEmpty(content)) {
+ ToastUtils.show("请输入邮件内容");
+ return false;
+ }
+ return true;
+ }
+
+ private RequestBody buildParams() {
+ SaveEmailBean bean = new SaveEmailBean();
+ String title = mEtTitle.getText().toString().trim();
+ bean.setTitle(title);
+ //收件人
+ StringBuilder ids = new StringBuilder();
+ StringBuilder names = new StringBuilder();
+ for (MeetingAttachListBean person : mReceiverList) {
+ if (TextUtils.isEmpty(person.getUserId())) continue;
+ ids.append(person.getUserId()).append(",");
+ names.append(person.getUserName()).append(",");
+ }
+ if (ids.toString().endsWith(",")) {
+ String id = ids.substring(0, ids.toString().length() - 1);
+ String jname = names.substring(0, names.toString().length() - 1);
+ bean.setRecipientIds(id);
+ bean.setRecipientNames(jname);
+ }
+ //抄送人
+ StringBuilder copyId = new StringBuilder();
+ StringBuilder copyName = new StringBuilder();
+ for (MeetingAttachListBean person : mCopyToList) {
+ if (TextUtils.isEmpty(person.getUserId())) continue;
+ copyId.append(person.getUserId()).append(",");
+ copyName.append(person.getUserName()).append(",");
+ }
+ if (copyId.toString().endsWith(",")) {
+ String id = copyId.substring(0, copyId.toString().length() - 1);
+ String jname = copyName.substring(0, copyName.toString().length() - 1);
+ bean.setCopyForIds(id);
+ bean.setCopyForNames(jname);
+ }
+ //密送人
+ StringBuilder secretId = new StringBuilder();
+ StringBuilder secretName = new StringBuilder();
+ for (MeetingAttachListBean person : mSecretList) {
+ if (TextUtils.isEmpty(person.getUserId())) continue;
+ secretId.append(person.getUserId()).append(",");
+ secretName.append(person.getUserName()).append(",");
+ }
+ if (secretId.toString().endsWith(",")) {
+ String id = secretId.substring(0, secretId.toString().length() - 1);
+ String jname = secretName.substring(0, secretName.toString().length() - 1);
+ bean.setSecretIds(id);
+ bean.setSecretNames(jname);
+ }
+ //内容
+ String content = mEtContent.getText().toString().trim();
+ bean.setContent(content);
+ //附件
+ if (mFileBeans.size() >= 2) {
+ StringBuilder fileId = new StringBuilder();
+ for (AddFileBean fileBean : mFileBeans) {
+ if (!TextUtils.isEmpty(fileBean.getId())) {
+ fileId.append(fileBean.getId()).append(",");
+ }
+ }
+ if (fileId.toString().endsWith(",")) {
+ fileId = new StringBuilder(fileId.substring(0, fileId.length() - 1));
+ }
+ bean.setMailFiles(fileId.toString().trim());
+ }
+ return RequestBody.create(new Gson().toJson(bean), MediaType.parse("application/json; charset=utf-8"));
+ }
+
+ private void doSend() {
+ if (checkParams()) {
+ ProgressDialog dialog = UIUtil.initDialog(mActivity, "发送中...");
+ dialog.show();
+ RequestBody body = buildParams();
+ RetrofitManager.getInstance()
+ .create(OAApi.class)
+ .doSaveEmail(body)
+ .compose(RxTransformer.getTransformer())
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(@io.reactivex.rxjava3.annotations.NonNull Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(@io.reactivex.rxjava3.annotations.NonNull BaseSuccessBean baseSuccessBean) {
+ if (dialog.isShowing()) dialog.dismiss();
+ ToastUtils.show("发送成功");
+ BaseFragment preFragment = mMainActivity.getPreFragment();
+ if (preFragment != null) {
+ preFragment.mIsRefresh = true;
+ }
+ mMainActivity.backFragment(3, EmailSendFragment.this);
+ }
+
+ @Override
+ public void onError(@io.reactivex.rxjava3.annotations.NonNull Throwable e) {
+ if (dialog.isShowing()) dialog.dismiss();
+ ExceptionHandler.handleException(e);
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+ }
+ }
+
+
+ @SuppressLint("ClickableViewAccessibility")
+ private void initViews() {
+ //解决多内容滑动不流畅
+ mEtContent.setOnTouchListener((v, motionEvent) -> {
+ v.getParent().requestDisallowInterceptTouchEvent(true);
+ switch (motionEvent.getAction() & MotionEvent.ACTION_MASK) {
+ case MotionEvent.ACTION_MOVE:
+ mEtContent.setFocusable(false);
+ break;
+ case MotionEvent.ACTION_UP:
+ mEtContent.setFocusable(true);
+ mEtContent.setFocusableInTouchMode(true);
+ v.getParent().requestDisallowInterceptTouchEvent(false);
+ break;
+ }
+ return false;
+ });
+ //收件人
+ mReceiverList = new ArrayList<>();
+ mReceiverList.add(new MeetingAttachListBean());
+ mReceiverAdapter = new BasePersonShowAdapter(mActivity, mReceiverList, 1);
+ mRlvReceiver.setLayoutManager(new GridLayoutManager(mActivity, 1, LinearLayoutManager.HORIZONTAL, false));
+ mRlvReceiver.setAdapter(mReceiverAdapter);
+ mReceiverAdapter.addOnDelListener((bean, i) -> showConfirmDialog(bean, i, mReceiverAdapter, mReceiverList));
+ mReceiverAdapter.addOnItemClickListener(bean -> {
+ if (TextUtils.isEmpty(bean.getUserId())) {
+ Intent intent = new Intent(mActivity, ChooseUserActivity.class);
+ intent.putExtra("isSingle", false);
+ mReceiveLauncher.launch(intent);
+ }
+ });
+ //抄送人
+ mCopyToList = new ArrayList<>();
+ mCopyToList.add(new MeetingAttachListBean());
+ mCopyToAdapter = new BasePersonShowAdapter(mActivity, mCopyToList, 1);
+ mRlvCopyTo.setLayoutManager(new GridLayoutManager(mActivity, 1, LinearLayoutManager.HORIZONTAL, false));
+ mRlvCopyTo.setAdapter(mCopyToAdapter);
+ mCopyToAdapter.addOnDelListener((bean, i) -> showConfirmDialog(bean, i, mCopyToAdapter, mCopyToList));
+ mCopyToAdapter.addOnItemClickListener(bean -> {
+ if (TextUtils.isEmpty(bean.getUserId())) {
+ Intent intent = new Intent(mActivity, ChooseUserActivity.class);
+ intent.putExtra("isSingle", false);
+ mCopyLauncher.launch(intent);
+ }
+ });
+ //密送人
+ mSecretList = new ArrayList<>();
+ mSecretList.add(new MeetingAttachListBean());
+ mSecretAdapter = new BasePersonShowAdapter(mActivity, mSecretList, 1);
+ mRlvSecret.setLayoutManager(new GridLayoutManager(mActivity, 1, LinearLayoutManager.HORIZONTAL, false));
+ mRlvSecret.setAdapter(mSecretAdapter);
+ mSecretAdapter.addOnDelListener((bean, i) -> showConfirmDialog(bean, i, mSecretAdapter, mSecretList));
+ mSecretAdapter.addOnItemClickListener(bean -> {
+ if (TextUtils.isEmpty(bean.getUserId())) {
+ Intent intent = new Intent(mActivity, ChooseUserActivity.class);
+ intent.putExtra("isSingle", false);
+ mSecretLauncher.launch(intent);
+ }
+ });
+ //附件
+ mAddFileAdapter = new AddFileAdapter(mActivity, mFileBeans);
+ mAddFileAdapter.addOnItemClickListener(addFileBean -> {
+ if (TextUtils.isEmpty(addFileBean.getId())) {
+ //预览
+ //判断文件类型
+
+ }
+ });
+ //删除上传的文件
+ mAddFileAdapter.addOnDeleteListener((bean, i) -> {
+ //删除list中的某个数据
+ mFileBeans.remove(i);
+ mAddFileAdapter.notifyDataSetChanged();
+ ++mFileMax;
+ });
+ mRlvFiles.setLayoutManager(new GridLayoutManager(mActivity, 4));
+ mRlvFiles.setAdapter(mAddFileAdapter);
+
+ mIvAddFile.setOnClickListener(v -> {
+ if (mFileMax == 0) {
+ ToastUtils.show("超过最大上传数量限制");
+ } else {
+ new LFilePicker()
+ .withFragment(this)
+ .withFragmentLauncher(mFileLauncher)
+ .withRequestCode(LionActions.REQUEST_CODE_AC)
+ .withTitle("文件选择")
+ .withMaxNum(mFileMax)
+ .withFileFilter(fileFilter)
+ .start();
+ }
+ });
+ mIvAddImg.setOnClickListener(v -> {
+ if (mFileMax == 0) {
+ ToastUtils.show("超过最大上传数量限制");
+ } else {
+ new LFilePicker()
+ .withFragment(this)
+ .withFragmentLauncher(mFileLauncher)
+ .withRequestCode(LionActions.REQUEST_CODE_AC)
+ .withTitle("文件选择")
+ .withMaxNum(mFileMax)
+ .withFileFilter(imageFilter)
+ .start();
+ }
+ });
+ mIvDraft.setOnClickListener(v -> onShowConfirm());
+ }
+
+ /**
+ * 保存草稿弹窗
+ */
+ private void onShowConfirm() {
+ new AlertDialog.Builder(mActivity)
+ .setTitle("提示")
+ .setMessage("draft".equals(mType) ? "确定要更新草稿内容吗?" : "确定要将邮件保存至草稿箱吗?")
+ .setPositiveButton("确定", (dialog, which) -> {
+ dialog.dismiss();
+ if ("draft".equals(mType)) {
+ doEditDraft();
+ } else {
+ doSaveDraft();
+ }
+ })
+ .setNegativeButton("取消", (dialog, which) -> dialog.dismiss())
+ .create()
+ .show();
+ }
+
+ /**
+ * 更新草稿
+ */
+ private void doEditDraft() {
+ String title = mEtTitle.getText().toString().trim();
+ if (TextUtils.isEmpty(title)) {
+ ToastUtils.show("请输入邮件主题");
+ return;
+ }
+ RequestBody body = buildDraftParams();
+ ProgressDialog dialog = UIUtil.initDialog(mActivity, "保存中...");
+ dialog.show();
+ RetrofitManager.getInstance()
+ .create(OAApi.class)
+ .doEditDraftEmail(mId, body)
+ .compose(RxTransformer.getTransformer())
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(@io.reactivex.rxjava3.annotations.NonNull Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(@io.reactivex.rxjava3.annotations.NonNull BaseSuccessBean baseSuccessBean) {
+ if (dialog.isShowing()) dialog.dismiss();
+ ToastUtils.show("保存成功");
+ back(true);
+ }
+
+ @Override
+ public void onError(@io.reactivex.rxjava3.annotations.NonNull Throwable e) {
+ if (dialog.isShowing()) dialog.dismiss();
+ ExceptionHandler.handleException(e);
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+
+ }
+
+ /**
+ * 保存草稿
+ */
+ private void doSaveDraft() {
+ String title = mEtTitle.getText().toString().trim();
+ if (TextUtils.isEmpty(title)) {
+ ToastUtils.show("请输入邮件主题");
+ return;
+ }
+ RequestBody body = buildDraftParams();
+ ProgressDialog dialog = UIUtil.initDialog(mActivity, "保存中...");
+ dialog.show();
+ RetrofitManager.getInstance()
+ .create(OAApi.class)
+ .doSaveEmailToDraft(body)
+ .compose(RxTransformer.getTransformer())
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(@io.reactivex.rxjava3.annotations.NonNull Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(@io.reactivex.rxjava3.annotations.NonNull BaseSuccessBean baseSuccessBean) {
+ if (dialog.isShowing()) dialog.dismiss();
+ ToastUtils.show("保存成功");
+ back(true);
+ }
+
+ @Override
+ public void onError(@io.reactivex.rxjava3.annotations.NonNull Throwable e) {
+ if (dialog.isShowing()) dialog.dismiss();
+ ExceptionHandler.handleException(e);
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+ }
+
+ /**
+ * 构建草稿参数
+ */
+ private RequestBody buildDraftParams() {
+ SaveEmailBean bean = new SaveEmailBean();
+ String title = mEtTitle.getText().toString().trim();
+ bean.setTitle(title);
+ //收件人
+ if (mReceiverList.size() >= 2) {
+ StringBuilder ids = new StringBuilder();
+ StringBuilder names = new StringBuilder();
+ for (MeetingAttachListBean person : mReceiverList) {
+ if (TextUtils.isEmpty(person.getUserId())) continue;
+ ids.append(person.getUserId()).append(",");
+ names.append(person.getUserName()).append(",");
+ }
+ if (ids.toString().endsWith(",")) {
+ String id = ids.substring(0, ids.toString().length() - 1);
+ String jname = names.substring(0, names.toString().length() - 1);
+ bean.setRecipientIds(id);
+ bean.setRecipientNames(jname);
+ }
+ } else {
+ bean.setRecipientNames("");
+ bean.setRecipientIds("");
+ }
+ if (mCopyToList.size() >= 2) {
+ //抄送人
+ StringBuilder copyId = new StringBuilder();
+ StringBuilder copyName = new StringBuilder();
+ for (MeetingAttachListBean person : mCopyToList) {
+ if (TextUtils.isEmpty(person.getUserId())) continue;
+ copyId.append(person.getUserId()).append(",");
+ copyName.append(person.getUserName()).append(",");
+ }
+ if (copyId.toString().endsWith(",")) {
+ String id = copyId.substring(0, copyId.toString().length() - 1);
+ String jname = copyName.substring(0, copyName.toString().length() - 1);
+ bean.setCopyForIds(id);
+ bean.setCopyForNames(jname);
+ }
+ } else {
+ bean.setCopyForNames("");
+ bean.setCopyForIds("");
+ }
+
+ if (mSecretList.size() >= 2) {
+ //密送人
+ StringBuilder secretId = new StringBuilder();
+ StringBuilder secretName = new StringBuilder();
+ for (MeetingAttachListBean person : mSecretList) {
+ if (TextUtils.isEmpty(person.getUserId())) continue;
+ secretId.append(person.getUserId()).append(",");
+ secretName.append(person.getUserName()).append(",");
+ }
+ if (secretId.toString().endsWith(",")) {
+ String id = secretId.substring(0, secretId.toString().length() - 1);
+ String jname = secretName.substring(0, secretName.toString().length() - 1);
+ bean.setSecretIds(id);
+ bean.setSecretNames(jname);
+ }
+ } else {
+ bean.setSecretNames("");
+ bean.setSecretIds("");
+ }
+ //内容
+ String content = mEtContent.getText().toString().trim();
+ bean.setContent(content);
+ //附件
+ if (mFileBeans.size() > 1) {
+ StringBuilder fileId = new StringBuilder();
+ for (AddFileBean fileBean : mFileBeans) {
+ if (!TextUtils.isEmpty(fileBean.getId())) {
+ fileId.append(fileBean.getId()).append(",");
+ }
+ }
+ if (fileId.toString().endsWith(",")) {
+ fileId = new StringBuilder(fileId.substring(0, fileId.length() - 1));
+ }
+ bean.setMailFiles(fileId.toString().trim());
+ } else {
+ bean.setMailFiles("");
+ }
+ return RequestBody.create(new Gson().toJson(bean), MediaType.parse("application/json; charset=utf-8"));
+ }
+
+
+ /**
+ * 上传文件
+ *
+ * @param paths
+ */
+ private int mUploadCount = 0;
+
+ private void doUploadFiles(ArrayList paths) {
+
+ ProgressDialog progressDialog = UIUtil.initDialog(mActivity, "上传中...");
+ progressDialog.show();
+ List> requests = new ArrayList<>();
+ List fileNames = new ArrayList<>();
+ for (int i = 0; i < paths.size(); i++) {
+ File file = new File(paths.get(i));
+ Observable observable;
+ if (paths.get(i).endsWith(".jpg") || paths.get(i).endsWith(".jpeg") || paths.get(i).endsWith(".png")) {
+ observable = createImgObservable(file);
+ } else {
+ observable = createObservable(file);
+ }
+ fileNames.add(file.getName());
+ if (observable == null) return;
+ requests.add(observable);
+ }
+ Observable[] observables1 = requests.toArray(new Observable[requests.size()]);
+
+ Observable.mergeArrayDelayError(observables1)
+ .compose(RxTransformer.getTransformer())
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(@io.reactivex.rxjava3.annotations.NonNull Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(@NotNull Object o) {
+ ++mUploadCount;
+ if (o instanceof BaseSuccessBean) {
+ --mFileMax;
+ //刷新文件
+ BaseSuccessBean bean = (BaseSuccessBean) o;
+ AddFileBean fileBean = new AddFileBean();
+ fileBean.setId(bean.getData());
+ fileBean.setPath(BaseUrlApi.BASE_IMG_URL + bean.getData());
+ if (fileNames.get(mUploadCount - 1).endsWith(".jpeg") || fileNames.get(mUploadCount - 1).endsWith(".jpg") || fileNames.get(mUploadCount - 1).endsWith(".png")) {
+ fileBean.setFileType(2);
+ } else {
+ fileBean.setFileType(1);
+ }
+ fileBean.setFileName(fileNames.get(mUploadCount - 1));
+ mFileBeans.add(0, fileBean);
+ }
+ mAddFileAdapter.notifyDataSetChanged();
+ if (mUploadCount == paths.size()) {
+ mUploadCount = 0;
+ mActivity.runOnUiThread(() -> mNsvContent.fullScroll(View.FOCUS_DOWN));
+ if (progressDialog.isShowing()) {
+ progressDialog.dismiss();
+ }
+ }
+ }
+
+ @Override
+ public void onError(@io.reactivex.rxjava3.annotations.NonNull Throwable e) {
+ e.printStackTrace();
+ mUploadCount = 0;
+ if (progressDialog.isShowing()) {
+ progressDialog.dismiss();
+ }
+ ToastUtils.show("上传失败,请稍后重试.");
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+ }
+
+ private Observable createObservable(File file) {
+ RequestBody requestFile = RequestBody.create(file, MediaType.parse("multipart/form-data"));
+ MultipartBody.Part body;
+ body = MultipartBody.Part.createFormData("file", file.getName(), requestFile);
+ return RetrofitManager.getInstance()
+ .create(BaseApiService.class)
+ .uploadFile(body)
+ .compose(RxTransformer.getTransformer());
+ }
+
+ private Observable createImgObservable(File file) {
+ RequestBody requestFile = RequestBody.create(file, MediaType.parse("multipart/form-data"));
+ MultipartBody.Part body;
+ body = MultipartBody.Part.createFormData("image", file.getName(), requestFile);
+ return RetrofitManager.getInstance()
+ .create(BaseApiService.class)
+ .uploadImage(body)
+ .compose(RxTransformer.getTransformer());
+ }
+
+ /**
+ * 移除警告弹窗
+ */
+ private void showConfirmDialog(MeetingAttachListBean bean, int i, BaseRecyclerAdapter adapter, List list) {
+ new AlertDialog.Builder(mActivity)
+ .setTitle("提示")
+ .setMessage("确定要移除该人员吗?")
+ .setPositiveButton("确定", (dialog, which) -> {
+ list.remove(i);
+ adapter.notifyDataSetChanged();
+ })
+ .setNegativeButton("取消", (dialog, which) -> dialog.dismiss())
+ .create()
+ .show();
+ }
+
+ private void back(boolean isRefresh) {
+ if (isRefresh) {
+ BaseFragment preFragment = mMainActivity.getPreFragment();
+ if (preFragment != null) {
+ preFragment.mIsRefresh = true;
+ }
+ }
+ mMainActivity.backFragment(3, this);
+ }
+
+ @Override
+ protected void refreshView() {
+
+ }
+
+ @Override
+ protected void loadMoreData() {
+
+ }
+}
diff --git a/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/email/InBoxFragment.java b/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/email/InBoxFragment.java
new file mode 100644
index 0000000..0070fe7
--- /dev/null
+++ b/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/email/InBoxFragment.java
@@ -0,0 +1,267 @@
+package com.tenlionsoft.oamodule.pad.fragments.email;
+
+import android.content.Context;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.view.View;
+import android.view.inputmethod.EditorInfo;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.EditText;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import com.alibaba.android.arouter.facade.annotation.Route;
+import com.hjq.toast.ToastUtils;
+import com.scwang.smart.refresh.layout.SmartRefreshLayout;
+import com.tenlionsoft.baselib.constant.PathConfig;
+import com.tenlionsoft.baselib.core.retrofit_net.RetrofitManager;
+import com.tenlionsoft.baselib.core.retrofit_net.conver.RxTransformer;
+import com.tenlionsoft.baselib.core.widget.base.BaseFragment;
+import com.tenlionsoft.baselib.core.widget.base.FragmentUtils;
+import com.tenlionsoft.baselib.core.widget.views.CustomStateView;
+import com.tenlionsoft.baselib.utils.ExceptionHandler;
+import com.tenlionsoft.baselib.utils.LogUtils;
+import com.tenlionsoft.oamodule.R;
+import com.tenlionsoft.oamodule.R2;
+import com.tenlionsoft.oamodule.adapter.EmailAdapter;
+import com.tenlionsoft.oamodule.beans.EmailInboxListBean;
+import com.tenlionsoft.oamodule.net.OAApi;
+import com.tenlionsoft.oamodule.pad.activitys.home.PadMainActivity;
+
+import org.jetbrains.annotations.NotNull;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import io.reactivex.rxjava3.core.Observer;
+import io.reactivex.rxjava3.disposables.Disposable;
+
+/**
+ * 作者: adam
+ * 日期: 2022/5/11 - 08:50
+ * 邮箱: itgaojian@163.com
+ * 描述: 平板收件箱
+ */
+@Route(path = PathConfig.PATH_MODULE_PAD_OA_FRAGMENT_EMAIL_IN_BOX)
+public class InBoxFragment extends BaseFragment {
+
+ @BindView(R2.id.et_base_search_cancel)
+ EditText mEtBaseSearchCancel;
+ @BindView(R2.id.tv_base_search_cancel)
+ TextView mTvBaseSearchCancel;
+ @BindView(R2.id.ll_base_search_cancel)
+ LinearLayout mLlBaseSearchCancel;
+ @BindView(R2.id.rlv_content)
+ RecyclerView mRlvContent;
+ @BindView(R2.id.srl_content)
+ SmartRefreshLayout mSrlContent;
+ @BindView(R2.id.csv_state)
+ CustomStateView mCsvState;
+ private PadMainActivity mMainActivity;
+ private EmailAdapter mAdapter;
+ private List mDatas;
+ private int mCurrentPage = 1;
+ private String mKeywords = "";
+
+ @Override
+ protected int getContentViewId() {
+ return R.layout.fragment_email_in_box;
+ }
+
+ @Override
+ protected void setDataToView(View dataView) {
+ ButterKnife.bind(this, dataView);
+ setStateView(STATE_SUCCESS);
+ mSrlView.setEnableRefresh(false);
+ mSrlView.setEnableLoadMore(false);
+ setTitleView(true);
+ mTvFragmentTitle.setText("收件箱");
+ mIvFragmentBack.setOnClickListener(v -> mMainActivity.backFragment(3, this));
+ mSrlContent.setOnLoadMoreListener(v -> doLoadMore());
+ mSrlContent.setOnRefreshListener(v -> doRefresh());
+ mDatas = new ArrayList<>();
+ mAdapter = new EmailAdapter(mActivity, mDatas);
+ mRlvContent.setLayoutManager(new LinearLayoutManager(mActivity));
+ mRlvContent.setAdapter(mAdapter);
+ mAdapter.addOnItemClickListener(rowsBean -> {
+ BaseFragment fragment = FragmentUtils.getFragmentOne(PathConfig.PATH_MODULE_PAD_OA_FRAGMENT_EMAIL_IN_DETAIL, "id", ((EmailInboxListBean.RowsBean) rowsBean).getId());
+ mMainActivity.addFragment(3, fragment);
+ InDetailFragment detailFragment = (InDetailFragment) fragment;
+ detailFragment.setOnRefreshItemListener(id -> {
+ if (!TextUtils.isEmpty(id)) {
+ //遍历集合
+ for (int i = 0; i < mDatas.size(); i++) {
+ try {
+ EmailInboxListBean.RowsBean bean = (EmailInboxListBean.RowsBean) mDatas.get(i);
+ if (id.equals(bean.getId())) {
+ bean.setReadTag(1);
+ break;
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ mAdapter.setData(mDatas);
+ }
+ });
+ });
+ doRefresh();
+ Bundle bundle = getArguments();
+ String key = "";
+ if (bundle != null) {
+ key = bundle.getString("key");
+ }
+ if (!TextUtils.isEmpty(key)) {
+ showSoftKeyboard(mEtBaseSearchCancel);
+ }
+
+ mEtBaseSearchCancel.setOnEditorActionListener((v, actionId, event) -> {
+ LogUtils.e("搜索==" + actionId);
+ if (actionId == EditorInfo.IME_ACTION_SEARCH) {
+ mActivity.hideSoftKeyboard();
+ mEtBaseSearchCancel.clearFocus();
+ mKeywords = v.getText().toString();
+ doRefresh();
+ return true;
+ } else {
+ return false;
+ }
+ });
+ mTvBaseSearchCancel.setOnClickListener(v -> {
+ mEtBaseSearchCancel.setText("");
+ mEtBaseSearchCancel.clearFocus();
+ mKeywords = "";
+ doRefresh();
+ });
+ }
+
+ public void showSoftKeyboard(EditText editText) {
+ if (editText != null) {
+ editText.setFocusable(true);
+ editText.setFocusableInTouchMode(true);
+ //请求获得焦点
+ editText.requestFocus();
+ //调用系统输入法
+ InputMethodManager inputManager = (InputMethodManager) mActivity.getSystemService(Context.INPUT_METHOD_SERVICE);
+ inputManager.showSoftInput(editText, 0);
+ inputManager.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, InputMethodManager.HIDE_NOT_ALWAYS);
+ }
+ }
+
+ @Override
+ public void onAttach(@NonNull @NotNull Context context) {
+ super.onAttach(context);
+ mMainActivity = (PadMainActivity) getActivity();
+ }
+
+ /**
+ * 加载更多
+ */
+ private void doLoadMore() {
+ getInboxList(mCurrentPage);
+ }
+
+ /**
+ * 刷新
+ */
+ private void doRefresh() {
+ mDatas.clear();
+ mAdapter.setData(mDatas);
+ getInboxList(1);
+ }
+
+
+ @Override
+ public void onHiddenChanged(boolean hidden) {
+ super.onHiddenChanged(hidden);
+ if (!hidden) {
+ if (mIsRefresh) {
+ mIsRefresh = false;
+ doRefresh();
+ }
+ }
+ }
+
+ /**
+ * 获取文档列表
+ */
+ private void getInboxList(int currentPage) {
+ mCurrentPage = currentPage;
+ RetrofitManager.getInstance()
+ .create(OAApi.class)
+ .getEmailInboxList(mKeywords, mCurrentPage + "")
+ .compose(RxTransformer.getTransformer())
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(@io.reactivex.rxjava3.annotations.NonNull Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(@io.reactivex.rxjava3.annotations.NonNull EmailInboxListBean listBean) {
+ if (listBean.getRows() != null && listBean.getRows().size() > 0) {
+ ++mCurrentPage;
+ if (currentPage == 1) {
+ mDatas.clear();
+ mDatas.addAll(listBean.getRows());
+ } else {
+ mDatas.addAll(listBean.getRows());
+ }
+ mCsvState.setState(CustomStateView.STATE_SUCCESS);
+ mAdapter.notifyDataSetChanged();
+ mSrlContent.finishRefresh();
+ if (mDatas.size() >= listBean.getTotal()) {
+ mSrlContent.finishLoadMore();
+ mSrlContent.setNoMoreData(true);
+ } else {
+ mSrlContent.finishLoadMore();
+ mSrlContent.setNoMoreData(false);
+ }
+ } else {
+ mSrlContent.finishRefresh();
+ mSrlContent.finishLoadMore();
+ if (currentPage > 1) {
+ mSrlContent.setNoMoreData(true);
+ } else {
+ if (TextUtils.isEmpty(mKeywords)) {
+ //无数据
+ mCsvState.setState(CustomStateView.STATE_EMPTY);
+ } else {
+ mCsvState.setState(CustomStateView.STATE_EMPTY);
+ ToastUtils.show("未查询到相关内容");
+ }
+ }
+ }
+ }
+
+ @Override
+ public void onError(@io.reactivex.rxjava3.annotations.NonNull Throwable e) {
+ mSrlContent.finishLoadMore();
+ mSrlContent.finishRefresh();
+ ExceptionHandler.handleException(e);
+ mCsvState.setState(CustomStateView.STATE_ERROR);
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+ }
+
+
+ @Override
+ protected void refreshView() {
+
+ }
+
+ @Override
+ protected void loadMoreData() {
+
+ }
+}
diff --git a/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/email/InDetailFragment.java b/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/email/InDetailFragment.java
new file mode 100644
index 0000000..17cd910
--- /dev/null
+++ b/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/email/InDetailFragment.java
@@ -0,0 +1,357 @@
+package com.tenlionsoft.oamodule.pad.fragments.email;
+
+import android.app.AlertDialog;
+import android.app.ProgressDialog;
+import android.content.Context;
+import android.os.Bundle;
+import android.text.Html;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.alibaba.android.arouter.facade.annotation.Route;
+import com.alibaba.android.arouter.launcher.ARouter;
+import com.hjq.toast.ToastUtils;
+import com.tenlionsoft.baselib.constant.PathConfig;
+import com.tenlionsoft.baselib.core.beans.AddFileBean;
+import com.tenlionsoft.baselib.core.beans.BaseSuccessBean;
+import com.tenlionsoft.baselib.core.retrofit_net.BaseUrlApi;
+import com.tenlionsoft.baselib.core.retrofit_net.RetrofitManager;
+import com.tenlionsoft.baselib.core.retrofit_net.api.BaseApiService;
+import com.tenlionsoft.baselib.core.retrofit_net.bean.FileInfoBean;
+import com.tenlionsoft.baselib.core.retrofit_net.conver.RxTransformer;
+import com.tenlionsoft.baselib.core.widget.base.AddFileAdapter;
+import com.tenlionsoft.baselib.core.widget.base.BaseFragment;
+import com.tenlionsoft.baselib.core.widget.base.FragmentUtils;
+import com.tenlionsoft.baselib.utils.ExceptionHandler;
+import com.tenlionsoft.baselib.utils.FileUtils;
+import com.tenlionsoft.baselib.utils.UIUtil;
+import com.tenlionsoft.oamodule.R;
+import com.tenlionsoft.oamodule.R2;
+import com.tenlionsoft.oamodule.beans.EmailInboxDetailBean;
+import com.tenlionsoft.oamodule.net.OAApi;
+import com.tenlionsoft.oamodule.pad.activitys.home.PadMainActivity;
+
+import org.jetbrains.annotations.NotNull;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.GridLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import io.reactivex.rxjava3.core.Observer;
+import io.reactivex.rxjava3.disposables.Disposable;
+
+import static com.tenlionsoft.baselib.core.widget.PhotoActivity.TAG_IMGURL;
+
+/**
+ * 作者: adam
+ * 日期: 2022/5/11 - 10:57
+ * 邮箱: itgaojian@163.com
+ * 描述:
+ */
+@Route(path = PathConfig.PATH_MODULE_PAD_OA_FRAGMENT_EMAIL_IN_DETAIL)
+public class InDetailFragment extends BaseFragment {
+ @BindView(R2.id.tv_title)
+ TextView mTvTitle;
+ @BindView(R2.id.tv_sender)
+ TextView mTvSender;
+ @BindView(R2.id.tv_time)
+ TextView mTvTime;
+ @BindView(R2.id.tv_content)
+ TextView mTvContent;
+ @BindView(R2.id.rlv_files)
+ RecyclerView mRlvFiles;
+ @BindView(R2.id.iv_del)
+ ImageView mIvDel;
+ @BindView(R2.id.iv_transfer)
+ ImageView mIvTransfer;
+ private String mId;
+ private PadMainActivity mMainActivity;
+
+ @Override
+ protected int getContentViewId() {
+ return R.layout.fragment_in_detail;
+ }
+
+ @Override
+ protected void setDataToView(View dataView) {
+ ButterKnife.bind(this, dataView);
+ setTitleView(true);
+ mTvFragmentTitle.setText("邮件");
+ mIvFragmentBack.setOnClickListener(v -> mMainActivity.backFragment(3, this));
+ Bundle bundle = getArguments();
+ if (bundle != null) {
+ mId = bundle.getString("id");
+ }
+
+ if (TextUtils.isEmpty(mId)) {
+ ToastUtils.show("数据有误");
+ mMainActivity.backFragment(3, this);
+ } else {
+ initView();
+ getDetailById();
+ }
+ mActivity.setTouchDelegate(mIvDel, 30);
+ mActivity.setTouchDelegate(mIvTransfer, 30);
+ }
+
+ @Override
+ public void onAttach(@NonNull @NotNull Context context) {
+ super.onAttach(context);
+ mMainActivity = (PadMainActivity) getActivity();
+ }
+
+
+ private void initView() {
+ mIvDel.setOnClickListener(v -> onShowConfirm(1));
+ mIvTransfer.setOnClickListener(v -> onShowConfirm(2));
+ }
+
+ private void onShowConfirm(int type) {
+ new AlertDialog.Builder(mActivity)
+ .setTitle("提示")
+ .setMessage(type == 1 ? "确定要将该邮件删除至回收站吗?" : "确定要转发该邮件吗?")
+ .setPositiveButton("确定", (dialog, which) -> {
+ dialog.dismiss();
+ if (type == 1) {
+ doDelEmail();
+ } else {
+ mMainActivity.backFragment(3, InDetailFragment.this);
+ Map params = new HashMap<>();
+ params.put("id", mId);
+ params.put("type", "inbox");
+ BaseFragment fragment = FragmentUtils.getFragmentMap(PathConfig.PATH_MODULE_PAD_OA_FRAGMENT_EMAIL_SEND, params);
+ mMainActivity.addFragment(3, fragment);
+ }
+ })
+ .setNegativeButton("取消", (dialog, which) -> dialog.dismiss())
+ .create()
+ .show();
+ }
+
+ private void doDelEmail() {
+ ProgressDialog dialog = UIUtil.initDialog(mActivity, "删除中...");
+ dialog.show();
+ RetrofitManager.getInstance()
+ .create(OAApi.class)
+ .doDelEmailInbox(mId)
+ .compose(RxTransformer.getTransformer())
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(@io.reactivex.rxjava3.annotations.NonNull Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(@io.reactivex.rxjava3.annotations.NonNull BaseSuccessBean baseSuccessBean) {
+ if (dialog.isShowing()) dialog.dismiss();
+ ToastUtils.show("删除成功");
+ BaseFragment preFragment = mMainActivity.getPreFragment();
+ if (preFragment != null) {
+ preFragment.mIsRefresh = true;
+ }
+ mMainActivity.backFragment(3, InDetailFragment.this);
+ }
+
+ @Override
+ public void onError(@io.reactivex.rxjava3.annotations.NonNull Throwable e) {
+ if (dialog.isShowing()) dialog.dismiss();
+ ExceptionHandler.handleException(e);
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+ }
+
+ private void getDetailById() {
+ RetrofitManager.getInstance()
+ .create(OAApi.class)
+ .getEmailInboxDetail(mId)
+ .compose(RxTransformer.getTransformer())
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(@io.reactivex.rxjava3.annotations.NonNull Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(@io.reactivex.rxjava3.annotations.NonNull EmailInboxDetailBean emailInboxDetailBean) {
+ setDataToView(emailInboxDetailBean);
+ doSaveReadState();
+ }
+
+ @Override
+ public void onError(@io.reactivex.rxjava3.annotations.NonNull Throwable e) {
+ setStateView(STATE_ERROR);
+ mSrlView.setEnableRefresh(false);
+ mSrlView.setEnableLoadMore(false);
+ ExceptionHandler.handleException(e);
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+ }
+
+ /**
+ * 显示数据
+ */
+ private void setDataToView(EmailInboxDetailBean bean) {
+ setStateView(STATE_SUCCESS);
+ mSrlView.setEnableLoadMore(false);
+ mSrlView.setEnableRefresh(false);
+ mTvTitle.setText(bean.getTitle());
+ mTvSender.setText(bean.getCreatorNames());
+ mTvTime.setText(bean.getGmtCreate() + "(收件)");
+ mTvContent.setText(Html.fromHtml(bean.getContent()));
+ if (!TextUtils.isEmpty(bean.getMailFiles())) {
+ doGetFileInfo(bean.getMailFiles(), null);
+ }
+ }
+
+ private List mFileBeans;
+ private AddFileAdapter mAddFileAdapter;
+
+ private void doGetFileInfo(String fileId, List files) {
+ ProgressDialog dialog = UIUtil.initDialog(mActivity, "获取中...");
+ dialog.show();
+ RetrofitManager.getInstance()
+ .create(BaseApiService.class)
+ .getFileInfoList(fileId)
+ .compose(RxTransformer.getTransformer())
+ .subscribe(new Observer>() {
+
+
+ @Override
+ public void onSubscribe(@io.reactivex.rxjava3.annotations.NonNull Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(@io.reactivex.rxjava3.annotations.NonNull List fileInfoBeans) {
+ if (dialog.isShowing()) dialog.dismiss();
+ if (fileInfoBeans.size() > 0) {
+ mFileBeans = new ArrayList<>();
+ mAddFileAdapter = new AddFileAdapter(mActivity, mFileBeans);
+ mRlvFiles.setLayoutManager(new GridLayoutManager(mActivity, 5));
+ mRlvFiles.setAdapter(mAddFileAdapter);
+ for (int i = 0; i < fileInfoBeans.size(); i++) {
+ FileInfoBean infoBean = fileInfoBeans.get(i);
+ AddFileBean bean = new AddFileBean();
+ bean.setId(infoBean.getFileId());
+ bean.setFileName(infoBean.getFileName());
+ bean.setFileType(FileUtils.getFileType(infoBean.getFileName()));
+ bean.setPath(BaseUrlApi.BASE_FILE_URL + infoBean.getFileId());
+ mFileBeans.add(0, bean);
+ }
+ mAddFileAdapter.setData(mFileBeans);
+ mAddFileAdapter.addOnItemClickListener(addFileBean -> {
+ if (addFileBean.getFileType() == 1) {
+ //文档
+ ARouter.getInstance()
+ .build(PathConfig.PATH_MODULE_BASELIB_ACTIVITY_PREVIEW_FILE)
+ .withString("fileName", addFileBean.getFileName())
+ .withString("fileId", addFileBean.getId())
+ .navigation();
+ } else if (2 == addFileBean.getFileType()) {
+ //图片预览
+ //遍历文件获取所有图片文件
+ ArrayList imgUrls = new ArrayList<>();
+ for (int i = 0; i < mFileBeans.size(); i++) {
+ if (mFileBeans.get(i).getFileType() == 2) {
+ AddFileBean fileBean = mFileBeans.get(i);
+ String url = BaseUrlApi.BASE_IMG_URL + fileBean.getId();
+ imgUrls.add(url);
+ }
+ }
+ ARouter.getInstance()
+ .build(PathConfig.PATH_MODULE_BASELIB_SHOW_IMG)
+ .withStringArrayList(TAG_IMGURL, imgUrls)
+ .navigation();
+ } else if (3 == addFileBean.getFileType() || 4 == addFileBean.getFileType()) {
+ //TODO 视频或音频预览
+ }
+ });
+ } else {
+ ToastUtils.show("未找到文档信息");
+ }
+ }
+
+ @Override
+ public void onError(@io.reactivex.rxjava3.annotations.NonNull Throwable e) {
+ if (dialog.isShowing()) dialog.dismiss();
+ ExceptionHandler.handleException(e);
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+ }
+
+
+ private void doSaveReadState() {
+ RetrofitManager
+ .getInstance()
+ .create(OAApi.class)
+ .doSaveEmailRead(mId)
+ .compose(RxTransformer.getTransformer())
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(@io.reactivex.rxjava3.annotations.NonNull Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(@io.reactivex.rxjava3.annotations.NonNull BaseSuccessBean baseSuccessBean) {
+ if (mOnRefreshItem != null) {
+ mOnRefreshItem.doRefreshItem(mId);
+ mMainActivity.getHintNum();
+ }
+ }
+
+ @Override
+ public void onError(@io.reactivex.rxjava3.annotations.NonNull Throwable e) {
+
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+ }
+
+ private OnRefreshItem mOnRefreshItem;
+
+ public void setOnRefreshItemListener(OnRefreshItem refreshItem) {
+ this.mOnRefreshItem = refreshItem;
+ }
+
+ public interface OnRefreshItem {
+ void doRefreshItem(String id);
+ }
+
+ @Override
+ protected void refreshView() {
+
+ }
+
+ @Override
+ protected void loadMoreData() {
+
+ }
+}
diff --git a/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/email/RecycleBoxFragment.java b/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/email/RecycleBoxFragment.java
new file mode 100644
index 0000000..5850c78
--- /dev/null
+++ b/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/email/RecycleBoxFragment.java
@@ -0,0 +1,284 @@
+package com.tenlionsoft.oamodule.pad.fragments.email;
+
+import android.app.AlertDialog;
+import android.app.ProgressDialog;
+import android.content.Context;
+import android.text.TextUtils;
+import android.view.View;
+import android.view.inputmethod.EditorInfo;
+import android.widget.EditText;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import com.alibaba.android.arouter.facade.annotation.Route;
+import com.hjq.toast.ToastUtils;
+import com.scwang.smart.refresh.layout.SmartRefreshLayout;
+import com.tenlionsoft.baselib.constant.PathConfig;
+import com.tenlionsoft.baselib.core.beans.BaseSuccessBean;
+import com.tenlionsoft.baselib.core.retrofit_net.RetrofitManager;
+import com.tenlionsoft.baselib.core.retrofit_net.conver.RxTransformer;
+import com.tenlionsoft.baselib.core.widget.base.BaseFragment;
+import com.tenlionsoft.baselib.core.widget.base.FragmentUtils;
+import com.tenlionsoft.baselib.core.widget.views.CustomStateView;
+import com.tenlionsoft.baselib.utils.ExceptionHandler;
+import com.tenlionsoft.baselib.utils.LogUtils;
+import com.tenlionsoft.baselib.utils.UIUtil;
+import com.tenlionsoft.oamodule.R;
+import com.tenlionsoft.oamodule.R2;
+import com.tenlionsoft.oamodule.adapter.EmailAdapter;
+import com.tenlionsoft.oamodule.beans.EmailRecycleListBean;
+import com.tenlionsoft.oamodule.net.OAApi;
+import com.tenlionsoft.oamodule.pad.activitys.home.PadMainActivity;
+
+import org.jetbrains.annotations.NotNull;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import io.reactivex.rxjava3.annotations.NonNull;
+import io.reactivex.rxjava3.core.Observer;
+import io.reactivex.rxjava3.disposables.Disposable;
+
+/**
+ * 作者: adam
+ * 日期: 2022/5/11 - 10:16
+ * 邮箱: itgaojian@163.com
+ * 描述: 平板回收站
+ */
+@Route(path = PathConfig.PATH_MODULE_PAD_OA_FRAGMENT_EMAIL_RECYCLE_BOX)
+public class RecycleBoxFragment extends BaseFragment {
+ @BindView(R2.id.et_base_search_cancel)
+ EditText mEtBaseSearchCancel;
+ @BindView(R2.id.tv_base_search_cancel)
+ TextView mTvBaseSearchCancel;
+ @BindView(R2.id.ll_base_search_cancel)
+ LinearLayout mLlBaseSearchCancel;
+ @BindView(R2.id.rlv_content)
+ RecyclerView mRlvContent;
+ @BindView(R2.id.srl_content)
+ SmartRefreshLayout mSrlContent;
+ @BindView(R2.id.csv_state)
+ CustomStateView mCsvState;
+
+ private EmailAdapter mAdapter;
+ private List mDatas;
+ private int mCurrentPage = 1;
+ private String mKeywords = "";
+ private PadMainActivity mMainActivity;
+
+ @Override
+ protected int getContentViewId() {
+ return R.layout.fragment_recycle_box;
+ }
+
+ @Override
+ protected void setDataToView(View dataView) {
+ ButterKnife.bind(this, dataView);
+ setStateView(STATE_SUCCESS);
+ mSrlView.setEnableRefresh(false);
+ mSrlView.setEnableLoadMore(false);
+ setTitleView(true);
+ mTvFragmentTitle.setText("回收站");
+ mIvFragmentBack.setOnClickListener(v -> mMainActivity.backFragment(3, this));
+ mTvFragmentOption.setText("清空");
+ mTvFragmentOption.setOnClickListener(v -> onShowConfirm());
+ mSrlContent.setOnLoadMoreListener(v -> doLoadMore());
+ mSrlContent.setOnRefreshListener(v -> doRefresh());
+ mDatas = new ArrayList<>();
+ mAdapter = new EmailAdapter(mActivity, mDatas);
+ mRlvContent.setLayoutManager(new LinearLayoutManager(mActivity));
+ mRlvContent.setAdapter(mAdapter);
+ mAdapter.addOnItemClickListener(rowsBean -> {
+ BaseFragment fragment = FragmentUtils.getFragmentOne(PathConfig.PATH_MODULE_PAD_OA_FRAGMENT_EMAIL_RECYCLE_DETAIL, "id", ((EmailRecycleListBean.RowsBean) rowsBean).getId());
+ mMainActivity.addFragment(3, fragment);
+ });
+// 来源(send:发件箱,inbox:收件箱,draft:草稿箱)
+ mCsvState.setState(CustomStateView.STATE_LOAD);
+ doRefresh();
+ mEtBaseSearchCancel.setOnEditorActionListener((v, actionId, event) -> {
+ LogUtils.e("搜索==" + actionId);
+ if (actionId == EditorInfo.IME_ACTION_SEARCH) {
+ mActivity.hideSoftKeyboard();
+ mEtBaseSearchCancel.clearFocus();
+ mKeywords = v.getText().toString();
+ doRefresh();
+ return true;
+ } else {
+ return false;
+ }
+ });
+ mTvBaseSearchCancel.setOnClickListener(v -> {
+ mEtBaseSearchCancel.setText("");
+ mEtBaseSearchCancel.clearFocus();
+ mKeywords = "";
+ doRefresh();
+ });
+ }
+
+ @Override
+ public void onAttach(@androidx.annotation.NonNull @NotNull Context context) {
+ super.onAttach(context);
+ mMainActivity = (PadMainActivity) getActivity();
+
+ }
+
+ @Override
+ public void onHiddenChanged(boolean hidden) {
+ super.onHiddenChanged(hidden);
+ if (!hidden) {
+ if (mIsRefresh) {
+ mIsRefresh = false;
+ doRefresh();
+ }
+ }
+ }
+
+
+ private void onShowConfirm() {
+ new AlertDialog.Builder(mActivity)
+ .setTitle("提示")
+ .setIcon(android.R.drawable.ic_dialog_alert)
+ .setMessage("清空回收站邮件将无法回复,确定要清空回收站吗?")
+ .setPositiveButton("确定", (dialog, which) -> {
+ dialog.dismiss();
+ doClearRecycler();
+ })
+ .setNegativeButton("取消", (dialog, which) -> dialog.dismiss())
+ .create()
+ .show();
+ }
+
+ /**
+ * 清空回收站
+ */
+ private void doClearRecycler() {
+ ProgressDialog dialog = UIUtil.initDialog(mActivity, "删除中...");
+ dialog.show();
+ RetrofitManager.getInstance()
+ .create(OAApi.class)
+ .doDelEmailRecycleAll()
+ .compose(RxTransformer.getTransformer())
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(@NonNull BaseSuccessBean baseSuccessBean) {
+ if (dialog.isShowing()) dialog.dismiss();
+ ToastUtils.show("清空成功");
+ doRefresh();
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ if (dialog.isShowing()) dialog.dismiss();
+ ExceptionHandler.handleException(e);
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+ }
+
+ /**
+ * 加载更多
+ */
+ private void doLoadMore() {
+ getRecycleList(mCurrentPage);
+ }
+
+ /**
+ * 刷新
+ */
+ private void doRefresh() {
+ mDatas.clear();
+ mAdapter.setData(mDatas);
+ getRecycleList(1);
+ }
+
+
+ /**
+ * 获取文档列表
+ */
+ private void getRecycleList(int currentPage) {
+ mCurrentPage = currentPage;
+ RetrofitManager.getInstance()
+ .create(OAApi.class)
+ .getEmailRecycleList(mKeywords, mCurrentPage + "")
+ .compose(RxTransformer.getTransformer())
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(@NonNull EmailRecycleListBean listBean) {
+ if (listBean.getRows() != null && listBean.getRows().size() > 0) {
+ ++mCurrentPage;
+ if (currentPage == 1) {
+ mDatas.clear();
+ mDatas.addAll(listBean.getRows());
+ } else {
+ mDatas.addAll(listBean.getRows());
+ }
+ mCsvState.setState(CustomStateView.STATE_SUCCESS);
+ mAdapter.notifyDataSetChanged();
+ mSrlContent.finishRefresh();
+ if (mDatas.size() >= listBean.getTotal()) {
+ mSrlContent.finishLoadMore();
+ mSrlContent.setNoMoreData(true);
+ } else {
+ mSrlContent.finishLoadMore();
+ mSrlContent.setNoMoreData(false);
+ }
+ } else {
+ mSrlContent.finishRefresh();
+ mSrlContent.finishLoadMore();
+ if (currentPage > 1) {
+ mSrlContent.setNoMoreData(true);
+ } else {
+ if (TextUtils.isEmpty(mKeywords)) {
+ //无数据
+ mCsvState.setState(CustomStateView.STATE_EMPTY);
+ } else {
+ mCsvState.setState(CustomStateView.STATE_EMPTY);
+ ToastUtils.show("未查询到相关内容");
+ }
+ }
+ }
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ mSrlContent.finishLoadMore();
+ mSrlContent.finishRefresh();
+ ExceptionHandler.handleException(e);
+ mCsvState.setState(CustomStateView.STATE_ERROR);
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+ }
+
+ @Override
+ protected void refreshView() {
+
+ }
+
+ @Override
+ protected void loadMoreData() {
+
+ }
+}
diff --git a/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/email/RecycleDetailFragment.java b/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/email/RecycleDetailFragment.java
new file mode 100644
index 0000000..a795340
--- /dev/null
+++ b/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/email/RecycleDetailFragment.java
@@ -0,0 +1,364 @@
+package com.tenlionsoft.oamodule.pad.fragments.email;
+
+import android.app.AlertDialog;
+import android.app.ProgressDialog;
+import android.content.Context;
+import android.os.Bundle;
+import android.text.Html;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.alibaba.android.arouter.facade.annotation.Route;
+import com.alibaba.android.arouter.launcher.ARouter;
+import com.hjq.toast.ToastUtils;
+import com.tenlionsoft.baselib.constant.PathConfig;
+import com.tenlionsoft.baselib.core.beans.AddFileBean;
+import com.tenlionsoft.baselib.core.beans.BaseSuccessBean;
+import com.tenlionsoft.baselib.core.retrofit_net.BaseUrlApi;
+import com.tenlionsoft.baselib.core.retrofit_net.RetrofitManager;
+import com.tenlionsoft.baselib.core.retrofit_net.api.BaseApiService;
+import com.tenlionsoft.baselib.core.retrofit_net.bean.FileInfoBean;
+import com.tenlionsoft.baselib.core.retrofit_net.conver.RxTransformer;
+import com.tenlionsoft.baselib.core.widget.base.AddFileAdapter;
+import com.tenlionsoft.baselib.core.widget.base.BaseFragment;
+import com.tenlionsoft.baselib.utils.ExceptionHandler;
+import com.tenlionsoft.baselib.utils.FileUtils;
+import com.tenlionsoft.baselib.utils.UIUtil;
+import com.tenlionsoft.oamodule.R;
+import com.tenlionsoft.oamodule.R2;
+import com.tenlionsoft.oamodule.beans.EmailRecycleDetailBean;
+import com.tenlionsoft.oamodule.net.OAApi;
+import com.tenlionsoft.oamodule.pad.activitys.home.PadMainActivity;
+
+import org.jetbrains.annotations.NotNull;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.GridLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import io.reactivex.rxjava3.core.Observer;
+import io.reactivex.rxjava3.disposables.Disposable;
+
+import static com.tenlionsoft.baselib.core.widget.PhotoActivity.TAG_IMGURL;
+
+/**
+ * 作者: adam
+ * 日期: 2022/5/11 - 11:33
+ * 邮箱: itgaojian@163.com
+ * 描述: 回收站详情
+ */
+@Route(path = PathConfig.PATH_MODULE_PAD_OA_FRAGMENT_EMAIL_RECYCLE_DETAIL)
+public class RecycleDetailFragment extends BaseFragment {
+
+ @BindView(R2.id.tv_title)
+ TextView mTvTitle;
+ @BindView(R2.id.tv_sender)
+ TextView mTvSender;
+ @BindView(R2.id.tv_receiver)
+ TextView mTvReceiver;
+ @BindView(R2.id.tv_copy)
+ TextView mTvCopy;
+ @BindView(R2.id.tv_secret)
+ TextView mTvSecret;
+ @BindView(R2.id.tv_time)
+ TextView mTvTime;
+ @BindView(R2.id.tv_content)
+ TextView mTvContent;
+ @BindView(R2.id.rlv_files)
+ RecyclerView mRlvFiles;
+ @BindView(R2.id.iv_del)
+ ImageView mIvDel;
+ @BindView(R2.id.iv_transfer)
+ ImageView mIvTransfer;
+ private PadMainActivity mMainActivity;
+ private String mId;
+
+ @Override
+ protected int getContentViewId() {
+ return R.layout.fragment_recycle_detail;
+ }
+
+ @Override
+ protected void setDataToView(View dataView) {
+ ButterKnife.bind(this, dataView);
+ setTitleView(true);
+ mTvFragmentTitle.setText("邮件");
+ mIvFragmentBack.setOnClickListener(v -> mMainActivity.backFragment(3, this));
+ Bundle bundle = getArguments();
+ if (bundle != null) {
+ mId = bundle.getString("id");
+ }
+
+ if (TextUtils.isEmpty(mId)) {
+ ToastUtils.show("数据有误");
+ mMainActivity.backFragment(3, this);
+ } else {
+ getDetailById();
+ }
+ mActivity.setTouchDelegate(mIvDel, 30);
+ mActivity.setTouchDelegate(mIvTransfer, 30);
+ }
+
+ @Override
+ public void onAttach(@NonNull @NotNull Context context) {
+ super.onAttach(context);
+ mMainActivity = (PadMainActivity) getActivity();
+ }
+
+
+ private void getDetailById() {
+ RetrofitManager.getInstance()
+ .create(OAApi.class)
+ .getEmailRecycleDetail(mId)
+ .compose(RxTransformer.getTransformer())
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(@io.reactivex.rxjava3.annotations.NonNull Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(@io.reactivex.rxjava3.annotations.NonNull EmailRecycleDetailBean emailRecycleDetailBean) {
+ setDataToView(emailRecycleDetailBean);
+ }
+
+ @Override
+ public void onError(@io.reactivex.rxjava3.annotations.NonNull Throwable e) {
+ setStateView(STATE_ERROR);
+ mSrlView.setEnableLoadMore(false);
+ mSrlView.setEnableRefresh(false);
+ ExceptionHandler.handleException(e);
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+ }
+
+ private void setDataToView(EmailRecycleDetailBean b) {
+ setStateView(STATE_SUCCESS);
+ mSrlView.setEnableRefresh(false);
+ mSrlView.setEnableLoadMore(false);
+ //来源(send:发件箱,inbox:收件箱,draft:草稿箱)
+ mTvTitle.setText(b.getTitle());
+ if ("inbox".equals(b.getSourceFrom())) {
+ //收件箱
+ mTvSender.setText("发件:" + b.getCreatorNames());
+ mTvReceiver.setVisibility(View.GONE);
+ mTvCopy.setVisibility(View.GONE);
+ mTvSecret.setVisibility(View.GONE);
+ mTvTime.setText(b.getGmtCreate() + "(收件)");
+ } else {
+ //发件箱与草稿箱
+ mTvSender.setVisibility(View.GONE);
+ mTvReceiver.setText("收件:" + b.getRecipientNames());
+ mTvCopy.setText("抄送:" + b.getCopyForNames());
+ mTvSecret.setText("密送:" + b.getSecretNames());
+ mTvTime.setText(b.getGmtCreate() + ("send".equals(b.getSourceFrom()) ? "(发件)" : "(草稿)"));
+ }
+ mTvContent.setText(Html.fromHtml(b.getContent()));
+ //回显附件
+ if (!TextUtils.isEmpty(b.getMailFiles())) {
+ doGetFileInfo(b.getMailFiles(), null);
+ }
+ mIvDel.setOnClickListener(v -> onShowConfirm(1));
+ mIvTransfer.setOnClickListener(v -> onShowConfirm(2));
+ }
+
+ private void onShowConfirm(int type) {
+ new AlertDialog.Builder(mActivity)
+ .setTitle("提示")
+ .setMessage(1 == type ? "确定要删除该邮件吗?" : "确定要恢复该邮件吗?")
+ .setPositiveButton("确定", (dialog, which) -> {
+ dialog.dismiss();
+ if (type == 1) {
+ doDelEmail();
+ } else {
+ doRecoverEmail();
+ }
+ })
+ .setNegativeButton("取消", (dialog, which) -> dialog.dismiss())
+ .create()
+ .show();
+ }
+
+ /**
+ * 恢复邮件
+ */
+ private void doRecoverEmail() {
+ ProgressDialog dialog = UIUtil.initDialog(mActivity, "恢复中...");
+ dialog.show();
+ RetrofitManager.getInstance()
+ .create(OAApi.class)
+ .doRecoverEmail(mId)
+ .compose(RxTransformer.getTransformer())
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(@io.reactivex.rxjava3.annotations.NonNull Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(@io.reactivex.rxjava3.annotations.NonNull BaseSuccessBean baseSuccessBean) {
+ if (dialog.isShowing()) dialog.dismiss();
+ ToastUtils.show("恢复成功");
+ BaseFragment preFragment = mMainActivity.getPreFragment();
+ if (preFragment != null) {
+ preFragment.mIsRefresh = true;
+ }
+ mMainActivity.backFragment(3, RecycleDetailFragment.this);
+ }
+
+ @Override
+ public void onError(@io.reactivex.rxjava3.annotations.NonNull Throwable e) {
+ if (dialog.isShowing()) dialog.dismiss();
+ ExceptionHandler.handleException(e);
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+ }
+
+
+ /**
+ * 删除邮件
+ */
+ private void doDelEmail() {
+ ProgressDialog dialog = UIUtil.initDialog(mActivity, "删除中...");
+ dialog.show();
+ RetrofitManager.getInstance()
+ .create(OAApi.class)
+ .doDelEmailRecycle(mId)
+ .compose(RxTransformer.getTransformer())
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(@io.reactivex.rxjava3.annotations.NonNull Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(@io.reactivex.rxjava3.annotations.NonNull BaseSuccessBean baseSuccessBean) {
+ if (dialog.isShowing()) dialog.dismiss();
+ ToastUtils.show("删除成功");
+ BaseFragment preFragment = mMainActivity.getPreFragment();
+ if (preFragment != null) {
+ preFragment.mIsRefresh = true;
+ }
+ mMainActivity.backFragment(3, RecycleDetailFragment.this);
+ }
+
+ @Override
+ public void onError(@io.reactivex.rxjava3.annotations.NonNull Throwable e) {
+ if (dialog.isShowing()) dialog.dismiss();
+ ExceptionHandler.handleException(e);
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+ }
+
+ private List mFileBeans;
+ private AddFileAdapter mAddFileAdapter;
+
+ private void doGetFileInfo(String fileId, List files) {
+ ProgressDialog dialog = UIUtil.initDialog(mActivity, "获取中...");
+ dialog.show();
+ RetrofitManager.getInstance()
+ .create(BaseApiService.class)
+ .getFileInfoList(fileId)
+ .compose(RxTransformer.getTransformer())
+ .subscribe(new Observer>() {
+
+
+ @Override
+ public void onSubscribe(@io.reactivex.rxjava3.annotations.NonNull Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(@io.reactivex.rxjava3.annotations.NonNull List fileInfoBeans) {
+ if (dialog.isShowing()) dialog.dismiss();
+ if (fileInfoBeans.size() > 0) {
+ mFileBeans = new ArrayList<>();
+ mAddFileAdapter = new AddFileAdapter(mActivity, mFileBeans);
+ mRlvFiles.setLayoutManager(new GridLayoutManager(mActivity, 5));
+ mRlvFiles.setAdapter(mAddFileAdapter);
+ for (int i = 0; i < fileInfoBeans.size(); i++) {
+ FileInfoBean infoBean = fileInfoBeans.get(i);
+ AddFileBean bean = new AddFileBean();
+ bean.setId(infoBean.getFileId());
+ bean.setFileName(infoBean.getFileName());
+ bean.setFileType(FileUtils.getFileType(infoBean.getFileName()));
+ bean.setPath(BaseUrlApi.BASE_FILE_URL + infoBean.getFileId());
+ mFileBeans.add(0, bean);
+ }
+ mAddFileAdapter.setData(mFileBeans);
+ mAddFileAdapter.addOnItemClickListener(addFileBean -> {
+ if (addFileBean.getFileType() == 1) {
+ //文档
+ ARouter.getInstance()
+ .build(PathConfig.PATH_MODULE_BASELIB_ACTIVITY_PREVIEW_FILE)
+ .withString("fileName", addFileBean.getFileName())
+ .withString("fileId", addFileBean.getId())
+ .navigation();
+ } else if (2 == addFileBean.getFileType()) {
+ //图片预览
+ //遍历文件获取所有图片文件
+ ArrayList imgUrls = new ArrayList<>();
+ for (int i = 0; i < mFileBeans.size(); i++) {
+ if (mFileBeans.get(i).getFileType() == 2) {
+ AddFileBean fileBean = mFileBeans.get(i);
+ String url = BaseUrlApi.BASE_IMG_URL + fileBean.getId();
+ imgUrls.add(url);
+ }
+ }
+ ARouter.getInstance()
+ .build(PathConfig.PATH_MODULE_BASELIB_SHOW_IMG)
+ .withStringArrayList(TAG_IMGURL, imgUrls)
+ .navigation();
+ } else if (3 == addFileBean.getFileType() || 4 == addFileBean.getFileType()) {
+ //TODO 视频或音频预览
+ }
+ });
+ } else {
+ ToastUtils.show("未找到文档信息");
+ }
+ }
+
+ @Override
+ public void onError(@io.reactivex.rxjava3.annotations.NonNull Throwable e) {
+ if (dialog.isShowing()) dialog.dismiss();
+ ExceptionHandler.handleException(e);
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+ }
+
+ @Override
+ protected void refreshView() {
+
+ }
+
+ @Override
+ protected void loadMoreData() {
+
+ }
+}
diff --git a/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/email/SendBoxFragment.java b/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/email/SendBoxFragment.java
new file mode 100644
index 0000000..400da9e
--- /dev/null
+++ b/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/email/SendBoxFragment.java
@@ -0,0 +1,225 @@
+package com.tenlionsoft.oamodule.pad.fragments.email;
+
+import android.content.Context;
+import android.text.TextUtils;
+import android.view.View;
+import android.view.inputmethod.EditorInfo;
+import android.widget.EditText;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import com.alibaba.android.arouter.facade.annotation.Route;
+import com.hjq.toast.ToastUtils;
+import com.scwang.smart.refresh.layout.SmartRefreshLayout;
+import com.tenlionsoft.baselib.constant.PathConfig;
+import com.tenlionsoft.baselib.core.retrofit_net.RetrofitManager;
+import com.tenlionsoft.baselib.core.retrofit_net.conver.RxTransformer;
+import com.tenlionsoft.baselib.core.widget.base.BaseFragment;
+import com.tenlionsoft.baselib.core.widget.base.FragmentUtils;
+import com.tenlionsoft.baselib.core.widget.views.CustomStateView;
+import com.tenlionsoft.baselib.utils.ExceptionHandler;
+import com.tenlionsoft.baselib.utils.LogUtils;
+import com.tenlionsoft.oamodule.R;
+import com.tenlionsoft.oamodule.R2;
+import com.tenlionsoft.oamodule.adapter.EmailAdapter;
+import com.tenlionsoft.oamodule.beans.EmailSendListBean;
+import com.tenlionsoft.oamodule.net.OAApi;
+import com.tenlionsoft.oamodule.pad.activitys.home.PadMainActivity;
+
+import org.jetbrains.annotations.NotNull;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import io.reactivex.rxjava3.core.Observer;
+import io.reactivex.rxjava3.disposables.Disposable;
+
+/**
+ * 作者: adam
+ * 日期: 2022/5/11 - 10:15
+ * 邮箱: itgaojian@163.com
+ * 描述: 平板发件箱
+ */
+@Route(path = PathConfig.PATH_MODULE_PAD_OA_FRAGMENT_EMAIL_SEND_BOX)
+public class SendBoxFragment extends BaseFragment {
+ @BindView(R2.id.et_base_search_cancel)
+ EditText mEtBaseSearchCancel;
+ @BindView(R2.id.tv_base_search_cancel)
+ TextView mTvBaseSearchCancel;
+ @BindView(R2.id.ll_base_search_cancel)
+ LinearLayout mLlBaseSearchCancel;
+ @BindView(R2.id.rlv_content)
+ RecyclerView mRlvContent;
+ @BindView(R2.id.srl_content)
+ SmartRefreshLayout mSrlContent;
+ @BindView(R2.id.csv_state)
+ CustomStateView mCsvState;
+
+ private EmailAdapter mAdapter;
+ private List mDatas;
+ private int mCurrentPage = 1;
+ private String mKeywords = "";
+ private PadMainActivity mMainActivity;
+
+ @Override
+ protected int getContentViewId() {
+ return R.layout.fragment_send_box;
+ }
+
+ @Override
+ protected void setDataToView(View dataView) {
+ ButterKnife.bind(this, dataView);
+ setStateView(STATE_SUCCESS);
+ mSrlView.setEnableRefresh(false);
+ mSrlView.setEnableLoadMore(false);
+ setTitleView(true);
+ mTvFragmentTitle.setText("发件箱");
+ mIvFragmentBack.setOnClickListener(v -> mMainActivity.backFragment(3, this));
+
+ mSrlContent.setOnLoadMoreListener(v -> doLoadMore());
+ mSrlContent.setOnRefreshListener(v -> doRefresh());
+ mDatas = new ArrayList<>();
+ mAdapter = new EmailAdapter(mActivity, mDatas);
+ mRlvContent.setLayoutManager(new LinearLayoutManager(mActivity));
+ mRlvContent.setAdapter(mAdapter);
+ mAdapter.addOnItemClickListener(rowsBean -> {
+ BaseFragment fragment = FragmentUtils.getFragmentOne(PathConfig.PATH_MODULE_PAD_OA_FRAGMENT_EMAIL_SEND_DETAIL, "id", ((EmailSendListBean.RowsBean) rowsBean).getMailId());
+ mMainActivity.addFragment(3, fragment);
+ });
+ doRefresh();
+ mEtBaseSearchCancel.setOnEditorActionListener((v, actionId, event) -> {
+ LogUtils.e("搜索==" + actionId);
+ if (actionId == EditorInfo.IME_ACTION_SEARCH) {
+ mActivity.hideSoftKeyboard();
+ mEtBaseSearchCancel.clearFocus();
+ mKeywords = v.getText().toString();
+ doRefresh();
+ return true;
+ } else {
+ return false;
+ }
+ });
+ mTvBaseSearchCancel.setOnClickListener(v -> {
+ mEtBaseSearchCancel.setText("");
+ mEtBaseSearchCancel.clearFocus();
+ mKeywords = "";
+ doRefresh();
+ });
+
+ }
+
+ @Override
+ public void onAttach(@NonNull @NotNull Context context) {
+ super.onAttach(context);
+ mMainActivity = (PadMainActivity) getActivity();
+ }
+
+ /**
+ * 加载更多
+ */
+ private void doLoadMore() {
+ getDocumentList(mCurrentPage);
+ }
+
+ /**
+ * 刷新
+ */
+ private void doRefresh() {
+ mDatas.clear();
+ mAdapter.setData(mDatas);
+ getDocumentList(1);
+ }
+
+
+ @Override
+ public void onHiddenChanged(boolean hidden) {
+ super.onHiddenChanged(hidden);
+ if (!hidden) {
+ if (mIsRefresh) {
+ doRefresh();
+ }
+ }
+ }
+
+ /**
+ * 获取文档列表
+ */
+ private void getDocumentList(int currentPage) {
+ mCurrentPage = currentPage;
+ RetrofitManager.getInstance()
+ .create(OAApi.class)
+ .getEmailSentBoxList(mKeywords, mCurrentPage + "")
+ .compose(RxTransformer.getTransformer())
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(@io.reactivex.rxjava3.annotations.NonNull Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(@io.reactivex.rxjava3.annotations.NonNull EmailSendListBean listBean) {
+ if (listBean.getRows() != null && listBean.getRows().size() > 0) {
+ ++mCurrentPage;
+ if (currentPage == 1) {
+ mDatas.clear();
+ mDatas.addAll(listBean.getRows());
+ } else {
+ mDatas.addAll(listBean.getRows());
+ }
+ mCsvState.setState(CustomStateView.STATE_SUCCESS);
+ mAdapter.notifyDataSetChanged();
+ mSrlContent.finishRefresh();
+ if (mDatas.size() >= listBean.getTotal()) {
+ mSrlContent.finishLoadMore();
+ mSrlContent.setNoMoreData(true);
+ } else {
+ mSrlContent.finishLoadMore();
+ mSrlContent.setNoMoreData(false);
+ }
+ } else {
+ mSrlContent.finishRefresh();
+ mSrlContent.finishLoadMore();
+ if (currentPage > 1) {
+ mSrlContent.setNoMoreData(true);
+ } else {
+ if (TextUtils.isEmpty(mKeywords)) {
+ //无数据
+ mCsvState.setState(CustomStateView.STATE_EMPTY);
+ } else {
+ mCsvState.setState(CustomStateView.STATE_EMPTY);
+ ToastUtils.show("未查询到相关内容");
+ }
+ }
+ }
+ }
+
+ @Override
+ public void onError(@io.reactivex.rxjava3.annotations.NonNull Throwable e) {
+ mSrlContent.finishLoadMore();
+ mSrlContent.finishRefresh();
+ ExceptionHandler.handleException(e);
+ mCsvState.setState(CustomStateView.STATE_ERROR);
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+ }
+
+ @Override
+ protected void refreshView() {
+
+ }
+
+ @Override
+ protected void loadMoreData() {
+
+ }
+}
diff --git a/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/email/SendDetailFragment.java b/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/email/SendDetailFragment.java
new file mode 100644
index 0000000..1d5130d
--- /dev/null
+++ b/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/email/SendDetailFragment.java
@@ -0,0 +1,311 @@
+package com.tenlionsoft.oamodule.pad.fragments.email;
+
+import android.app.AlertDialog;
+import android.app.ProgressDialog;
+import android.content.Context;
+import android.os.Bundle;
+import android.text.Html;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.alibaba.android.arouter.facade.annotation.Route;
+import com.alibaba.android.arouter.launcher.ARouter;
+import com.hjq.toast.ToastUtils;
+import com.tenlionsoft.baselib.constant.PathConfig;
+import com.tenlionsoft.baselib.core.beans.AddFileBean;
+import com.tenlionsoft.baselib.core.beans.BaseSuccessBean;
+import com.tenlionsoft.baselib.core.retrofit_net.BaseUrlApi;
+import com.tenlionsoft.baselib.core.retrofit_net.RetrofitManager;
+import com.tenlionsoft.baselib.core.retrofit_net.api.BaseApiService;
+import com.tenlionsoft.baselib.core.retrofit_net.bean.FileInfoBean;
+import com.tenlionsoft.baselib.core.retrofit_net.conver.RxTransformer;
+import com.tenlionsoft.baselib.core.widget.base.AddFileAdapter;
+import com.tenlionsoft.baselib.core.widget.base.BaseFragment;
+import com.tenlionsoft.baselib.core.widget.base.FragmentUtils;
+import com.tenlionsoft.baselib.utils.ExceptionHandler;
+import com.tenlionsoft.baselib.utils.FileUtils;
+import com.tenlionsoft.baselib.utils.UIUtil;
+import com.tenlionsoft.oamodule.R;
+import com.tenlionsoft.oamodule.R2;
+import com.tenlionsoft.oamodule.beans.EmailSendDetailBean;
+import com.tenlionsoft.oamodule.net.OAApi;
+import com.tenlionsoft.oamodule.pad.activitys.home.PadMainActivity;
+
+import org.jetbrains.annotations.NotNull;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.GridLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import io.reactivex.rxjava3.core.Observer;
+import io.reactivex.rxjava3.disposables.Disposable;
+
+import static com.tenlionsoft.baselib.core.widget.PhotoActivity.TAG_IMGURL;
+
+/**
+ * 作者: adam
+ * 日期: 2022/5/11 - 11:21
+ * 邮箱: itgaojian@163.com
+ * 描述: 发件详情
+ */
+@Route(path = PathConfig.PATH_MODULE_PAD_OA_FRAGMENT_EMAIL_SEND_DETAIL)
+public class SendDetailFragment extends BaseFragment {
+ @BindView(R2.id.tv_title)
+ TextView mTvTitle;
+ @BindView(R2.id.tv_receiver)
+ TextView mTvReceiver;
+ @BindView(R2.id.tv_copy)
+ TextView mTvCopy;
+ @BindView(R2.id.tv_secret)
+ TextView mTvSecret;
+ @BindView(R2.id.tv_time)
+ TextView mTvTime;
+ @BindView(R2.id.tv_content)
+ TextView mTvContent;
+ @BindView(R2.id.rlv_files)
+ RecyclerView mRlvFiles;
+ @BindView(R2.id.iv_del)
+ ImageView mIvDel;
+ @BindView(R2.id.iv_transfer)
+ ImageView mIvTransfer;
+ private String mId;
+ private PadMainActivity mMainActivity;
+
+ @Override
+ protected int getContentViewId() {
+ return R.layout.fragment_send_detail;
+ }
+
+ @Override
+ protected void setDataToView(View dataView) {
+ ButterKnife.bind(this, dataView);
+ setTitleView(true);
+ mTvFragmentTitle.setText("邮件");
+ mIvFragmentBack.setOnClickListener(v -> mMainActivity.backFragment(3, this));
+ Bundle bundle = getArguments();
+ if (bundle != null) {
+ mId = bundle.getString("id");
+ }
+ if (TextUtils.isEmpty(mId)) {
+ ToastUtils.show("数据有误");
+ mMainActivity.backFragment(3, this);
+ } else {
+ getDetailById();
+ }
+ mActivity.setTouchDelegate(mIvDel, 30);
+ mActivity.setTouchDelegate(mIvTransfer, 30);
+ }
+
+ @Override
+ public void onAttach(@NonNull @NotNull Context context) {
+ super.onAttach(context);
+ mMainActivity = (PadMainActivity) getActivity();
+ }
+
+
+ private void getDetailById() {
+ RetrofitManager.getInstance()
+ .create(OAApi.class)
+ .getEmailSendDetail(mId)
+ .compose(RxTransformer.getTransformer())
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(@io.reactivex.rxjava3.annotations.NonNull Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(@io.reactivex.rxjava3.annotations.NonNull EmailSendDetailBean emailSendDetailBean) {
+ setDataToView(emailSendDetailBean);
+ }
+
+ @Override
+ public void onError(@io.reactivex.rxjava3.annotations.NonNull Throwable e) {
+ setStateView(STATE_ERROR);
+ mSrlView.setEnableRefresh(false);
+ mSrlView.setEnableLoadMore(false);
+ ExceptionHandler.handleException(e);
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+ }
+
+ private void setDataToView(EmailSendDetailBean b) {
+ setStateView(STATE_SUCCESS);
+ mSrlView.setEnableRefresh(false);
+ mSrlView.setEnableLoadMore(false);
+ mTvTitle.setText(b.getTitle());
+ mTvReceiver.setText(b.getRecipientNames());
+ mTvCopy.setText("抄送:" + b.getCopyForNames());
+ mTvSecret.setText("密送:" + b.getSecretNames());
+ mTvTime.setText(b.getGmtCreate() + "(发送)");
+ mTvContent.setText(Html.fromHtml(b.getContent()));
+ mIvDel.setOnClickListener(v -> onShowConfirm(1));
+ mIvTransfer.setOnClickListener(v -> onShowConfirm(2));
+ if (!TextUtils.isEmpty(b.getMailFiles())) {
+ doGetFileInfo(b.getMailFiles(), null);
+ }
+ }
+
+ private List mFileBeans;
+ private AddFileAdapter mAddFileAdapter;
+
+ private void doGetFileInfo(String fileId, List files) {
+ ProgressDialog dialog = UIUtil.initDialog(mActivity, "获取中...");
+ dialog.show();
+ RetrofitManager.getInstance()
+ .create(BaseApiService.class)
+ .getFileInfoList(fileId)
+ .compose(RxTransformer.getTransformer())
+ .subscribe(new Observer>() {
+
+
+ @Override
+ public void onSubscribe(@io.reactivex.rxjava3.annotations.NonNull Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(@io.reactivex.rxjava3.annotations.NonNull List fileInfoBeans) {
+ if (dialog.isShowing()) dialog.dismiss();
+ if (fileInfoBeans.size() > 0) {
+ mFileBeans = new ArrayList<>();
+ mAddFileAdapter = new AddFileAdapter(mActivity, mFileBeans);
+ mRlvFiles.setLayoutManager(new GridLayoutManager(mActivity, 5));
+ mRlvFiles.setAdapter(mAddFileAdapter);
+ for (int i = 0; i < fileInfoBeans.size(); i++) {
+ FileInfoBean infoBean = fileInfoBeans.get(i);
+ AddFileBean bean = new AddFileBean();
+ bean.setId(infoBean.getFileId());
+ bean.setFileName(infoBean.getFileName());
+ bean.setFileType(FileUtils.getFileType(infoBean.getFileName()));
+ bean.setPath(BaseUrlApi.BASE_FILE_URL + infoBean.getFileId());
+ mFileBeans.add(0, bean);
+ }
+ mAddFileAdapter.setData(mFileBeans);
+ mAddFileAdapter.addOnItemClickListener(addFileBean -> {
+ if (addFileBean.getFileType() == 1) {
+ //文档
+ ARouter.getInstance()
+ .build(PathConfig.PATH_MODULE_BASELIB_ACTIVITY_PREVIEW_FILE)
+ .withString("fileName", addFileBean.getFileName())
+ .withString("fileId", addFileBean.getId())
+ .navigation();
+ } else if (2 == addFileBean.getFileType()) {
+ //图片预览
+ //遍历文件获取所有图片文件
+ ArrayList imgUrls = new ArrayList<>();
+ for (int i = 0; i < mFileBeans.size(); i++) {
+ if (mFileBeans.get(i).getFileType() == 2) {
+ AddFileBean fileBean = mFileBeans.get(i);
+ String url = BaseUrlApi.BASE_IMG_URL + fileBean.getId();
+ imgUrls.add(url);
+ }
+ }
+ ARouter.getInstance()
+ .build(PathConfig.PATH_MODULE_BASELIB_SHOW_IMG)
+ .withStringArrayList(TAG_IMGURL, imgUrls)
+ .navigation();
+ } else if (3 == addFileBean.getFileType() || 4 == addFileBean.getFileType()) {
+ //TODO 视频或音频预览
+ }
+ });
+ } else {
+ ToastUtils.show("未找到文档信息");
+ }
+ }
+
+ @Override
+ public void onError(@io.reactivex.rxjava3.annotations.NonNull Throwable e) {
+ if (dialog.isShowing()) dialog.dismiss();
+ ExceptionHandler.handleException(e);
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+ }
+
+ private void onShowConfirm(int type) {
+ new AlertDialog.Builder(mActivity)
+ .setTitle("提示")
+ .setMessage(type == 1 ? "确定要删除该邮件到回收站吗?" : "确定要转发该邮件吗?")
+ .setPositiveButton("确定", (dialog, which) -> {
+ dialog.dismiss();
+ if (type == 1) {
+ doDelEmail();
+ } else {
+ mMainActivity.backFragment(3, SendDetailFragment.this);
+ Map params = new HashMap<>();
+ params.put("id", mId);
+ params.put("type", "send");
+ BaseFragment fragment = FragmentUtils.getFragmentMap(PathConfig.PATH_MODULE_PAD_OA_FRAGMENT_EMAIL_SEND, params);
+ mMainActivity.addFragment(3, fragment);
+ }
+ })
+ .setNegativeButton("取消", (dialog, which) -> dialog.dismiss())
+ .create()
+ .show();
+ }
+
+ private void doDelEmail() {
+ ProgressDialog dialog = UIUtil.initDialog(mActivity, "删除中...");
+ dialog.show();
+ RetrofitManager.getInstance()
+ .create(OAApi.class)
+ .doDelEmailSendBox(mId)
+ .compose(RxTransformer.getTransformer())
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(@io.reactivex.rxjava3.annotations.NonNull Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(@io.reactivex.rxjava3.annotations.NonNull BaseSuccessBean baseSuccessBean) {
+ if (dialog.isShowing()) dialog.dismiss();
+ ToastUtils.show("删除成功");
+ BaseFragment preFragment = mMainActivity.getPreFragment();
+ if (preFragment != null) {
+ preFragment.mIsRefresh = true;
+ }
+ mMainActivity.backFragment(3, SendDetailFragment.this);
+ }
+
+ @Override
+ public void onError(@io.reactivex.rxjava3.annotations.NonNull Throwable e) {
+ if (dialog.isShowing()) dialog.dismiss();
+ ExceptionHandler.handleException(e);
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+ }
+
+ @Override
+ protected void refreshView() {
+
+ }
+
+ @Override
+ protected void loadMoreData() {
+
+ }
+}
diff --git a/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/mine/UserRecordAddFragment.java b/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/mine/UserRecordAddFragment.java
new file mode 100644
index 0000000..2602675
--- /dev/null
+++ b/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/mine/UserRecordAddFragment.java
@@ -0,0 +1,1238 @@
+package com.tenlionsoft.oamodule.pad.fragments.mine;
+
+import android.app.ProgressDialog;
+import android.content.Context;
+import android.content.Intent;
+import android.database.Cursor;
+import android.graphics.Color;
+import android.net.Uri;
+import android.os.Build;
+import android.os.Environment;
+import android.provider.MediaStore;
+import android.text.TextUtils;
+import android.view.Gravity;
+import android.view.View;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.LinearLayout;
+import android.widget.RadioButton;
+import android.widget.RadioGroup;
+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.view.OptionsPickerView;
+import com.bigkoo.pickerview.view.TimePickerView;
+import com.google.gson.Gson;
+import com.hjq.toast.ToastUtils;
+import com.leon.lfilepickerlibrary.LFilePicker;
+import com.leon.lfilepickerlibrary.utils.Constant;
+import com.tenlionsoft.baselib.constant.DicIds;
+import com.tenlionsoft.baselib.constant.LionActions;
+import com.tenlionsoft.baselib.constant.PathConfig;
+import com.tenlionsoft.baselib.core.beans.AddFileBean;
+import com.tenlionsoft.baselib.core.beans.BaseSuccessBean;
+import com.tenlionsoft.baselib.core.beans.DicBean;
+import com.tenlionsoft.baselib.core.retrofit_net.BaseUrlApi;
+import com.tenlionsoft.baselib.core.retrofit_net.RetrofitManager;
+import com.tenlionsoft.baselib.core.retrofit_net.api.BaseApiService;
+import com.tenlionsoft.baselib.core.retrofit_net.conver.RxTransformer;
+import com.tenlionsoft.baselib.core.widget.base.AddFileAdapter;
+import com.tenlionsoft.baselib.core.widget.base.BaseFragment;
+import com.tenlionsoft.baselib.core.widget.base.FragmentUtils;
+import com.tenlionsoft.baselib.core.widget.views.ButtomDialogView;
+import com.tenlionsoft.baselib.core.widget.views.ItemSplitDivider;
+import com.tenlionsoft.baselib.utils.ExceptionHandler;
+import com.tenlionsoft.baselib.utils.FileUtils;
+import com.tenlionsoft.baselib.utils.ProiderUtil;
+import com.tenlionsoft.baselib.utils.RegexUtils;
+import com.tenlionsoft.baselib.utils.TimeUtils;
+import com.tenlionsoft.baselib.utils.UIUtil;
+import com.tenlionsoft.baselib.utils.UserLgUtils;
+import com.tenlionsoft.oamodule.R;
+import com.tenlionsoft.oamodule.R2;
+import com.tenlionsoft.oamodule.activity.car.ChooseUserActivity;
+import com.tenlionsoft.oamodule.activity.record.ChooseDeptActivity;
+import com.tenlionsoft.oamodule.adapter.EducateAdapter;
+import com.tenlionsoft.oamodule.adapter.ResumeAdapter;
+import com.tenlionsoft.oamodule.beans.ChoosePersonListBean;
+import com.tenlionsoft.oamodule.beans.DepartmentListBean;
+import com.tenlionsoft.oamodule.beans.SaveEducateBean;
+import com.tenlionsoft.oamodule.beans.SaveResumeBean;
+import com.tenlionsoft.oamodule.beans.SaveUserRecordBean;
+import com.tenlionsoft.oamodule.net.OAApi;
+import com.tenlionsoft.oamodule.pad.activitys.home.PadMainActivity;
+import com.tenlionsoft.oamodule.widget.EducateDialog;
+import com.tenlionsoft.oamodule.widget.ResumeDialog;
+
+import org.jetbrains.annotations.NotNull;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import androidx.activity.result.ActivityResultLauncher;
+import androidx.activity.result.contract.ActivityResultContracts;
+import androidx.core.content.FileProvider;
+import androidx.recyclerview.widget.GridLayoutManager;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
+import io.reactivex.rxjava3.annotations.NonNull;
+import io.reactivex.rxjava3.core.Observable;
+import io.reactivex.rxjava3.core.Observer;
+import io.reactivex.rxjava3.disposables.Disposable;
+import io.reactivex.rxjava3.schedulers.Schedulers;
+import okhttp3.MediaType;
+import okhttp3.MultipartBody;
+import okhttp3.RequestBody;
+
+import static android.app.Activity.RESULT_OK;
+
+/**
+ * 作者: adam
+ * 日期: 2022/5/11 - 14:44
+ * 邮箱: itgaojian@163.com
+ * 描述: 平板个人档案添加
+ */
+@Route(path = PathConfig.PATH_MODULE_PAD_OA_FRAGMENT_USER_RECORD_ADD)
+public class UserRecordAddFragment extends BaseFragment {
+ @BindView(R2.id.rb_base)
+ RadioButton mRbBase;
+ @BindView(R2.id.rb_job)
+ RadioButton mRbJob;
+ @BindView(R2.id.rg_type)
+ RadioGroup mRgType;
+ @BindView(R2.id.rlv_imgs)
+ RecyclerView mRlvImgs;
+ @BindView(R2.id.et_name)
+ EditText mEtName;
+ @BindView(R2.id.tv_gender)
+ TextView mTvGender;
+ @BindView(R2.id.tv_birthday)
+ TextView mTvBirthday;
+ @BindView(R2.id.et_id_card)
+ EditText mEtIdCard;
+ @BindView(R2.id.tv_political)
+ TextView mTvPolitical;
+ @BindView(R2.id.tv_marital)
+ TextView mTvMarital;
+ @BindView(R2.id.et_nationality)
+ EditText mEtNationality;
+ @BindView(R2.id.et_native_place)
+ EditText mEtNativePlace;
+ @BindView(R2.id.et_passport)
+ EditText mEtPassport;
+ @BindView(R2.id.tv_passport_type)
+ TextView mTvPassportType;
+ @BindView(R2.id.et_address)
+ EditText mEtAddress;
+ @BindView(R2.id.et_email)
+ EditText mEtEmail;
+ @BindView(R2.id.et_phone)
+ EditText mEtPhone;
+ @BindView(R2.id.et_school)
+ EditText mEtSchool;
+ @BindView(R2.id.tv_specialty)
+ TextView mTvSpecialty;
+ @BindView(R2.id.et_degree)
+ EditText mEtDegree;
+ @BindView(R2.id.tv_graduate_date)
+ TextView mTvGraduateDate;
+ @BindView(R2.id.et_link_man)
+ EditText mEtLinkMan;
+ @BindView(R2.id.et_link_phone)
+ EditText mEtLinkPhone;
+ @BindView(R2.id.ll_base)
+ LinearLayout mLlBase;
+ @BindView(R2.id.tv_obtain_date)
+ TextView mTvObtainDate;
+ @BindView(R2.id.tv_positive_date)
+ TextView mTvPositiveDate;
+ @BindView(R2.id.tv_dept)
+ TextView mTvDept;
+ @BindView(R2.id.tv_post)
+ TextView mTvPost;
+ @BindView(R2.id.tv_leader)
+ TextView mTvLeader;
+ @BindView(R2.id.et_bank_num)
+ EditText mEtBankNum;
+ @BindView(R2.id.et_fund_num)
+ EditText mEtFundNum;
+ @BindView(R2.id.et_social_num)
+ EditText mEtSocialNum;
+ @BindView(R2.id.tv_job_title)
+ TextView mTvJobTitle;
+ @BindView(R2.id.tv_job_level)
+ TextView mTvJobLevel;
+ @BindView(R2.id.tv_persion_type)
+ TextView mTvPersionType;
+ @BindView(R2.id.btn_add_educate)
+ Button mBtnAddEducate;
+ @BindView(R2.id.rlv_educate)
+ RecyclerView mRlvEducate;
+ @BindView(R2.id.tv_educate_int)
+ TextView mTvEducateInt;
+ @BindView(R2.id.btn_add_resume)
+ Button mBtnAddResume;
+ @BindView(R2.id.rlv_resume)
+ RecyclerView mRlvResume;
+ @BindView(R2.id.tv_resume_int)
+ TextView mTvResumeInt;
+ @BindView(R2.id.rlv_resume_file)
+ RecyclerView mRlvResumeFile;
+ @BindView(R2.id.ll_job)
+ LinearLayout mLlJob;
+
+
+ //性别
+ private List mGenderList;
+ private DicBean mSelGender;
+ private OptionsPickerView mGenderPicker;
+ //婚姻状况
+ private List mMaritalList;
+ private DicBean mSelMarital;
+ private OptionsPickerView mMaritalPicker;
+ //户口性质
+ private List mPassportTypeList;
+ private DicBean mSelPassportType;
+ private OptionsPickerView mPassportTypePicker;
+ //专业
+ private List mSpecialtyList;
+ private DicBean mSelSpecialty;
+ private OptionsPickerView mSpecialtyPicker;
+ //岗位
+ private List mPostList;
+ private DicBean mSelPost;
+ private OptionsPickerView mPostPicker;
+ //职称
+ private List mJobTitleList;
+ private DicBean mSelJobTitle;
+ private OptionsPickerView mJobTitlePicker;
+ //职称职等
+ private List mJobLevelList;
+ private DicBean mSelJobLevel;
+ private OptionsPickerView mJobLevelPicker;
+ //人员分类
+ private List mPersonTypeList;
+ private DicBean mSelPersonType;
+ private OptionsPickerView mPersonTypePicker;
+ //政治面貌
+ private List mPoliticalList;
+ private DicBean mSelPolitical;
+ private OptionsPickerView mPoliticalPicker;
+ //所在部门
+ private DepartmentListBean mSelDept;
+ private ChoosePersonListBean mSelLeader;
+
+ private List mEducateDetailBeans;
+ private EducateAdapter mEducateAdapter;
+
+ private List mResumeBeans;
+ private ResumeAdapter mResumeAdapter;
+
+ private List mImgList;//证件照
+ private AddFileAdapter mImgAdapter;//证件照
+
+ private List mFileBeans;//简历
+ private AddFileAdapter mFileAdapter;//简历
+ private String[] fileFilter = new String[]{".doc", ".docx", ".xls", ".xlsx", ".pptx", ".ppt", ".txt", ".pdf"};
+ private PadMainActivity mMainActivity;
+ private ActivityResultLauncher mFileLauncher;
+ private ActivityResultLauncher mDeptLauncher;
+ private ActivityResultLauncher mLeaderLauncher;
+ private ActivityResultLauncher mImgLauncher;
+ private ActivityResultLauncher mAlermLauncher;
+
+
+ @Override
+ protected int getContentViewId() {
+ return R.layout.fragment_user_record_add;
+ }
+
+ @Override
+ protected void setDataToView(View dataView) {
+ ButterKnife.bind(this, dataView);
+ setTitleView(true);
+ mTvFragmentTitle.setText("个人档案");
+ mTvFragmentOption.setText("保存");
+ mTvFragmentOption.setOnClickListener(v -> doSaveRecord());
+ mIvFragmentBack.setOnClickListener(v -> mMainActivity.backFragment(4, this));
+ initView();
+ }
+
+ @Override
+ public void onAttach(@androidx.annotation.NonNull @NotNull Context context) {
+ super.onAttach(context);
+ mMainActivity = (PadMainActivity) getActivity();
+ mFileLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> {
+ Intent data = result.getData();
+ if (data != null) {
+ ArrayList paths = data.getStringArrayListExtra(Constant.RESULT_INFO);
+ if (paths != null && paths.size() > 0) {
+ doUploadFiles(paths);
+ } else {
+ ToastUtils.show("未选择文件");
+ }
+ } else {
+ ToastUtils.show("路径有误,请稍后重试");
+ }
+ });//简历附件
+ mDeptLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> {
+ Intent data = result.getData();
+ if (data != null) {
+ mSelDept = (DepartmentListBean) data.getSerializableExtra("bean");
+ mTvDept.setText(mSelDept.getDepartmentName());
+ }
+ });//所在部门
+ mLeaderLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> {
+ Intent data = result.getData();
+ if (data != null) {
+ mSelLeader = (ChoosePersonListBean) data.getSerializableExtra("bean");
+ mTvLeader.setText(mSelLeader.getUserName());
+ }
+ });//上级领导
+ //证件照
+ mImgLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> {
+ if (result.getResultCode() == RESULT_OK) {
+ ArrayList paths = new ArrayList<>();
+ paths.add(mPicPath);
+ doUploadFiles(paths);
+ }
+
+ });
+
+ mAlermLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> {
+ if (RESULT_OK == result.getResultCode()) {
+ Intent data = result.getData();
+ if (data == null) return;
+ Uri uri = data.getData();
+ String[] proj = {MediaStore.Images.Media.DATA};
+ Cursor cursor = mActivity.managedQuery(uri, proj, null, null, null);
+ int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
+ cursor.moveToFirst();
+ String srcPath = cursor.getString(column_index);
+ ArrayList paths = new ArrayList<>();
+ paths.add(srcPath);
+ doUploadFiles(paths);
+ }
+ });
+ }
+
+ private void initView() {
+ setStateView(STATE_SUCCESS);
+ mSrlView.setEnableLoadMore(false);
+ mSrlView.setEnableRefresh(false);
+ String currentDate = TimeUtils.getCurrentDate();
+ mTvPositiveDate.setText(currentDate);
+ mTvObtainDate.setText(currentDate);
+ mTvGraduateDate.setText(currentDate);
+ mEtName.setText(UserLgUtils.getName());
+
+ mRgType.setOnCheckedChangeListener((v, i) -> {
+ if (i == R.id.rb_base) {
+ mLlBase.setVisibility(View.VISIBLE);
+ mLlJob.setVisibility(View.GONE);
+ } else if (i == R.id.rb_job) {
+ mLlBase.setVisibility(View.GONE);
+ mLlJob.setVisibility(View.VISIBLE);
+ }
+ });
+ mTvGender.setOnClickListener(v -> onShowGender());
+ mTvPolitical.setOnClickListener(v -> onShowPolitical());
+ mTvMarital.setOnClickListener(v -> onShowMarital());
+ mTvPassportType.setOnClickListener(v -> onShowPassportType());
+ mTvSpecialty.setOnClickListener(v -> onShowSpecialty());
+ mTvPost.setOnClickListener(v -> onShowPost());
+ mTvJobTitle.setOnClickListener(v -> onShowJobTitle());
+ mTvJobLevel.setOnClickListener(v -> onShowJobLevel());
+ mTvPersionType.setOnClickListener(v -> onShowPersonType());
+ mTvBirthday.setOnClickListener(v -> onShowDate(1));
+ mTvGraduateDate.setOnClickListener(v -> onShowDate(2));
+ mTvObtainDate.setOnClickListener(v -> onShowDate(3));
+ mTvPositiveDate.setOnClickListener(v -> onShowDate(4));
+ mTvDept.setOnClickListener(v -> {
+ Intent intent = new Intent(mActivity, ChooseDeptActivity.class);
+ mDeptLauncher.launch(intent);
+ });
+ mTvLeader.setOnClickListener(v -> {
+ if (mSelDept == null) {
+ ToastUtils.show("请选择所在部门");
+ } else {
+ Intent intent = new Intent(mActivity, ChooseUserActivity.class);
+ intent.putExtra("isSingle", true);
+ intent.putExtra("deptName", mSelDept.getDepartmentName());
+ intent.putExtra("deptId", mSelDept.getDepartmentId());
+ mLeaderLauncher.launch(intent);
+ }
+ });
+ //教育经历
+ mEducateDetailBeans = new ArrayList<>();
+ mEducateAdapter = new EducateAdapter(mActivity, mEducateDetailBeans, 2);
+ mRlvEducate.setLayoutManager(new LinearLayoutManager(mActivity));
+ mRlvEducate.setAdapter(mEducateAdapter);
+ mRlvEducate.addItemDecoration(new ItemSplitDivider(mActivity, LinearLayoutManager.VERTICAL, 1, Color.parseColor("#BFBFBF")));
+ mBtnAddEducate.setOnClickListener(v -> showAddEducateDialog(null, 1, 0));
+ mEducateAdapter.addOnDelOrEditListener(new EducateAdapter.OnDelOrEditListener() {
+ @Override
+ public void onDelBean(SaveEducateBean bean, int i) {
+ mEducateDetailBeans.remove(i);
+ mEducateAdapter.setData(mEducateDetailBeans);
+ if (mEducateDetailBeans.size() > 0) {
+ mTvEducateInt.setVisibility(View.GONE);
+ } else {
+ mTvEducateInt.setVisibility(View.GONE);
+ }
+ }
+
+ @Override
+ public void onEditBean(SaveEducateBean bean, int i) {
+ showAddEducateDialog(bean, 2, i);
+ }
+ });
+ //工作简历
+ mResumeBeans = new ArrayList<>();
+ mResumeAdapter = new ResumeAdapter(mActivity, mResumeBeans, 2);
+ mRlvResume.setLayoutManager(new LinearLayoutManager(mActivity));
+ mRlvResume.setAdapter(mResumeAdapter);
+ mRlvResume.addItemDecoration(new ItemSplitDivider(mActivity, LinearLayoutManager.VERTICAL, 1, Color.parseColor("#BFBFBF")));
+ mBtnAddResume.setOnClickListener(v -> showAddResumeDialog(null, 1, 0));
+ mResumeAdapter.addOnDelOrEditListener(new ResumeAdapter.OnDelOrEditListener() {
+ @Override
+ public void onDel(SaveResumeBean bean, int i) {
+ mResumeBeans.remove(i);
+ mResumeAdapter.setData(mResumeBeans);
+ if (mResumeBeans.size() > 0) {
+ mTvResumeInt.setVisibility(View.GONE);
+ } else {
+ mTvResumeInt.setVisibility(View.GONE);
+ }
+ }
+
+ @Override
+ public void onEdit(SaveResumeBean bean, int i) {
+ showAddResumeDialog(bean, 2, i);
+ }
+ });
+
+
+ //证件照
+ mImgList = new ArrayList<>();
+ mImgList.add(new AddFileBean());
+ mImgAdapter = new AddFileAdapter(mActivity, mImgList);
+ mRlvImgs.setLayoutManager(new GridLayoutManager(mActivity, 5));
+ mRlvImgs.setAdapter(mImgAdapter);
+ mImgAdapter.addOnItemClickListener(addFileBean -> {
+ if (TextUtils.isEmpty(addFileBean.getId())) {
+ chooseImg();
+ } else {
+ //预览图片
+
+ }
+ });
+ mImgAdapter.addOnDeleteListener((bean, i) -> {
+ mImgList.remove(i);
+ mImgAdapter.setData(mImgList);
+ });
+ //简历附件
+ mFileBeans = new ArrayList<>();
+ mFileBeans.add(new AddFileBean());
+ mFileAdapter = new AddFileAdapter(mActivity, mFileBeans);
+ mFileAdapter.addOnItemClickListener(addFileBean -> {
+ if (TextUtils.isEmpty(addFileBean.getId())) {
+ //选择
+ if (mFileMax == 0) {
+ ToastUtils.show("超过最大上传数量限制");
+ } else {
+ //TODO 校验是否有权限
+ checkManagePermission();
+ }
+ } else {
+ //预览
+ //判断文件类型
+ }
+ });
+ //删除上传的文件
+ mFileAdapter.addOnDeleteListener((bean, i) -> {
+ //删除list中的某个数据
+ mFileBeans.remove(i);
+ mFileAdapter.notifyDataSetChanged();
+ ++mFileMax;
+ });
+ mRlvResumeFile.setLayoutManager(new GridLayoutManager(mActivity, 5));
+ mRlvResumeFile.setAdapter(mFileAdapter);
+ }
+
+ @Override
+ protected void hasManageFileManage() {
+ new LFilePicker()
+ .withFragmentLauncher(mFileLauncher)
+ .withFragment(this)
+ .withRequestCode(LionActions.REQUEST_CODE_AC)
+ .withTitle("文件选择")
+ .withMaxNum(mFileMax)
+ .withFileFilter(fileFilter)
+ .start();
+ }
+
+ private String mPicPath;
+
+ /**
+ * 选择上传的图片
+ */
+ private void chooseImg() {
+ ButtomDialogView buttomDialogView = new ButtomDialogView.DialogBuilder(mActivity)
+ .setIsBackCancelable(true)
+ .setIscancelable(true)
+ .setShowLocation(Gravity.BOTTOM)
+ .setIsShowFile(false)
+ .build();
+ buttomDialogView.addOnChoseListener(new ButtomDialogView.OnChoseListener() {
+ @Override
+ public void choseFile() {
+ }
+
+ @Override
+ public void choseAlbum() {
+ Intent intent = new Intent(Intent.ACTION_PICK, null);
+ intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
+ "image/*");
+ mAlermLauncher.launch(intent);
+ buttomDialogView.dismiss();
+ }
+
+ @Override
+ public void choseShoot() {
+ mPicPath = mActivity.getExternalFilesDir(Environment.DIRECTORY_PICTURES).getPath() + File.separator + System.currentTimeMillis() + ".jpg";
+ File file = new File(mPicPath);
+ Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
+ // 下面这句指定调用相机拍照后的照片存储的路径
+ Uri uri;
+ if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.M) {
+ uri = Uri.fromFile(file);
+ } else {
+ uri = FileProvider.getUriForFile(mActivity, ProiderUtil.getFileProviderName(mActivity), file);
+ }
+ intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
+ mImgLauncher.launch(intent);
+ buttomDialogView.dismiss();
+ }
+
+ @Override
+ public void loginOut() {
+
+ }
+
+ @Override
+ public void changePwd() {
+
+ }
+ });
+ buttomDialogView.show();
+ }
+
+
+ private void showAddResumeDialog(SaveResumeBean bean, int type, int pos) {
+ ResumeDialog dialog = new ResumeDialog.Builder(mActivity)
+ .setType(type)
+ .setBean(bean)
+ .build();
+ dialog.addOnChangeListener(new ResumeDialog.OnChangeListener() {
+ @Override
+ public void doSave(SaveResumeBean bean) {
+ //新增教育经历
+ dialog.dismiss();
+ mResumeBeans.add(bean);
+ mResumeAdapter.setData(mResumeBeans);
+ if (mResumeBeans.size() > 0) {
+ mTvResumeInt.setVisibility(View.GONE);
+ } else {
+ mTvResumeInt.setVisibility(View.VISIBLE);
+ }
+ }
+
+ @Override
+ public void doEdit(SaveResumeBean bean) {
+ dialog.dismiss();
+ //编辑
+ SaveResumeBean bean1 = mResumeBeans.get(pos);
+ bean1.setWorkUnit(bean.getWorkUnit());
+ bean1.setDept(bean.getDept());
+ bean1.setWorkContent(bean.getWorkContent());
+ bean.setQuitReason(bean.getQuitReason());
+ bean1.setStartTime(bean.getStartTime());
+ bean1.setEndTime(bean.getEndTime());
+ mResumeAdapter.setData(mResumeBeans);
+ }
+ });
+ dialog.show();
+ }
+
+ /**
+ * 显示添加 或 编辑
+ */
+ private void showAddEducateDialog(SaveEducateBean bean, int type, int pos) {
+ EducateDialog dialog = new EducateDialog.Builder(mActivity)
+ .setType(type)
+ .setBean(bean)
+ .build();
+ dialog.addOnChangeListener(new EducateDialog.OnChangeListener() {
+ @Override
+ public void doSave(SaveEducateBean bean) {
+ //新增教育经历
+ dialog.dismiss();
+ mEducateDetailBeans.add(bean);
+ mEducateAdapter.setData(mEducateDetailBeans);
+ if (mEducateDetailBeans.size() > 0) {
+ mTvEducateInt.setVisibility(View.GONE);
+ } else {
+ mTvEducateInt.setVisibility(View.VISIBLE);
+ }
+ }
+
+ @Override
+ public void doEdit(SaveEducateBean bean) {
+ dialog.dismiss();
+ //编辑
+ SaveEducateBean bean1 = mEducateDetailBeans.get(pos);
+ bean1.setSchoolName(bean.getSchoolName());
+ bean1.setEducation(bean.getEducation());
+ bean1.setMajor(bean.getMajor());
+ bean1.setStartTime(bean.getStartTime());
+ bean1.setEndTime(bean.getEndTime());
+ mEducateAdapter.setData(mEducateDetailBeans);
+ }
+ });
+ dialog.show();
+ }
+
+
+ /**
+ * 选择性别 1
+ */
+ private void onShowGender() {
+ mActivity.hideSoftKeyboard();
+ if (mGenderList != null && mGenderList.size() > 0) {
+ if (mGenderPicker == null) {
+ mGenderPicker = new OptionsPickerBuilder(mActivity, (o1, o2, o3, v) -> {
+ mSelGender = mGenderList.get(o1);
+ mTvGender.setText(mSelGender.getDataName());
+ })
+ .setTitleText("请选择")
+ .setCancelColor(Color.parseColor("#1189FF"))
+ .setSubmitColor(Color.parseColor("#1189FF"))
+ .setTitleColor(Color.parseColor("#1189FF"))
+ .build();
+ mGenderPicker.setPicker(mGenderList);
+ }
+ mGenderPicker.show();
+ } else {
+ getDicListByType(DicIds.DIC_GENDER, 1);
+ }
+ }
+
+ //婚姻状况 2
+ private void onShowMarital() {
+ mActivity.hideSoftKeyboard();
+ if (mMaritalList != null && mMaritalList.size() > 0) {
+ if (mMaritalPicker == null) {
+ mMaritalPicker = new OptionsPickerBuilder(mActivity, (o1, o2, o3, v) -> {
+ mSelMarital = mMaritalList.get(o1);
+ mTvMarital.setText(mSelMarital.getDataName());
+ })
+ .setTitleText("请选择")
+ .setCancelColor(Color.parseColor("#1189FF"))
+ .setSubmitColor(Color.parseColor("#1189FF"))
+ .setTitleColor(Color.parseColor("#1189FF"))
+ .build();
+ mMaritalPicker.setPicker(mMaritalList);
+ }
+ mMaritalPicker.show();
+ } else {
+ getDicListByType(DicIds.DIC_MARRIAGE, 2);
+ }
+ }
+
+ //户口性质 3
+ private void onShowPassportType() {
+ mActivity.hideSoftKeyboard();
+ if (mPassportTypeList != null && mPassportTypeList.size() > 0) {
+ if (mPassportTypePicker == null) {
+ mPassportTypePicker = new OptionsPickerBuilder(mActivity, (o1, o2, o3, v) -> {
+ mSelPassportType = mPassportTypeList.get(o1);
+ mTvPassportType.setText(mSelPassportType.getDataName());
+ })
+ .setTitleText("请选择")
+ .setCancelColor(Color.parseColor("#1189FF"))
+ .setSubmitColor(Color.parseColor("#1189FF"))
+ .setTitleColor(Color.parseColor("#1189FF"))
+ .build();
+ mPassportTypePicker.setPicker(mPassportTypeList);
+ }
+ mPassportTypePicker.show();
+ } else {
+ getDicListByType(DicIds.DIC_PASSPORT_TYPE, 3);
+ }
+ }
+
+ //专业 4
+ private void onShowSpecialty() {
+ mActivity.hideSoftKeyboard();
+ if (mSpecialtyList != null && mSpecialtyList.size() > 0) {
+ if (mSpecialtyPicker == null) {
+ mSpecialtyPicker = new OptionsPickerBuilder(mActivity, (o1, o2, o3, v) -> {
+ mSelSpecialty = mSpecialtyList.get(o1);
+ mTvSpecialty.setText(mSelSpecialty.getDataName());
+ })
+ .setTitleText("请选择")
+ .setCancelColor(Color.parseColor("#1189FF"))
+ .setSubmitColor(Color.parseColor("#1189FF"))
+ .setTitleColor(Color.parseColor("#1189FF"))
+ .build();
+ mSpecialtyPicker.setPicker(mSpecialtyList);
+ }
+ mSpecialtyPicker.show();
+ } else {
+ getDicListByType(DicIds.DIC_SPECIALTY, 4);
+ }
+ }
+
+ //岗位 5
+ private void onShowPost() {
+ mActivity.hideSoftKeyboard();
+ if (mPostList != null && mPostList.size() > 0) {
+ if (mPostPicker == null) {
+ mPostPicker = new OptionsPickerBuilder(mActivity, (o1, o2, o3, v) -> {
+ mSelPost = mPostList.get(o1);
+ mTvPost.setText(mSelPost.getDataName());
+ })
+ .setTitleText("请选择")
+ .setCancelColor(Color.parseColor("#1189FF"))
+ .setSubmitColor(Color.parseColor("#1189FF"))
+ .setTitleColor(Color.parseColor("#1189FF"))
+ .build();
+ mPostPicker.setPicker(mPostList);
+ }
+ mPostPicker.show();
+ } else {
+ getDicListByType(DicIds.DIC_POST, 5);
+ }
+ }
+
+ //职称 6
+ private void onShowJobTitle() {
+ mActivity.hideSoftKeyboard();
+ if (mJobTitleList != null && mJobTitleList.size() > 0) {
+ if (mJobTitlePicker == null) {
+ mJobTitlePicker = new OptionsPickerBuilder(mActivity, (o1, o2, o3, v) -> {
+ mSelJobTitle = mJobTitleList.get(o1);
+ mTvJobTitle.setText(mSelJobTitle.getDataName());
+ })
+ .setTitleText("请选择")
+ .setCancelColor(Color.parseColor("#1189FF"))
+ .setSubmitColor(Color.parseColor("#1189FF"))
+ .setTitleColor(Color.parseColor("#1189FF"))
+ .build();
+ mJobTitlePicker.setPicker(mJobTitleList);
+ }
+ mJobTitlePicker.show();
+ } else {
+ getDicListByType(DicIds.DIC_JOB_TITLE, 6);
+ }
+ }
+
+ //职称职等 7
+ private void onShowJobLevel() {
+ mActivity.hideSoftKeyboard();
+ if (mJobLevelList != null && mJobLevelList.size() > 0) {
+ if (mJobLevelPicker == null) {
+ mJobLevelPicker = new OptionsPickerBuilder(mActivity, (o1, o2, o3, v) -> {
+ mSelJobLevel = mJobLevelList.get(o1);
+ mTvJobLevel.setText(mSelJobLevel.getDataName());
+ })
+ .setTitleText("请选择")
+ .setCancelColor(Color.parseColor("#1189FF"))
+ .setSubmitColor(Color.parseColor("#1189FF"))
+ .setTitleColor(Color.parseColor("#1189FF"))
+ .build();
+ mJobLevelPicker.setPicker(mJobLevelList);
+ }
+ mJobLevelPicker.show();
+ } else {
+ getDicListByType(DicIds.DIC_JOB_LEVEL, 7);
+ }
+ }
+
+ //人员分类 8
+ private void onShowPersonType() {
+ mActivity.hideSoftKeyboard();
+ if (mPersonTypeList != null && mPersonTypeList.size() > 0) {
+ if (mPersonTypePicker == null) {
+ mPersonTypePicker = new OptionsPickerBuilder(mActivity, (o1, o2, o3, v) -> {
+ mSelPersonType = mPersonTypeList.get(o1);
+ mTvPersionType.setText(mSelPersonType.getDataName());
+ })
+ .setTitleText("请选择")
+ .setCancelColor(Color.parseColor("#1189FF"))
+ .setSubmitColor(Color.parseColor("#1189FF"))
+ .setTitleColor(Color.parseColor("#1189FF"))
+ .build();
+ mPersonTypePicker.setPicker(mPersonTypeList);
+ }
+ mPersonTypePicker.show();
+ } else {
+ getDicListByType(DicIds.DIC_PERSON_TYPE, 8);
+ }
+ }
+
+ //政治面貌 9
+ private void onShowPolitical() {
+ mActivity.hideSoftKeyboard();
+ if (mPoliticalList != null && mPoliticalList.size() > 0) {
+ if (mPoliticalPicker == null) {
+ mPoliticalPicker = new OptionsPickerBuilder(mActivity, (o1, o2, o3, v) -> {
+ mSelPolitical = mPoliticalList.get(o1);
+ mTvPolitical.setText(mSelPolitical.getDataName());
+ })
+ .setTitleText("请选择")
+ .setCancelColor(Color.parseColor("#1189FF"))
+ .setSubmitColor(Color.parseColor("#1189FF"))
+ .setTitleColor(Color.parseColor("#1189FF"))
+ .build();
+ mPoliticalPicker.setPicker(mPoliticalList);
+ }
+ mPoliticalPicker.show();
+ } else {
+ getDicListByType(DicIds.DIC_POLITICS, 9);
+ }
+ }
+
+ /**
+ * 日期选择
+ *
+ * @param type
+ */
+ private void onShowDate(int type) {
+ TimePickerView mTimePickerView = new TimePickerBuilder(mActivity, (date, v) -> {
+ switch (type) {
+ case 1://出生日期
+ mTvBirthday.setText(TimeUtils.dateToString(date));
+ break;
+ case 2://毕业日期
+ mTvGraduateDate.setText(TimeUtils.dateToString(date));
+ break;
+ case 3://入职日期
+ mTvObtainDate.setText(TimeUtils.dateToString(date));
+ break;
+ case 4://转正日期
+ mTvPositiveDate.setText(TimeUtils.dateToString(date));
+ break;
+ }
+ })
+ .setTitleText("请选日期")
+ .setCancelColor(Color.parseColor("#1189FF"))
+ .setSubmitColor(Color.parseColor("#1189FF"))
+ .isDialog(false)
+ .setType(new boolean[]{true, true, true, false, false, false})
+ .setTitleColor(Color.parseColor("#1189FF"))
+ .build();
+ mTimePickerView.show();
+ }
+
+ /**
+ * 字典
+ */
+ private void getDicListByType(String pId, int i) {
+ ProgressDialog dialog = UIUtil.initDialog(mActivity, "获取中...");
+ dialog.show();
+ RetrofitManager.getInstance()
+ .create(BaseApiService.class)
+ .getDictListAllByPid(pId)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new Observer>() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(@NonNull List beans) {
+ dialog.dismiss();
+ if (beans.size() > 0) {
+ switch (i) {
+ case 1://性别
+ mGenderList = beans;
+ onShowGender();
+ break;
+ case 2://婚姻状况
+ mMaritalList = beans;
+ onShowMarital();
+ break;
+ case 3://户口性质3 //专业4 //岗位5 //职称6 //职称职等7 //人员分类8
+ mPassportTypeList = beans;
+ onShowPassportType();
+ break;
+ case 4://专业
+ mSpecialtyList = beans;
+ onShowSpecialty();
+ break;
+ case 5://岗位
+ mPostList = beans;
+ onShowPost();
+ break;
+ case 6://职称
+ mJobTitleList = beans;
+ onShowJobTitle();
+ break;
+ case 7://职称职等
+ mJobLevelList = beans;
+ onShowJobLevel();
+ break;
+ case 8://人员分类
+ mPersonTypeList = beans;
+ onShowPersonType();
+ break;
+ case 9://政治面貌
+ mPoliticalList = beans;
+ onShowPolitical();
+ break;
+ }
+ } else {
+ ToastUtils.show("暂无数据");
+ }
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ dialog.dismiss();
+ ExceptionHandler.handleException(e);
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+ }
+
+
+ /**
+ * 上传文件
+ *
+ * @param paths
+ */
+ private int mUploadCount = 0;
+ private int mFileMax = 10;
+
+ private void doUploadFiles(ArrayList paths) {
+ ProgressDialog progressDialog = UIUtil.initDialog(mActivity, "上传中...");
+ progressDialog.show();
+ List> requests = new ArrayList<>();
+ List fileNames = new ArrayList<>();
+ for (int i = 0; i < paths.size(); i++) {
+ File file = new File(paths.get(i));
+ Observable observable = createObservable(file);
+ if (observable == null) return;
+ requests.add(observable);
+ fileNames.add(file.getName());
+ }
+ Observable[] observables1 = requests.toArray(new Observable[requests.size()]);
+
+ Observable.mergeArrayDelayError(observables1)
+ .compose(RxTransformer.getTransformer())
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(@NotNull Object o) {
+ ++mUploadCount;
+ if (o instanceof BaseSuccessBean) {
+ --mFileMax;
+ //刷新文件
+ BaseSuccessBean bean = (BaseSuccessBean) o;
+ AddFileBean fileBean = new AddFileBean();
+ fileBean.setId(bean.getData());
+ fileBean.setPath(BaseUrlApi.BASE_IMG_URL + bean.getData());
+ fileBean.setFileName(fileNames.get(mUploadCount - 1));
+ int fileType = FileUtils.getFileType(fileNames.get(mUploadCount - 1));
+ if (2 == fileType) {
+ fileBean.setFileType(2);
+ mImgList.add(0, fileBean);
+ mImgAdapter.notifyDataSetChanged();
+ } else {
+ //判断文件类型
+ fileBean.setFileType(1);
+ mFileBeans.add(0, fileBean);
+ mFileAdapter.notifyDataSetChanged();
+ }
+ }
+ if (mUploadCount == paths.size()) {
+ mUploadCount = 0;
+ mPicPath = "";
+ if (progressDialog.isShowing()) {
+ progressDialog.dismiss();
+ }
+ }
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ e.printStackTrace();
+ mUploadCount = 0;
+ if (progressDialog.isShowing()) {
+ progressDialog.dismiss();
+ }
+ ToastUtils.show("上传失败,请稍后重试.");
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+ }
+
+ private Observable createObservable(File file) {
+ RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file);
+ MultipartBody.Part body;
+ int fileType = FileUtils.getFileType(file.getName());
+ if (fileType == 1) {
+ body = MultipartBody.Part.createFormData("file", file.getName(), requestFile);
+ return RetrofitManager.getInstance()
+ .create(BaseApiService.class)
+ .uploadFile(body)
+ .compose(RxTransformer.getTransformer());
+ } else if (fileType == 2) {
+ body = MultipartBody.Part.createFormData("image", file.getName(), requestFile);
+ return RetrofitManager.getInstance()
+ .create(BaseApiService.class)
+ .uploadImage(body)
+ .compose(RxTransformer.getTransformer());
+ } else if (fileType == 3) {
+ body = MultipartBody.Part.createFormData("video", file.getName(), requestFile);
+ return RetrofitManager.getInstance()
+ .create(BaseApiService.class)
+ .uploadVideo(body)
+ .compose(RxTransformer.getTransformer());
+ } else if (fileType == 4) {
+ body = MultipartBody.Part.createFormData("audio", file.getName(), requestFile);
+ return RetrofitManager.getInstance()
+ .create(BaseApiService.class)
+ .uploadAudio(body)
+ .compose(RxTransformer.getTransformer());
+ } else {
+ return null;
+ }
+ }
+
+ private void doSaveRecord() {
+ if (checkParams()) {
+ ProgressDialog dialog = UIUtil.initDialog(mActivity, "保存中...");
+ dialog.show();
+ RequestBody body = buildParams();
+ RetrofitManager.getInstance()
+ .create(OAApi.class)
+ .doSaveUserRecord(body)
+ .compose(RxTransformer.getTransformer())
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(@NonNull BaseSuccessBean baseSuccessBean) {
+ if (dialog.isShowing()) dialog.dismiss();
+ ToastUtils.show("保存成功");
+ mMainActivity.backFragment(4, UserRecordAddFragment.this);
+ BaseFragment fragment = FragmentUtils.getFragment(PathConfig.PATH_MODULE_PAD_OA_FRAGMENT_USER_RECORD_DETAIL);
+ mMainActivity.addFragment(4, fragment);
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ if (dialog.isShowing()) dialog.dismiss();
+ ExceptionHandler.handleException(e);
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+ }
+ }
+
+ private boolean checkParams() {
+ String name = mEtName.getText().toString().trim();
+ if (TextUtils.isEmpty(name)) {
+ ToastUtils.show("请输入姓名");
+ return false;
+ }
+ String birthday = mTvBirthday.getText().toString().trim();
+ if (TextUtils.isEmpty(birthday)) {
+ ToastUtils.show("请选择出生日期");
+ return false;
+ }
+ if (mSelGender == null) {
+ ToastUtils.show("请选择性别");
+ return false;
+ }
+ String idcard = mEtIdCard.getText().toString().trim();
+ if (TextUtils.isEmpty(idcard) || !RegexUtils.isIDNumber(idcard)) {
+ ToastUtils.show("请输入正确的身份证号码");
+ return false;
+ }
+ if (mSelPolitical == null) {
+ ToastUtils.show("请选择政治面貌");
+ return false;
+ }
+ if (mSelMarital == null) {
+ ToastUtils.show("请选择婚姻状况");
+ return false;
+ }
+ String nativePlace = mEtNativePlace.getText().toString().trim();
+ if (TextUtils.isEmpty(nativePlace)) {
+ ToastUtils.show("请输入籍贯");
+ return false;
+ }
+ if (mSelPassportType == null) {
+ ToastUtils.show("请选择户口性质");
+ return false;
+ }
+ if (mSelSpecialty == null) {
+ ToastUtils.show("请选择专业");
+ return false;
+ }
+ if (mSelDept == null) {
+ ToastUtils.show("请选择所在部门");
+ return false;
+ }
+ if (mSelPost == null) {
+ ToastUtils.show("请选择岗位");
+ return false;
+ }
+ if (mSelLeader == null) {
+ ToastUtils.show("请选择直接上级");
+ return false;
+ }
+ if (mSelJobTitle == null) {
+ ToastUtils.show("请选择职称");
+ return false;
+ }
+ if (mSelJobLevel == null) {
+ ToastUtils.show("请选择职称职等");
+ return false;
+ }
+ if (mSelPersonType == null) {
+ ToastUtils.show("请选择人员分类");
+ return false;
+ }
+ return true;
+ }
+
+ private RequestBody buildParams() {
+ SaveUserRecordBean bean = new SaveUserRecordBean();
+ String name = mEtName.getText().toString().trim();
+ bean.setName(name);//姓名
+ bean.setSex(mSelGender.getDataId());//性别
+ String birthday = mTvBirthday.getText().toString().trim();
+ bean.setBirthday(birthday);//出生日期
+ String idcard = mEtIdCard.getText().toString().trim();
+ bean.setIdCard(idcard);//身份证号
+ bean.setPoliticalOutlook(mSelPolitical.getDataId());//政治面貌
+ bean.setMaritalStatus(mSelMarital.getDataId());//婚姻状况
+ String nationality = mEtNationality.getText().toString().trim();
+ bean.setNationality(nationality);//国籍
+ String nativePlace = mEtNativePlace.getText().toString().trim();
+ bean.setNativeAddress(nativePlace);//籍贯
+ String passport = mEtPassport.getText().toString().trim();
+ bean.setResidence(passport);//户口
+ bean.setResidenceNature(mSelPassportType.getDataId());//户口性质
+ String address = mEtAddress.getText().toString().trim();
+ bean.setAddress(address);//家庭住址
+ String email = mEtEmail.getText().toString().trim();
+ bean.setEmail(email);//邮箱
+ String phone = mEtPhone.getText().toString().trim();
+ bean.setPhone(phone);//联系电话
+ String school = mEtSchool.getText().toString().trim();
+ bean.setGraduation(school);//毕业院校
+ bean.setMajor(mSelSpecialty.getDataId());//专业
+ String degree = mEtDegree.getText().toString().trim();
+ bean.setHighestDegree(degree);//最高学位
+ String graduateDate = mTvGraduateDate.getText().toString().trim();
+ bean.setGraduationDate(graduateDate);//毕业日期
+ String linkMan = mEtLinkMan.getText().toString().trim();
+ bean.setEmergencyContact(linkMan);//紧急联系人
+ String linkPhone = mEtLinkPhone.getText().toString().trim();
+ bean.setEmergencyContactPhone(linkPhone);//紧急联系人电话
+ String obtainDate = mTvObtainDate.getText().toString().trim();
+ bean.setJoinTime(obtainDate);//入职日期
+ String posDate = mTvPositiveDate.getText().toString().trim();
+ bean.setCeremonialTime(posDate);//转正日期
+ bean.setDept(mSelDept.getDepartmentId());//所在部门
+ bean.setPost(mSelPost.getDataId());//岗位
+ bean.setDirectSuperior(mSelLeader.getUserId());//领导
+ String bankNum = mEtBankNum.getText().toString().trim();
+ bean.setBankAccount(bankNum);//银行账号
+ String fundNum = mEtFundNum.getText().toString().trim();//公积金
+ bean.setFundAccount(fundNum);
+ String socNum = mEtSocialNum.getText().toString().trim();//社保卡
+ bean.setSecurityAccount(socNum);
+
+ bean.setTitle(mSelJobTitle.getDataId());
+ bean.setTitleGrade(mSelJobLevel.getDataId());
+ bean.setUserType(mSelPersonType.getDataId());
+ if (mEducateDetailBeans != null && mEducateDetailBeans.size() > 0) {
+ bean.setEducationList(mEducateDetailBeans);
+ }
+ if (mResumeBeans != null && mResumeBeans.size() > 0) {
+ bean.setWorkList(mResumeBeans);
+ }
+
+ //证件照
+ if (mImgList != null && mImgList.size() >= 2) {
+ StringBuilder fileId = new StringBuilder();
+ for (AddFileBean fileBean : mImgList) {
+ if (!TextUtils.isEmpty(fileBean.getId())) {
+ fileId.append(fileBean.getId()).append(",");
+ }
+ }
+ if (fileId.toString().endsWith(",")) {
+ fileId = fileId.deleteCharAt(fileId.length() - 1);
+ }
+ bean.setPhoto(fileId.toString());
+ }
+ //简历
+ if (mFileBeans != null && mFileBeans.size() >= 2) {
+ StringBuilder fileId = new StringBuilder();
+ for (AddFileBean fileBean : mFileBeans) {
+ if (!TextUtils.isEmpty(fileBean.getId())) {
+ fileId.append(fileBean.getId()).append(",");
+ }
+ }
+ if (fileId.toString().endsWith(",")) {
+ fileId = fileId.deleteCharAt(fileId.length() - 1);
+ }
+ bean.setResume(fileId.toString());
+ }
+ return RequestBody.create(new Gson().toJson(bean), MediaType.parse("application/json; charset=utf-8"));
+ }
+
+ @Override
+ protected void refreshView() {
+
+ }
+
+ @Override
+ protected void loadMoreData() {
+
+ }
+}
diff --git a/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/mine/UserRecordDetailFragment.java b/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/mine/UserRecordDetailFragment.java
new file mode 100644
index 0000000..94669e7
--- /dev/null
+++ b/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/mine/UserRecordDetailFragment.java
@@ -0,0 +1,445 @@
+package com.tenlionsoft.oamodule.pad.fragments.mine;
+
+import android.app.ProgressDialog;
+import android.content.Context;
+import android.graphics.Color;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.LinearLayout;
+import android.widget.RadioButton;
+import android.widget.RadioGroup;
+import android.widget.TextView;
+
+import com.alibaba.android.arouter.facade.annotation.Route;
+import com.alibaba.android.arouter.launcher.ARouter;
+import com.hjq.toast.ToastUtils;
+import com.tenlionsoft.baselib.constant.PathConfig;
+import com.tenlionsoft.baselib.core.beans.AddFileBean;
+import com.tenlionsoft.baselib.core.retrofit_net.BaseUrlApi;
+import com.tenlionsoft.baselib.core.retrofit_net.RetrofitManager;
+import com.tenlionsoft.baselib.core.retrofit_net.api.BaseApiService;
+import com.tenlionsoft.baselib.core.retrofit_net.bean.FileInfoBean;
+import com.tenlionsoft.baselib.core.retrofit_net.conver.RxTransformer;
+import com.tenlionsoft.baselib.core.widget.base.AddFileAdapter;
+import com.tenlionsoft.baselib.core.widget.base.BaseFragment;
+import com.tenlionsoft.baselib.core.widget.base.FragmentUtils;
+import com.tenlionsoft.baselib.core.widget.views.ItemSplitDivider;
+import com.tenlionsoft.baselib.utils.ExceptionHandler;
+import com.tenlionsoft.baselib.utils.FileUtils;
+import com.tenlionsoft.baselib.utils.UIUtil;
+import com.tenlionsoft.oamodule.R;
+import com.tenlionsoft.oamodule.R2;
+import com.tenlionsoft.oamodule.adapter.EducateAdapter;
+import com.tenlionsoft.oamodule.adapter.ResumeAdapter;
+import com.tenlionsoft.oamodule.beans.UserRecordDetailBean;
+import com.tenlionsoft.oamodule.net.OAApi;
+import com.tenlionsoft.oamodule.pad.activitys.home.PadMainActivity;
+
+import org.jetbrains.annotations.NotNull;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.GridLayoutManager;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import io.reactivex.rxjava3.core.Observer;
+import io.reactivex.rxjava3.disposables.Disposable;
+
+import static com.tenlionsoft.baselib.core.widget.PhotoActivity.TAG_IMGURL;
+import static com.tenlionsoft.baselib.core.widget.base.BaseActivity.STATE_LOAD_LOADING;
+
+/**
+ * 作者: adam
+ * 日期: 2022/5/11 - 14:44
+ * 邮箱: itgaojian@163.com
+ * 描述: 平板个人档案详情
+ */
+@Route(path = PathConfig.PATH_MODULE_PAD_OA_FRAGMENT_USER_RECORD_DETAIL)
+public class UserRecordDetailFragment extends BaseFragment {
+ @BindView(R2.id.rb_base)
+ RadioButton mRbBase;
+ @BindView(R2.id.rb_job)
+ RadioButton mRbJob;
+ @BindView(R2.id.rg_type)
+ RadioGroup mRgType;
+ @BindView(R2.id.rlv_imgs)
+ RecyclerView mRlvImgs;
+ @BindView(R2.id.tv_name)
+ TextView mTvName;
+ @BindView(R2.id.tv_gender)
+ TextView mTvGender;
+ @BindView(R2.id.tv_birthday)
+ TextView mTvBirthday;
+ @BindView(R2.id.tv_id_card)
+ TextView mTvIdCard;
+ @BindView(R2.id.tv_political)
+ TextView mTvPolitical;
+ @BindView(R2.id.tv_marital)
+ TextView mTvMarital;
+ @BindView(R2.id.tv_nationality)
+ TextView mTvNationality;
+ @BindView(R2.id.tv_native_place)
+ TextView mTvNativePlace;
+ @BindView(R2.id.tv_passport)
+ TextView mTvPassport;
+ @BindView(R2.id.tv_passport_type)
+ TextView mTvPassportType;
+ @BindView(R2.id.tv_address)
+ TextView mTvAddress;
+ @BindView(R2.id.tv_email)
+ TextView mTvEmail;
+ @BindView(R2.id.tv_phone)
+ TextView mTvPhone;
+ @BindView(R2.id.tv_school)
+ TextView mTvSchool;
+ @BindView(R2.id.tv_specialty)
+ TextView mTvSpecialty;
+ @BindView(R2.id.tv_degree)
+ TextView mTvDegree;
+ @BindView(R2.id.tv_graduate_date)
+ TextView mTvGraduateDate;
+ @BindView(R2.id.tv_link_man)
+ TextView mTvLinkMan;
+ @BindView(R2.id.et_link_phone)
+ TextView mEtLinkPhone;
+ @BindView(R2.id.ll_base)
+ LinearLayout mLlBase;
+ @BindView(R2.id.tv_obtain_date)
+ TextView mTvObtainDate;
+ @BindView(R2.id.tv_positive_date)
+ TextView mTvPositiveDate;
+ @BindView(R2.id.tv_dept)
+ TextView mTvDept;
+ @BindView(R2.id.tv_post)
+ TextView mTvPost;
+ @BindView(R2.id.tv_leader)
+ TextView mTvLeader;
+ @BindView(R2.id.tv_bank_num)
+ TextView mTvBankNum;
+ @BindView(R2.id.tv_fund_num)
+ TextView mTvFundNum;
+ @BindView(R2.id.tv_social_num)
+ TextView mTvSocialNum;
+ @BindView(R2.id.tv_job_title)
+ TextView mTvJobTitle;
+ @BindView(R2.id.tv_job_level)
+ TextView mTvJobLevel;
+ @BindView(R2.id.tv_persion_type)
+ TextView mTvPersionType;
+ @BindView(R2.id.rlv_teach)
+ RecyclerView mRlvTeach;
+ @BindView(R2.id.tv_educate_hint)
+ TextView mTvEducateHint;
+ @BindView(R2.id.rlv_resume)
+ RecyclerView mRlvResume;
+ @BindView(R2.id.tv_resume_hint)
+ TextView mTvResumeHint;
+ @BindView(R2.id.rlv_resume_file)
+ RecyclerView mRlvResumeFile;
+ @BindView(R2.id.ll_job)
+ LinearLayout mLlJob;
+ private PadMainActivity mMainActivity;
+
+ @Override
+ protected int getContentViewId() {
+ return R.layout.fragment_user_record_detail;
+ }
+
+ @Override
+ protected void setDataToView(View dataView) {
+ ButterKnife.bind(this, dataView);
+ setTitleView(true);
+ mTvFragmentTitle.setText("个人档案");
+ mIvFragmentBack.setOnClickListener(v -> mMainActivity.backFragment(4, this));
+ mRgType.setOnCheckedChangeListener((v, id) -> {
+ if (id == R.id.rb_base) {
+ mLlBase.setVisibility(View.VISIBLE);
+ mLlJob.setVisibility(View.GONE);
+ } else if (id == R.id.rb_job) {
+ mLlBase.setVisibility(View.GONE);
+ mLlJob.setVisibility(View.VISIBLE);
+ }
+ });
+ getDetailData();
+ }
+
+ @Override
+ public void onAttach(@NonNull @NotNull Context context) {
+ super.onAttach(context);
+ mMainActivity = (PadMainActivity) getActivity();
+ }
+
+
+ private void getDetailData() {
+ RetrofitManager.getInstance()
+ .create(OAApi.class)
+ .getUserRecordDetailById()
+ .compose(RxTransformer.getTransformer())
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(@io.reactivex.rxjava3.annotations.NonNull Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(@io.reactivex.rxjava3.annotations.NonNull UserRecordDetailBean userRecordDetailBean) {
+ if (!TextUtils.isEmpty(userRecordDetailBean.getUserArchivesId())) {
+ setDataToView(userRecordDetailBean);
+ } else {
+ setStateView(STATE_EMPTY);
+ mSrlView.setEnableRefresh(false);
+ mSrlView.setEnableLoadMore(false);
+ }
+ }
+
+ @Override
+ public void onError(@io.reactivex.rxjava3.annotations.NonNull Throwable e) {
+ setStateView(STATE_ERROR);
+ mSrlView.setEnableRefresh(false);
+ mSrlView.setEnableLoadMore(false);
+ ExceptionHandler.handleException(e);
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+ }
+
+
+ /**
+ * 回显数据
+ */
+ private void setDataToView(UserRecordDetailBean b) {
+ setStateView(STATE_SUCCESS);
+ mSrlView.setEnableLoadMore(false);
+ mSrlView.setEnableRefresh(false);
+ mTvFragmentOption.setText("编辑");
+ mTvFragmentOption.setOnClickListener(v -> {
+ BaseFragment fragment = FragmentUtils.getFragmentOne(PathConfig.PATH_MODULE_PAD_OA_FRAGMENT_USER_RECORD_EDIT, "id", b.getUserArchivesId());
+ mMainActivity.addFragment(4, fragment);
+ });
+ mTvName.setText(b.getName());
+ mTvGender.setText(b.getSexName());
+ mTvBirthday.setText(b.getBirthday());
+ mTvIdCard.setText(b.getIdCard());
+ mTvPolitical.setText(b.getPoliticalOutlookName());
+ mTvMarital.setText(b.getMaritalStatusName());
+ mTvNationality.setText(b.getNationality());
+ mTvNativePlace.setText(b.getNativeAddress());
+ mTvPassport.setText(b.getResidence());
+ mTvPassportType.setText(b.getResidenceNatureName());
+ mTvAddress.setText(b.getAddress());
+ mTvEmail.setText(b.getEmail());
+ mTvPhone.setText(b.getPhone());
+ mTvSchool.setText(b.getGraduation());
+ mTvSpecialty.setText(b.getMajorName());
+ mTvDegree.setText(b.getHighestDegree());
+ mTvGraduateDate.setText(b.getGraduationDate());
+ mTvLinkMan.setText(b.getEmergencyContact());
+ mEtLinkPhone.setText(b.getEmergencyContactPhone());
+ mTvObtainDate.setText(b.getJoinTime());
+ mTvPositiveDate.setText(b.getCeremonialTime());
+ mTvDept.setText(b.getDeptName());
+ mTvPost.setText(b.getPostName());
+ mTvLeader.setText(b.getDirectSuperiorName());
+ mTvBankNum.setText(b.getBankAccount());
+ mTvFundNum.setText(b.getFundAccount());
+ mTvSocialNum.setText(b.getSecurityAccount());
+ mTvJobTitle.setText(b.getTitleName());
+ mTvJobLevel.setText(b.getTitleGradeName());
+ mTvPersionType.setText(b.getUserTypeName());
+ if (b.getEducationList() != null && b.getEducationList().size() > 0) {
+ EducateAdapter adapter = new EducateAdapter(mActivity, b.getEducationList(), 1);
+ mRlvTeach.setLayoutManager(new LinearLayoutManager(mActivity));
+ mRlvTeach.setAdapter(adapter);
+ mRlvTeach.setVisibility(View.VISIBLE);
+ mRlvTeach.addItemDecoration(new ItemSplitDivider(mActivity, LinearLayoutManager.VERTICAL, 1, Color.parseColor("#BFBFBF")));
+ mTvEducateHint.setVisibility(View.GONE);
+ } else {
+ mRlvTeach.setVisibility(View.GONE);
+ mTvEducateHint.setVisibility(View.VISIBLE);
+ }
+ if (b.getWorkList() != null && b.getWorkList().size() > 0) {
+ ResumeAdapter adapter = new ResumeAdapter(mActivity, b.getWorkList(), 1);
+ mRlvResume.setLayoutManager(new LinearLayoutManager(mActivity));
+ mRlvResume.setAdapter(adapter);
+ mRlvResume.addItemDecoration(new ItemSplitDivider(mActivity, LinearLayoutManager.VERTICAL, 1, Color.parseColor("#BFBFBF")));
+ mRlvResume.setVisibility(View.VISIBLE);
+ mTvResumeHint.setVisibility(View.GONE);
+ } else {
+ mRlvResume.setVisibility(View.GONE);
+ mTvResumeHint.setVisibility(View.VISIBLE);
+ }
+ //证件照
+ if (!TextUtils.isEmpty(b.getPhoto())) {
+ mRlvImgs.setVisibility(View.VISIBLE);
+ List files = new ArrayList<>();
+ String[] split = b.getPhoto().split(",");
+ for (int i = 0; i < split.length; i++) {
+ AddFileBean bean = new AddFileBean();
+ bean.setId(split[i]);
+ bean.setPath(BaseUrlApi.BASE_IMG_URL + split[i]);
+ files.add(bean);
+ }
+ doGetFileInfos(b.getPhoto(), files, 2);
+ } else {
+ mRlvImgs.setVisibility(View.GONE);
+ }
+ //简历附件
+ if (!TextUtils.isEmpty(b.getResume())) {
+ mRlvResumeFile.setVisibility(View.VISIBLE);
+ List files = new ArrayList<>();
+ String[] split = b.getResume().split(",");
+ for (int i = 0; i < split.length; i++) {
+ AddFileBean bean = new AddFileBean();
+ bean.setId(split[i]);
+ bean.setPath(BaseUrlApi.BASE_IMG_URL + split[i]);
+ files.add(bean);
+ }
+ doGetFileInfos(b.getResume(), files, 1);
+ } else {
+ mRlvResumeFile.setVisibility(View.GONE);
+ }
+ }
+
+ private void doGetFileInfos(String fileId, List files, int type) {
+ ProgressDialog dialog = UIUtil.initDialog(mActivity, "获取中...");
+ dialog.show();
+ RetrofitManager.getInstance()
+ .create(BaseApiService.class)
+ .getFileInfoList(fileId)
+ .compose(RxTransformer.getTransformer())
+ .subscribe(new Observer>() {
+ @Override
+ public void onSubscribe(@io.reactivex.rxjava3.annotations.NonNull Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(@io.reactivex.rxjava3.annotations.NonNull List fileInfoBeans) {
+ if (dialog.isShowing()) dialog.dismiss();
+ if (fileInfoBeans.size() > 0) {
+ for (int i = 0; i < files.size(); i++) {
+ for (int j = 0; j < fileInfoBeans.size(); j++) {
+ if (files.get(i).getId().equals(fileInfoBeans.get(j).getFileId())) {
+ files.get(i).setFileName(fileInfoBeans.get(j).getFileName());
+ files.get(i).setFileType(FileUtils.getFileType(fileInfoBeans.get(j).getFileName()));
+ }
+ }
+ }
+ if (type == 2) {
+ AddFileAdapter adapter = new AddFileAdapter(mActivity, files);
+ mRlvImgs.setLayoutManager(new GridLayoutManager(mActivity, 5));
+ mRlvImgs.setAdapter(adapter);
+ adapter.addOnItemClickListener(addFileBean -> {
+ if (addFileBean.getFileType() == 1) {
+ //文档
+ ARouter.getInstance()
+ .build(PathConfig.PATH_MODULE_BASELIB_ACTIVITY_PREVIEW_FILE)
+ .withString("fileName", addFileBean.getFileName())
+ .withString("fileId", addFileBean.getId())
+ .navigation();
+ } else if (2 == addFileBean.getFileType()) {
+ //图片预览
+ //遍历文件获取所有图片文件
+ ArrayList imgUrls = new ArrayList<>();
+ for (int i = 0; i < files.size(); i++) {
+ AddFileBean fileBean = files.get(i);
+ String url = BaseUrlApi.BASE_IMG_URL + fileBean.getId();
+ imgUrls.add(url);
+ }
+ ARouter.getInstance()
+ .build(PathConfig.PATH_MODULE_BASELIB_SHOW_IMG)
+ .withStringArrayList(TAG_IMGURL, imgUrls)
+ .navigation();
+ } else if (3 == addFileBean.getFileType() || 4 == addFileBean.getFileType()) {
+ //TODO 视频或音频预览
+ ARouter.getInstance()
+ .build(PathConfig.PATH_MODULE_PLAYER_SIMPLE_VIDEO)
+ .withString("title", addFileBean.getFileName().substring(0, addFileBean.getFileName().lastIndexOf(".")))
+ .withString("url", BaseUrlApi.BASE_IMG_URL + addFileBean.getId())
+ .navigation();
+ }
+ });
+ } else {
+ AddFileAdapter adapter = new AddFileAdapter(mActivity, files);
+ mRlvResumeFile.setLayoutManager(new LinearLayoutManager(mActivity));
+ mRlvResumeFile.setAdapter(adapter);
+ adapter.addOnItemClickListener(addFileBean -> {
+ if (addFileBean.getFileType() == 1) {
+ //文档
+ ARouter.getInstance()
+ .build(PathConfig.PATH_MODULE_BASELIB_ACTIVITY_PREVIEW_FILE)
+ .withString("fileName", addFileBean.getFileName())
+ .withString("fileId", addFileBean.getId())
+ .navigation();
+ } else if (2 == addFileBean.getFileType()) {
+ //图片预览
+ //遍历文件获取所有图片文件
+ ArrayList imgUrls = new ArrayList<>();
+ for (int i = 0; i < files.size(); i++) {
+ AddFileBean fileBean = files.get(i);
+ String url = BaseUrlApi.BASE_IMG_URL + fileBean.getId();
+ imgUrls.add(url);
+ }
+ ARouter.getInstance()
+ .build(PathConfig.PATH_MODULE_BASELIB_SHOW_IMG)
+ .withStringArrayList(TAG_IMGURL, imgUrls)
+ .navigation();
+ } else if (3 == addFileBean.getFileType() || 4 == addFileBean.getFileType()) {
+ //TODO 视频或音频预览
+ ARouter.getInstance()
+ .build(PathConfig.PATH_MODULE_PLAYER_SIMPLE_VIDEO)
+ .withString("title", addFileBean.getFileName().substring(0, addFileBean.getFileName().lastIndexOf(".")))
+ .withString("url", BaseUrlApi.BASE_IMG_URL + addFileBean.getId())
+ .navigation();
+ }
+ });
+ }
+
+ } else {
+ ToastUtils.show("未找到文档信息");
+ }
+ }
+
+ @Override
+ public void onError(@io.reactivex.rxjava3.annotations.NonNull Throwable e) {
+ if (dialog.isShowing()) dialog.dismiss();
+ ExceptionHandler.handleException(e);
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+ }
+
+
+ @Override
+ public void onHiddenChanged(boolean hidden) {
+ super.onHiddenChanged(hidden);
+ if (!hidden) {
+ if (mIsRefresh) {
+ setStateView(STATE_LOAD_LOADING);
+ getDetailData();
+ }
+ }
+ }
+
+ @Override
+ protected void refreshView() {
+
+ }
+
+ @Override
+ protected void loadMoreData() {
+
+ }
+}
diff --git a/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/mine/UserRecordEditFragment.java b/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/mine/UserRecordEditFragment.java
new file mode 100644
index 0000000..78b16e7
--- /dev/null
+++ b/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/mine/UserRecordEditFragment.java
@@ -0,0 +1,1523 @@
+package com.tenlionsoft.oamodule.pad.fragments.mine;
+
+import android.app.AlertDialog;
+import android.app.ProgressDialog;
+import android.content.Context;
+import android.content.Intent;
+import android.database.Cursor;
+import android.graphics.Color;
+import android.net.Uri;
+import android.os.Build;
+import android.os.Bundle;
+import android.os.Environment;
+import android.provider.MediaStore;
+import android.text.TextUtils;
+import android.view.Gravity;
+import android.view.View;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.LinearLayout;
+import android.widget.RadioButton;
+import android.widget.RadioGroup;
+import android.widget.TextView;
+
+import com.alibaba.android.arouter.facade.annotation.Route;
+import com.alibaba.android.arouter.launcher.ARouter;
+import com.bigkoo.pickerview.builder.OptionsPickerBuilder;
+import com.bigkoo.pickerview.builder.TimePickerBuilder;
+import com.bigkoo.pickerview.view.OptionsPickerView;
+import com.bigkoo.pickerview.view.TimePickerView;
+import com.google.gson.Gson;
+import com.hjq.toast.ToastUtils;
+import com.leon.lfilepickerlibrary.LFilePicker;
+import com.leon.lfilepickerlibrary.utils.Constant;
+import com.luck.picture.lib.PictureSelector;
+import com.luck.picture.lib.config.PictureMimeType;
+import com.tenlionsoft.baselib.constant.DicIds;
+import com.tenlionsoft.baselib.constant.LionActions;
+import com.tenlionsoft.baselib.constant.PathConfig;
+import com.tenlionsoft.baselib.core.beans.AddFileBean;
+import com.tenlionsoft.baselib.core.beans.BaseSuccessBean;
+import com.tenlionsoft.baselib.core.beans.DicBean;
+import com.tenlionsoft.baselib.core.retrofit_net.BaseUrlApi;
+import com.tenlionsoft.baselib.core.retrofit_net.RetrofitManager;
+import com.tenlionsoft.baselib.core.retrofit_net.api.BaseApiService;
+import com.tenlionsoft.baselib.core.retrofit_net.bean.FileInfoBean;
+import com.tenlionsoft.baselib.core.retrofit_net.conver.RxTransformer;
+import com.tenlionsoft.baselib.core.widget.base.AddFileAdapter;
+import com.tenlionsoft.baselib.core.widget.base.BaseFragment;
+import com.tenlionsoft.baselib.core.widget.chat.GlideEngine;
+import com.tenlionsoft.baselib.core.widget.views.ButtomDialogView;
+import com.tenlionsoft.baselib.core.widget.views.ItemSplitDivider;
+import com.tenlionsoft.baselib.utils.ExceptionHandler;
+import com.tenlionsoft.baselib.utils.FileUtils;
+import com.tenlionsoft.baselib.utils.ProiderUtil;
+import com.tenlionsoft.baselib.utils.RegexUtils;
+import com.tenlionsoft.baselib.utils.TimeUtils;
+import com.tenlionsoft.baselib.utils.UIUtil;
+import com.tenlionsoft.baselib.utils.UserLgUtils;
+import com.tenlionsoft.oamodule.R;
+import com.tenlionsoft.oamodule.R2;
+import com.tenlionsoft.oamodule.activity.car.ChooseUserActivity;
+import com.tenlionsoft.oamodule.activity.record.ChooseDeptActivity;
+import com.tenlionsoft.oamodule.adapter.EducateAdapter;
+import com.tenlionsoft.oamodule.adapter.ResumeAdapter;
+import com.tenlionsoft.oamodule.beans.ChoosePersonListBean;
+import com.tenlionsoft.oamodule.beans.DepartmentListBean;
+import com.tenlionsoft.oamodule.beans.SaveEducateBean;
+import com.tenlionsoft.oamodule.beans.SaveResumeBean;
+import com.tenlionsoft.oamodule.beans.SaveUserRecordBean;
+import com.tenlionsoft.oamodule.beans.UserRecordDetailBean;
+import com.tenlionsoft.oamodule.net.OAApi;
+import com.tenlionsoft.oamodule.pad.activitys.home.PadMainActivity;
+import com.tenlionsoft.oamodule.widget.EducateDialog;
+import com.tenlionsoft.oamodule.widget.ResumeDialog;
+
+import org.jetbrains.annotations.NotNull;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import androidx.activity.result.ActivityResultLauncher;
+import androidx.activity.result.contract.ActivityResultContracts;
+import androidx.annotation.NonNull;
+import androidx.core.content.FileProvider;
+import androidx.recyclerview.widget.GridLayoutManager;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
+import io.reactivex.rxjava3.core.Observable;
+import io.reactivex.rxjava3.core.Observer;
+import io.reactivex.rxjava3.disposables.Disposable;
+import io.reactivex.rxjava3.schedulers.Schedulers;
+import okhttp3.MediaType;
+import okhttp3.MultipartBody;
+import okhttp3.RequestBody;
+
+import static android.app.Activity.RESULT_OK;
+
+/**
+ * 作者: adam
+ * 日期: 2022/5/11 - 15:57
+ * 邮箱: itgaojian@163.com
+ * 描述: 平板个人档案编辑
+ */
+@Route(path = PathConfig.PATH_MODULE_PAD_OA_FRAGMENT_USER_RECORD_EDIT)
+public class UserRecordEditFragment extends BaseFragment {
+ @BindView(R2.id.rb_base)
+ RadioButton mRbBase;
+ @BindView(R2.id.rb_job)
+ RadioButton mRbJob;
+ @BindView(R2.id.rg_type)
+ RadioGroup mRgType;
+ @BindView(R2.id.rlv_imgs)
+ RecyclerView mRlvImgs;
+ @BindView(R2.id.et_name)
+ EditText mEtName;
+ @BindView(R2.id.tv_gender)
+ TextView mTvGender;
+ @BindView(R2.id.tv_birthday)
+ TextView mTvBirthday;
+ @BindView(R2.id.et_id_card)
+ EditText mEtIdCard;
+ @BindView(R2.id.tv_political)
+ TextView mTvPolitical;
+ @BindView(R2.id.tv_marital)
+ TextView mTvMarital;
+ @BindView(R2.id.et_nationality)
+ EditText mEtNationality;
+ @BindView(R2.id.et_native_place)
+ EditText mEtNativePlace;
+ @BindView(R2.id.et_passport)
+ EditText mEtPassport;
+ @BindView(R2.id.tv_passport_type)
+ TextView mTvPassportType;
+ @BindView(R2.id.et_address)
+ EditText mEtAddress;
+ @BindView(R2.id.et_email)
+ EditText mEtEmail;
+ @BindView(R2.id.et_phone)
+ EditText mEtPhone;
+ @BindView(R2.id.et_school)
+ EditText mEtSchool;
+ @BindView(R2.id.tv_specialty)
+ TextView mTvSpecialty;
+ @BindView(R2.id.et_degree)
+ EditText mEtDegree;
+ @BindView(R2.id.tv_graduate_date)
+ TextView mTvGraduateDate;
+ @BindView(R2.id.et_link_man)
+ EditText mEtLinkMan;
+ @BindView(R2.id.et_link_phone)
+ EditText mEtLinkPhone;
+ @BindView(R2.id.ll_base)
+ LinearLayout mLlBase;
+ @BindView(R2.id.tv_obtain_date)
+ TextView mTvObtainDate;
+ @BindView(R2.id.tv_positive_date)
+ TextView mTvPositiveDate;
+ @BindView(R2.id.tv_dept)
+ TextView mTvDept;
+ @BindView(R2.id.tv_post)
+ TextView mTvPost;
+ @BindView(R2.id.tv_leader)
+ TextView mTvLeader;
+ @BindView(R2.id.et_bank_num)
+ EditText mEtBankNum;
+ @BindView(R2.id.et_fund_num)
+ EditText mEtFundNum;
+ @BindView(R2.id.et_social_num)
+ EditText mEtSocialNum;
+ @BindView(R2.id.tv_job_title)
+ TextView mTvJobTitle;
+ @BindView(R2.id.tv_job_level)
+ TextView mTvJobLevel;
+ @BindView(R2.id.tv_persion_type)
+ TextView mTvPersionType;
+ @BindView(R2.id.btn_add_educate)
+ Button mBtnAddEducate;
+ @BindView(R2.id.rlv_educate)
+ RecyclerView mRlvEducate;
+ @BindView(R2.id.tv_educate_int)
+ TextView mTvEducateInt;
+ @BindView(R2.id.btn_add_resume)
+ Button mBtnAddResume;
+ @BindView(R2.id.rlv_resume)
+ RecyclerView mRlvResume;
+ @BindView(R2.id.tv_resume_int)
+ TextView mTvResumeInt;
+ @BindView(R2.id.rlv_resume_file)
+ RecyclerView mRlvResumeFile;
+ @BindView(R2.id.ll_job)
+ LinearLayout mLlJob;
+
+
+ //性别
+ private List mGenderList;
+ private DicBean mSelGender;
+ private OptionsPickerView mGenderPicker;
+ //婚姻状况
+ private List mMaritalList;
+ private DicBean mSelMarital;
+ private OptionsPickerView mMaritalPicker;
+ //户口性质
+ private List mPassportTypeList;
+ private DicBean mSelPassportType;
+ private OptionsPickerView mPassportTypePicker;
+ //专业
+ private List mSpecialtyList;
+ private DicBean mSelSpecialty;
+ private OptionsPickerView mSpecialtyPicker;
+ //岗位
+ private List mPostList;
+ private DicBean mSelPost;
+ private OptionsPickerView mPostPicker;
+ //职称
+ private List mJobTitleList;
+ private DicBean mSelJobTitle;
+ private OptionsPickerView mJobTitlePicker;
+ //职称职等
+ private List mJobLevelList;
+ private DicBean mSelJobLevel;
+ private OptionsPickerView mJobLevelPicker;
+ //人员分类
+ private List mPersonTypeList;
+ private DicBean mSelPersonType;
+ private OptionsPickerView mPersonTypePicker;
+ //政治面貌
+ private List mPoliticalList;
+ private DicBean mSelPolitical;
+ private OptionsPickerView mPoliticalPicker;
+ //所在部门
+ private DepartmentListBean mSelDept;
+ private ChoosePersonListBean mSelLeader;
+
+ private List mEducateDetailBeans;
+ private EducateAdapter mEducateAdapter;
+
+ private List mResumeBeans;
+ private ResumeAdapter mResumeAdapter;
+
+ private List mImgList;//证件照
+ private AddFileAdapter mImgAdapter;//证件照
+
+ private List mFileBeans;//简历
+ private AddFileAdapter mFileAdapter;//简历
+ private String[] fileFilter = new String[]{".doc", ".docx", ".xls", ".xlsx", ".pptx", ".ppt", ".txt", ".pdf"};
+ private PadMainActivity mMainActivity;
+ private ActivityResultLauncher mFileLauncher;
+ private ActivityResultLauncher mDeptLauncher;
+ private ActivityResultLauncher mLeaderLauncher;
+ private ActivityResultLauncher mImgLauncher;
+ private ActivityResultLauncher mAlermLauncher;
+ private String mId;
+ private String mPicPath;
+
+ @Override
+ protected int getContentViewId() {
+ return R.layout.fragment_user_record_edit;
+ }
+
+ @Override
+ protected void setDataToView(View dataView) {
+ ButterKnife.bind(this, dataView);
+ setTitleView(true);
+ mTvFragmentTitle.setText("个人档案编辑");
+ mTvFragmentOption.setText("保存");
+ mTvFragmentOption.setOnClickListener(v -> doSaveRecord());
+ mIvFragmentBack.setOnClickListener(v -> mMainActivity.backFragment(4, this));
+ initView();
+ Bundle bundle = getArguments();
+ if (bundle != null) {
+ mId = bundle.getString("id");
+ }
+ if (TextUtils.isEmpty(mId)) {
+ ToastUtils.show("数据有误");
+ mMainActivity.backFragment(4, this);
+ } else {
+ getDetailById();
+ }
+ }
+
+
+ @Override
+ public void onAttach(@NonNull @NotNull Context context) {
+ super.onAttach(context);
+ mMainActivity = (PadMainActivity) getActivity();
+ mFileLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> {
+ Intent data = result.getData();
+ if (data != null) {
+ ArrayList paths = data.getStringArrayListExtra(Constant.RESULT_INFO);
+ if (paths != null && paths.size() > 0) {
+ doUploadFiles(paths);
+ } else {
+ ToastUtils.show("未选择文件");
+ }
+ } else {
+ ToastUtils.show("路径有误,请稍后重试");
+ }
+ });//简历附件
+ mDeptLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> {
+ Intent data = result.getData();
+ if (data != null) {
+ mSelDept = (DepartmentListBean) data.getSerializableExtra("bean");
+ mTvDept.setText(mSelDept.getDepartmentName());
+ }
+ });//所在部门
+ mLeaderLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> {
+ Intent data = result.getData();
+ if (data != null) {
+ mSelLeader = (ChoosePersonListBean) data.getSerializableExtra("bean");
+ mTvLeader.setText(mSelLeader.getUserName());
+ }
+ });//上级领导
+ //证件照
+ mImgLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> {
+ if (result.getResultCode() == RESULT_OK) {
+ ArrayList paths = new ArrayList<>();
+ paths.add(mPicPath);
+ doUploadFiles(paths);
+ }
+
+ });
+
+ mAlermLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> {
+ if (RESULT_OK == result.getResultCode()) {
+ Intent data = result.getData();
+ if (data == null) return;
+ Uri uri = data.getData();
+ String[] proj = {MediaStore.Images.Media.DATA};
+ Cursor cursor = mActivity.managedQuery(uri, proj, null, null, null);
+ int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
+ cursor.moveToFirst();
+ String srcPath = cursor.getString(column_index);
+ ArrayList paths = new ArrayList<>();
+ paths.add(srcPath);
+ doUploadFiles(paths);
+ }
+ });
+ }
+
+ private void getDetailById() {
+ RetrofitManager.getInstance()
+ .create(OAApi.class)
+ .getUserRecordDetailById()
+ .compose(RxTransformer.getTransformer())
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(@io.reactivex.rxjava3.annotations.NonNull Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(@io.reactivex.rxjava3.annotations.NonNull UserRecordDetailBean userRecordDetailBean) {
+ if (!TextUtils.isEmpty(userRecordDetailBean.getUserArchivesId())) {
+ setDataToView(userRecordDetailBean);
+ } else {
+ ToastUtils.show("数据有误");
+ mMainActivity.backFragment(4, UserRecordEditFragment.this);
+ }
+ }
+
+ @Override
+ public void onError(@io.reactivex.rxjava3.annotations.NonNull Throwable e) {
+
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+ }
+
+ /**
+ * 回显数据
+ */
+ private void setDataToView(UserRecordDetailBean b) {
+ setStateView(STATE_SUCCESS);
+ mSrlView.setEnableLoadMore(false);
+ mSrlView.setEnableRefresh(false);
+ mEtName.setText(b.getName());
+ mTvGender.setText(b.getSexName());
+ mSelGender = new DicBean();
+ mSelGender.setDataName(b.getSexName());
+ mSelGender.setDataId(b.getSex());
+
+ mTvBirthday.setText(b.getBirthday());
+ mEtIdCard.setText(b.getIdCard());
+
+ mTvPolitical.setText(b.getPoliticalOutlookName());
+ mSelPolitical = new DicBean();
+ mSelPolitical.setDataId(b.getPoliticalOutlook());
+ mSelPolitical.setDataName(b.getPoliticalOutlookName());
+
+ mTvMarital.setText(b.getMaritalStatusName());
+ mSelMarital = new DicBean();
+ mSelMarital.setDataName(b.getMaritalStatusName());
+ mSelMarital.setDataId(b.getMaritalStatus());
+
+ mEtNationality.setText(b.getNationality());
+ mEtNativePlace.setText(b.getNativeAddress());
+ mEtPassport.setText(b.getResidence());
+
+ mTvPassportType.setText(b.getResidenceNatureName());
+ mSelPassportType = new DicBean();
+ mSelPassportType.setDataId(b.getResidenceNature());
+ mSelPassportType.setDataName(b.getResidenceNatureName());
+
+ mEtAddress.setText(b.getAddress());
+ mEtEmail.setText(b.getEmail());
+ mEtPhone.setText(b.getPhone());
+ mEtSchool.setText(b.getGraduation());
+
+ mTvSpecialty.setText(b.getMajorName());
+ mSelSpecialty = new DicBean();
+ mSelSpecialty.setDataName(b.getMajorName());
+ mSelSpecialty.setDataId(b.getMajor());
+
+ mEtDegree.setText(b.getHighestDegree());
+ mTvGraduateDate.setText(b.getGraduationDate());
+ mEtLinkMan.setText(b.getEmergencyContact());
+ mEtLinkPhone.setText(b.getEmergencyContactPhone());
+ mTvObtainDate.setText(b.getJoinTime());
+ mTvPositiveDate.setText(b.getCeremonialTime());
+
+ mTvDept.setText(b.getDeptName());
+ mSelDept = new DepartmentListBean();
+ mSelDept.setDepartmentId(b.getDept());
+ mSelDept.setDepartmentName(b.getDeptName());
+
+ mTvPost.setText(b.getPostName());
+ mSelPost = new DicBean();
+ mSelPost.setDataId(b.getPost());
+ mSelPost.setDataName(b.getPostName());
+
+ mTvLeader.setText(b.getDirectSuperiorName());
+ mSelLeader = new ChoosePersonListBean();
+ mSelLeader.setUserName(b.getDirectSuperiorName());
+ mSelLeader.setUserId(b.getDirectSuperior());
+
+ mEtBankNum.setText(b.getBankAccount());
+ mEtFundNum.setText(b.getFundAccount());
+ mEtSocialNum.setText(b.getSecurityAccount());
+
+ mTvJobTitle.setText(b.getTitleName());
+ mSelJobTitle = new DicBean();
+ mSelJobTitle.setDataName(b.getTitleName());
+ mSelJobTitle.setDataId(b.getTitle());
+
+ mTvJobLevel.setText(b.getTitleGradeName());
+ mSelJobLevel = new DicBean();
+ mSelJobLevel.setDataId(b.getTitleGrade());
+ mSelJobLevel.setDataName(b.getTitleGradeName());
+ mTvPersionType.setText(b.getUserTypeName());
+ mSelPersonType = new DicBean();
+ mSelPersonType.setDataName(b.getUserTypeName());
+ mSelPersonType.setDataId(b.getUserType());
+
+ //教育经历
+ if (b.getEducationList() != null && b.getEducationList().size() > 0) {
+ mTvEducateInt.setVisibility(View.GONE);
+ mRlvEducate.setVisibility(View.VISIBLE);
+ mEducateDetailBeans = b.getEducationList();
+ mEducateAdapter.setData(mEducateDetailBeans);
+ } else {
+ mTvEducateInt.setVisibility(View.VISIBLE);
+ mRlvEducate.setVisibility(View.GONE);
+ }
+ //工作简历
+ if (b.getWorkList() != null && b.getWorkList().size() > 0) {
+ mResumeBeans = b.getWorkList();
+ mResumeAdapter.setData(mResumeBeans);
+ mRlvResume.setVisibility(View.VISIBLE);
+ mTvResumeInt.setVisibility(View.GONE);
+ } else {
+ mRlvResume.setVisibility(View.GONE);
+ mTvResumeInt.setVisibility(View.VISIBLE);
+ }
+ //证件照
+ if (!TextUtils.isEmpty(b.getPhoto())) {
+ doGetFileInfos(b.getPhoto(), null, 2);
+ }
+ //简历附件
+ if (!TextUtils.isEmpty(b.getResume())) {
+ List files = new ArrayList<>();
+ String[] split = b.getResume().split(",");
+ for (int i = 0; i < split.length; i++) {
+ AddFileBean bean = new AddFileBean();
+ bean.setId(split[i]);
+ bean.setPath(BaseUrlApi.BASE_IMG_URL + split[i]);
+ files.add(bean);
+ }
+ doGetFileInfos(b.getResume(), files, 1);
+ }
+ }
+
+ private void doGetFileInfos(String fileId, List files, int type) {
+ ProgressDialog dialog = UIUtil.initDialog(mActivity, "获取中...");
+ dialog.show();
+ RetrofitManager.getInstance()
+ .create(BaseApiService.class)
+ .getFileInfoList(fileId)
+ .compose(RxTransformer.getTransformer())
+ .subscribe(new Observer>() {
+ @Override
+ public void onSubscribe(@io.reactivex.rxjava3.annotations.NonNull Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(@io.reactivex.rxjava3.annotations.NonNull List fileInfoBeans) {
+ if (dialog.isShowing()) dialog.dismiss();
+ if (fileInfoBeans.size() > 0) {
+ for (int i = 0; i < fileInfoBeans.size(); i++) {
+ FileInfoBean bean = fileInfoBeans.get(i);
+ AddFileBean fileBean = new AddFileBean();
+ fileBean.setId(bean.getFileId());
+ fileBean.setPath(BaseUrlApi.BASE_IMG_URL + bean.getFileId());
+ fileBean.setFileType(FileUtils.getFileType(bean.getFileName()));
+ fileBean.setFileName(bean.getFileName());
+ if (type == 2) {
+ //证件照
+ mImgList.add(0, fileBean);
+ } else {
+ //工作简历
+ mFileBeans.add(0, fileBean);
+ }
+ }
+ mImgAdapter.setData(mImgList);
+ mFileAdapter.setData(mFileBeans);
+ } else {
+ ToastUtils.show("未找到文档信息");
+ }
+ }
+
+ @Override
+ public void onError(@io.reactivex.rxjava3.annotations.NonNull Throwable e) {
+ if (dialog.isShowing()) dialog.dismiss();
+ ExceptionHandler.handleException(e);
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+ }
+
+ private void initView() {
+ String currentDate = TimeUtils.getCurrentDate();
+ mTvPositiveDate.setText(currentDate);
+ mTvObtainDate.setText(currentDate);
+ mTvGraduateDate.setText(currentDate);
+ mEtName.setText(UserLgUtils.getName());
+
+
+ mRgType.setOnCheckedChangeListener((v, i) -> {
+ if (i == R.id.rb_base) {
+ mLlBase.setVisibility(View.VISIBLE);
+ mLlJob.setVisibility(View.GONE);
+ } else if (i == R.id.rb_job) {
+ mLlBase.setVisibility(View.GONE);
+ mLlJob.setVisibility(View.VISIBLE);
+ }
+ });
+ mTvGender.setOnClickListener(v -> onShowGender());
+ mTvPolitical.setOnClickListener(v -> onShowPolitical());
+ mTvMarital.setOnClickListener(v -> onShowMarital());
+ mTvPassportType.setOnClickListener(v -> onShowPassportType());
+ mTvSpecialty.setOnClickListener(v -> onShowSpecialty());
+ mTvPost.setOnClickListener(v -> onShowPost());
+ mTvJobTitle.setOnClickListener(v -> onShowJobTitle());
+ mTvJobLevel.setOnClickListener(v -> onShowJobLevel());
+ mTvPersionType.setOnClickListener(v -> onShowPersonType());
+ mTvBirthday.setOnClickListener(v -> onShowDate(1));
+ mTvGraduateDate.setOnClickListener(v -> onShowDate(2));
+ mTvObtainDate.setOnClickListener(v -> onShowDate(3));
+ mTvPositiveDate.setOnClickListener(v -> onShowDate(4));
+ mTvDept.setOnClickListener(v -> {
+ Intent intent = new Intent(mActivity, ChooseDeptActivity.class);
+ mDeptLauncher.launch(intent);
+ });
+ mTvLeader.setOnClickListener(v -> {
+ if (mSelDept == null) {
+ ToastUtils.show("请选择所在部门");
+ } else {
+ Intent intent = new Intent(mActivity, ChooseUserActivity.class);
+ intent.putExtra("isSingle", true);
+ intent.putExtra("deptName", mSelDept.getDepartmentName());
+ intent.putExtra("deptId", mSelDept.getDepartmentId());
+ mLeaderLauncher.launch(intent);
+ }
+ });
+ //教育经历
+ mEducateDetailBeans = new ArrayList<>();
+ mEducateAdapter = new EducateAdapter(mActivity, mEducateDetailBeans, 2);
+ mRlvEducate.setLayoutManager(new LinearLayoutManager(mActivity));
+ mRlvEducate.setAdapter(mEducateAdapter);
+ mRlvEducate.addItemDecoration(new ItemSplitDivider(mActivity, LinearLayoutManager.VERTICAL, 1, Color.parseColor("#BFBFBF")));
+ mBtnAddEducate.setOnClickListener(v -> showAddEducateDialog(null, 1, 0));
+ mEducateAdapter.addOnDelOrEditListener(new EducateAdapter.OnDelOrEditListener() {
+ @Override
+ public void onDelBean(SaveEducateBean bean, int i) {
+ mEducateDetailBeans.remove(i);
+ mEducateAdapter.setData(mEducateDetailBeans);
+ if (mEducateDetailBeans.size() > 0) {
+ mTvEducateInt.setVisibility(View.GONE);
+ } else {
+ mTvEducateInt.setVisibility(View.GONE);
+ }
+ }
+
+ @Override
+ public void onEditBean(SaveEducateBean bean, int i) {
+ showAddEducateDialog(bean, 2, i);
+ }
+ });
+ //工作简历
+ mResumeBeans = new ArrayList<>();
+ mResumeAdapter = new ResumeAdapter(mActivity, mResumeBeans, 2);
+ mRlvResume.setLayoutManager(new LinearLayoutManager(mActivity));
+ mRlvResume.setAdapter(mResumeAdapter);
+ mRlvResume.addItemDecoration(new ItemSplitDivider(mActivity, LinearLayoutManager.VERTICAL, 1, Color.parseColor("#BFBFBF")));
+ mBtnAddResume.setOnClickListener(v -> showAddResumeDialog(null, 1, 0));
+ mResumeAdapter.addOnDelOrEditListener(new ResumeAdapter.OnDelOrEditListener() {
+ @Override
+ public void onDel(SaveResumeBean bean, int i) {
+ mResumeBeans.remove(i);
+ mResumeAdapter.setData(mResumeBeans);
+ if (mResumeBeans.size() > 0) {
+ mTvResumeInt.setVisibility(View.GONE);
+ } else {
+ mTvResumeInt.setVisibility(View.GONE);
+ }
+ }
+
+ @Override
+ public void onEdit(SaveResumeBean bean, int i) {
+ showAddResumeDialog(bean, 2, i);
+ }
+ });
+
+
+ //证件照
+ mImgList = new ArrayList<>();
+ mImgList.add(new AddFileBean());
+ mImgAdapter = new AddFileAdapter(mActivity, mImgList);
+ mRlvImgs.setLayoutManager(new GridLayoutManager(mActivity, 5));
+ mRlvImgs.setAdapter(mImgAdapter);
+ mImgAdapter.addOnItemClickListener(addFileBean -> {
+ if (TextUtils.isEmpty(addFileBean.getId())) {
+ chooseImg();
+ }
+ });
+ mImgAdapter.addOnDeleteListener((bean, i) -> {
+ mImgList.remove(i);
+ mImgAdapter.setData(mImgList);
+ });
+ //简历附件
+ mFileBeans = new ArrayList<>();
+ mFileBeans.add(new AddFileBean());
+ mFileAdapter = new AddFileAdapter(mActivity, mFileBeans);
+ mFileAdapter.addOnItemClickListener(addFileBean -> {
+ if (TextUtils.isEmpty(addFileBean.getId())) {
+ //选择
+ if (mFileMax == 0) {
+ ToastUtils.show("超过最大上传数量限制");
+ } else {
+ checkManagePermission();
+ }
+ } else {
+
+
+ }
+ });
+ //删除上传的文件
+ mFileAdapter.addOnDeleteListener((bean, i) -> {
+ //删除list中的某个数据
+ mFileBeans.remove(i);
+ mFileAdapter.notifyDataSetChanged();
+ ++mFileMax;
+ });
+ mRlvResumeFile.setLayoutManager(new GridLayoutManager(mActivity, 5));
+ mRlvResumeFile.setAdapter(mFileAdapter);
+//TODO 删除 mBtnDel.setOnClickListener(v -> onShowConfirm());
+ }
+
+ private void showAddResumeDialog(SaveResumeBean bean, int type, int pos) {
+ ResumeDialog dialog = new ResumeDialog.Builder(mActivity)
+ .setType(type)
+ .setBean(bean)
+ .build();
+ dialog.addOnChangeListener(new ResumeDialog.OnChangeListener() {
+ @Override
+ public void doSave(SaveResumeBean bean) {
+ //新增教育经历
+ dialog.dismiss();
+ mResumeBeans.add(bean);
+ mResumeAdapter.setData(mResumeBeans);
+ if (mResumeBeans.size() > 0) {
+ mTvResumeInt.setVisibility(View.GONE);
+ mRlvResume.setVisibility(View.VISIBLE);
+ } else {
+ mTvResumeInt.setVisibility(View.VISIBLE);
+ mRlvResume.setVisibility(View.GONE);
+ }
+ }
+
+ @Override
+ public void doEdit(SaveResumeBean bean) {
+ dialog.dismiss();
+ //编辑
+ SaveResumeBean bean1 = mResumeBeans.get(pos);
+ bean1.setWorkUnit(bean.getWorkUnit());
+ bean1.setDept(bean.getDept());
+ bean1.setWorkContent(bean.getWorkContent());
+ bean.setQuitReason(bean.getQuitReason());
+ bean1.setStartTime(bean.getStartTime());
+ bean1.setEndTime(bean.getEndTime());
+ mResumeAdapter.setData(mResumeBeans);
+ }
+ });
+ dialog.show();
+ }
+
+
+ @Override
+ protected void hasManageFileManage() {
+ new LFilePicker()
+ .withFragment(this)
+ .withFragmentLauncher(mFileLauncher)
+ .withRequestCode(LionActions.REQUEST_CODE_AC)
+ .withTitle("文件选择")
+ .withMaxNum(mFileMax)
+ .withFileFilter(fileFilter)
+ .start();
+ }
+
+ /**
+ * 显示添加 或 编辑
+ */
+ private void showAddEducateDialog(SaveEducateBean bean, int type, int pos) {
+ EducateDialog dialog = new EducateDialog.Builder(mActivity)
+ .setType(type)
+ .setBean(bean)
+ .build();
+ dialog.addOnChangeListener(new EducateDialog.OnChangeListener() {
+ @Override
+ public void doSave(SaveEducateBean bean) {
+ //新增教育经历
+ dialog.dismiss();
+ mEducateDetailBeans.add(bean);
+ mEducateAdapter.setData(mEducateDetailBeans);
+ if (mEducateDetailBeans.size() > 0) {
+ mRlvEducate.setVisibility(View.VISIBLE);
+ mTvEducateInt.setVisibility(View.GONE);
+ } else {
+ mRlvEducate.setVisibility(View.GONE);
+ mTvEducateInt.setVisibility(View.VISIBLE);
+ }
+ }
+
+ @Override
+ public void doEdit(SaveEducateBean bean) {
+ dialog.dismiss();
+ //编辑
+ SaveEducateBean bean1 = mEducateDetailBeans.get(pos);
+ bean1.setSchoolName(bean.getSchoolName());
+ bean1.setEducation(bean.getEducation());
+ bean1.setMajor(bean.getMajor());
+ bean1.setStartTime(bean.getStartTime());
+ bean1.setEndTime(bean.getEndTime());
+ mEducateAdapter.setData(mEducateDetailBeans);
+ }
+ });
+ dialog.show();
+ }
+ /**
+ * 选择上传的图片
+ */
+ private void chooseImg() {
+ ButtomDialogView buttomDialogView = new ButtomDialogView.DialogBuilder(mActivity)
+ .setIsBackCancelable(true)
+ .setIscancelable(true)
+ .setShowLocation(Gravity.BOTTOM)
+ .setIsShowFile(false)
+ .build();
+ buttomDialogView.addOnChoseListener(new ButtomDialogView.OnChoseListener() {
+ @Override
+ public void choseFile() {
+ }
+
+ @Override
+ public void choseAlbum() {
+ Intent intent = new Intent(Intent.ACTION_PICK, null);
+ intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
+ "image/*");
+ mAlermLauncher.launch(intent);
+ buttomDialogView.dismiss();
+ }
+
+ @Override
+ public void choseShoot() {
+ mPicPath = mActivity.getExternalFilesDir(Environment.DIRECTORY_PICTURES).getPath() + File.separator + System.currentTimeMillis() + ".jpg";
+ File file = new File(mPicPath);
+ Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
+ // 下面这句指定调用相机拍照后的照片存储的路径
+ Uri uri;
+ if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.M) {
+ uri = Uri.fromFile(file);
+ } else {
+ uri = FileProvider.getUriForFile(mActivity, ProiderUtil.getFileProviderName(mActivity), file);
+ }
+ intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
+ mImgLauncher.launch(intent);
+ buttomDialogView.dismiss();
+ }
+
+ @Override
+ public void loginOut() {
+
+ }
+
+ @Override
+ public void changePwd() {
+
+ }
+ });
+ buttomDialogView.show();
+ }
+
+
+ private void onShowConfirm() {
+ new AlertDialog.Builder(mActivity)
+ .setTitle("提示")
+ .setMessage("确定要删除个人档案吗?")
+ .setPositiveButton("确定", (dialog, which) -> {
+ dialog.dismiss();
+ doDelRecord();
+ })
+ .setNegativeButton("取消", (dialog, which) -> dialog.dismiss())
+ .create()
+ .show();
+ }
+
+ private void doDelRecord() {
+ ProgressDialog dialog = UIUtil.initDialog(mActivity, "删除中...");
+ dialog.show();
+ RetrofitManager.getInstance()
+ .create(OAApi.class)
+ .doDelUserRecord(mId)
+ .compose(RxTransformer.getTransformer())
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(@io.reactivex.rxjava3.annotations.NonNull Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(@io.reactivex.rxjava3.annotations.NonNull BaseSuccessBean baseSuccessBean) {
+ if (dialog.isShowing()) dialog.dismiss();
+ ToastUtils.show("删除成功");
+ BaseFragment preFragment = mMainActivity.getPreFragment();
+ if (preFragment != null) {
+ preFragment.mIsRefresh = true;
+ }
+ mMainActivity.backFragment(4, UserRecordEditFragment.this);
+ }
+
+ @Override
+ public void onError(@io.reactivex.rxjava3.annotations.NonNull Throwable e) {
+ if (dialog.isShowing()) dialog.dismiss();
+ ExceptionHandler.handleException(e);
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+ }
+
+
+ /**
+ * 选择性别 1
+ */
+ private void onShowGender() {
+ mActivity.hideSoftKeyboard();
+ if (mGenderList != null && mGenderList.size() > 0) {
+ if (mGenderPicker == null) {
+ mGenderPicker = new OptionsPickerBuilder(mActivity, (o1, o2, o3, v) -> {
+ mSelGender = mGenderList.get(o1);
+ mTvGender.setText(mSelGender.getDataName());
+ })
+ .setTitleText("请选择")
+ .setCancelColor(Color.parseColor("#1189FF"))
+ .setSubmitColor(Color.parseColor("#1189FF"))
+ .setTitleColor(Color.parseColor("#1189FF"))
+ .build();
+ mGenderPicker.setPicker(mGenderList);
+ }
+ mGenderPicker.show();
+ } else {
+ getDicListByType(DicIds.DIC_GENDER, 1);
+ }
+ }
+
+ //婚姻状况 2
+ private void onShowMarital() {
+ mActivity.hideSoftKeyboard();
+ if (mMaritalList != null && mMaritalList.size() > 0) {
+ if (mMaritalPicker == null) {
+ mMaritalPicker = new OptionsPickerBuilder(mActivity, (o1, o2, o3, v) -> {
+ mSelMarital = mMaritalList.get(o1);
+ mTvMarital.setText(mSelMarital.getDataName());
+ })
+ .setTitleText("请选择")
+ .setCancelColor(Color.parseColor("#1189FF"))
+ .setSubmitColor(Color.parseColor("#1189FF"))
+ .setTitleColor(Color.parseColor("#1189FF"))
+ .build();
+ mMaritalPicker.setPicker(mMaritalList);
+ }
+ mMaritalPicker.show();
+ } else {
+ getDicListByType(DicIds.DIC_MARRIAGE, 2);
+ }
+ }
+
+ //户口性质 3
+ private void onShowPassportType() {
+ mActivity.hideSoftKeyboard();
+ if (mPassportTypeList != null && mPassportTypeList.size() > 0) {
+ if (mPassportTypePicker == null) {
+ mPassportTypePicker = new OptionsPickerBuilder(mActivity, (o1, o2, o3, v) -> {
+ mSelPassportType = mPassportTypeList.get(o1);
+ mTvPassportType.setText(mSelPassportType.getDataName());
+ })
+ .setTitleText("请选择")
+ .setCancelColor(Color.parseColor("#1189FF"))
+ .setSubmitColor(Color.parseColor("#1189FF"))
+ .setTitleColor(Color.parseColor("#1189FF"))
+ .build();
+ mPassportTypePicker.setPicker(mPassportTypeList);
+ }
+ mPassportTypePicker.show();
+ } else {
+ getDicListByType(DicIds.DIC_PASSPORT_TYPE, 3);
+ }
+ }
+
+ //专业 4
+ private void onShowSpecialty() {
+ mActivity.hideSoftKeyboard();
+ if (mSpecialtyList != null && mSpecialtyList.size() > 0) {
+ if (mSpecialtyPicker == null) {
+ mSpecialtyPicker = new OptionsPickerBuilder(mActivity, (o1, o2, o3, v) -> {
+ mSelSpecialty = mSpecialtyList.get(o1);
+ mTvSpecialty.setText(mSelSpecialty.getDataName());
+ })
+ .setTitleText("请选择")
+ .setCancelColor(Color.parseColor("#1189FF"))
+ .setSubmitColor(Color.parseColor("#1189FF"))
+ .setTitleColor(Color.parseColor("#1189FF"))
+ .build();
+ mSpecialtyPicker.setPicker(mSpecialtyList);
+ }
+ mSpecialtyPicker.show();
+ } else {
+ getDicListByType(DicIds.DIC_SPECIALTY, 4);
+ }
+ }
+
+ //岗位 5
+ private void onShowPost() {
+ mActivity.hideSoftKeyboard();
+ if (mPostList != null && mPostList.size() > 0) {
+ if (mPostPicker == null) {
+ mPostPicker = new OptionsPickerBuilder(mActivity, (o1, o2, o3, v) -> {
+ mSelPost = mPostList.get(o1);
+ mTvPost.setText(mSelPost.getDataName());
+ })
+ .setTitleText("请选择")
+ .setCancelColor(Color.parseColor("#1189FF"))
+ .setSubmitColor(Color.parseColor("#1189FF"))
+ .setTitleColor(Color.parseColor("#1189FF"))
+ .build();
+ mPostPicker.setPicker(mPostList);
+ }
+ mPostPicker.show();
+ } else {
+ getDicListByType(DicIds.DIC_POST, 5);
+ }
+ }
+
+ //职称 6
+ private void onShowJobTitle() {
+ mActivity.hideSoftKeyboard();
+ if (mJobTitleList != null && mJobTitleList.size() > 0) {
+ if (mJobTitlePicker == null) {
+ mJobTitlePicker = new OptionsPickerBuilder(mActivity, (o1, o2, o3, v) -> {
+ mSelJobTitle = mJobTitleList.get(o1);
+ mTvJobTitle.setText(mSelJobTitle.getDataName());
+ })
+ .setTitleText("请选择")
+ .setCancelColor(Color.parseColor("#1189FF"))
+ .setSubmitColor(Color.parseColor("#1189FF"))
+ .setTitleColor(Color.parseColor("#1189FF"))
+ .build();
+ mJobTitlePicker.setPicker(mJobTitleList);
+ }
+ mJobTitlePicker.show();
+ } else {
+ getDicListByType(DicIds.DIC_JOB_TITLE, 6);
+ }
+ }
+
+ //职称职等 7
+ private void onShowJobLevel() {
+ mActivity.hideSoftKeyboard();
+ if (mJobLevelList != null && mJobLevelList.size() > 0) {
+ if (mJobLevelPicker == null) {
+ mJobLevelPicker = new OptionsPickerBuilder(mActivity, (o1, o2, o3, v) -> {
+ mSelJobLevel = mJobLevelList.get(o1);
+ mTvJobLevel.setText(mSelJobLevel.getDataName());
+ })
+ .setTitleText("请选择")
+ .setCancelColor(Color.parseColor("#1189FF"))
+ .setSubmitColor(Color.parseColor("#1189FF"))
+ .setTitleColor(Color.parseColor("#1189FF"))
+ .build();
+ mJobLevelPicker.setPicker(mJobLevelList);
+ }
+ mJobLevelPicker.show();
+ } else {
+ getDicListByType(DicIds.DIC_JOB_LEVEL, 7);
+ }
+ }
+
+ //人员分类 8
+ private void onShowPersonType() {
+ mActivity.hideSoftKeyboard();
+ if (mPersonTypeList != null && mPersonTypeList.size() > 0) {
+ if (mPersonTypePicker == null) {
+ mPersonTypePicker = new OptionsPickerBuilder(mActivity, (o1, o2, o3, v) -> {
+ mSelPersonType = mPersonTypeList.get(o1);
+ mTvPersionType.setText(mSelPersonType.getDataName());
+ })
+ .setTitleText("请选择")
+ .setCancelColor(Color.parseColor("#1189FF"))
+ .setSubmitColor(Color.parseColor("#1189FF"))
+ .setTitleColor(Color.parseColor("#1189FF"))
+ .build();
+ mPersonTypePicker.setPicker(mPersonTypeList);
+ }
+ mPersonTypePicker.show();
+ } else {
+ getDicListByType(DicIds.DIC_PERSON_TYPE, 8);
+ }
+ }
+
+ //政治面貌 9
+ private void onShowPolitical() {
+ mActivity.hideSoftKeyboard();
+ if (mPoliticalList != null && mPoliticalList.size() > 0) {
+ if (mPoliticalPicker == null) {
+ mPoliticalPicker = new OptionsPickerBuilder(mActivity, (o1, o2, o3, v) -> {
+ mSelPolitical = mPoliticalList.get(o1);
+ mTvPolitical.setText(mSelPolitical.getDataName());
+ })
+ .setTitleText("请选择")
+ .setCancelColor(Color.parseColor("#1189FF"))
+ .setSubmitColor(Color.parseColor("#1189FF"))
+ .setTitleColor(Color.parseColor("#1189FF"))
+ .build();
+ mPoliticalPicker.setPicker(mPoliticalList);
+ }
+ mPoliticalPicker.show();
+ } else {
+ getDicListByType(DicIds.DIC_POLITICS, 9);
+ }
+ }
+
+ /**
+ * 日期选择
+ *
+ * @param type
+ */
+ private void onShowDate(int type) {
+ TimePickerView mTimePickerView = new TimePickerBuilder(mActivity, (date, v) -> {
+ switch (type) {
+ case 1://出生日期
+ mTvBirthday.setText(TimeUtils.dateToString(date));
+ break;
+ case 2://毕业日期
+ mTvGraduateDate.setText(TimeUtils.dateToString(date));
+ break;
+ case 3://入职日期
+ mTvObtainDate.setText(TimeUtils.dateToString(date));
+ break;
+ case 4://转正日期
+ mTvPositiveDate.setText(TimeUtils.dateToString(date));
+ break;
+ }
+ })
+ .setTitleText("请选日期")
+ .setCancelColor(Color.parseColor("#1189FF"))
+ .setSubmitColor(Color.parseColor("#1189FF"))
+ .isDialog(false)
+ .setType(new boolean[]{true, true, true, false, false, false})
+ .setTitleColor(Color.parseColor("#1189FF"))
+ .build();
+ mTimePickerView.show();
+ }
+
+ /**
+ * 字典
+ */
+ private void getDicListByType(String pId, int i) {
+ ProgressDialog dialog = UIUtil.initDialog(mActivity, "获取中...");
+ dialog.show();
+ RetrofitManager.getInstance()
+ .create(BaseApiService.class)
+ .getDictListAllByPid(pId)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new Observer>() {
+ @Override
+ public void onSubscribe(@io.reactivex.rxjava3.annotations.NonNull Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(@io.reactivex.rxjava3.annotations.NonNull List beans) {
+ dialog.dismiss();
+ if (beans.size() > 0) {
+ switch (i) {
+ case 1://性别
+ mGenderList = beans;
+ onShowGender();
+ break;
+ case 2://婚姻状况
+ mMaritalList = beans;
+ onShowMarital();
+ break;
+ case 3://户口性质3 //专业4 //岗位5 //职称6 //职称职等7 //人员分类8
+ mPassportTypeList = beans;
+ onShowPassportType();
+ break;
+ case 4://专业
+ mSpecialtyList = beans;
+ onShowSpecialty();
+ break;
+ case 5://岗位
+ mPostList = beans;
+ onShowPost();
+ break;
+ case 6://职称
+ mJobTitleList = beans;
+ onShowJobTitle();
+ break;
+ case 7://职称职等
+ mJobLevelList = beans;
+ onShowJobLevel();
+ break;
+ case 8://人员分类
+ mPersonTypeList = beans;
+ onShowPersonType();
+ break;
+ case 9://政治面貌
+ mPoliticalList = beans;
+ onShowPolitical();
+ break;
+ }
+ } else {
+ ToastUtils.show("暂无数据");
+ }
+ }
+
+ @Override
+ public void onError(@io.reactivex.rxjava3.annotations.NonNull Throwable e) {
+ dialog.dismiss();
+ ExceptionHandler.handleException(e);
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+ }
+
+
+ /**
+ * 上传文件
+ *
+ * @param paths
+ */
+ private int mUploadCount = 0;
+ private int mFileMax = 10;
+
+ private void doUploadFiles(ArrayList paths) {
+ ProgressDialog progressDialog = UIUtil.initDialog(mActivity, "上传中...");
+ progressDialog.show();
+ List> requests = new ArrayList<>();
+ List fileNames = new ArrayList<>();
+ for (int i = 0; i < paths.size(); i++) {
+ File file = new File(paths.get(i));
+ Observable observable = createObservable(file);
+ if (observable == null) return;
+ requests.add(observable);
+ fileNames.add(file.getName());
+ }
+ Observable[] observables1 = requests.toArray(new Observable[requests.size()]);
+
+ Observable.mergeArrayDelayError(observables1)
+ .compose(RxTransformer.getTransformer())
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(@io.reactivex.rxjava3.annotations.NonNull Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(@NotNull Object o) {
+ ++mUploadCount;
+ if (o instanceof BaseSuccessBean) {
+ --mFileMax;
+ //刷新文件
+ BaseSuccessBean bean = (BaseSuccessBean) o;
+ AddFileBean fileBean = new AddFileBean();
+ fileBean.setId(bean.getData());
+ fileBean.setPath(BaseUrlApi.BASE_IMG_URL + bean.getData());
+ fileBean.setFileName(fileNames.get(mUploadCount - 1));
+ int fileType = FileUtils.getFileType(fileNames.get(mUploadCount - 1));
+ if (2 == fileType) {
+ fileBean.setFileType(2);
+ mImgList.add(0, fileBean);
+ mImgAdapter.notifyDataSetChanged();
+ } else {
+ //判断文件类型
+ fileBean.setFileType(1);
+ mFileBeans.add(0, fileBean);
+ mFileAdapter.notifyDataSetChanged();
+ }
+ }
+ if (mUploadCount == paths.size()) {
+ mPicPath = "";
+ mUploadCount = 0;
+ if (progressDialog.isShowing()) {
+ progressDialog.dismiss();
+ }
+ }
+ }
+
+ @Override
+ public void onError(@io.reactivex.rxjava3.annotations.NonNull Throwable e) {
+ e.printStackTrace();
+ mUploadCount = 0;
+ mPicPath = "";
+ if (progressDialog.isShowing()) {
+ progressDialog.dismiss();
+ }
+ ToastUtils.show("上传失败,请稍后重试.");
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+ }
+
+ private Observable createObservable(File file) {
+ RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file);
+ MultipartBody.Part body;
+ int fileType = FileUtils.getFileType(file.getName());
+ if (fileType == 1) {
+ body = MultipartBody.Part.createFormData("file", file.getName(), requestFile);
+ return RetrofitManager.getInstance()
+ .create(BaseApiService.class)
+ .uploadFile(body)
+ .compose(RxTransformer.getTransformer());
+ } else if (fileType == 2) {
+ body = MultipartBody.Part.createFormData("image", file.getName(), requestFile);
+ return RetrofitManager.getInstance()
+ .create(BaseApiService.class)
+ .uploadImage(body)
+ .compose(RxTransformer.getTransformer());
+ } else if (fileType == 3) {
+ body = MultipartBody.Part.createFormData("video", file.getName(), requestFile);
+ return RetrofitManager.getInstance()
+ .create(BaseApiService.class)
+ .uploadVideo(body)
+ .compose(RxTransformer.getTransformer());
+ } else if (fileType == 4) {
+ body = MultipartBody.Part.createFormData("audio", file.getName(), requestFile);
+ return RetrofitManager.getInstance()
+ .create(BaseApiService.class)
+ .uploadAudio(body)
+ .compose(RxTransformer.getTransformer());
+ } else {
+ return null;
+ }
+ }
+
+ private void doSaveRecord() {
+ if (checkParams()) {
+ ProgressDialog dialog = UIUtil.initDialog(mActivity, "保存中...");
+ dialog.show();
+ RequestBody body = buildParams();
+ RetrofitManager.getInstance()
+ .create(OAApi.class)
+ .doEditUserRecord(mId, body)
+ .compose(RxTransformer.getTransformer())
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(@io.reactivex.rxjava3.annotations.NonNull Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(@io.reactivex.rxjava3.annotations.NonNull BaseSuccessBean baseSuccessBean) {
+ if (dialog.isShowing()) dialog.dismiss();
+ ToastUtils.show("保存成功");
+ BaseFragment preFragment = mMainActivity.getPreFragment();
+ if (preFragment != null) {
+ preFragment.mIsRefresh = true;
+ }
+ mMainActivity.backFragment(4, UserRecordEditFragment.this);
+ }
+
+ @Override
+ public void onError(@io.reactivex.rxjava3.annotations.NonNull Throwable e) {
+ if (dialog.isShowing()) dialog.dismiss();
+ ExceptionHandler.handleException(e);
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+ }
+ }
+
+ private boolean checkParams() {
+ String name = mEtName.getText().toString().trim();
+ if (TextUtils.isEmpty(name)) {
+ ToastUtils.show("请输入姓名");
+ return false;
+ }
+ String birthday = mTvBirthday.getText().toString().trim();
+ if (TextUtils.isEmpty(birthday)) {
+ ToastUtils.show("请选择出生日期");
+ return false;
+ }
+ if (mSelGender == null) {
+ ToastUtils.show("请选择性别");
+ return false;
+ }
+ String idcard = mEtIdCard.getText().toString().trim();
+ if (TextUtils.isEmpty(idcard) || !RegexUtils.isIDNumber(idcard)) {
+ ToastUtils.show("请输入正确的身份证号码");
+ return false;
+ }
+ if (mSelPolitical == null) {
+ ToastUtils.show("请选择政治面貌");
+ return false;
+ }
+ if (mSelMarital == null) {
+ ToastUtils.show("请选择婚姻状况");
+ return false;
+ }
+ String nativePlace = mEtNativePlace.getText().toString().trim();
+ if (TextUtils.isEmpty(nativePlace)) {
+ ToastUtils.show("请输入籍贯");
+ return false;
+ }
+ if (mSelPassportType == null) {
+ ToastUtils.show("请选择户口性质");
+ return false;
+ }
+ if (mSelSpecialty == null) {
+ ToastUtils.show("请选择专业");
+ return false;
+ }
+ if (mSelDept == null) {
+ ToastUtils.show("请选择所在部门");
+ return false;
+ }
+ if (mSelPost == null) {
+ ToastUtils.show("请选择岗位");
+ return false;
+ }
+ if (mSelLeader == null) {
+ ToastUtils.show("请选择直接上级");
+ return false;
+ }
+ if (mSelJobTitle == null) {
+ ToastUtils.show("请选择职称");
+ return false;
+ }
+ if (mSelJobLevel == null) {
+ ToastUtils.show("请选择职称职等");
+ return false;
+ }
+ if (mSelPersonType == null) {
+ ToastUtils.show("请选择人员分类");
+ return false;
+ }
+ return true;
+ }
+
+ private RequestBody buildParams() {
+ SaveUserRecordBean bean = new SaveUserRecordBean();
+ String name = mEtName.getText().toString().trim();
+ bean.setName(name);//姓名
+ bean.setSex(mSelGender.getDataId());//性别
+ String birthday = mTvBirthday.getText().toString().trim();
+ bean.setBirthday(birthday);//出生日期
+ String idcard = mEtIdCard.getText().toString().trim();
+ bean.setIdCard(idcard);//身份证号
+ bean.setPoliticalOutlook(mSelPolitical.getDataId());//政治面貌
+ bean.setMaritalStatus(mSelMarital.getDataId());//婚姻状况
+ String nationality = mEtNationality.getText().toString().trim();
+ bean.setNationality(nationality);//国籍
+ String nativePlace = mEtNativePlace.getText().toString().trim();
+ bean.setNativeAddress(nativePlace);//籍贯
+ String passport = mEtPassport.getText().toString().trim();
+ bean.setResidence(passport);//户口
+ bean.setResidenceNature(mSelPassportType.getDataId());//户口性质
+ String address = mEtAddress.getText().toString().trim();
+ bean.setAddress(address);//家庭住址
+ String email = mEtEmail.getText().toString().trim();
+ bean.setEmail(email);//邮箱
+ String phone = mEtPhone.getText().toString().trim();
+ bean.setPhone(phone);//联系电话
+ String school = mEtSchool.getText().toString().trim();
+ bean.setGraduation(school);//毕业院校
+ bean.setMajor(mSelSpecialty.getDataId());//专业
+ String degree = mEtDegree.getText().toString().trim();
+ bean.setHighestDegree(degree);//最高学位
+ String graduateDate = mTvGraduateDate.getText().toString().trim();
+ bean.setGraduationDate(graduateDate);//毕业日期
+ String linkMan = mEtLinkMan.getText().toString().trim();
+ bean.setEmergencyContact(linkMan);//紧急联系人
+ String linkPhone = mEtLinkPhone.getText().toString().trim();
+ bean.setEmergencyContactPhone(linkPhone);//紧急联系人电话
+ String obtainDate = mTvObtainDate.getText().toString().trim();
+ bean.setJoinTime(obtainDate);//入职日期
+ String posDate = mTvPositiveDate.getText().toString().trim();
+ bean.setCeremonialTime(posDate);//转正日期
+ bean.setDept(mSelDept.getDepartmentId());//所在部门
+ bean.setPost(mSelPost.getDataId());//岗位
+ bean.setDirectSuperior(mSelLeader.getUserId());//领导
+ String bankNum = mEtBankNum.getText().toString().trim();
+ bean.setBankAccount(bankNum);//银行账号
+ String fundNum = mEtFundNum.getText().toString().trim();//公积金
+ bean.setFundAccount(fundNum);
+ String socNum = mEtSocialNum.getText().toString().trim();//社保卡
+ bean.setSecurityAccount(socNum);
+
+ bean.setTitle(mSelJobTitle.getDataId());
+ bean.setTitleGrade(mSelJobLevel.getDataId());
+ bean.setUserType(mSelPersonType.getDataId());
+ if (mEducateDetailBeans != null && mEducateDetailBeans.size() > 0) {
+ bean.setEducationList(mEducateDetailBeans);
+ } else {
+ bean.setEducationList(new ArrayList<>());
+ }
+ if (mResumeBeans != null && mResumeBeans.size() > 0) {
+ bean.setWorkList(mResumeBeans);
+ } else {
+ bean.setWorkList(new ArrayList<>());
+ }
+
+ //证件照
+ if (mImgList != null && mImgList.size() >= 2) {
+ StringBuilder fileId = new StringBuilder();
+ for (AddFileBean fileBean : mImgList) {
+ if (!TextUtils.isEmpty(fileBean.getId())) {
+ fileId.append(fileBean.getId()).append(",");
+ }
+ }
+ if (fileId.toString().endsWith(",")) {
+ fileId = fileId.deleteCharAt(fileId.length() - 1);
+ }
+ bean.setPhoto(fileId.toString());
+ } else {
+ bean.setPhoto("");
+ }
+ //简历
+ if (mFileBeans != null && mFileBeans.size() >= 2) {
+ StringBuilder fileId = new StringBuilder();
+ for (AddFileBean fileBean : mFileBeans) {
+ if (!TextUtils.isEmpty(fileBean.getId())) {
+ fileId.append(fileBean.getId()).append(",");
+ }
+ }
+ if (fileId.toString().endsWith(",")) {
+ fileId = fileId.deleteCharAt(fileId.length() - 1);
+ }
+ bean.setResume(fileId.toString());
+ } else {
+ bean.setResume("");
+ }
+ return RequestBody.create(new Gson().toJson(bean), MediaType.parse("application/json; charset=utf-8"));
+ }
+
+ @Override
+ protected void refreshView() {
+
+ }
+
+ @Override
+ protected void loadMoreData() {
+
+ }
+}
diff --git a/oamodule/src/main/res/layout/activity_pad_main.xml b/oamodule/src/main/res/layout/activity_pad_main.xml
index 590e51e..7a421cb 100644
--- a/oamodule/src/main/res/layout/activity_pad_main.xml
+++ b/oamodule/src/main/res/layout/activity_pad_main.xml
@@ -17,8 +17,8 @@
diff --git a/oamodule/src/main/res/layout/fragment_draft_box.xml b/oamodule/src/main/res/layout/fragment_draft_box.xml
new file mode 100644
index 0000000..12f2d9a
--- /dev/null
+++ b/oamodule/src/main/res/layout/fragment_draft_box.xml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/oamodule/src/main/res/layout/fragment_draft_detail.xml b/oamodule/src/main/res/layout/fragment_draft_detail.xml
new file mode 100644
index 0000000..7b16a42
--- /dev/null
+++ b/oamodule/src/main/res/layout/fragment_draft_detail.xml
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/oamodule/src/main/res/layout/fragment_email_in_box.xml b/oamodule/src/main/res/layout/fragment_email_in_box.xml
new file mode 100644
index 0000000..f23b1c5
--- /dev/null
+++ b/oamodule/src/main/res/layout/fragment_email_in_box.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/oamodule/src/main/res/layout/fragment_email_send.xml b/oamodule/src/main/res/layout/fragment_email_send.xml
new file mode 100644
index 0000000..a6deb4b
--- /dev/null
+++ b/oamodule/src/main/res/layout/fragment_email_send.xml
@@ -0,0 +1,232 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/oamodule/src/main/res/layout/fragment_in_detail.xml b/oamodule/src/main/res/layout/fragment_in_detail.xml
new file mode 100644
index 0000000..8d45f75
--- /dev/null
+++ b/oamodule/src/main/res/layout/fragment_in_detail.xml
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/oamodule/src/main/res/layout/fragment_recycle_box.xml b/oamodule/src/main/res/layout/fragment_recycle_box.xml
new file mode 100644
index 0000000..a8ec68d
--- /dev/null
+++ b/oamodule/src/main/res/layout/fragment_recycle_box.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/oamodule/src/main/res/layout/fragment_recycle_detail.xml b/oamodule/src/main/res/layout/fragment_recycle_detail.xml
new file mode 100644
index 0000000..664f2a0
--- /dev/null
+++ b/oamodule/src/main/res/layout/fragment_recycle_detail.xml
@@ -0,0 +1,112 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/oamodule/src/main/res/layout/fragment_routine_work.xml b/oamodule/src/main/res/layout/fragment_routine_work.xml
index c59b20b..6ab76c5 100644
--- a/oamodule/src/main/res/layout/fragment_routine_work.xml
+++ b/oamodule/src/main/res/layout/fragment_routine_work.xml
@@ -12,6 +12,7 @@
android:id="@+id/rl_content_title"
android:layout_width="match_parent"
android:layout_height="50dp"
+ android:layout_marginBottom="5dp"
android:background="@color/white"
android:gravity="center_vertical"
android:orientation="horizontal"
@@ -193,6 +194,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white"
+ android:padding="5dp"
tools:listitem="@layout/item_routine" />
diff --git a/oamodule/src/main/res/layout/fragment_send_box.xml b/oamodule/src/main/res/layout/fragment_send_box.xml
new file mode 100644
index 0000000..51015d5
--- /dev/null
+++ b/oamodule/src/main/res/layout/fragment_send_box.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/oamodule/src/main/res/layout/fragment_send_detail.xml b/oamodule/src/main/res/layout/fragment_send_detail.xml
new file mode 100644
index 0000000..459a476
--- /dev/null
+++ b/oamodule/src/main/res/layout/fragment_send_detail.xml
@@ -0,0 +1,103 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/oamodule/src/main/res/layout/fragment_user_record_add.xml b/oamodule/src/main/res/layout/fragment_user_record_add.xml
new file mode 100644
index 0000000..194fdd2
--- /dev/null
+++ b/oamodule/src/main/res/layout/fragment_user_record_add.xml
@@ -0,0 +1,900 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/oamodule/src/main/res/layout/fragment_user_record_detail.xml b/oamodule/src/main/res/layout/fragment_user_record_detail.xml
new file mode 100644
index 0000000..de5735d
--- /dev/null
+++ b/oamodule/src/main/res/layout/fragment_user_record_detail.xml
@@ -0,0 +1,839 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/oamodule/src/main/res/layout/fragment_user_record_edit.xml b/oamodule/src/main/res/layout/fragment_user_record_edit.xml
new file mode 100644
index 0000000..194fdd2
--- /dev/null
+++ b/oamodule/src/main/res/layout/fragment_user_record_edit.xml
@@ -0,0 +1,900 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file