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 3d85085..28cb262 100755
--- a/baselib/src/main/java/com/tenlionsoft/baselib/constant/PathConfig.java
+++ b/baselib/src/main/java/com/tenlionsoft/baselib/constant/PathConfig.java
@@ -235,4 +235,9 @@ public class PathConfig {
public static final String PATH_MODULE_PAD_OA_FRAGMENT_ROUTINE_WORK_DETAIL = "/oamodule/fragment/routineWorkDetail";//日常工作详情
public static final String PATH_MODULE_PAD_OA_FRAGMENT_ROUTINE_WORK_TRANSACT = "/oamodule/fragment/routineWorkTransact";//完成日常工作
+ public static final String PATH_MODULE_PAD_OA_FRAGMENT_WORK_REPORT_ADD = "/oamodule/fragment/workReportAdd";//添加工作报告
+ public static final String PATH_MODULE_PAD_OA_FRAGMENT_WORK_REPORT_EDIT = "/oamodule/fragment/workReportEdit";//编辑工作报告
+ public static final String PATH_MODULE_PAD_OA_FRAGMENT_WORK_REPORT_DETAIL = "/oamodule/fragment/workReportDetail";//工作报告详情
+ public static final String PATH_MODULE_PAD_OA_FRAGMENT_WORK_REPORT = "/oamodule/fragment/workReport";//工作报告
+
}
diff --git a/baselib/src/main/res/anim/slide_left_in.xml b/baselib/src/main/res/anim/slide_left_in.xml
new file mode 100644
index 0000000..e332701
--- /dev/null
+++ b/baselib/src/main/res/anim/slide_left_in.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/baselib/src/main/res/anim/slide_left_out.xml b/baselib/src/main/res/anim/slide_left_out.xml
new file mode 100644
index 0000000..3dfe9a5
--- /dev/null
+++ b/baselib/src/main/res/anim/slide_left_out.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/baselib/src/main/res/anim/slide_right_in.xml b/baselib/src/main/res/anim/slide_right_in.xml
new file mode 100644
index 0000000..f650791
--- /dev/null
+++ b/baselib/src/main/res/anim/slide_right_in.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/baselib/src/main/res/anim/slide_right_out.xml b/baselib/src/main/res/anim/slide_right_out.xml
new file mode 100644
index 0000000..5033f3c
--- /dev/null
+++ b/baselib/src/main/res/anim/slide_right_out.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/baselib/src/main/res/drawable-xhdpi/ic_step_start.9.png b/baselib/src/main/res/drawable-xhdpi/ic_step_start.9.png
new file mode 100644
index 0000000..eb87e71
Binary files /dev/null and b/baselib/src/main/res/drawable-xhdpi/ic_step_start.9.png differ
diff --git a/baselib/src/main/res/drawable-xhdpi/ic_step_start.png b/baselib/src/main/res/drawable-xhdpi/ic_step_start.png
deleted file mode 100644
index 798bd16..0000000
Binary files a/baselib/src/main/res/drawable-xhdpi/ic_step_start.png and /dev/null differ
diff --git a/oamodule/src/main/java/com/tenlionsoft/oamodule/activity/workreports/EditWorkReportActivity.java b/oamodule/src/main/java/com/tenlionsoft/oamodule/activity/workreports/EditWorkReportActivity.java
index a00a39a..d6e50d8 100644
--- a/oamodule/src/main/java/com/tenlionsoft/oamodule/activity/workreports/EditWorkReportActivity.java
+++ b/oamodule/src/main/java/com/tenlionsoft/oamodule/activity/workreports/EditWorkReportActivity.java
@@ -128,7 +128,7 @@ public class EditWorkReportActivity extends BaseActivity {
@Override
public void onError(@NonNull Throwable e) {
- refreshView(STATE_LOAD_EMPTY);
+ refreshView(STATE_LOAD_ERROR);
ExceptionHandler.handleException(e);
}
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 d665008..81d3d9f 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
@@ -27,7 +27,6 @@ import com.tenlionsoft.baselib.core.widget.base.BaseActivity;
import com.tenlionsoft.baselib.core.widget.base.BaseFragment;
import com.tenlionsoft.baselib.core.widget.base.FragmentUtils;
import com.tenlionsoft.baselib.utils.KeyBoardListener;
-import com.tenlionsoft.baselib.utils.LogUtils;
import com.tenlionsoft.baselib.utils.UserLgUtils;
import com.tenlionsoft.oamodule.R;
import com.tenlionsoft.oamodule.R2;
@@ -325,16 +324,24 @@ public class PadMainActivity extends BaseActivity {
//隐藏上一个fragment
if (mPreFragment != null) {
fragmentTransaction.hide(mPreFragment)
- .setCustomAnimations(R.anim.anim_fade_in, R.anim.anim_fade_out);
- LogUtils.e("上一个fragment=========" + mPreFragment);
+ .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.anim_fade_in, R.anim.anim_fade_out)
+ .setCustomAnimations(R.anim.slide_right_in,
+ R.anim.slide_left_out,
+ R.anim.slide_left_in,
+ R.anim.slide_right_out)
.commit();
} else {
fragmentTransaction.add(R.id.fl_content, fragment, tag)
- .setCustomAnimations(R.anim.anim_fade_in, R.anim.anim_fade_out)
+ .setCustomAnimations(R.anim.slide_right_in,
+ R.anim.slide_left_out,
+ R.anim.slide_left_in,
+ R.anim.slide_right_out)
.commit();
}
mPreFragment = fragment;
diff --git a/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/home/workreports/WorkReportAddFragment.java b/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/home/workreports/WorkReportAddFragment.java
new file mode 100644
index 0000000..d8007d7
--- /dev/null
+++ b/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/home/workreports/WorkReportAddFragment.java
@@ -0,0 +1,389 @@
+package com.tenlionsoft.oamodule.pad.fragments.home.workreports;
+
+import android.app.ProgressDialog;
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.Color;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.TextView;
+
+import com.alibaba.android.arouter.facade.annotation.Route;
+import com.bigkoo.pickerview.builder.OptionsPickerBuilder;
+import com.bigkoo.pickerview.view.OptionsPickerView;
+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.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.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.beans.SaveWorkReportBean;
+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.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.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/10 - 14:13
+ * 邮箱: itgaojian@163.com
+ * 描述: 工作报告
+ */
+@Route(path = PathConfig.PATH_MODULE_PAD_OA_FRAGMENT_WORK_REPORT_ADD)
+public class WorkReportAddFragment extends BaseFragment {
+ @BindView(R2.id.et_name)
+ EditText mEtName;
+ @BindView(R2.id.tv_type)
+ TextView mTvType;
+ @BindView(R2.id.et_out)
+ EditText mEtOut;
+ @BindView(R2.id.et_content)
+ EditText mEtContent;
+ @BindView(R2.id.rlv_files)
+ RecyclerView mRlvFiles;
+ @BindView(R2.id.btn_confirm)
+ Button mBtnConfirm;
+ private List mFileBeans = new ArrayList<>();
+ private AddFileAdapter mAddFileAdapter;
+ private String[] fileFilter = new String[]{".doc", ".docx", ".xls", ".xlsx", ".pptx", ".ppt", ".txt", ".pdf"};
+ private int mFileMax = 9;
+ private OptionsPickerView mTypePicker;
+ private List mTyps;
+ private DicBean mSelType;
+ private PadMainActivity mMainActivity;
+ private ActivityResultLauncher mFileLauncher;
+
+ @Override
+ protected int getContentViewId() {
+ return R.layout.fragment_work_report_add;
+ }
+
+ @Override
+ protected void setDataToView(View dataView) {
+ ButterKnife.bind(this, dataView);
+ setTitleView(true);
+ mTvFragmentTitle.setText("工作报告新增");
+ mIvFragmentBack.setOnClickListener(v->mMainActivity.backFragment(1,this));
+ setStateView(STATE_SUCCESS);
+ mSrlView.setEnableLoadMore(false);
+ mSrlView.setEnableRefresh(false);
+ initViews();
+ }
+
+ private void initViews() {
+ mTyps = new ArrayList<>();
+// 工作日报 1
+// 工作月报 2
+// 工作年报 3
+ DicBean type1 = new DicBean();
+ type1.setDataId("1");
+ type1.setDataName("工作日报");
+
+ DicBean type2 = new DicBean();
+ type2.setDataId("2");
+ type2.setDataName("工作月报");
+
+ DicBean type3 = new DicBean();
+ type3.setDataId("3");
+ type3.setDataName("工作年报");
+
+ mTyps.add(type1);
+ mTyps.add(type2);
+ mTyps.add(type3);
+
+ mTvType.setOnClickListener(v -> onShowType());
+ mFileBeans.add(new AddFileBean());
+ mAddFileAdapter = new AddFileAdapter(mActivity, mFileBeans);
+ mAddFileAdapter.addOnItemClickListener(addFileBean -> {
+ LogUtils.e("添加文件");
+ if (TextUtils.isEmpty(addFileBean.getId())) {
+ checkManagePermission();
+ } else {
+ //TODO 预览
+ }
+ });
+ //删除上传的文件
+ mAddFileAdapter.addOnDeleteListener((bean, i) -> {
+ //删除list中的某个数据
+ mFileBeans.remove(i);
+ mAddFileAdapter.notifyDataSetChanged();
+ ++mFileMax;
+ });
+ mRlvFiles.setLayoutManager(new LinearLayoutManager(mActivity));
+ mRlvFiles.setAdapter(mAddFileAdapter);
+ mBtnConfirm.setOnClickListener(v -> doConfirm());
+ }
+
+ @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("路径有误,请稍后重试");
+ }
+ });
+ }
+
+ @Override
+ protected void hasManageFileManage() {
+ if (mFileMax == 0) {
+ ToastUtils.show("超过最大上传数量限制");
+ } else {
+ new LFilePicker()
+ .withFragment(this)
+ .withFragmentLauncher(mFileLauncher)
+ .withRequestCode(LionActions.REQUEST_CODE_AC)
+ .withTitle("文件选择")
+ .withMaxNum(mFileMax)
+ .withFileFilter(fileFilter)
+ .start();
+ }
+ }
+
+ /**
+ * 显示类型
+ */
+ private void onShowType() {
+ mActivity.hideSoftKeyboard();
+ if (mTyps != null && mTyps.size() > 0) {
+ if (mTypePicker == null) {
+ mTypePicker = new OptionsPickerBuilder(mActivity, (o1, o2, o3, v) -> {
+ mSelType = mTyps.get(o1);
+ mTvType.setText(mSelType.getDataName());
+ })
+ .setTitleText("请选择")
+ .setCancelColor(Color.parseColor("#1189FF"))
+ .setSubmitColor(Color.parseColor("#1189FF"))
+ .setTitleColor(Color.parseColor("#1189FF"))
+ .build();
+ mTypePicker.setPicker(mTyps);
+ }
+ mTypePicker.show();
+ } else {
+ ToastUtils.show("数据有误,请重新打开页面");
+ }
+ }
+
+
+ /**
+ * 上传文件
+ *
+ * @param paths
+ */
+ private int mUploadCount = 0;
+
+ private void doUploadFiles(ArrayList paths) {
+ LogUtils.e(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);
+ 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(@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.setFileType(1);
+ fileBean.setFileName(fileNames.get(mUploadCount - 1));
+ mFileBeans.add(0, fileBean);
+ }
+ mAddFileAdapter.notifyDataSetChanged();
+ if (mUploadCount == paths.size()) {
+ mUploadCount = 0;
+ 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) {
+ LogUtils.e(file.exists());
+ 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 RequestBody buildParams() {
+ SaveWorkReportBean bean = new SaveWorkReportBean();
+ String name = mEtName.getText().toString().trim();
+ bean.setReportTitle(name);
+ String out = mEtOut.getText().toString().trim();
+ if (!TextUtils.isEmpty(out)) {
+ bean.setReportEgress(out);
+ }
+ String content = mEtContent.getText().toString().trim();
+ bean.setReportContent(content);
+ bean.setReportType(mSelType.getDataId());
+ 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.setReportFiles(fileId.toString().trim());
+ }
+ return RequestBody.create(new Gson().toJson(bean), MediaType.parse("application/json; charset=utf-8"));
+ }
+
+ private boolean checkParams() {
+ String name = mEtName.getText().toString().trim();
+ if (TextUtils.isEmpty(name)) {
+ ToastUtils.show("请输入上报标题");
+ return false;
+ }
+ if (mSelType == null) {
+ ToastUtils.show("请选择上报类型");
+ return false;
+ }
+ String content = mEtContent.getText().toString().trim();
+ if (TextUtils.isEmpty(content)) {
+ ToastUtils.show("请输入工作内容");
+ return false;
+ }
+ return true;
+ }
+
+
+ private void doConfirm() {
+ if (checkParams()) {
+ ProgressDialog dialog = UIUtil.initDialog(mActivity, "保存中...");
+ dialog.show();
+ RequestBody body = buildParams();
+ RetrofitManager.getInstance()
+ .create(OAApi.class)
+ .doSaveWorkReport(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("保存成功");
+ BaseFragment preFragment = mMainActivity.getPreFragment();
+ if (preFragment != null) {
+ preFragment.mIsRefresh = true;
+ }
+ mMainActivity.backFragment(1, WorkReportAddFragment.this);
+ }
+
+ @Override
+ public void onError(@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/home/workreports/WorkReportDetailFragment.java b/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/home/workreports/WorkReportDetailFragment.java
new file mode 100644
index 0000000..f9e30f8
--- /dev/null
+++ b/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/home/workreports/WorkReportDetailFragment.java
@@ -0,0 +1,328 @@
+package com.tenlionsoft.oamodule.pad.fragments.home.workreports;
+
+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.Button;
+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.WorkReportDetailBean;
+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;
+
+import static com.tenlionsoft.baselib.core.widget.PhotoActivity.TAG_IMGURL;
+
+/**
+ * 作者: adam
+ * 日期: 2022/5/10 - 14:16
+ * 邮箱: itgaojian@163.com
+ * 描述:
+ */
+@Route(path = PathConfig.PATH_MODULE_PAD_OA_FRAGMENT_WORK_REPORT_DETAIL)
+public class WorkReportDetailFragment extends BaseFragment {
+ @BindView(R2.id.tv_name)
+ TextView mTvName;
+ @BindView(R2.id.tv_type)
+ TextView mTvType;
+ @BindView(R2.id.et_out)
+ TextView mEtOut;
+ @BindView(R2.id.tv_content)
+ TextView mTvContent;
+ @BindView(R2.id.rlv_files)
+ RecyclerView mRlvFiles;
+ @BindView(R2.id.tv_file_hint)
+ TextView mTvFileHint;
+ @BindView(R2.id.btn_del)
+ Button mBtnDel;
+ private PadMainActivity mMainActivity;
+ private String mId;
+
+ @Override
+ protected int getContentViewId() {
+ return R.layout.fragment_work_report_detail;
+ }
+
+ @Override
+ protected void setDataToView(View dataView) {
+ ButterKnife.bind(this, dataView);
+ setTitleView(true);
+ mTvFragmentTitle.setText("报告详情");
+ mTvFragmentOption.setText("编辑");
+ mIvFragmentBack.setOnClickListener(v -> mMainActivity.backFragment(1, this));
+ mTvFragmentOption.setOnClickListener(v -> {
+ BaseFragment fragment = FragmentUtils.getFragmentOne(PathConfig.PATH_MODULE_PAD_OA_FRAGMENT_WORK_REPORT_EDIT, "id", mId);
+ mMainActivity.addFragment(1, fragment);
+ });
+ Bundle bundle = getArguments();
+ if (bundle != null) {
+ mId = bundle.getString("id");
+ }
+ if (TextUtils.isEmpty(mId)) {
+ ToastUtils.show("数据有误");
+ mMainActivity.backFragment(1, this);
+ } else {
+ getDetailById();
+ }
+ mBtnDel.setOnClickListener(v -> showDelConfirm());
+ }
+
+
+ private void showDelConfirm() {
+ new AlertDialog.Builder(mActivity)
+ .setTitle("提示")
+ .setMessage("确定要删除该报告吗?")
+ .setPositiveButton("确定", (dialog, which) -> {
+ dialog.dismiss();
+ doDel();
+ })
+ .setNegativeButton("取消", (dialog, which) -> dialog.dismiss())
+ .create()
+ .show();
+ }
+
+ private void doDel() {
+ ProgressDialog dialog = UIUtil.initDialog(mActivity, "删除中...");
+ dialog.show();
+ RetrofitManager.getInstance()
+ .create(OAApi.class)
+ .doDelWorkReport(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(1, WorkReportDetailFragment.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)
+ .getWorkReportDetail(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 WorkReportDetailBean workReportDetailBean) {
+ setDataToView(workReportDetailBean);
+ }
+
+ @Override
+ public void onError(@io.reactivex.rxjava3.annotations.NonNull Throwable e) {
+ setStateView(STATE_ERROR);
+ ExceptionHandler.handleException(e);
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+ }
+
+ private void setDataToView(WorkReportDetailBean bean) {
+ setStateView(STATE_SUCCESS);
+ mSrlView.setEnableRefresh(false);
+ mSrlView.setEnableLoadMore(false);
+ mTvName.setText(bean.getReportTitle());
+ switch (bean.getReportType()) {
+ case "1":
+ mTvType.setText("工作日报");
+ break;
+ case "2":
+ mTvType.setText("工作周报");
+ break;
+ case "3":
+ mTvType.setText("工作月报");
+ break;
+ }
+ mEtOut.setText(Html.fromHtml(bean.getReportEgress()));
+ mTvContent.setText(Html.fromHtml(bean.getReportContent()));
+ //文件
+ if (!TextUtils.isEmpty(bean.getReportFiles())) {
+ mRlvFiles.setVisibility(View.VISIBLE);
+ mTvFileHint.setVisibility(View.GONE);
+ doGetFileInfo(bean.getReportFiles());
+ } else {
+ mRlvFiles.setVisibility(View.GONE);
+ mTvFileHint.setVisibility(View.VISIBLE);
+ }
+ }
+
+ /**
+ * 获取文件名称等信息
+ */
+ private void doGetFileInfo(String fileId) {
+ 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) {
+ List mFiles = new ArrayList<>();
+ for (int i = 0; i < fileInfoBeans.size(); i++) {
+ FileInfoBean infoBean = fileInfoBeans.get(i);
+ AddFileBean bean = new AddFileBean();
+ bean.setId(infoBean.getFileId());
+ bean.setPath(BaseUrlApi.BASE_IMG_URL + infoBean.getFileId());
+ bean.setFileType(FileUtils.getFileType(infoBean.getFileName()));
+ bean.setFileName(infoBean.getFileName());
+ mFiles.add(bean);
+ }
+ AddFileAdapter adapter = new AddFileAdapter(mActivity, mFiles);
+ mRlvFiles.setLayoutManager(new LinearLayoutManager(mActivity));
+ mRlvFiles.setAdapter(adapter);
+ adapter.addOnItemClickListener(addFileBean -> previewFile(addFileBean, mFiles));
+ } 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 previewFile(AddFileBean addFileBean, List mFiles) {
+ 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 < mFiles.size(); i++) {
+ if (mFiles.get(i).getFileType() == 2) {
+ AddFileBean fileBean = mFiles.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 视频或音频预览
+ }
+ }
+
+
+ @Override
+ public void onHiddenChanged(boolean hidden) {
+ super.onHiddenChanged(hidden);
+ if (!hidden) {
+ if (mIsRefresh) {
+ mIsRefresh = false;
+ setStateView(STATE_LOAD);
+ getDetailById();
+ }
+ }
+ }
+
+ @Override
+ public void onAttach(@NonNull @NotNull Context context) {
+ super.onAttach(context);
+ mMainActivity = (PadMainActivity) getActivity();
+ }
+
+ @Override
+ protected void refreshView() {
+ setStateView(STATE_LOAD);
+ getDetailById();
+ }
+
+ @Override
+ protected void loadMoreData() {
+
+ }
+}
diff --git a/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/home/workreports/WorkReportEditFragment.java b/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/home/workreports/WorkReportEditFragment.java
new file mode 100644
index 0000000..4c5f5a2
--- /dev/null
+++ b/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/home/workreports/WorkReportEditFragment.java
@@ -0,0 +1,503 @@
+package com.tenlionsoft.oamodule.pad.fragments.home.workreports;
+
+import android.app.ProgressDialog;
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.Color;
+import android.os.Bundle;
+import android.text.Html;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.TextView;
+
+import com.alibaba.android.arouter.facade.annotation.Route;
+import com.bigkoo.pickerview.builder.OptionsPickerBuilder;
+import com.bigkoo.pickerview.view.OptionsPickerView;
+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.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.utils.ExceptionHandler;
+import com.tenlionsoft.baselib.utils.FileUtils;
+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.beans.SaveWorkReportBean;
+import com.tenlionsoft.oamodule.beans.WorkReportDetailBean;
+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.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/10 - 14:16
+ * 邮箱: itgaojian@163.com
+ * 描述:
+ */
+@Route(path = PathConfig.PATH_MODULE_PAD_OA_FRAGMENT_WORK_REPORT_EDIT)
+public class WorkReportEditFragment extends BaseFragment {
+
+ @BindView(R2.id.et_name)
+ EditText mEtName;
+ @BindView(R2.id.tv_type)
+ TextView mTvType;
+ @BindView(R2.id.et_out)
+ EditText mEtOut;
+ @BindView(R2.id.et_content)
+ EditText mEtContent;
+ @BindView(R2.id.rlv_files)
+ RecyclerView mRlvFiles;
+ @BindView(R2.id.btn_confirm)
+ Button mBtnConfirm;
+ private PadMainActivity mMainActivity;
+ private List mFileBeans = new ArrayList<>();
+ private AddFileAdapter mAddFileAdapter;
+ private String[] fileFilter = new String[]{".doc", ".docx", ".xls", ".xlsx", ".pptx", ".ppt", ".txt", ".pdf"};
+ private int mFileMax = 9;
+
+
+ private OptionsPickerView mTypePicker;
+ private List mTyps;
+ private DicBean mSelType;
+ private String mId;
+ private ActivityResultLauncher mFileLauncher;
+
+ @Override
+ protected int getContentViewId() {
+ return R.layout.fragment_work_report_edit;
+ }
+
+ @Override
+ protected void setDataToView(View dataView) {
+ ButterKnife.bind(this, dataView);
+ setTitleView(true);
+ mTvFragmentTitle.setText("报告编辑");
+ mIvFragmentBack.setOnClickListener(v -> mMainActivity.backFragment(1, this));
+ initViews();
+ Bundle arguments = getArguments();
+ if (arguments != null) {
+ mId = arguments.getString("id");
+ }
+ if (TextUtils.isEmpty(mId)) {
+ ToastUtils.show("数据有误");
+ mMainActivity.backFragment(1, 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("路径有误,请稍后重试");
+ }
+ });
+ }
+
+ private void getDetailById() {
+ RetrofitManager.getInstance()
+ .create(OAApi.class)
+ .getWorkReportDetail(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 WorkReportDetailBean workReportDetailBean) {
+ setDataToView(workReportDetailBean);
+ }
+
+ @Override
+ public void onError(@io.reactivex.rxjava3.annotations.NonNull Throwable e) {
+ setStateView(STATE_ERROR);
+ ExceptionHandler.handleException(e);
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+ }
+
+ private void setDataToView(WorkReportDetailBean bean) {
+ setStateView(STATE_SUCCESS);
+ mSrlView.setEnableLoadMore(false);
+ mSrlView.setEnableRefresh(false);
+ mEtName.setText(bean.getReportTitle());
+ for (DicBean typ : mTyps) {
+ if (typ.getDataId().equals(bean.getReportType())) {
+ mSelType = typ;
+ break;
+ }
+ }
+ mTvType.setText(mSelType.getDataName());
+ mEtOut.setText(Html.fromHtml(bean.getReportEgress()));
+ mEtContent.setText(Html.fromHtml(bean.getReportContent()));
+ if (!TextUtils.isEmpty(bean.getReportFiles())) {
+ mFileBeans.clear();
+ doGetFileInfo(bean.getReportFiles());
+
+ }
+ }
+
+ /**
+ * 获取文件名称等信息
+ */
+ private void doGetFileInfo(String fileId) {
+ 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.setPath(BaseUrlApi.BASE_IMG_URL + infoBean.getFileId());
+ bean.setFileType(FileUtils.getFileType(infoBean.getFileName()));
+ bean.setFileName(infoBean.getFileName());
+ mFileBeans.add(0, bean);
+ --mFileMax;
+ }
+ 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 void initViews() {
+ mTyps = new ArrayList<>();
+ DicBean type1 = new DicBean();
+ type1.setDataId("1");
+ type1.setDataName("工作日报");
+
+ DicBean type2 = new DicBean();
+ type2.setDataId("2");
+ type2.setDataName("工作月报");
+
+ DicBean type3 = new DicBean();
+ type3.setDataId("3");
+ type3.setDataName("工作年报");
+
+ mTyps.add(type1);
+ mTyps.add(type2);
+ mTyps.add(type3);
+
+ mTvType.setOnClickListener(v -> onShowType());
+ mFileBeans.add(new AddFileBean());
+ mAddFileAdapter = new AddFileAdapter(mActivity, mFileBeans);
+ mAddFileAdapter.addOnItemClickListener(addFileBean -> {
+ LogUtils.e("添加文件");
+ if (TextUtils.isEmpty(addFileBean.getId())) {
+ checkManagePermission();
+ } else {
+ //TODO 预览
+ }
+ });
+ //删除上传的文件
+ mAddFileAdapter.addOnDeleteListener((bean, i) -> {
+ //删除list中的某个数据
+ mFileBeans.remove(i);
+ mAddFileAdapter.notifyDataSetChanged();
+ ++mFileMax;
+ });
+ mRlvFiles.setLayoutManager(new LinearLayoutManager(mActivity));
+ mRlvFiles.setAdapter(mAddFileAdapter);
+ mBtnConfirm.setOnClickListener(v -> doConfirm());
+ }
+
+ @Override
+ protected void hasManageFileManage() {
+ if (mFileMax == 0) {
+ ToastUtils.show("超过最大上传数量限制");
+ } else {
+ new LFilePicker()
+ .withFragment(this)
+ .withFragmentLauncher(mFileLauncher)
+ .withRequestCode(LionActions.REQUEST_CODE_AC)
+ .withTitle("文件选择")
+ .withMaxNum(mFileMax)
+ .withFileFilter(fileFilter)
+ .start();
+ }
+ }
+
+ /**
+ * 显示类型
+ */
+ private void onShowType() {
+ mActivity.hideSoftKeyboard();
+ if (mTyps != null && mTyps.size() > 0) {
+ if (mTypePicker == null) {
+ mTypePicker = new OptionsPickerBuilder(mActivity, (o1, o2, o3, v) -> {
+ mSelType = mTyps.get(o1);
+ mTvType.setText(mSelType.getDataName());
+ })
+ .setTitleText("请选择")
+ .setCancelColor(Color.parseColor("#1189FF"))
+ .setSubmitColor(Color.parseColor("#1189FF"))
+ .setTitleColor(Color.parseColor("#1189FF"))
+ .build();
+ mTypePicker.setPicker(mTyps);
+ }
+ mTypePicker.show();
+ } else {
+ ToastUtils.show("数据有误,请重新打开页面");
+ }
+ }
+
+
+ /**
+ * 上传文件
+ *
+ * @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 = 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());
+ fileBean.setFileType(1);
+ fileBean.setFileName(fileNames.get(mUploadCount - 1));
+ mFileBeans.add(0, fileBean);
+ }
+ mAddFileAdapter.notifyDataSetChanged();
+ if (mUploadCount == paths.size()) {
+ mUploadCount = 0;
+ 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) {
+ LogUtils.e(file.exists());
+ 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 RequestBody buildParams() {
+ SaveWorkReportBean bean = new SaveWorkReportBean();
+ String name = mEtName.getText().toString().trim();
+ bean.setReportTitle(name);
+ String out = mEtOut.getText().toString().trim();
+ bean.setReportEgress(out);
+ String content = mEtContent.getText().toString().trim();
+ bean.setReportContent(content);
+ bean.setReportType(mSelType.getDataId());
+ 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.setReportFiles(fileId.toString().trim());
+ } else {
+ bean.setReportFiles("");
+ }
+ return RequestBody.create(new Gson().toJson(bean), MediaType.parse("application/json; charset=utf-8"));
+ }
+
+ private boolean checkParams() {
+ String name = mEtName.getText().toString().trim();
+ if (TextUtils.isEmpty(name)) {
+ ToastUtils.show("请输入上报标题");
+ return false;
+ }
+ if (mSelType == null) {
+ ToastUtils.show("请选择上报类型");
+ return false;
+ }
+ String content = mEtContent.getText().toString().trim();
+ if (TextUtils.isEmpty(content)) {
+ ToastUtils.show("请输入工作内容");
+ return false;
+ }
+ return true;
+ }
+
+
+ private void doConfirm() {
+ if (checkParams()) {
+ ProgressDialog dialog = UIUtil.initDialog(mActivity, "保存中...");
+ dialog.show();
+ RequestBody body = buildParams();
+ RetrofitManager.getInstance()
+ .create(OAApi.class)
+ .doEditWorkReport(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(1, WorkReportEditFragment.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() {
+ setStateView(STATE_LOAD);
+ getDetailById();
+ }
+
+ @Override
+ protected void loadMoreData() {
+ mSrlView.finishRefresh();
+ mSrlView.setNoMoreData(false);
+ }
+}
diff --git a/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/home/workreports/WorkReportFragment.java b/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/home/workreports/WorkReportFragment.java
new file mode 100644
index 0000000..f8fbb50
--- /dev/null
+++ b/oamodule/src/main/java/com/tenlionsoft/oamodule/pad/fragments/home/workreports/WorkReportFragment.java
@@ -0,0 +1,220 @@
+package com.tenlionsoft.oamodule.pad.fragments.home.workreports;
+
+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.WorkReportAdapter;
+import com.tenlionsoft.oamodule.beans.WorkReportDetailBean;
+import com.tenlionsoft.oamodule.beans.WorkReportListBean;
+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/10 - 14:15
+ * 邮箱: itgaojian@163.com
+ * 描述: 工作报告
+ */
+@Route(path = PathConfig.PATH_MODULE_PAD_OA_FRAGMENT_WORK_REPORT)
+public class WorkReportFragment 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 List mDatas;
+ private WorkReportAdapter mAdapter;
+ private int mCurrentPage = 1;
+ private String mKeywords = "";
+ private PadMainActivity mMainActivity;
+
+ @Override
+ protected int getContentViewId() {
+ return R.layout.fragment_work_report;
+ }
+
+ @Override
+ protected void setDataToView(View dataView) {
+ ButterKnife.bind(this, dataView);
+ setStateView(STATE_SUCCESS);
+ mSrlView.setEnableRefresh(false);
+ mSrlView.setEnableLoadMore(false);
+ setTitleView(true);
+ mTvFragmentTitle.setText("我的报告");
+ mTvFragmentOption.setText("新增报告");
+ mIvFragmentBack.setOnClickListener(v->mMainActivity.backFragment(1,this));
+ mTvFragmentOption.setOnClickListener(v -> {
+ BaseFragment fragment = FragmentUtils.getFragment(PathConfig.PATH_MODULE_PAD_OA_FRAGMENT_WORK_REPORT_ADD);
+ mMainActivity.addFragment(1, fragment);
+ });
+ mSrlContent.setOnRefreshListener(v -> doRefresh());
+ mSrlContent.setOnLoadMoreListener(v -> doLoadMore());
+ mDatas = new ArrayList<>();
+ mAdapter = new WorkReportAdapter(mActivity, mDatas);
+ mRlvContent.setLayoutManager(new LinearLayoutManager(mActivity));
+ mRlvContent.setAdapter(mAdapter);
+ mAdapter.addOnItemClickListener(workReportDetailBean -> {
+ BaseFragment id = FragmentUtils.getFragmentOne(PathConfig.PATH_MODULE_PAD_OA_FRAGMENT_WORK_REPORT_DETAIL, "id", workReportDetailBean.getWorkReportId());
+ mMainActivity.addFragment(1, id);
+ });
+ 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();
+ }
+
+ private void doLoadMore() {
+ getWorkReportList(mCurrentPage);
+ }
+
+ private void doRefresh() {
+ mDatas.clear();
+ mAdapter.setData(mDatas);
+ getWorkReportList(1);
+ }
+
+
+ @Override
+ public void onHiddenChanged(boolean hidden) {
+ super.onHiddenChanged(hidden);
+ if (!hidden) {
+ if (mIsRefresh) {
+ mIsRefresh = false;
+ doRefresh();
+ }
+ }
+ }
+
+ private void getWorkReportList(int currentPage) {
+ mCurrentPage = currentPage;
+ RetrofitManager.getInstance()
+ .create(OAApi.class)
+ .getWorkReportList(mKeywords, mCurrentPage + "")
+ .compose(RxTransformer.getTransformer())
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(@NonNull WorkReportListBean 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/res/layout/fragment_work_report.xml b/oamodule/src/main/res/layout/fragment_work_report.xml
new file mode 100644
index 0000000..1752756
--- /dev/null
+++ b/oamodule/src/main/res/layout/fragment_work_report.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/oamodule/src/main/res/layout/fragment_work_report_add.xml b/oamodule/src/main/res/layout/fragment_work_report_add.xml
new file mode 100644
index 0000000..b89ef0d
--- /dev/null
+++ b/oamodule/src/main/res/layout/fragment_work_report_add.xml
@@ -0,0 +1,213 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/oamodule/src/main/res/layout/fragment_work_report_detail.xml b/oamodule/src/main/res/layout/fragment_work_report_detail.xml
new file mode 100644
index 0000000..fc3612a
--- /dev/null
+++ b/oamodule/src/main/res/layout/fragment_work_report_detail.xml
@@ -0,0 +1,226 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/oamodule/src/main/res/layout/fragment_work_report_edit.xml b/oamodule/src/main/res/layout/fragment_work_report_edit.xml
new file mode 100644
index 0000000..b89ef0d
--- /dev/null
+++ b/oamodule/src/main/res/layout/fragment_work_report_edit.xml
@@ -0,0 +1,213 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/oamodule/src/main/res/layout/item_schedule_pad_time_line.xml b/oamodule/src/main/res/layout/item_schedule_pad_time_line.xml
index e451b9d..1a600fe 100644
--- a/oamodule/src/main/res/layout/item_schedule_pad_time_line.xml
+++ b/oamodule/src/main/res/layout/item_schedule_pad_time_line.xml
@@ -8,7 +8,7 @@