From 104acb663693cd5e12753e9c83e910cf6b6dfe0d Mon Sep 17 00:00:00 2001 From: itgaojian Date: Fri, 31 Mar 2023 15:44:00 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=87=E6=A1=A3=E4=B8=AD=E5=BF=83UI=E8=B0=83?= =?UTF-8?q?=E6=95=B4,=E6=B7=BB=E5=8A=A0=E7=9B=AE=E5=BD=95=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../baselib/constant/PathConfig.java | 1 + oamodule/src/main/AndroidManifest.xml | 7 + .../document/DocumentCategoryActivity.java | 486 ++++++++++++++++++ .../oamodule/adapter/DocumentAdapter.java | 12 +- .../DocumentCategoryManageAdapter.java | 91 ++++ .../oamodule/adapter/DocumentGridAdapter.java | 61 +++ .../oamodule/fragments/DocFragment.java | 63 ++- .../holder/DocumentCategoryManageHolder.java | 37 ++ .../oamodule/holder/FileGridHolder.java | 33 ++ .../res/layout/activity_document_category.xml | 81 +++ .../main/res/layout/fragment_oa_document.xml | 9 +- .../main/res/layout/item_category_manage.xml | 72 +++ .../main/res/layout/item_dept_sel_layout.xml | 1 - .../main/res/layout/item_document_grid.xml | 47 ++ 14 files changed, 980 insertions(+), 21 deletions(-) create mode 100644 oamodule/src/main/java/com/tenlionsoft/oamodule/activity/document/DocumentCategoryActivity.java create mode 100644 oamodule/src/main/java/com/tenlionsoft/oamodule/adapter/DocumentCategoryManageAdapter.java create mode 100644 oamodule/src/main/java/com/tenlionsoft/oamodule/adapter/DocumentGridAdapter.java create mode 100644 oamodule/src/main/java/com/tenlionsoft/oamodule/holder/DocumentCategoryManageHolder.java create mode 100644 oamodule/src/main/java/com/tenlionsoft/oamodule/holder/FileGridHolder.java create mode 100644 oamodule/src/main/res/layout/activity_document_category.xml create mode 100644 oamodule/src/main/res/layout/item_category_manage.xml create mode 100644 oamodule/src/main/res/layout/item_document_grid.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 a2bce85..c5905e6 100755 --- a/baselib/src/main/java/com/tenlionsoft/baselib/constant/PathConfig.java +++ b/baselib/src/main/java/com/tenlionsoft/baselib/constant/PathConfig.java @@ -148,6 +148,7 @@ public class PathConfig { public static final String PATH_MODULE_OA_ACTIVITY_DOCUMENT_ADD = "/oamodule/activity/documentAdd";//文档上传 public static final String PATH_MODULE_OA_ACTIVITY_DOCUMENT_EDIT = "/oamodule/activity/documentEdit";//文档编辑 public static final String PATH_MODULE_OA_ACTIVITY_DOCUMENT_DETAIL = "/oamodule/activity/documentDetail";//文档上传 + public static final String PATH_MODULE_OA_ACTIVITY_DOCUMENT_CATEGORY_MANAGE = "/oamodule/activity/documentCategoryManage";//文档类型管理 public static final String PATH_MODULE_OA_ACTIVITY_DOCUMENT_TYPE_LIST = "/oamodule/activity/documentTypeList";//文档类型 列表 public static final String PATH_MODULE_OA_ACTIVITY_DOCUMENT_TYPE_ADD = "/oamodule/activity/documentTypeAdd";//文档类型 添加 diff --git a/oamodule/src/main/AndroidManifest.xml b/oamodule/src/main/AndroidManifest.xml index 27ac7b7..1e9b232 100644 --- a/oamodule/src/main/AndroidManifest.xml +++ b/oamodule/src/main/AndroidManifest.xml @@ -3,6 +3,13 @@ package="com.tenlionsoft.oamodule"> + + mSelCatalog = new ArrayList<>(); + private SelDocTypeAdapter mTypeAdapter; + private List mDatas = new ArrayList<>(); + private DocumentCategoryManageAdapter mAdapter; + private List mSelectedCatalog = new ArrayList<>(); + private SelectedDocTypeAdapter mSelectedDocTypeAdapter; + + private String mSelCatalogId; + private boolean mIsSingle; + + @Override + protected int setLayoutId() { + return R.layout.activity_document_category; + } + + @Override + public void initData() { + ButterKnife.bind(this); + mTvBaseTitle.setText("目录管理"); + mIsSingle = getIntent().getBooleanExtra("isSingle", false); + initView(); + } + + /** + * 初始化视图 + */ + private void initView() { + refreshView(STATE_LOAD_SUCCESS); + DocumentTypeList rootBean = new DocumentTypeList(); + rootBean.setName("根目录"); + rootBean.setFileCatalogueId("0"); + mSelCatalog.add(rootBean); + mSelCatalogId = "0"; + LinearLayoutManager manager = new LinearLayoutManager(mActivity); + manager.setOrientation(LinearLayoutManager.HORIZONTAL); + mRlvSel.setLayoutManager(manager); + mTypeAdapter = new SelDocTypeAdapter(mActivity, mSelCatalog); + mRlvSel.setAdapter(mTypeAdapter); + mAdapter = new DocumentCategoryManageAdapter(mActivity, mDatas, 1); + mRlvContent.setLayoutManager(new LinearLayoutManager(mActivity)); + mRlvContent.addItemDecoration(new ItemSplitDivider(mActivity, LinearLayoutManager.VERTICAL, 1, Color.parseColor("#F4F4F4"))); + mRlvContent.setAdapter(mAdapter); + mCsvState.setState(CustomStateView.STATE_LOAD); + mTvPublish.setVisibility(View.GONE); + + getCataLogList(); + mAdapter.addOnItemCheckChange(new DocumentCategoryManageAdapter.OnItemCheckChange() { + @Override + public void onItemCheckChange(DocumentTypeList bean, boolean isCheck, int pos) { + if (mIsSingle) { + mSelectedCatalog.clear(); + } + for (int i = 0; i < mDatas.size(); i++) { + if (bean.getFileCatalogueId().equals(mDatas.get(i).getFileCatalogueId())) { + mDatas.get(i).setChecked(isCheck); + } else { + if (mIsSingle) { + mDatas.get(i).setChecked(false); + } + } + } + mAdapter.notifyDataSetChanged(); + if (isCheck) { + mSelectedCatalog.add(bean); + } else { + Iterator iterator = mSelectedCatalog.iterator(); + while (iterator.hasNext()) { + DocumentTypeList next = iterator.next(); + if (next.getFileCatalogueId().equals(bean.getFileCatalogueId())) { + iterator.remove(); + } + } + } + mSelectedDocTypeAdapter.setData(mSelectedCatalog); + } + + @Override + public void onLowerDept(DocumentTypeList bean, int pos) { + //添加到当前选中的集合中 + mSelCatalog.add(bean); + mTypeAdapter.setData(mSelCatalog); + mSelCatalogId = bean.getFileCatalogueId(); + mCsvState.setState(CustomStateView.STATE_LOAD); + getCataLogList(); + //获取当前选中的下一级 + mRlvSel.scrollToPosition(mSelCatalog.size() - 1); + } + }); + mTypeAdapter.setOnItemChoose((bean, pos) -> { + List departmentListBeans = mSelCatalog.subList(0, pos + 1); + mSelCatalog = departmentListBeans; + mTypeAdapter.setData(mSelCatalog); + mRlvSel.scrollToPosition(mSelCatalog.size() - 1); + if (bean instanceof DocumentTypeList) { + DocumentTypeList b = (DocumentTypeList) bean; + mSelCatalogId = b.getFileCatalogueId(); + mCsvState.setState(CustomStateView.STATE_LOAD); + getCataLogList(); + } + }); + //当前选中的 + mSelectedDocTypeAdapter = new SelectedDocTypeAdapter(mActivity, mSelectedCatalog); + FlexboxLayoutManager manage = new FlexboxLayoutManager(mActivity, FlexDirection.ROW, FlexWrap.WRAP) { + @Override + public boolean canScrollHorizontally() { + return false; + } + }; + mRlvSelected.setLayoutManager(manage); + mRlvSelected.setAdapter(mSelectedDocTypeAdapter); + mSelectedDocTypeAdapter.addOnDelListener((bean1, pos) -> { + mSelectedCatalog.remove(pos); + mSelectedDocTypeAdapter.setData(mSelectedCatalog); + for (int i = 0; i < mDatas.size(); i++) { + DocumentTypeList typeList = mDatas.get(i); + if (typeList.getFileCatalogueId().equals(bean1.getFileCatalogueId())) { + typeList.setChecked(false); + } + } + mAdapter.setData(mDatas); + }); + + mBtnAddType.setOnClickListener(v -> { + showAddTypeDialog(); + }); + + mBtnEditType.setOnClickListener(v -> { + int type = mAdapter.getType(); + if (type == 1) { + mAdapter.setType(2); + mBtnEditType.setText("取消"); + mBtnEditType.setBackground(getResources().getDrawable(R.drawable.shape_btn_nomal_gray_no_size)); + } else { + mAdapter.setType(1); + mBtnEditType.setText("编辑"); + mBtnEditType.setBackground(getResources().getDrawable(R.drawable.sel_btn_activity_sign_up)); + } + }); + //编辑或删除 + mAdapter.addOnControlListener(new DocumentCategoryManageAdapter.OnControlListener() { + @Override + public void doEdit(DocumentTypeList bean, int pos) { + showEditDialog(bean); + } + + @Override + public void doDel(DocumentTypeList bean, int pos) { + new AlertDialog.Builder(mActivity) + .setTitle("提示") + .setMessage("删除后该目录下所有文件将被删除,确定要删除该目录吗?") + .setPositiveButton("删除", (dialog, which) -> { + dialog.dismiss(); + doDelType(bean); + }) + .setNegativeButton("取消", (dialog, which) -> dialog.dismiss()) + .create() + .show(); + } + }); + } + + private void showEditDialog(DocumentTypeList bean) { + CenterDocTypeView typeDialog = new CenterDocTypeView.DialogBuilder(mActivity) + .setBean(bean) + .build(); + typeDialog.addOnChoseListener((name, order, remark) -> { + //当前选中的目录 + typeDialog.dismiss(); + typeDialog.hideSoftKeyBoardDialog(mActivity); + doEditType(name, order, remark, bean); + }); + typeDialog.show(); + } + + /** + * 编辑 + */ + private void doEditType(String name, String order, String remark, DocumentTypeList bean) { + ProgressDialog dialog = UIUtil.initDialog(mActivity, "保存中..."); + dialog.show(); + RequestBody body = buildTypeEditParams(name, order, remark, bean); + RetrofitManager.getInstance() + .create(OAApi.class) + .doEditDocumentType(bean.getFileCatalogueId(), body) + .compose(RxTransformer.getTransformer()) + .subscribe(new Observer() { + @Override + public void onSubscribe(@NonNull Disposable d) { + + } + + @Override + public void onNext(@NonNull BaseSuccessBean baseSuccessBean) { + dialog.dismiss(); + ToastUtils.show("修改成功"); + getCataLogList(); + } + + @Override + public void onError(@NonNull Throwable e) { + dialog.dismiss(); + ExceptionHandler.handleException(e); + } + + @Override + public void onComplete() { + + } + }); + } + + /** + * 删除 + * + * @param bean + */ + private void doDelType(DocumentTypeList bean) { + ProgressDialog dialog = UIUtil.initDialog(mActivity, "删除中..."); + dialog.show(); + RetrofitManager.getInstance() + .create(OAApi.class) + .doDelDocumentType(bean.getFileCatalogueId()) + .compose(RxTransformer.getTransformer()) + .subscribe(new Observer() { + @Override + public void onSubscribe(@NonNull Disposable d) { + + } + + @Override + public void onNext(@NonNull BaseSuccessBean baseSuccessBean) { + dialog.dismiss(); + ToastUtils.show("删除成功"); + getCataLogList(); + } + + @Override + public void onError(@NonNull Throwable e) { + dialog.dismiss(); + ExceptionHandler.handleException(e); + } + + @Override + public void onComplete() { + + } + }); + } + + /** + * 显示目录添加 + */ + private void showAddTypeDialog() { + CenterDocTypeView typeDialog = new CenterDocTypeView.DialogBuilder(mActivity) + .build(); + typeDialog.addOnChoseListener((name, order, remark) -> { + //当前选中的目录 + typeDialog.dismiss(); + typeDialog.hideSoftKeyBoardDialog(mActivity); + doSaveType(name, order, remark); + }); + typeDialog.show(); + } + + /** + * 保存目录 + */ + private void doSaveType(String name, String order, String remark) { + ProgressDialog dialog = UIUtil.initDialog(mActivity, "保存中..."); + dialog.show(); + RequestBody body = buildTypeParams(name, order, remark); + RetrofitManager.getInstance() + .create(OAApi.class) + .doSaveDocumentType(body) + .compose(RxTransformer.getTransformer()) + .subscribe(new Observer() { + @Override + public void onSubscribe(@NonNull Disposable d) { + + } + + @Override + public void onNext(@NonNull BaseSuccessBean baseSuccessBean) { + dialog.dismiss(); + ToastUtils.show("保存成功"); + //刷新 + getCataLogList(); + } + + @Override + public void onError(@NonNull Throwable e) { + dialog.dismiss(); + ExceptionHandler.handleException(e); + } + + @Override + public void onComplete() { + + } + }); + } + + private RequestBody buildTypeParams(String name, String order, String remark) { + SaveDocumentTypeBean bean = new SaveDocumentTypeBean(); + bean.setName(name); + bean.setSortNum(Integer.parseInt(order)); + bean.setRemake(remark); + bean.setType("0"); + bean.setViewRange("0"); + Object o = mSelCatalog.get(mSelCatalog.size() - 1); + DocumentTypeList b = (DocumentTypeList) o; + bean.setParentId(b.getFileCatalogueId()); + return RequestBody.create(new Gson().toJson(bean), MediaType.parse("application/json; charset=utf-8")); + } + + private RequestBody buildTypeEditParams(String name, String order, String remark, DocumentTypeList b) { + SaveDocumentTypeBean bean = new SaveDocumentTypeBean(); + bean.setName(name); + bean.setSortNum(Integer.parseInt(order)); + bean.setRemake(remark); + bean.setType("0"); + bean.setViewRange("0"); + bean.setParentId(b.getParentId()); + return RequestBody.create(new Gson().toJson(bean), MediaType.parse("application/json; charset=utf-8")); + } + + /** + * 确认选择 + */ + private void doConfirm() { + if (mSelectedCatalog != null && mSelectedCatalog.size() > 0) { + if (mIsSingle) { + DocumentTypeList bean = mSelectedCatalog.get(0); + Intent intent = new Intent(); + intent.putExtra("bean", bean); + setResult(RESULT_OK, intent); + finish(); + } else { + String ids = ""; + String names = ""; + for (int i = 0; i < mSelectedCatalog.size(); i++) { + DocumentTypeList bean = mSelectedCatalog.get(i); + ids += bean.getFileCatalogueId() + ","; + names += bean.getName() + ","; + } + ids = ids.substring(0, ids.length() - 1); + names = names.substring(0, names.length() - 1); + Intent intent = new Intent(); + intent.putExtra("name", names); + intent.putExtra("id", ids); + setResult(RESULT_OK, intent); + finish(); + } + } else { + ToastUtils.show("请选择目录"); + } + } + + /** + * 获取目录列表 + */ + private void getCataLogList() { + mCsvState.setState(CustomStateView.STATE_LOAD); + mDatas.clear(); + mAdapter.setData(mDatas); + RetrofitManager.getInstance() + .create(OAApi.class) + .getDocumentTypeListByPid(mSelCatalogId, "0") + .compose(RxTransformer.getTransformer()) + .subscribe(new Observer>() { + @Override + public void onSubscribe(@NonNull Disposable d) { + + } + + @Override + public void onNext(@NonNull List documentTypeLists) { + if (documentTypeLists.size() > 0) { + mCsvState.setState(CustomStateView.STATE_SUCCESS); + mDatas.addAll(documentTypeLists); + for (int i = 0; i < mSelectedCatalog.size(); i++) { + DocumentTypeList selBean = mSelectedCatalog.get(i); + for (int j = 0; j < mDatas.size(); j++) { + DocumentTypeList bean = mDatas.get(j); + if (selBean.getFileCatalogueId().equals(bean.getFileCatalogueId())) { + bean.setChecked(true); + } + } + } + } else { + mCsvState.setState(CustomStateView.STATE_EMPTY); + } + mAdapter.setData(mDatas); + } + + @Override + public void onError(@NonNull Throwable e) { + ExceptionHandler.handleException(e); + mAdapter.setData(mDatas); + mCsvState.setState(CustomStateView.STATE_ERROR); + } + + @Override + public void onComplete() { + + } + }); + } + + @Override + protected void doSearchByTitle() { + + } + + @Override + protected void clearSearch() { + + } +} \ No newline at end of file diff --git a/oamodule/src/main/java/com/tenlionsoft/oamodule/adapter/DocumentAdapter.java b/oamodule/src/main/java/com/tenlionsoft/oamodule/adapter/DocumentAdapter.java index 174cce2..2f4d455 100644 --- a/oamodule/src/main/java/com/tenlionsoft/oamodule/adapter/DocumentAdapter.java +++ b/oamodule/src/main/java/com/tenlionsoft/oamodule/adapter/DocumentAdapter.java @@ -38,22 +38,22 @@ public class DocumentAdapter extends BaseRecyclerAdapter { if (o instanceof DocumentListBean.RowsBean) { DocumentListBean.RowsBean b = (DocumentListBean.RowsBean) o; Glide.with(mContext) - .load(R.drawable.ic_file_word_new) - .into(h.mIvIcon); + .load(R.drawable.ic_file_word_new) + .into(h.mIvIcon); h.mTvName.setText(b.getContent()); h.mTvFileType.setText(b.getFileType()); } else if (o instanceof DocumentTypeList) { DocumentTypeList b = (DocumentTypeList) o; Glide.with(mContext) - .load(R.drawable.ic_folder_icon) - .into(h.mIvIcon); + .load(R.drawable.ic_folder_icon) + .into(h.mIvIcon); h.mTvName.setText(b.getName()); h.mTvFileType.setText(b.getRemake()); } else if (o instanceof DocTypeTreeListBean) { DocTypeTreeListBean b = (DocTypeTreeListBean) o; Glide.with(mContext) - .load(R.drawable.ic_folder_icon) - .into(h.mIvIcon); + .load(R.drawable.ic_folder_icon) + .into(h.mIvIcon); h.mTvName.setText(b.getName()); h.mTvFileType.setText(""); } diff --git a/oamodule/src/main/java/com/tenlionsoft/oamodule/adapter/DocumentCategoryManageAdapter.java b/oamodule/src/main/java/com/tenlionsoft/oamodule/adapter/DocumentCategoryManageAdapter.java new file mode 100644 index 0000000..8d66ebd --- /dev/null +++ b/oamodule/src/main/java/com/tenlionsoft/oamodule/adapter/DocumentCategoryManageAdapter.java @@ -0,0 +1,91 @@ +package com.tenlionsoft.oamodule.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.tenlionsoft.baselib.core.widget.base.BaseRecyclerAdapter; +import com.tenlionsoft.oamodule.R; +import com.tenlionsoft.oamodule.beans.DeptBean; +import com.tenlionsoft.oamodule.beans.DocumentTypeList; +import com.tenlionsoft.oamodule.holder.DocumentCategoryManageHolder; + +import java.util.ArrayList; +import java.util.List; + +/** + * 作者: adam + * 日期: 2020/11/24 - 9:16 AM + * 邮箱: itgaojian@163.com + * 描述: 文档目录管理 + */ +public class DocumentCategoryManageAdapter extends BaseRecyclerAdapter { + public List mSelBeans = new ArrayList<>(); + public int mType = 1; + + public DocumentCategoryManageAdapter(Context ctx, List list, int type) { + super(ctx, list); + this.mType = type; + } + + @Override + public DocumentCategoryManageHolder createHolder(ViewGroup parent, int viewType) { + View itemView = LayoutInflater.from(mContext).inflate(R.layout.item_category_manage, parent, false); + return new DocumentCategoryManageHolder(itemView); + } + + public void setType(int type) { + this.mType = type; + notifyDataSetChanged(); + } + + public int getType() { + return mType; + } + + @Override + public void bindHolder(DocumentCategoryManageHolder holder, int i) { + DocumentTypeList bean = mData.get(i); + holder.mTvName.setText(bean.getName()); + holder.mTvName.setOnClickListener(v -> mLis.onLowerDept(bean, i)); + if (mType == 1) { + //默认选择 + holder.mLlBtns.setVisibility(View.GONE); + holder.mIvArrow.setVisibility(View.VISIBLE); + } else { + //编辑 + holder.mLlBtns.setVisibility(View.VISIBLE); + holder.mIvArrow.setVisibility(View.GONE); + } + if (mControlListener != null) { + holder.mBtnDel.setOnClickListener(v -> mControlListener.doDel(bean, i)); + holder.mBtnEdit.setOnClickListener(v -> mControlListener.doEdit(bean, i)); + } + } + + private OnItemCheckChange mLis; + + public void addOnItemCheckChange(OnItemCheckChange lis) { + this.mLis = lis; + } + + public interface OnItemCheckChange { + void onItemCheckChange(DocumentTypeList bean, boolean isCheck, int pos); + + void onLowerDept(DocumentTypeList bean, int pos); + } + + private OnControlListener mControlListener; + + public void addOnControlListener(OnControlListener listener) { + this.mControlListener = listener; + } + + public interface OnControlListener { + void doEdit(DocumentTypeList bean, int pos); + + void doDel(DocumentTypeList bean, int pos); + } + +} diff --git a/oamodule/src/main/java/com/tenlionsoft/oamodule/adapter/DocumentGridAdapter.java b/oamodule/src/main/java/com/tenlionsoft/oamodule/adapter/DocumentGridAdapter.java new file mode 100644 index 0000000..29fb708 --- /dev/null +++ b/oamodule/src/main/java/com/tenlionsoft/oamodule/adapter/DocumentGridAdapter.java @@ -0,0 +1,61 @@ +package com.tenlionsoft.oamodule.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.bumptech.glide.Glide; +import com.tenlionsoft.baselib.core.widget.base.BaseRecyclerAdapter; +import com.tenlionsoft.oamodule.R; +import com.tenlionsoft.oamodule.beans.DocTypeTreeListBean; +import com.tenlionsoft.oamodule.beans.DocumentListBean; +import com.tenlionsoft.oamodule.beans.DocumentTypeList; +import com.tenlionsoft.oamodule.holder.FileGridHolder; + +import java.util.List; + +/** + * 作者: adam + * 日期: 2022/4/12 - 10:42 上午 + * 邮箱: itgaojian@163.com + * 描述: 文档宫格排列 + */ +public class DocumentGridAdapter extends BaseRecyclerAdapter { + public DocumentGridAdapter(Context ctx, List list) { + super(ctx, list); + } + + @Override + public FileGridHolder createHolder(ViewGroup parent, int viewType) { + View itemView = LayoutInflater.from(mContext).inflate(R.layout.item_document_grid, parent, false); + return new FileGridHolder(itemView); + } + + @Override + public void bindHolder(FileGridHolder h, int i) { + Object o = mData.get(i); + if (o instanceof DocumentListBean.RowsBean) { + DocumentListBean.RowsBean b = (DocumentListBean.RowsBean) o; + Glide.with(mContext) + .load(R.drawable.ic_file_word_new) + .into(h.mIvIcon); + h.mTvName.setText(b.getContent()); + h.mTvFileType.setText(b.getFileType()); + } else if (o instanceof DocumentTypeList) { + DocumentTypeList b = (DocumentTypeList) o; + Glide.with(mContext) + .load(R.drawable.ic_folder_icon) + .into(h.mIvIcon); + h.mTvName.setText(b.getName()); + h.mTvFileType.setText(b.getRemake()); + } else if (o instanceof DocTypeTreeListBean) { + DocTypeTreeListBean b = (DocTypeTreeListBean) o; + Glide.with(mContext) + .load(R.drawable.ic_folder_icon) + .into(h.mIvIcon); + h.mTvName.setText(b.getName()); + h.mTvFileType.setText(""); + } + } +} diff --git a/oamodule/src/main/java/com/tenlionsoft/oamodule/fragments/DocFragment.java b/oamodule/src/main/java/com/tenlionsoft/oamodule/fragments/DocFragment.java index 05b8fd2..05f3313 100644 --- a/oamodule/src/main/java/com/tenlionsoft/oamodule/fragments/DocFragment.java +++ b/oamodule/src/main/java/com/tenlionsoft/oamodule/fragments/DocFragment.java @@ -17,6 +17,12 @@ import android.widget.RadioGroup; import android.widget.RelativeLayout; import android.widget.TextView; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + import com.alibaba.android.arouter.facade.annotation.Route; import com.bigkoo.pickerview.builder.OptionsPickerBuilder; import com.bigkoo.pickerview.view.OptionsPickerView; @@ -28,6 +34,7 @@ import com.tenlionsoft.baselib.core.beans.OperateBean; 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.views.OperatePopup; import com.tenlionsoft.baselib.core.widget.views.TypeFaceTextView; import com.tenlionsoft.baselib.utils.ExceptionHandler; import com.tenlionsoft.baselib.utils.LogUtils; @@ -35,8 +42,9 @@ import com.tenlionsoft.baselib.utils.UIUtil; import com.tenlionsoft.oamodule.R; import com.tenlionsoft.oamodule.R2; import com.tenlionsoft.oamodule.activity.document.DocumentAddActivity; +import com.tenlionsoft.oamodule.activity.document.DocumentCategoryActivity; import com.tenlionsoft.oamodule.activity.document.DocumentDetailActivity; -import com.tenlionsoft.oamodule.adapter.DocumentAdapter; +import com.tenlionsoft.oamodule.adapter.DocumentGridAdapter; import com.tenlionsoft.oamodule.adapter.SelDocTypeAdapter; import com.tenlionsoft.oamodule.beans.DocTypeBean; import com.tenlionsoft.oamodule.beans.DocTypeTreeListBean; @@ -49,10 +57,6 @@ import org.jetbrains.annotations.NotNull; 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 butterknife.Unbinder; @@ -106,7 +110,7 @@ public class DocFragment extends BaseFragment { private Unbinder mBind; private List mDatas; - private DocumentAdapter mAdapter; + private DocumentGridAdapter mAdapter; private int mCurrentPage = 1; private String mKeywords = ""; private String mType = "个人文档";//个人文档 共享文档 公共文档 @@ -115,7 +119,8 @@ public class DocFragment extends BaseFragment { private OptionsPickerView mDataSourcePicker; private List mDocTypes; private DocTypeBean mSelType; - private ActivityResultLauncher mLauncher; + private ActivityResultLauncher mLauncher;//添加文件 + private ActivityResultLauncher mCategoryLauncher;//管理目录 private List mControls; private List mSelCatalog = new ArrayList<>();//选中的文档目录 private SelDocTypeAdapter mSelCatalogAdapter; @@ -169,8 +174,10 @@ public class DocFragment extends BaseFragment { mSrlContent.setOnLoadMoreListener(v -> doLoadMore()); mSrlContent.setOnRefreshListener(v -> doRefresh()); mDatas = new ArrayList<>(); - mAdapter = new DocumentAdapter(mActivity, mDatas); - mRlvDoc.setLayoutManager(new LinearLayoutManager(mActivity)); + mAdapter = new DocumentGridAdapter(mActivity, mDatas); + +// mRlvDoc.setLayoutManager(new LinearLayoutManager(mActivity)); + mRlvDoc.setLayoutManager(new GridLayoutManager(mActivity, 4)); mRlvDoc.setAdapter(mAdapter); mAdapter.addOnItemClickListener(rowsBean -> { if (rowsBean instanceof DocTypeTreeListBean) { @@ -213,7 +220,9 @@ public class DocFragment extends BaseFragment { mKeywords = ""; doRefresh(); }); - mIvAdd.setOnClickListener(v -> mLauncher.launch(new Intent(mActivity, DocumentAddActivity.class))); + // 直接添加文件 +// mIvAdd.setOnClickListener(v -> mLauncher.launch(new Intent(mActivity, DocumentAddActivity.class))); + mIvAdd.setOnClickListener(v -> onShowOperatePopup()); setTouchDelegate(mIvAdd, 25); // mTvTitleType.setOnClickListener(v -> onShowDocType()); // mTvTitleType.setText("文档中心"); @@ -246,6 +255,16 @@ public class DocFragment extends BaseFragment { mSelCatalogId = "0"; mSelCatalog.add(mRootPersonBean); doRefresh(); + + mControls = new ArrayList<>(); + OperateBean addFileBean = new OperateBean(); + addFileBean.setId("addFile"); + addFileBean.setName("文档上传"); + mControls.add(addFileBean); + OperateBean manageCategoryBean = new OperateBean(); + manageCategoryBean.setId("manageCategory"); + manageCategoryBean.setName("目录管理"); + mControls.add(manageCategoryBean); } /** @@ -266,6 +285,25 @@ public class DocFragment extends BaseFragment { } + /** + * 显示操作 + */ + private void onShowOperatePopup() { + OperatePopup popup = new OperatePopup(mActivity, mControls); + popup.addOnCheckChange((bean) -> { + popup.dismiss(); + switch (bean.getId()) { + case "addFile"://添加文件 + mLauncher.launch(new Intent(mActivity, DocumentAddActivity.class)); + break; + case "manageCategory"://目录管理 + mCategoryLauncher.launch(new Intent(mActivity, DocumentCategoryActivity.class)); + break; + } + }); + popup.setOffsetX(-70); + popup.showPopupWindow(mIvAdd); + } /** * 显示文档类型 @@ -347,6 +385,11 @@ public class DocFragment extends BaseFragment { doRefresh(); } }); + mCategoryLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> { + if (Activity.RESULT_OK == result.getResultCode()) { + doRefresh(); + } + }); } /** diff --git a/oamodule/src/main/java/com/tenlionsoft/oamodule/holder/DocumentCategoryManageHolder.java b/oamodule/src/main/java/com/tenlionsoft/oamodule/holder/DocumentCategoryManageHolder.java new file mode 100644 index 0000000..f2f7405 --- /dev/null +++ b/oamodule/src/main/java/com/tenlionsoft/oamodule/holder/DocumentCategoryManageHolder.java @@ -0,0 +1,37 @@ +package com.tenlionsoft.oamodule.holder; + +import android.view.View; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import androidx.annotation.NonNull; + +import com.tenlionsoft.baselib.core.widget.base.BaseViewHolder; +import com.tenlionsoft.oamodule.R2; + +import butterknife.BindView; + +/** + * 作者: adam + * 日期: 2020/11/24 - 9:10 AM + * 邮箱: itgaojian@163.com + * 描述: 文档目录 + */ +public class DocumentCategoryManageHolder extends BaseViewHolder { + @BindView(R2.id.tv_name) + public TextView mTvName; + @BindView(R2.id.iv_arrow) + public ImageView mIvArrow; + @BindView(R2.id.ll_btns) + public LinearLayout mLlBtns; + @BindView(R2.id.btn_edit) + public Button mBtnEdit; + @BindView(R2.id.btn_del) + public Button mBtnDel; + + public DocumentCategoryManageHolder(@NonNull View itemView) { + super(itemView); + } +} diff --git a/oamodule/src/main/java/com/tenlionsoft/oamodule/holder/FileGridHolder.java b/oamodule/src/main/java/com/tenlionsoft/oamodule/holder/FileGridHolder.java new file mode 100644 index 0000000..0934e23 --- /dev/null +++ b/oamodule/src/main/java/com/tenlionsoft/oamodule/holder/FileGridHolder.java @@ -0,0 +1,33 @@ +package com.tenlionsoft.oamodule.holder; + +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; + +import com.tenlionsoft.baselib.core.widget.base.BaseViewHolder; +import com.tenlionsoft.oamodule.R2; + +import org.jetbrains.annotations.NotNull; + +import butterknife.BindView; + +/** + * 作者: adam + * 日期: 2022/4/12 - 10:39 上午 + * 邮箱: itgaojian@163.com + * 描述: + */ +public class FileGridHolder extends BaseViewHolder { + @BindView(R2.id.tv_name) + public TextView mTvName; + @BindView(R2.id.tv_file_type) + public TextView mTvFileType; + @BindView(R2.id.iv_icon) + public ImageView mIvIcon; + + public FileGridHolder(@NonNull @NotNull View itemView) { + super(itemView); + } +} diff --git a/oamodule/src/main/res/layout/activity_document_category.xml b/oamodule/src/main/res/layout/activity_document_category.xml new file mode 100644 index 0000000..fc445f5 --- /dev/null +++ b/oamodule/src/main/res/layout/activity_document_category.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + +