From e3a1e2505258ba0d24924acf810856578df6557e Mon Sep 17 00:00:00 2001 From: adam Date: Wed, 11 May 2022 16:41:29 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B9=B3=E6=9D=BF=E9=82=AE=E4=BB=B6=E3=80=81?= =?UTF-8?q?=E6=88=91=E7=9A=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../baselib/constant/PathConfig.java | 17 + .../res/drawable-xhdpi/ic_step_start_one.png | Bin 0 -> 1955 bytes .../res/drawable/shp_rectangle_gray_no_f.xml | 6 + .../main/res/drawable/switch_custom_w_g.xml | 5 + .../oamodule/adapter/EmailAdapter.java | 2 + .../adapter/ScheduleTimeLineAdapter.java | 6 +- .../pad/activitys/home/PadMainActivity.java | 100 +- .../pad/fragments/PadEmailFragment.java | 58 +- .../pad/fragments/PadMineFragment.java | 104 +- .../pad/fragments/email/DraftBoxFragment.java | 227 +++ .../fragments/email/DraftDetailFragment.java | 325 ++++ .../fragments/email/EmailSendFragment.java | 1088 ++++++++++++ .../pad/fragments/email/InBoxFragment.java | 267 +++ .../pad/fragments/email/InDetailFragment.java | 357 ++++ .../fragments/email/RecycleBoxFragment.java | 284 +++ .../email/RecycleDetailFragment.java | 364 ++++ .../pad/fragments/email/SendBoxFragment.java | 225 +++ .../fragments/email/SendDetailFragment.java | 311 ++++ .../fragments/mine/UserRecordAddFragment.java | 1238 ++++++++++++++ .../mine/UserRecordDetailFragment.java | 445 +++++ .../mine/UserRecordEditFragment.java | 1523 +++++++++++++++++ .../src/main/res/layout/activity_pad_main.xml | 4 +- .../main/res/layout/fragment_draft_box.xml | 40 + .../main/res/layout/fragment_draft_detail.xml | 102 ++ .../main/res/layout/fragment_email_in_box.xml | 36 + .../main/res/layout/fragment_email_send.xml | 232 +++ .../main/res/layout/fragment_in_detail.xml | 87 + .../main/res/layout/fragment_recycle_box.xml | 37 + .../res/layout/fragment_recycle_detail.xml | 112 ++ .../main/res/layout/fragment_routine_work.xml | 2 + .../src/main/res/layout/fragment_send_box.xml | 37 + .../main/res/layout/fragment_send_detail.xml | 103 ++ .../res/layout/fragment_user_record_add.xml | 900 ++++++++++ .../layout/fragment_user_record_detail.xml | 839 +++++++++ .../res/layout/fragment_user_record_edit.xml | 900 ++++++++++ 35 files changed, 10320 insertions(+), 63 deletions(-) create mode 100644 baselib/src/main/res/drawable-xhdpi/ic_step_start_one.png create mode 100755 baselib/src/main/res/drawable/shp_rectangle_gray_no_f.xml create mode 100755 baselib/src/main/res/drawable/switch_custom_w_g.xml create mode 100644 oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/email/DraftBoxFragment.java create mode 100644 oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/email/DraftDetailFragment.java create mode 100644 oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/email/EmailSendFragment.java create mode 100644 oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/email/InBoxFragment.java create mode 100644 oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/email/InDetailFragment.java create mode 100644 oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/email/RecycleBoxFragment.java create mode 100644 oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/email/RecycleDetailFragment.java create mode 100644 oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/email/SendBoxFragment.java create mode 100644 oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/email/SendDetailFragment.java create mode 100644 oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/mine/UserRecordAddFragment.java create mode 100644 oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/mine/UserRecordDetailFragment.java create mode 100644 oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/mine/UserRecordEditFragment.java create mode 100644 oamodule/src/main/res/layout/fragment_draft_box.xml create mode 100644 oamodule/src/main/res/layout/fragment_draft_detail.xml create mode 100644 oamodule/src/main/res/layout/fragment_email_in_box.xml create mode 100644 oamodule/src/main/res/layout/fragment_email_send.xml create mode 100644 oamodule/src/main/res/layout/fragment_in_detail.xml create mode 100644 oamodule/src/main/res/layout/fragment_recycle_box.xml create mode 100644 oamodule/src/main/res/layout/fragment_recycle_detail.xml create mode 100644 oamodule/src/main/res/layout/fragment_send_box.xml create mode 100644 oamodule/src/main/res/layout/fragment_send_detail.xml create mode 100644 oamodule/src/main/res/layout/fragment_user_record_add.xml create mode 100644 oamodule/src/main/res/layout/fragment_user_record_detail.xml create mode 100644 oamodule/src/main/res/layout/fragment_user_record_edit.xml 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 0000000000000000000000000000000000000000..cb317459e6c78fcb3c5a5060fb37a398208ec506 GIT binary patch literal 1955 zcmbVNeQXnD7(X^XWMtqNEJC8Y+=hIN_CC7a+G7==?PwVtbE|Ajg52)juIJjj+ud#L zCIlFBxDgPL7*IqcxM+;TH9^FGgWU6mCJva_aUAqbM~b~&oxNWrK6vC;5DbvB?X{nBW>WwVhdVgHIj5OVWMZF6hT^X!h(|~13@wb&6rEjFIm(i@ z;F}HeYnsg9cqkMyhD=6DX~0RV6>?BGMHwK%ptgz{8#ah)L5jfvR8A3OO^`%XXJqT8 zX3d5{PZJV?a++3DlVO4Z!^5nMlSV?96bJHL8Yed^fw*y=!$AN9fvBkvOQx~1U(zJi zFFk-dy?vJf7+Q}fZR5Va1cPZ4s^)BgGLiwgFIx4s$^fqds?@A-z}W)bEYQ`+j9me& zCMjM?3ZyQoGUYN#LDlFC56cOnE@I{#M}ULXfDNMv7;VCAAPFyNW=M*mEJcKcA&3Oj zBk_W-^&TkcC27V)FogLoC`=lj)!6?8^Bm)olpqTw3qiI4;Ii0&q3J*}b}1k!&@lAQ zbmzL;Zm(1%pAdi>YSn`IsM~3$Nh?hoC?gqn*W+Q_qN=eX2iy)D2E$_%1fF5p5*}E| zVgt{beTHJ%OdBi~iZhh3yqV?*nxla)b>1Oy&3Y1~&h!8C{9;9bMaTvonMW^8J$o3J zpu&4?O%_izXiClk0vb;khUN4^uwk5@0f5Jn%fcf^AVC}Q14#NWd69srl1~e<3Ygab zqxBG(heP*qy=W6k@OwqZ_wFe06dZO9eVT4p@Fm^wfC#&s0^3>7Yg_?>WZ-VcJa2gC z&|AF~vz~jr^QigAx?{1}Ku2HS*4Vkez6C_#C;s8gWp%^O{LlMB(Si2%j)8N7)hn7h zk8N*k@eQ=+nqG{IVo%+?@I(LQh~2;B!^ub2zWt7IcTrX0)R_}EPUy|vD_(KX@I(Pfj>XRXNUnfd*5 zqo++>H~8TZ2hNtS^cAYtOV`=3Y%r~JS2VAa3UNpcgz z%{DLDGVW5%^a)>VeJ_SZ79U(3*r0ypWpk!nxph*^y*91-73cY5%gfEbE!yxUUDLl) z$gygZsx~lZu*mmE$}hZcT7B}*SDoiqanEa;g`C#r#2yt&jDP$zV{cw_kCXqpr3M&x z%$ki!+ZrwfuXgOQ_Qu+7t{Ul!kx%)c=~sHy`b|+Mmr7{+)ki(aXoL y6}?;6)0h|e@k~?h3+1oh&L8`5x0AZG*qGf5m-K$Td6`51jJll_j(zi2wEqJ^tFBl8 literal 0 HcmV?d00001 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +