Kaynağa Gözat

Merge branch 'draft' of https://gitlab.com/Arisono/SkWeiChat-Baidu into draft

FANGLH 8 yıl önce
ebeveyn
işleme
fc29a2dfe4
22 değiştirilmiş dosya ile 1242 ekleme ve 876 silme
  1. 3 2
      WeiChat/src/main/AndroidManifest.xml
  2. 1 1
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/message/ProcessMsgActivity.java
  3. 126 79
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/ApprovalActivity.java
  4. 2 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/ComApprovalActivity.java
  5. 133 20
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/adapter/oa/ApprovalAdapter.java
  6. 14 15
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/adapter/oa/ApprovalBaseRVAdapter.java
  7. 7 7
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/adapter/oa/ApprovalItemAdapter.java
  8. 0 368
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/adapter/oa/ApprovalItemBaseRVAdapter.java
  9. 351 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/adapter/oa/ApprovalRVItemAdapter.java
  10. 50 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/adapter/oa/BaseApprovalAdapter.java
  11. 18 18
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/adapter/oa/DetailedApprovalAdapter.java
  12. 46 156
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/model/oa/Approval.java
  13. 221 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/model/oa/Approvals.java
  14. 111 141
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/ApprovalPresenter.java
  15. 1 2
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/ComApprovalPresenter.java
  16. 7 7
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/imp/IApproval.java
  17. 14 7
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/oa/http/OAHttpHelper.java
  18. 67 0
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/view/NestingScrollview.java
  19. 2 2
      WeiChat/src/main/res/layout/activity_approval.xml
  20. 11 24
      WeiChat/src/main/res/layout/item_approval_k_p.xml
  21. 33 0
      WeiChat/src/main/res/layout/item_approval_title.xml
  22. 24 27
      WeiChat/src/main/res/layout/item_base_rvlist.xml

+ 3 - 2
WeiChat/src/main/AndroidManifest.xml

@@ -102,7 +102,7 @@
     <uses-permission android:name="android.permission.VIBRATE"/>
 
     <!--设置索尼的Badge需添加权限-->
-    <uses-permission android:name="com.sonyericsson.home.permission.BROADCAST_BADGE" />
+    <uses-permission android:name="com.sonyericsson.home.permission.BROADCAST_BADGE"/>
 
     <uses-feature android:name="android.hardware.camera"/>
     <!-- 使用照相机权限 -->
@@ -972,7 +972,8 @@
             android:label="在线人脸识别"/>
         <activity
             android:name=".ui.erp.activity.oa.ApprovalActivity"
-            android:label="审批单详情"/>
+            android:label="审批单详情"
+            android:windowSoftInputMode="adjustResize|stateAlwaysHidden"/>
         <activity android:name=".ui.erp.activity.oa.FileLoadingActivity">
         </activity>
         <activity android:name=".ui.erp.activity.oa.ComApprovalActivity">

+ 1 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/message/ProcessMsgActivity.java

@@ -349,8 +349,8 @@ public class ProcessMsgActivity extends BaseActivity implements View.OnClickList
                             title = getString(R.string.task_request_me);
                             break;
                     }
+//                    Intent intent = new Intent(ct, com.xzjmyk.pm.activity.ui.erp.activity.oa.ComApprovalActivity.class);
                     Intent intent = new Intent(ct, ApprovalActivity.class);
-//                    Intent intent = new Intent(ct, ApprovalActivity.class);
                     intent.putExtra("title",title);
                     intent.putExtra("id", Integer.valueOf(model.JP_NODEID));
                     startActivity(intent);

+ 126 - 79
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/ApprovalActivity.java

@@ -13,7 +13,6 @@ import android.text.Html;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
-import android.webkit.WebView;
 import android.widget.BaseAdapter;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
@@ -33,11 +32,11 @@ import com.xzjmyk.pm.activity.audio.voicerecognition.JsonParser;
 import com.xzjmyk.pm.activity.bean.oa.SelectBean;
 import com.xzjmyk.pm.activity.bean.oa.SelectEmUser;
 import com.xzjmyk.pm.activity.helper.AvatarHelper;
-import com.xzjmyk.pm.activity.ui.erp.adapter.oa.ApprovalAdapter;
+import com.xzjmyk.pm.activity.ui.erp.adapter.oa.BaseApprovalAdapter;
 import com.xzjmyk.pm.activity.ui.erp.adapter.oa.ApprovalBaseRVAdapter;
 import com.xzjmyk.pm.activity.ui.erp.entity.EditChangeListener;
 import com.xzjmyk.pm.activity.ui.erp.entity.SelectCollisionTurnBean;
-import com.xzjmyk.pm.activity.ui.erp.model.oa.Approval;
+import com.xzjmyk.pm.activity.ui.erp.model.oa.Approvals;
 import com.xzjmyk.pm.activity.ui.erp.presenter.ApprovalPresenter;
 import com.xzjmyk.pm.activity.ui.erp.presenter.imp.IApproval;
 import com.xzjmyk.pm.activity.ui.erp.util.ListUtils;
@@ -50,10 +49,12 @@ import com.xzjmyk.pm.activity.ui.erp.util.oa.OAConfig;
 import com.xzjmyk.pm.activity.ui.erp.util.oa.RecognizerDialogUtil;
 import com.xzjmyk.pm.activity.ui.erp.util.oa.http.OAHttpHelper;
 import com.xzjmyk.pm.activity.ui.tool.SingleImagePreviewActivity;
+import com.xzjmyk.pm.activity.util.HtmlUtils;
 import com.xzjmyk.pm.activity.view.DividerItemDecoration;
 import com.xzjmyk.pm.activity.view.MostLinearLayoutManager;
 
 import java.io.File;
+import java.util.ArrayList;
 import java.util.List;
 
 
@@ -163,7 +164,7 @@ public class ApprovalActivity extends OABaseActivity implements IApproval, View.
 
 
     @Override
-    public void showMainList(final List<Approval.ItemData> datas) {
+    public void showMainList(final List<Approvals.ItemData> datas) {
         showLog(datas);
         if (Looper.getMainLooper() == Looper.myLooper()) {
             showMainListInUi(datas);
@@ -177,7 +178,7 @@ public class ApprovalActivity extends OABaseActivity implements IApproval, View.
         }
     }
 
-    private void showMainListInUi(List<Approval.ItemData> datas) {
+    private void showMainListInUi(List<Approvals.ItemData> datas) {
         showAble(datas, mainLV);
         if (mainApprovalAdapter == null) {
             mainApprovalAdapter = new MainApprovalAdapter(ct, datas);
@@ -190,69 +191,87 @@ public class ApprovalActivity extends OABaseActivity implements IApproval, View.
 
 
     @Override
-    public void showNodeList(List<Approval.ItemData> datas) {
-        showLog(datas);
-        showAble(datas, nodeLV);
-        if (nodeAdapter == null) {
-            nodeAdapter = new NodeAdapter(ct, datas);
-            nodeLV.setAdapter(nodeAdapter);
-        } else {
-            nodeAdapter.setItemDatas(datas);
-            nodeAdapter.notifyDataSetChanged();
-        }
+    public void showNodeList(final List<Approvals.ItemData> datas) {
+        OAHttpHelper.getInstance().post(new Runnable() {
+            @Override
+            public void run() {
+                showLog(datas);
+                showAble(datas, nodeLV);
+                if (nodeAdapter == null) {
+                    nodeAdapter = new NodeAdapter(ct, datas);
+                    nodeLV.setAdapter(nodeAdapter);
+                } else {
+                    nodeAdapter.setItemDatas(datas);
+                    nodeAdapter.notifyDataSetChanged();
+                }
+            }
+        });
+
     }
 
     @Override
-    public void showDetailList(List<Approval.ItemData> datas) {
-        showLog(datas);
-        showAble(datas, detailedRV);
-        ApprovalBaseRVAdapter detailApprovalAdapter = null;
-        if (detailApprovalAdapter == null) {
-            detailedRV.setLayoutManager(getLinearLayoutManager());
-            detailedRV.setHasFixedSize(true);
-            detailedRV.setNestedScrollingEnabled(false);
-            detailApprovalAdapter = new ApprovalBaseRVAdapter((Activity) ct, datas);
-            detailApprovalAdapter.setOnitemClickListener(new ApprovalBaseRVAdapter.OnitemClickListener() {
-                @Override
-                public void onClick(int position) {
-                    selectRecyclerView = detailedRV;
-                    ApprovalActivity.this.clickPointsPosition = position;
+    public void showDetailList(final List<Approvals.ItemData> datas) {
+        OAHttpHelper.getInstance().post(new Runnable() {
+            @Override
+            public void run() {
+                showLog(datas);
+                showAble(datas, detailedRV);
+                ApprovalBaseRVAdapter detailApprovalAdapter = null;
+                if (detailApprovalAdapter == null) {
+                    detailedRV.setLayoutManager(getLinearLayoutManager());
+                    detailedRV.setHasFixedSize(true);
+                    detailedRV.setNestedScrollingEnabled(false);
+                    detailApprovalAdapter = new ApprovalBaseRVAdapter((Activity) ct, datas);
+                    detailApprovalAdapter.setOnitemClickListener(new ApprovalBaseRVAdapter.OnitemClickListener() {
+                        @Override
+                        public void onClick(int position) {
+                            selectRecyclerView = detailedRV;
+                            ApprovalActivity.this.clickPointsPosition = position;
+                        }
+                    });
+                    detailedRV.setAdapter(detailApprovalAdapter);
+                } else {
+                    detailApprovalAdapter.setItemDatas(datas);
+                    detailApprovalAdapter.notifyDataSetChanged();
                 }
-            });
-            detailedRV.setAdapter(detailApprovalAdapter);
-        } else {
-            detailApprovalAdapter.setItemDatas(datas);
-            detailApprovalAdapter.notifyDataSetChanged();
-        }
+            }
+        });
+
+
     }
 
     @Override
-    public void showPointsList(List<Approval.ItemData> datas) {
-        showLog(datas);
-        showAble(datas, pointsLL);
-        ApprovalBaseRVAdapter pointsAdapter = null;
-        if (pointsAdapter == null) {
-            pointsRV.setLayoutManager(getLinearLayoutManager());
-            pointsRV.setHasFixedSize(true);
-            pointsRV.setNestedScrollingEnabled(false);
-            pointsRV.addItemDecoration(new DividerItemDecoration(ct, DividerItemDecoration.VERTICAL_LIST));
-            pointsAdapter = new ApprovalBaseRVAdapter((Activity) ct, datas);
-            pointsAdapter.setOnitemClickListener(new ApprovalBaseRVAdapter.OnitemClickListener() {
-                @Override
-                public void onClick(int position) {
-                    selectRecyclerView = pointsRV;
-                    ApprovalActivity.this.clickPointsPosition = position;
+    public void showPointsList(final List<Approvals.ItemData> datas) {
+        OAHttpHelper.getInstance().post(new Runnable() {
+            @Override
+            public void run() {
+                showLog(datas);
+                showAble(datas, pointsLL);
+                ApprovalBaseRVAdapter pointsAdapter = null;
+                if (pointsAdapter == null) {
+                    pointsRV.setLayoutManager(getLinearLayoutManager());
+                    pointsRV.setHasFixedSize(true);
+                    pointsRV.setNestedScrollingEnabled(false);
+                    pointsRV.addItemDecoration(new DividerItemDecoration(ct, DividerItemDecoration.VERTICAL_LIST));
+                    pointsAdapter = new ApprovalBaseRVAdapter((Activity) ct, datas);
+                    pointsAdapter.setOnitemClickListener(new ApprovalBaseRVAdapter.OnitemClickListener() {
+                        @Override
+                        public void onClick(int position) {
+                            selectRecyclerView = pointsRV;
+                            ApprovalActivity.this.clickPointsPosition = position;
+                        }
+                    });
+                    pointsRV.setAdapter(pointsAdapter);
+                } else {
+                    pointsAdapter.setItemDatas(datas);
+                    pointsAdapter.notifyDataSetChanged();
                 }
-            });
-            pointsRV.setAdapter(pointsAdapter);
-        } else {
-            pointsAdapter.setItemDatas(datas);
-            pointsAdapter.notifyDataSetChanged();
-        }
+            }
+        });
     }
 
     @Override
-    public void showEnclosureList(List<Approval.Enclosure> enclosures) {
+    public void showEnclosureList(List<Approvals.Enclosure> enclosures) {
         showLog(enclosures);
         showAble(enclosures, additionalLL);
         enclosureLV.setAdapter(new AdditionalAdapter(enclosures));
@@ -281,7 +300,7 @@ public class ApprovalActivity extends OABaseActivity implements IApproval, View.
 
 
     @Override
-    public void showTitile(Approval.NodeRecord record) {
+    public void showTitile(Approvals.NodeRecord record) {
         if (record != null) {
             int imId = record.imId;
             if (imId > 0) {
@@ -343,6 +362,20 @@ public class ApprovalActivity extends OABaseActivity implements IApproval, View.
         detailedRV.setVisibility(View.GONE);
         nodeLV.setVisibility(View.GONE);
         pointsLL.setVisibility(View.GONE);
+        OAHttpHelper.getInstance().post(new Runnable() {
+            @Override
+            public void run() {
+                if (pointsRV.getAdapter() != null) {
+                    pointsRV.getAdapter().notifyDataSetChanged();
+                } if (mainApprovalAdapter != null) {
+                    mainApprovalAdapter.notifyDataSetChanged();
+                } if (detailedRV.getAdapter() != null) {
+                    detailedRV.getAdapter().notifyDataSetChanged();
+                } if (nodeAdapter != null) {
+                    nodeAdapter.notifyDataSetChanged();
+                }
+            }
+        });
 //      enclosureLV.setVisibility(View.GONE);
     }
 
@@ -350,7 +383,21 @@ public class ApprovalActivity extends OABaseActivity implements IApproval, View.
     public void onClick(View v) {
         switch (v.getId()) {
             case R.id.agreeTV://同意
-                mPresenter.loadProcessUpdate(OACheckUtil.getText(opinionET));
+                List<Approvals.ItemData> mainList = new ArrayList<>();
+                List<Approvals.ItemData> detailedList = new ArrayList<>();
+                List<Approvals.ItemData> pointsList = new ArrayList<>();
+                if (mainApprovalAdapter != null && !ListUtils.isEmpty(mainApprovalAdapter.getItemDatas()))
+                    mainList = mainApprovalAdapter.getItemDatas();
+                if (detailedRV.getAdapter() != null && detailedRV.getAdapter() instanceof ApprovalBaseRVAdapter) {
+                    detailedList = ((ApprovalBaseRVAdapter) detailedRV.getAdapter()).getItemDatas();
+                }
+                if (pointsRV.getAdapter() != null && pointsRV.getAdapter() instanceof ApprovalBaseRVAdapter) {
+                    detailedList = ((ApprovalBaseRVAdapter) pointsRV.getAdapter()).getItemDatas();
+                }
+                mPresenter.loadProcessUpdate(OACheckUtil.getText(opinionET)
+                        , mainList
+                        , detailedList
+                        , pointsList);
                 break;
             case R.id.disagreeTV://不同意
                 mPresenter.disAgree(OACheckUtil.getText(opinionET));
@@ -403,15 +450,15 @@ public class ApprovalActivity extends OABaseActivity implements IApproval, View.
     }
 
 
-    private class NodeAdapter extends ApprovalAdapter {
-        public NodeAdapter(Context ct, List<Approval.ItemData> itemDatas) {
+    private class NodeAdapter extends BaseApprovalAdapter {
+        public NodeAdapter(Context ct, List<Approvals.ItemData> itemDatas) {
             super(ct, itemDatas);
         }
 
         @Override
         public View getView(int position, View convertView, ViewGroup parent) {
             NodeViewHolder holder = null;
-            Approval.ItemData itemData = itemDatas.get(position);
+            Approvals.ItemData itemData = itemDatas.get(position);
             if (convertView == null) {
                 convertView = LayoutInflater.from(ct).inflate(R.layout.item_approval_node, null);
                 holder = new NodeViewHolder();
@@ -461,22 +508,28 @@ public class ApprovalActivity extends OABaseActivity implements IApproval, View.
         }
     }
 
-    private class MainApprovalAdapter extends ApprovalAdapter {
+    private class MainApprovalAdapter extends BaseApprovalAdapter {
 
-        public MainApprovalAdapter(Context ct, List<Approval.ItemData> itemDatas) {
+        public MainApprovalAdapter(Context ct, List<Approvals.ItemData> itemDatas) {
             super(ct, itemDatas);
         }
 
         @Override
         public View getView(final int position, View convertView, ViewGroup parent) {
-            final Approval.ItemData itemData = itemDatas.get(position);
-            Approval.ItemType type = itemData.type;
+            final Approvals.ItemData itemData = itemDatas.get(position);
+            Approvals.ItemType type = itemData.type;
             TextView keyTv;
-            if (type == Approval.ItemType.P) {
+            if (type == Approvals.ItemType.V) {
+                convertView = LayoutInflater.from(ct).inflate(R.layout.item_approval_k_v, null);
+                TextView valueTv = (TextView) convertView.findViewById(R.id.valueTv);
+                keyTv = (TextView) convertView.findViewById(R.id.keyTv);
+                if (!StringUtils.isEmpty(itemData.values)) {
+                    valueTv.setText(HtmlUtils.transform50SpanString(itemData.values, false));
+                }
+            } else {
                 convertView = LayoutInflater.from(ct).inflate(R.layout.item_approval_k_p, null);
                 FormEditText valueTv = (FormEditText) convertView.findViewById(R.id.valueTv);
                 keyTv = (TextView) convertView.findViewById(R.id.keyTv);
-                WebView donetaskWV = (WebView) convertView.findViewById(R.id.donetaskWV);
                 if (!StringUtils.isEmpty(itemData.values)) {
                     valueTv.setText(itemData.values);
                 }
@@ -486,13 +539,7 @@ public class ApprovalActivity extends OABaseActivity implements IApproval, View.
                         itemDatas.get(position).values = s.toString();
                     }
                 });
-            } else {
-                convertView = LayoutInflater.from(ct).inflate(R.layout.item_approval_k_v, null);
-                TextView valueTv = (TextView) convertView.findViewById(R.id.valueTv);
-                keyTv = (TextView) convertView.findViewById(R.id.keyTv);
-                if (!StringUtils.isEmpty(itemData.values)) {
-                    valueTv.setText(Html.fromHtml(itemData.values));
-                }
+
             }
             if (!StringUtils.isEmpty(itemData.key)) {
                 keyTv.setText(itemData.key);
@@ -502,9 +549,9 @@ public class ApprovalActivity extends OABaseActivity implements IApproval, View.
     }
 
     private class AdditionalAdapter extends BaseAdapter {
-        private List<Approval.Enclosure> enclosures;
+        private List<Approvals.Enclosure> enclosures;
 
-        public AdditionalAdapter(List<Approval.Enclosure> enclosures) {
+        public AdditionalAdapter(List<Approvals.Enclosure> enclosures) {
             this.enclosures = enclosures;
         }
 
@@ -527,7 +574,7 @@ public class ApprovalActivity extends OABaseActivity implements IApproval, View.
         public View getView(int position, View convertView, ViewGroup parent) {
             convertView = LayoutInflater.from(ct).inflate(R.layout.item_approval_enclosure, null);
             TextView nameTv = (TextView) convertView.findViewById(R.id.nameTv);
-            final Approval.Enclosure enclosure = enclosures.get(position); ;
+            final Approvals.Enclosure enclosure = enclosures.get(position); ;
             String name = StringUtils.isEmpty(enclosure.name) ? "" : enclosure.name;
             nameTv.setText(Html.fromHtml("<u>" + name + "</u>"));
             nameTv.setOnClickListener(new View.OnClickListener() {
@@ -539,7 +586,7 @@ public class ApprovalActivity extends OABaseActivity implements IApproval, View.
             return convertView;
         }
 
-        private void gotoReadEnclosure(Approval.Enclosure enclosure) {
+        private void gotoReadEnclosure(Approvals.Enclosure enclosure) {
             if (enclosure != null) {
                 LogUtil.i("enclosure=" + enclosure.toString());
                 String name = enclosure.name;

+ 2 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/ComApprovalActivity.java

@@ -56,6 +56,8 @@ public class ComApprovalActivity extends OABaseActivity implements IComApproval,
 
     private void initView() {
         mPresenter = new ComApprovalPresenter(this, getIntent());
+        operationLL.setVisibility(View.GONE);
+        opinionRL.setVisibility(View.GONE);
     }
 
 

+ 133 - 20
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/adapter/oa/ApprovalAdapter.java

@@ -1,50 +1,163 @@
 package com.xzjmyk.pm.activity.ui.erp.adapter.oa;
 
-import android.content.Context;
-import android.widget.BaseAdapter;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.TextView;
 
+import com.xzjmyk.pm.activity.R;
+import com.xzjmyk.pm.activity.helper.AvatarHelper;
+import com.xzjmyk.pm.activity.ui.erp.activity.oa.OABaseActivity;
 import com.xzjmyk.pm.activity.ui.erp.model.oa.Approval;
 import com.xzjmyk.pm.activity.ui.erp.util.ListUtils;
+import com.xzjmyk.pm.activity.ui.erp.util.StringUtils;
 
 import java.util.List;
 
 /**
- * Created by Bitliker on 2017/7/10.
+ * Created by Bitliker on 2017/7/21.
  */
 
-public abstract class ApprovalAdapter extends BaseAdapter {
+public class ApprovalAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
+    private OABaseActivity ct;
+    private List<Approval> approvals;
 
-    protected Context ct;
-    protected List<Approval.ItemData> itemDatas;
-
-    public ApprovalAdapter(Context ct, List<Approval.ItemData> itemDatas) {
+    public ApprovalAdapter(OABaseActivity ct, List<Approval> approvals) {
         this.ct = ct;
-        this.itemDatas = itemDatas;
+        this.approvals = approvals;
     }
 
-
-    public List<Approval.ItemData> getItemDatas() {
-        return itemDatas;
+    public List<Approval> getApprovals() {
+        return approvals;
     }
 
-    public void setItemDatas(List<Approval.ItemData> itemDatas) {
-        this.itemDatas = itemDatas;
+    public void setApprovals(List<Approval> approvals) {
+        this.approvals = approvals;
     }
 
+    @Override
+    public int getItemViewType(int position) {
+        return position;
+    }
 
     @Override
-    public int getCount() {
-        return ListUtils.getSize(itemDatas);
+    public int getItemCount() {
+        return ListUtils.getSize(approvals);
+    }
+
+    private LinearLayoutManager linearLayoutManager;
+
+    private LinearLayoutManager getLinearLayoutManager() {
+        if (linearLayoutManager == null)
+            linearLayoutManager = new LinearLayoutManager(ct);
+        return linearLayoutManager;
     }
 
     @Override
-    public Object getItem(int position) {
-        return itemDatas.get(position);
+    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+        switch (this.approvals.get(viewType).getType()) {
+            case TITLE:
+                return new TitleViewHolder(parent);
+            case MAIN:
+            case DETAIL:
+            case ENCLOSURE:
+            case POINTS:
+            case NODES:
+            default: return new BaseRVViewHolder(parent);
+        }
     }
 
     @Override
-    public long getItemId(int position) {
-        return position;
+    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
+        if (holder instanceof TitleViewHolder) {
+            bindTitleView((TitleViewHolder) holder, position);
+        } else if (holder instanceof BaseRVViewHolder) {
+            bindBaseRVView((BaseRVViewHolder) holder, position);
+        }
+    }
+
+
+    private void bindTitleView(TitleViewHolder holder, int position) {
+        Approval approval = approvals.get(position);
+        holder.titleTv.setText(approval.getTitle());
+        if (!ListUtils.isEmpty(approval.getItems())) {
+            Approval.Item item = approval.getItems().get(0);
+            AvatarHelper.getInstance().display(String.valueOf(item.id), holder.handIv, true, false);
+            if (!StringUtils.isEmpty(item.status)) {
+                holder.statusIv.setVisibility(View.VISIBLE);
+                int reId = 0;
+                if (item.status.equals("同意")) {
+                    reId = R.drawable.approved;
+                } else {
+                    reId = R.drawable.unapproved;
+                }
+                holder.statusIv.setImageResource(reId);
+            } else {
+                holder.statusIv.setVisibility(View.GONE);
+            }
+        } else {
+            holder.statusIv.setVisibility(View.GONE);
+        }
+    }
+
+    private void bindBaseRVView(BaseRVViewHolder holder, int position) {
+        Approval approval = approvals.get(position);
+        //判断是否显示上面的背景线
+        if (position > 0 && approvals.get(position - 1).getType() != approval.getType()) {
+            holder.line.setVisibility(View.VISIBLE);
+        } else {
+            holder.line.setVisibility(View.GONE);
+        }
+        if (StringUtils.isEmpty(approval.getTitle())) {
+            holder.titleTV.setVisibility(View.GONE);
+        } else {
+            holder.titleTV.setVisibility(View.VISIBLE);
+            holder.titleTV.setText(approval.getTitle());
+        }
+        holder.contentRV.setLayoutManager(getLinearLayoutManager());
+        if (holder.contentRV.getAdapter() != null && holder.contentRV.getAdapter() instanceof ApprovalRVItemAdapter) {
+            ApprovalRVItemAdapter adapter = (ApprovalRVItemAdapter) holder.contentRV.getAdapter();
+            adapter.setItemDatas(approval.getItems());
+            adapter.notifyDataSetChanged();
+        } else {
+            holder.contentRV.setAdapter(new ApprovalRVItemAdapter(ct, approval.getType(), position, approval.getItems()));
+        }
     }
 
+
+    private class TitleViewHolder extends RecyclerView.ViewHolder {
+        TextView titleTv;
+        ImageView handIv, statusIv;
+
+        public TitleViewHolder(ViewGroup parent) {
+            this(LayoutInflater.from(ct).inflate(R.layout.item_approval_title, parent, false));
+        }
+
+        public TitleViewHolder(View itemView) {
+            super(itemView);
+            titleTv = (TextView) itemView.findViewById(R.id.titleTv);
+            handIv = (ImageView) itemView.findViewById(R.id.handIv);
+            statusIv = (ImageView) itemView.findViewById(R.id.statusIv);
+        }
+    }
+
+    private class BaseRVViewHolder extends RecyclerView.ViewHolder {
+        TextView titleTV;
+        RecyclerView contentRV;
+        View line;
+
+        public BaseRVViewHolder(ViewGroup parent) {
+            this(LayoutInflater.from(ct).inflate(R.layout.item_base_rvlist, parent, false));
+        }
+
+        public BaseRVViewHolder(View itemView) {
+            super(itemView);
+            titleTV = (TextView) itemView.findViewById(R.id.titleTV);
+            contentRV = (RecyclerView) itemView.findViewById(R.id.contentRV);
+            line = (RecyclerView) itemView.findViewById(R.id.line);
+        }
+    }
 }

+ 14 - 15
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/adapter/oa/ApprovalBaseRVAdapter.java

@@ -16,7 +16,7 @@ import com.xzjmyk.pm.activity.R;
 import com.xzjmyk.pm.activity.bean.oa.SelectBean;
 import com.xzjmyk.pm.activity.ui.erp.activity.oa.SelectActivity;
 import com.xzjmyk.pm.activity.ui.erp.entity.EditChangeListener;
-import com.xzjmyk.pm.activity.ui.erp.model.oa.Approval;
+import com.xzjmyk.pm.activity.ui.erp.model.oa.Approvals;
 import com.xzjmyk.pm.activity.ui.erp.util.ListUtils;
 import com.xzjmyk.pm.activity.ui.erp.util.LogUtil;
 import com.xzjmyk.pm.activity.ui.erp.util.StringUtils;
@@ -36,30 +36,30 @@ public class ApprovalBaseRVAdapter extends RecyclerView.Adapter<RecyclerView.Vie
 
     public static final int REQUEST_CODE = 0x9172;
     private Activity ct;
-    private List<Approval.ItemData> itemDatas;
+    private List<Approvals.ItemData> itemDatas;
 
-    public ApprovalBaseRVAdapter(Activity ct, List<Approval.ItemData> itemDatas) {
+    public ApprovalBaseRVAdapter(Activity ct, List<Approvals.ItemData> itemDatas) {
         this.ct = ct;
         this.itemDatas = itemDatas;
     }
 
 
-    public List<Approval.ItemData> getItemDatas() {
+    public List<Approvals.ItemData> getItemDatas() {
         return itemDatas;
     }
 
-    public void setItemDatas(List<Approval.ItemData> itemDatas) {
+    public void setItemDatas(List<Approvals.ItemData> itemDatas) {
         this.itemDatas = itemDatas;
     }
 
     @Override
     public int getItemViewType(int position) {
-        return Approval.type2Int(itemDatas.get(position).type);
+        return Approvals.type2Int(itemDatas.get(position).type);
     }
 
     @Override
     public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
-        Approval.ItemType type = Approval.int2Type(viewType);
+        Approvals.ItemType type = Approvals.int2Type(viewType);
         View view = null;
         switch (type) {
             case TAG:
@@ -83,7 +83,7 @@ public class ApprovalBaseRVAdapter extends RecyclerView.Adapter<RecyclerView.Vie
 
     @Override
     public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
-        Approval.ItemData itemData = itemDatas.get(position);
+        Approvals.ItemData itemData = itemDatas.get(position);
         if (holder instanceof TagViewHodler) {
             bindTagView((TagViewHodler) holder, itemData, position);
         } else if (holder instanceof DateViewHodler) {
@@ -93,7 +93,7 @@ public class ApprovalBaseRVAdapter extends RecyclerView.Adapter<RecyclerView.Vie
         }
     }
 
-    private void bindBaseView(final BaseViewHodler holder, Approval.ItemData itemData, final int position) {
+    private void bindBaseView(final BaseViewHodler holder, Approvals.ItemData itemData, final int position) {
         switch (itemData.type) {
             case V://显示
                 holder.key1Tv.setText(itemData.key);
@@ -167,13 +167,13 @@ public class ApprovalBaseRVAdapter extends RecyclerView.Adapter<RecyclerView.Vie
         holder.value2Et.addTextChangedListener(new TextChangListener(holder, position));
     }
 
-    private void bindDateView(final DateViewHodler holder, final Approval.ItemData itemData, final int position) {
+    private void bindDateView(final DateViewHodler holder, final Approvals.ItemData itemData, final int position) {
         holder.keyTv.setText(itemData.key);
         holder.valueTv.setText(itemData.values);
         holder.valueTv.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(final View v) {
-                if (itemData.type == Approval.ItemType.SELECT) {
+                if (itemData.type == Approvals.ItemType.SELECT) {
                     selectItem(itemData, position);
                 } else {
                     showTimeSelect(holder.valueTv, position);
@@ -184,7 +184,7 @@ public class ApprovalBaseRVAdapter extends RecyclerView.Adapter<RecyclerView.Vie
         setGravity(itemData.editGravity, holder.valueTv);
     }
 
-    private void bindTagView(TagViewHodler holder, Approval.ItemData itemData, int position) {
+    private void bindTagView(TagViewHodler holder, Approvals.ItemData itemData, int position) {
         holder.line.setVisibility(position == 0 ? View.GONE : View.VISIBLE);
         holder.tagTv.setText(itemData.key);
     }
@@ -221,8 +221,7 @@ public class ApprovalBaseRVAdapter extends RecyclerView.Adapter<RecyclerView.Vie
         TextView key1Tv, value1Tv, key2Tv, value2Tv;
         EditText value1Et, value2Et;
         FrameLayout values2Fl, values1Fl;
-
-        public BaseViewHodler(Approval.ItemType type, View itemView) {
+        public BaseViewHodler(Approvals.ItemType type, View itemView) {
             super(itemView);
             key1Tv = (TextView) itemView.findViewById(R.id.key1Tv);
             key2Tv = (TextView) itemView.findViewById(R.id.key2Tv);
@@ -308,7 +307,7 @@ public class ApprovalBaseRVAdapter extends RecyclerView.Adapter<RecyclerView.Vie
     }
 
 
-    private void selectItem(Approval.ItemData itemData, int position) {
+    private void selectItem(Approvals.ItemData itemData, int position) {
         ArrayList<SelectBean> beans = new ArrayList<>();
         SelectBean bean = null;
         String[] datas = null;

+ 7 - 7
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/adapter/oa/ApprovalItemAdapter.java

@@ -81,13 +81,13 @@ public class ApprovalItemAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
         if (linearLayoutManager == null)
             linearLayoutManager = new MostLinearLayoutManager(ct);
         holder.contentRV.setLayoutManager(linearLayoutManager);
-        if (holder.contentRV.getAdapter() == null) {
-            holder.contentRV.setAdapter(new ApprovalItemBaseRVAdapter(ct, approvalItem.getItemDatas()));
-        } else {
-            ApprovalItemBaseRVAdapter approvalItemBaseRVAdapter = (ApprovalItemBaseRVAdapter) holder.contentRV.getAdapter();
-            approvalItemBaseRVAdapter.setItemDatas(approvalItem.getItemDatas());
-            approvalItemBaseRVAdapter.notifyDataSetChanged();
-        }
+//        if (holder.contentRV.getAdapter() == null) {
+//            holder.contentRV.setAdapter(new ApprovalRVItemAdapter(ct, approvalItem.getItemDatas()));
+//        } else {
+//            ApprovalRVItemAdapter approvalItemBaseRVAdapter = (ApprovalRVItemAdapter) holder.contentRV.getAdapter();
+//            approvalItemBaseRVAdapter.setItemDatas(approvalItem.getItemDatas());
+//            approvalItemBaseRVAdapter.notifyDataSetChanged();
+//        }
     }
 
 

+ 0 - 368
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/adapter/oa/ApprovalItemBaseRVAdapter.java

@@ -1,368 +0,0 @@
-package com.xzjmyk.pm.activity.ui.erp.adapter.oa;
-
-import android.app.Activity;
-import android.content.Intent;
-import android.support.v7.widget.RecyclerView;
-import android.text.Editable;
-import android.text.InputType;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.EditText;
-import android.widget.FrameLayout;
-import android.widget.TextView;
-
-import com.xzjmyk.pm.activity.R;
-import com.xzjmyk.pm.activity.bean.oa.SelectBean;
-import com.xzjmyk.pm.activity.ui.erp.activity.oa.SelectActivity;
-import com.xzjmyk.pm.activity.ui.erp.entity.EditChangeListener;
-import com.xzjmyk.pm.activity.ui.erp.model.oa.Approval;
-import com.xzjmyk.pm.activity.ui.erp.model.oa.ApprovalItem;
-import com.xzjmyk.pm.activity.ui.erp.util.ListUtils;
-import com.xzjmyk.pm.activity.ui.erp.util.LogUtil;
-import com.xzjmyk.pm.activity.ui.erp.util.StringUtils;
-import com.xzjmyk.pm.activity.util.CalendarUtils;
-import com.xzjmyk.pm.activity.view.wheel.OASigninPicker;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import static com.xzjmyk.pm.activity.ui.erp.util.OACheckUtil.getString;
-
-/**
- * Created by Bitliker on 2017/7/10.
- */
-
-public class ApprovalItemBaseRVAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
-
-    public static final int REQUEST_CODE = 0x9172;
-    private Activity ct;
-    private List<ApprovalItem.ItemData> itemDatas;
-
-    public ApprovalItemBaseRVAdapter(Activity ct, List<ApprovalItem.ItemData> itemDatas) {
-        this.ct = ct;
-        this.itemDatas = itemDatas;
-    }
-
-
-    public List<ApprovalItem.ItemData> getItemDatas() {
-        return itemDatas;
-    }
-
-    public void setItemDatas(List<ApprovalItem.ItemData> itemDatas) {
-        this.itemDatas = itemDatas;
-    }
-
-    @Override
-    public int getItemViewType(int position) {
-        return position;
-    }
-
-    @Override
-    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
-        Approval.ItemType type = Approval.int2Type(viewType);
-        View view = null;
-        LogUtil.i("viewType="+viewType);
-        switch (itemDatas.get(viewType).type) {
-            case TAG:
-                view = LayoutInflater.from(ct).inflate(R.layout.item_approval_tag, parent, false);
-                return new TagViewHodler(view);
-            case DATE:
-            case SELECT:
-                view = LayoutInflater.from(ct).inflate(R.layout.item_approval_date, parent, false);
-                return new DateViewHodler(view);
-            case V:
-            case P:
-            case P_P:
-            case V_V:
-            case P_V:
-            case V_P:
-            default:
-                view = LayoutInflater.from(ct).inflate(R.layout.item_rv_approval_key_values, parent, false);
-                return new BaseViewHodler(type, view);
-        }
-    }
-
-    @Override
-    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
-        ApprovalItem.ItemData itemData = itemDatas.get(position);
-        if (holder instanceof TagViewHodler) {
-            bindTagView((TagViewHodler) holder, itemData, position);
-        } else if (holder instanceof DateViewHodler) {
-            bindDateView((DateViewHodler) holder, itemData, position);
-        } else if (holder instanceof BaseViewHodler) {
-            bindBaseView((BaseViewHodler) holder, itemData, position);
-        }
-    }
-
-    private void bindBaseView(final BaseViewHodler holder, ApprovalItem.ItemData itemData, final int position) {
-        switch (itemData.type) {
-            case V://显示
-                holder.key1Tv.setText(itemData.key);
-                holder.value1Tv.setText(itemData.values);
-                break;
-            case P:
-                holder.key1Tv.setText(itemData.key);
-                holder.value1Et.setText(itemData.values);
-                break;
-            case P_P:
-                holder.key1Tv.setText(itemData.key);
-                holder.value1Et.setText(itemData.values);
-                holder.key2Tv.setText(itemData.keyTag);
-                holder.value2Et.setText(itemData.valuesTag);
-                break;
-            case V_V:
-                holder.key1Tv.setText(itemData.key);
-                holder.value1Tv.setText(itemData.values);
-                holder.key2Tv.setText(itemData.keyTag);
-                holder.value2Tv.setText(itemData.valuesTag);
-                break;
-            case P_V:
-                holder.key1Tv.setText(itemData.key);
-                holder.value1Et.setText(itemData.values);
-                holder.key2Tv.setText(itemData.keyTag);
-                holder.value2Tv.setText(itemData.valuesTag);
-                break;
-            case V_P:
-                holder.key1Tv.setText(itemData.key);
-                holder.value1Tv.setText(itemData.values);
-                holder.key2Tv.setText(itemData.keyTag);
-                holder.value2Et.setText(itemData.valuesTag);
-                break;
-        }
-
-        if (itemData.isDate()) {
-            holder.value1Et.setInputType(InputType.TYPE_NULL);
-            holder.value2Et.setInputType(InputType.TYPE_NULL);
-            holder.value1Et.setOnClickListener(new View.OnClickListener() {
-                @Override
-                public void onClick(View v) {
-                    showTimeSelect(holder.value1Et, position);
-                }
-            });
-            holder.value2Et.setOnClickListener(new View.OnClickListener() {
-                @Override
-                public void onClick(View v) {
-                    showTimeSelect(holder.value2Et, position);
-                }
-            });
-        } else if (itemData.isNumber()) {
-            holder.value1Et.setInputType(InputType.TYPE_CLASS_NUMBER);
-            holder.value2Et.setInputType(InputType.TYPE_CLASS_NUMBER);
-        } else {
-            holder.value1Et.setInputType(InputType.TYPE_CLASS_TEXT);
-            holder.value2Et.setInputType(InputType.TYPE_CLASS_TEXT);
-        }
-        setGravity(itemData.editGravity, holder.value1Et, holder.value2Et, holder.value1Tv, holder.value2Tv);
-        holder.value1Et.setBackgroundResource(itemData.editBg);
-        holder.value2Et.setBackgroundResource(itemData.editBg);
-        if (itemData.mustInput) {
-            holder.value1Et.setHint(getString(R.string.common_input));
-            holder.value2Et.setHint(getString(R.string.common_input));
-        } else {
-            holder.value1Et.setHint(getString(R.string.common_input1));
-            holder.value2Et.setHint(getString(R.string.common_input1));
-        }
-        holder.value1Et.setTag(position);
-        holder.value2Et.setTag(position);
-        holder.value1Et.addTextChangedListener(new TextChangListener(holder, position));
-        holder.value2Et.addTextChangedListener(new TextChangListener(holder, position));
-    }
-
-    private void bindDateView(final DateViewHodler holder, final ApprovalItem.ItemData itemData, final int position) {
-        holder.keyTv.setText(itemData.key);
-        holder.valueTv.setText(itemData.values);
-        holder.valueTv.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(final View v) {
-                if (itemData.type == ApprovalItem.ItemType.SELECT) {
-                    selectItem(itemData, position);
-                } else {
-                    showTimeSelect(holder.valueTv, position);
-                }
-
-            }
-        });
-    }
-
-    private void bindTagView(TagViewHodler holder, ApprovalItem.ItemData itemData, int position) {
-        holder.line.setVisibility(position == 0 ? View.GONE : View.VISIBLE);
-        holder.tagTv.setText(itemData.key);
-    }
-
-    @Override
-    public int getItemCount() {
-        return ListUtils.getSize(itemDatas);
-    }
-
-
-    private class TagViewHodler extends RecyclerView.ViewHolder {
-        View line;
-        TextView tagTv;
-
-        public TagViewHodler(View itemView) {
-            super(itemView);
-            line = itemView.findViewById(R.id.line);
-            tagTv = (TextView) itemView.findViewById(R.id.tagTv);
-        }
-    }
-
-    private class DateViewHodler extends RecyclerView.ViewHolder {
-        TextView keyTv, valueTv;
-
-        public DateViewHodler(View itemView) {
-            super(itemView);
-            keyTv = (TextView) itemView.findViewById(R.id.keyTv);
-            valueTv = (TextView) itemView.findViewById(R.id.valueTv);
-        }
-    }
-
-
-    private class BaseViewHodler extends RecyclerView.ViewHolder {
-        TextView key1Tv, value1Tv, key2Tv, value2Tv;
-        EditText value1Et, value2Et;
-        FrameLayout values2Fl, values1Fl;
-
-        public BaseViewHodler(Approval.ItemType type, View itemView) {
-            super(itemView);
-            key1Tv = (TextView) itemView.findViewById(R.id.key1Tv);
-            key2Tv = (TextView) itemView.findViewById(R.id.key2Tv);
-
-            value1Tv = (TextView) itemView.findViewById(R.id.value1Tv);
-            value2Tv = (TextView) itemView.findViewById(R.id.value2Tv);
-
-            value1Et = (EditText) itemView.findViewById(R.id.value1Et);
-            value2Et = (EditText) itemView.findViewById(R.id.value2Et);
-
-            values2Fl = (FrameLayout) itemView.findViewById(R.id.values2Fl);
-            values1Fl = (FrameLayout) itemView.findViewById(R.id.values1Fl);
-            switch (type) {
-                case V:
-                    setViewShowAble(false, key2Tv, values2Fl, value1Et);
-                    setViewShowAble(true, key1Tv, value1Tv, value2Tv, value2Et, values1Fl);
-                    break;
-                case P:
-                    setViewShowAble(false, key2Tv, values2Fl, value1Tv);
-                    setViewShowAble(true, key1Tv, value2Tv, value1Et, value2Et, values1Fl);
-
-                    break;
-                case P_P:
-                    setViewShowAble(false, value1Tv, value2Tv);
-                    setViewShowAble(true, key1Tv, key2Tv, value1Et, value2Et, values2Fl, values1Fl);
-                    break;
-                case V_V:
-                    setViewShowAble(false, value1Et, value2Et);
-                    setViewShowAble(true, key1Tv, key2Tv, value1Tv, value2Tv, values2Fl, values1Fl);
-                    break;
-                case P_V:
-                    setViewShowAble(false, value1Tv, value2Et);
-                    setViewShowAble(true, key1Tv, key2Tv, value2Tv, value1Et, values2Fl, values1Fl);
-                    break;
-                case V_P:
-                    setViewShowAble(false, value2Tv, value1Et);
-                    setViewShowAble(true, key1Tv, key2Tv, value1Tv, value2Et, values2Fl, values1Fl);
-
-                    break;
-            }
-        }
-
-        private void setViewShowAble(boolean showAble, View... views) {
-            if (views != null && views.length > 0) {
-                for (View v : views) {
-                    v.setVisibility(showAble ? View.VISIBLE : View.GONE);
-                }
-            }
-        }
-    }
-
-
-    private class TextChangListener extends EditChangeListener {
-        BaseViewHodler hodler;
-        private int position;
-
-        public TextChangListener(BaseViewHodler hodler, int position) {
-            this.hodler = hodler;
-            this.position = position;
-        }
-
-        @Override
-        public void afterTextChanged(Editable s) {
-            LogUtil.i("afterTextChanged=" + s);
-            if (this.position >= 0) {
-                if (this.hodler.value1Et != null && this.hodler.values1Fl.getVisibility() == View.VISIBLE
-                        && this.hodler.value1Et.getVisibility() == View.VISIBLE) {
-                    String value1Et = this.hodler.value1Et.getText().toString();
-                    itemDatas.get(this.position).values = value1Et == null ? "" : value1Et;
-                    LogUtil.i("V1=" + this.hodler.value1Et.getText().toString());
-                }
-                if (this.hodler.value2Et != null && this.hodler.values2Fl.getVisibility() == View.VISIBLE
-                        && this.hodler.value2Et.getVisibility() == View.VISIBLE) {
-                    String value2Et = this.hodler.value2Et.getText().toString();
-                    itemDatas.get(this.position).valuesTag = value2Et == null ? "" : value2Et;
-                    LogUtil.i("V2=" + this.hodler.value2Et.getText().toString());
-                }
-
-
-            }
-
-        }
-    }
-
-
-    private void selectItem(ApprovalItem.ItemData itemData, int position) {
-        ArrayList<SelectBean> beans = new ArrayList<>();
-        SelectBean bean = null;
-        String[] datas = null;
-        if (itemData != null && !StringUtils.isEmpty(itemData.valuesTag)) {
-            datas = itemData.valuesTag.split(";");
-        }
-        for (String data : datas) {
-            bean = new SelectBean();
-            bean.setName(data);
-            bean.setClick(false);
-            beans.add(bean);
-        }
-        Intent intent = new Intent(ct, SelectActivity.class);
-        intent.putExtra("type", 2);
-        intent.putParcelableArrayListExtra("data", beans);
-        intent.putExtra("title", getString(R.string.select));
-        LogUtil.i("position=" + position);
-        if (onitemClickListener != null)
-            onitemClickListener.onClick(position);
-        ct.startActivityForResult(intent, REQUEST_CODE);
-    }
-
-    private void showTimeSelect(final TextView showView, final int position) {
-        OASigninPicker picker = new OASigninPicker(ct);
-        picker.setRange(CalendarUtils.getCurrentYear(), CalendarUtils.getCurrentMonth(), CalendarUtils.getCurrentDate());
-        picker.setSelectedItem(CalendarUtils.getCurrentYear(), CalendarUtils.getCurrentMonth(), CalendarUtils.getCurrentDate());
-        picker.setOnDateTimePickListener(new OASigninPicker.OnDateTimePickListener() {
-            @Override
-            public void setTime(String year, String month, String day) {
-                String time = year + "-" + month + "-" + day;
-                showView.setText(time);
-                itemDatas.get(position).values = time;
-            }
-        });
-        picker.show();
-    }
-
-    private void setGravity(int gravity, TextView... views) {
-        if (views != null && views.length > 0) {
-            for (TextView v : views) {
-                v.setGravity(gravity);
-            }
-        }
-    }
-
-
-    private OnitemClickListener onitemClickListener;
-
-    public void setOnitemClickListener(OnitemClickListener onitemClickListener) {
-        this.onitemClickListener = onitemClickListener;
-    }
-
-    public interface OnitemClickListener {
-        void onClick(int position);
-    }
-}

+ 351 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/adapter/oa/ApprovalRVItemAdapter.java

@@ -0,0 +1,351 @@
+package com.xzjmyk.pm.activity.ui.erp.adapter.oa;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.graphics.drawable.Drawable;
+import android.support.v7.widget.RecyclerView;
+import android.text.Editable;
+import android.text.Html;
+import android.text.InputType;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.EditText;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.xzjmyk.pm.activity.AppConstant;
+import com.xzjmyk.pm.activity.MyApplication;
+import com.xzjmyk.pm.activity.R;
+import com.xzjmyk.pm.activity.helper.AvatarHelper;
+import com.xzjmyk.pm.activity.ui.erp.entity.EditChangeListener;
+import com.xzjmyk.pm.activity.ui.erp.model.oa.Approval;
+import com.xzjmyk.pm.activity.ui.erp.util.CommonUtil;
+import com.xzjmyk.pm.activity.ui.erp.util.Constants;
+import com.xzjmyk.pm.activity.ui.erp.util.ListUtils;
+import com.xzjmyk.pm.activity.ui.erp.util.LogUtil;
+import com.xzjmyk.pm.activity.ui.erp.util.OpenFilesUtils;
+import com.xzjmyk.pm.activity.ui.erp.util.StringUtils;
+import com.xzjmyk.pm.activity.ui.erp.util.TextUtil;
+import com.xzjmyk.pm.activity.ui.tool.SingleImagePreviewActivity;
+import com.xzjmyk.pm.activity.util.CalendarUtils;
+import com.xzjmyk.pm.activity.view.wheel.DatePicker;
+
+import java.io.File;
+import java.util.List;
+
+/**
+ * Created by Bitliker on 2017/7/10.
+ */
+
+public class ApprovalRVItemAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
+    public static final int REQUEST_CODE = 0x9172;
+    private Activity ct;
+    private Approval.Type type;
+    private List<Approval.Item> itemDatas;
+    private int itemPosition = 0;
+
+    public ApprovalRVItemAdapter(Activity ct, Approval.Type type, int itemPosition, List<Approval.Item> itemDatas) {
+        this.ct = ct;
+        this.type = type;
+        this.itemPosition = itemPosition;
+        this.itemDatas = itemDatas;
+    }
+
+
+    public List<Approval.Item> getItemDatas() {
+        return itemDatas;
+    }
+
+    public void setItemDatas(List<Approval.Item> itemDatas) {
+        this.itemDatas = itemDatas;
+    }
+
+    @Override
+    public int getItemCount() {
+        return ListUtils.getSize(itemDatas);
+    }
+
+    private Drawable getNextDrawable() {
+        Drawable nav_up = ct.getResources().getDrawable(R.drawable.oa_next);
+        nav_up.setBounds(0, 0, nav_up.getMinimumWidth(), nav_up.getMinimumHeight());
+        return nav_up;
+    }
+
+    @Override
+    public int getItemViewType(int position) {
+        return position;
+    }
+
+    @Override
+    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+        Approval.Item item = getItemDatas().get(viewType);
+        if (this.type == Approval.Type.ENCLOSURE) {
+            return new EnclosureViewHolder(parent);
+        } else if (this.type == Approval.Type.NODES) {
+            return new NodeViewHolder(parent);
+        } else {
+            return new BaseRVViewHodler(item, parent);
+        }
+
+
+    }
+
+    @Override
+    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
+        if (holder instanceof EnclosureViewHolder) {
+            bindEnclosure((EnclosureViewHolder) holder, position);
+        } else if (holder instanceof NodeViewHolder) {
+            bindNodeView((NodeViewHolder) holder, position);
+        } else if (holder instanceof BaseRVViewHodler) {
+            bindBaseRVView((BaseRVViewHodler) holder, position);
+        }
+    }
+
+    private void bindEnclosure(EnclosureViewHolder holder, final int position) {
+        String name = StringUtils.isEmpty(itemDatas.get(position).caption) ? "" : itemDatas.get(position).caption;
+        holder.nameTv.setText(Html.fromHtml("<u>" + name + "</u>"));
+        holder.nameTv.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                gotoReadEnclosure(itemDatas.get(position));
+            }
+        });
+    }
+
+    private void gotoReadEnclosure(Approval.Item item) {
+        String url = getImageUrl(item.id);
+        if (!StringUtils.isEmpty(item.caption)) {
+            if (item.caption.endsWith("jpeg") || item.caption.endsWith("jpg") || item.caption.endsWith("png")) {
+                Intent intent = new Intent(ct, SingleImagePreviewActivity.class);
+                intent.putExtra(AppConstant.EXTRA_IMAGE_URI, url);
+                ct.startActivity(intent);
+            } else {
+                OpenFilesUtils.downLoadFile(url, item.caption, new OpenFilesUtils.OnFileLoadListener() {
+                    @Override
+                    public void onLoadIng(int progress, int allProgress) {
+                        //TODO 下载进行中回调
+                    }
+
+                    @Override
+                    public void onSuccess(File file) {
+                        OpenFilesUtils.openCommonFils(ct, file);
+                    }
+
+                    @Override
+                    public void onFailure(String exception) {
+                        LogUtil.i("exception=" + exception);
+                    }
+                });
+            }
+        }
+    }
+
+    private void bindNodeView(NodeViewHolder holder, int position) {
+        Approval.Item itemData = itemDatas.get(position);
+        if (!StringUtils.isEmpty(itemData.status)) {
+            TextUtil.create()
+                    .addSection(itemData.status)
+                    .tint("已审批", 0x3C97D7)
+                    .tint("待审批", 0xB99400)
+                    .tint("未通过", 0xDC143C)
+                    .showIn(holder.valuesTv);
+        } else {
+            holder.valuesTv.setText("");
+        }
+        holder.timeTv.setText(StringUtils.isEmpty(itemData.values) ? "" : itemData.values);
+        holder.keyTv.setText(StringUtils.isEmpty(itemData.caption) ? "" : itemData.caption);
+        int reId = R.drawable.weishenpi;
+        if (!StringUtils.isEmpty(itemData.status)) {
+            String status = itemData.status.split("\\(")[0];
+            if (StringUtils.isEmpty(status)) status = "";
+            if ("已审批".equals(status) || "未通过".equals(status)) {
+                reId = R.drawable.yishenpi;
+            } else if ("待审批".equals(status)) {
+                reId = R.drawable.daishenpi;
+            } else {
+                reId = R.drawable.weishenpi;
+            }
+        }
+        holder.statusIV.setImageResource(reId);
+        AvatarHelper.getInstance().display(String.valueOf(itemData.id), holder.handIv, true, false);
+    }
+
+    private void bindBaseRVView(final BaseRVViewHodler holder, final int position) {
+        final Approval.Item itemData = itemDatas.get(position);
+        holder.key1Tv.setText(itemData.caption);
+        //0字符输入  1.数字输入  2.日期输入选择  3.下拉选择  4.多选选择
+        switch (itemData.inputType()) {
+            case 2:
+            case 3:
+            case 4:
+                holder.value1Tv.setCompoundDrawables(null, null, null, getNextDrawable());
+                holder.value1Tv.setOnClickListener(new View.OnClickListener() {
+                    @Override
+                    public void onClick(View v) {
+                        if (itemData.inputType() == 2) {
+                            showTimeSelect(holder.value1Tv, position);
+                        } else {
+                            selectItem(itemData, position);
+                        }
+                    }
+                });
+            case 1:
+                holder.value1Et.setInputType(InputType.TYPE_CLASS_NUMBER);
+                holder.value1Et.addTextChangedListener(new TextChangListener(holder, position));
+                break;
+            default:
+                holder.value1Et.setInputType(InputType.TYPE_CLASS_TEXT);
+                holder.value1Et.addTextChangedListener(new TextChangListener(holder, position));
+        }
+    }
+
+    private void showTimeSelect(final TextView showView, final int position) {
+        DatePicker picker = new DatePicker(ct, DatePicker.YEAR_MONTH_DAY);
+        picker.setRange(2015, 2019, true);
+        picker.setSelectedItem(CalendarUtils.getCurrentYear(), CalendarUtils.getCurrentMonth(), CalendarUtils.getCurrentDate());
+        picker.setOnDatePickListener(new DatePicker.OnYearMonthDayPickListener() {
+            @Override
+            public void onDatePicked(String year, String month, String day) {
+                String time = year + "-" + month + "-" + day;
+                showView.setText(time);
+                itemDatas.get(position).values = time;
+            }
+        });
+        picker.show();
+    }
+
+    private void selectItem(Approval.Item itemData, int position) {
+        String[] datas = null;
+        if (itemData != null && !StringUtils.isEmpty(itemData.data)) {
+            datas = itemData.data.split(";");
+        }
+        if (datas == null || datas.length <= 0) {
+
+        } else {
+
+        }
+    }
+
+    private class EnclosureViewHolder extends RecyclerView.ViewHolder {
+        TextView nameTv;
+
+        public EnclosureViewHolder(ViewGroup parent) {
+            this(LayoutInflater.from(ct).inflate(R.layout.item_approval_tag, parent, false));
+        }
+
+        public EnclosureViewHolder(View itemView) {
+            super(itemView);
+            itemView.findViewById(R.id.line).setVisibility(View.GONE);
+            nameTv = (TextView) itemView.findViewById(R.id.tagTv);
+        }
+    }
+
+    private class NodeViewHolder extends RecyclerView.ViewHolder {
+        ImageView handIv, statusIV;
+        TextView timeTv, keyTv, valuesTv;
+
+        public NodeViewHolder(ViewGroup parent) {
+            this(LayoutInflater.from(ct).inflate(R.layout.item_approval_node, parent, false));
+        }
+
+        public NodeViewHolder(View itemView) {
+            super(itemView);
+            timeTv = (TextView) itemView.findViewById(R.id.timeTv);
+            keyTv = (TextView) itemView.findViewById(R.id.keyTv);
+            valuesTv = (TextView) itemView.findViewById(R.id.valuesTv);
+            handIv = (ImageView) itemView.findViewById(R.id.handIv);
+            statusIV = (ImageView) itemView.findViewById(R.id.statusIV);
+        }
+    }
+
+    private class BaseRVViewHodler extends RecyclerView.ViewHolder {
+        TextView key1Tv, value1Tv, key2Tv, value2Tv;
+        EditText value1Et, value2Et;
+        FrameLayout values2Fl, values1Fl;
+
+        public BaseRVViewHodler(Approval.Item item, ViewGroup parent) {
+            this(item, LayoutInflater.from(ct).inflate(R.layout.item_rv_approval_key_values, parent, false));
+        }
+
+        public BaseRVViewHodler(Approval.Item item, View itemView) {
+            super(itemView);
+            key1Tv = (TextView) itemView.findViewById(R.id.key1Tv);
+            value1Tv = (TextView) itemView.findViewById(R.id.value1Tv);
+            value1Et = (EditText) itemView.findViewById(R.id.value1Et);
+            values1Fl = (FrameLayout) itemView.findViewById(R.id.values1Fl);
+
+            key2Tv = (TextView) itemView.findViewById(R.id.key2Tv);
+            value2Tv = (TextView) itemView.findViewById(R.id.value2Tv);
+            value2Et = (EditText) itemView.findViewById(R.id.value2Et);
+            values2Fl = (FrameLayout) itemView.findViewById(R.id.values2Fl);
+            if (item.twoColumn) {
+                setViewShowAble(true, key1Tv, values1Fl, key2Tv, values2Fl);
+            } else {
+                setViewShowAble(false, values2Fl, key2Tv);
+                setViewShowAble(true, key1Tv, values1Fl);
+            }
+            if (item.neerInput) {
+                //0字符输入  1.数字输入  2.日期输入选择  3.下拉选择  4.多选选择
+                switch (item.inputType()) {
+                    case 3:
+                    case 2:
+                        setViewShowAble(false, value1Et, value2Et);
+                        setViewShowAble(true, value1Tv, value2Tv);
+                        break;
+                    default:
+                        setViewShowAble(false, value1Tv, value2Tv);
+                        setViewShowAble(true, value1Et, value2Et);
+                        break;
+                }
+            } else {
+                setViewShowAble(false, value1Et, value2Et);
+            }
+        }
+
+        private void setViewShowAble(boolean showAble, View... views) {
+            if (views != null && views.length > 0) {
+                for (View v : views) {
+                    v.setVisibility(showAble ? View.VISIBLE : View.GONE);
+                }
+            }
+        }
+    }
+
+
+    private String getImageUrl(int id) {
+        return Constants.getAppBaseUrl(MyApplication.getInstance()) + "common/downloadbyId.action?id=" + id + "&sessionId=" +
+                CommonUtil.getSharedPreferences(MyApplication.getInstance(), "sessionId") +
+                "&sessionUser=" + CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_username") +
+                "&master=" + CommonUtil.getSharedPreferences(MyApplication.getInstance(), "erp_master");
+    }
+
+
+    private class TextChangListener extends EditChangeListener {
+        BaseRVViewHodler hodler;
+        private int position;
+
+        public TextChangListener(BaseRVViewHodler hodler, int position) {
+            this.hodler = hodler;
+            this.position = position;
+        }
+
+        @Override
+        public void afterTextChanged(Editable s) {
+            LogUtil.i("afterTextChanged=" + s);
+            if (this.position >= 0) {
+                if (this.hodler.value1Et != null && this.hodler.values1Fl.getVisibility() == View.VISIBLE
+                        && this.hodler.value1Et.getVisibility() == View.VISIBLE) {
+                    String value1Et = this.hodler.value1Et.getText().toString();
+                    itemDatas.get(this.position).values = value1Et == null ? "" : value1Et;
+                    LogUtil.i("V1=" + this.hodler.value1Et.getText().toString());
+                }
+
+            }
+
+        }
+    }
+
+
+}

+ 50 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/adapter/oa/BaseApprovalAdapter.java

@@ -0,0 +1,50 @@
+package com.xzjmyk.pm.activity.ui.erp.adapter.oa;
+
+import android.content.Context;
+import android.widget.BaseAdapter;
+
+import com.xzjmyk.pm.activity.ui.erp.model.oa.Approvals;
+import com.xzjmyk.pm.activity.ui.erp.util.ListUtils;
+
+import java.util.List;
+
+/**
+ * Created by Bitliker on 2017/7/10.
+ */
+
+public abstract class BaseApprovalAdapter extends BaseAdapter {
+
+    protected Context ct;
+    protected List<Approvals.ItemData> itemDatas;
+
+    public BaseApprovalAdapter(Context ct, List<Approvals.ItemData> itemDatas) {
+        this.ct = ct;
+        this.itemDatas = itemDatas;
+    }
+
+
+    public List<Approvals.ItemData> getItemDatas() {
+        return itemDatas;
+    }
+
+    public void setItemDatas(List<Approvals.ItemData> itemDatas) {
+        this.itemDatas = itemDatas;
+    }
+
+
+    @Override
+    public int getCount() {
+        return ListUtils.getSize(itemDatas);
+    }
+
+    @Override
+    public Object getItem(int position) {
+        return itemDatas.get(position);
+    }
+
+    @Override
+    public long getItemId(int position) {
+        return position;
+    }
+
+}

+ 18 - 18
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/adapter/oa/DetailedApprovalAdapter.java

@@ -9,7 +9,7 @@ import android.widget.TextView;
 
 import com.andreabaccega.widget.FormEditText;
 import com.xzjmyk.pm.activity.R;
-import com.xzjmyk.pm.activity.ui.erp.model.oa.Approval;
+import com.xzjmyk.pm.activity.ui.erp.model.oa.Approvals;
 import com.xzjmyk.pm.activity.ui.erp.util.ListUtils;
 
 import java.util.List;
@@ -22,43 +22,43 @@ public class DetailedApprovalAdapter extends RecyclerView.Adapter<RecyclerView.V
 
 
     private Context ct;
-    private List<Approval.ItemData> itemDatas;
+    private List<Approvals.ItemData> itemDatas;
 
-    public DetailedApprovalAdapter(Context ct, List<Approval.ItemData> itemDatas) {
+    public DetailedApprovalAdapter(Context ct, List<Approvals.ItemData> itemDatas) {
         this.ct = ct;
         this.itemDatas = itemDatas;
     }
 
-    public List<Approval.ItemData> getItemDatas() {
+    public List<Approvals.ItemData> getItemDatas() {
         return itemDatas;
     }
 
-    public void setItemDatas(List<Approval.ItemData> itemDatas) {
+    public void setItemDatas(List<Approvals.ItemData> itemDatas) {
         this.itemDatas = itemDatas;
     }
 
     @Override
     public int getItemViewType(int position) {
-        return Approval.type2Int(itemDatas.get(position).type);
+        return Approvals.type2Int(itemDatas.get(position).type);
     }
 
     @Override
     public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
-        Approval.ItemType type = Approval.int2Type(viewType);
+        Approvals.ItemType type = Approvals.int2Type(viewType);
         View view = null;
-        if (type == Approval.ItemType.TAG) {
+        if (type == Approvals.ItemType.TAG) {
             view = LayoutInflater.from(ct).inflate(R.layout.item_approval_tag, parent, false);
             return new TagViewHodler(view);
-        } else if (Approval.ItemType.V_V == type) {
+        } else if (Approvals.ItemType.V_V == type) {
             view = LayoutInflater.from(ct).inflate(R.layout.item_approval_k_v_k_v, parent, false);
             return new KVKVViewHodler(view);
-        } else if (Approval.ItemType.V_P == type) {
+        } else if (Approvals.ItemType.V_P == type) {
             view = LayoutInflater.from(ct).inflate(R.layout.item_approval_k_p, parent, false);
             return new KPViewHodler(view);
-        } else if (Approval.ItemType.P_P == type) {
+        } else if (Approvals.ItemType.P_P == type) {
             view = LayoutInflater.from(ct).inflate(R.layout.item_approval_k_p_k_p, parent, false);
             return new KPKPViewHodler(view);
-        } else if (Approval.ItemType.DATE == type) {
+        } else if (Approvals.ItemType.DATE == type) {
             view = LayoutInflater.from(ct).inflate(R.layout.item_approval_date, parent, false);
             return new DateViewHodler(view);
         } else {
@@ -69,7 +69,7 @@ public class DetailedApprovalAdapter extends RecyclerView.Adapter<RecyclerView.V
 
     @Override
     public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
-        Approval.ItemData itemData = itemDatas.get(position);
+        Approvals.ItemData itemData = itemDatas.get(position);
         if (holder instanceof TagViewHodler) {
             bindTagView((TagViewHodler) holder, itemData, position);
         } else if (holder instanceof KVViewHodler) {
@@ -83,29 +83,29 @@ public class DetailedApprovalAdapter extends RecyclerView.Adapter<RecyclerView.V
         }
     }
 
-    private void bindTagView(TagViewHodler holder, Approval.ItemData itemData, int position) {
+    private void bindTagView(TagViewHodler holder, Approvals.ItemData itemData, int position) {
         holder.line.setVisibility(position == 0 ? View.GONE : View.VISIBLE);
         holder.tagTv.setText(itemData.key);
     }
 
-    private void bindKVView(KVViewHodler holder, Approval.ItemData itemData) {
+    private void bindKVView(KVViewHodler holder, Approvals.ItemData itemData) {
         holder.keyTv.setText(itemData.key);
         holder.valueTv.setText(itemData.values);
     }
 
-    private void bindKVKVView(KVKVViewHodler holder, Approval.ItemData itemData) {
+    private void bindKVKVView(KVKVViewHodler holder, Approvals.ItemData itemData) {
         holder.key1Tv.setText(itemData.key);
         holder.value1Tv.setText(itemData.values);
         holder.key1Tv.setText(itemData.keyTag);
         holder.value1Tv.setText(itemData.valuesTag);
     }
 
-    private void bindKPView(KPViewHodler holder, Approval.ItemData itemData) {
+    private void bindKPView(KPViewHodler holder, Approvals.ItemData itemData) {
         holder.keyTv.setText(itemData.key);
         holder.valueTv.setText(itemData.values);
     }
 
-    private void bindKPKPView(KPKPViewHodler holder, Approval.ItemData itemData) {
+    private void bindKPKPView(KPKPViewHodler holder, Approvals.ItemData itemData) {
         holder.key1Tv.setText(itemData.key);
         holder.value1Tv.setText(itemData.values);
         holder.key1Tv.setText(itemData.keyTag);

+ 46 - 156
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/model/oa/Approval.java

@@ -1,180 +1,70 @@
 package com.xzjmyk.pm.activity.ui.erp.model.oa;
 
-import android.view.Gravity;
-
-import com.xzjmyk.pm.activity.R;
-import com.xzjmyk.pm.activity.ui.erp.util.StringUtils;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import static com.xzjmyk.pm.activity.ui.erp.model.oa.Approval.ItemType.TAG;
+import java.util.List;
 
 /**
- * 1.主表显示
- * ··头像
- * ··标题
- * ··状态
- * ..显示列表
- * <p>
- * 2.明细表显示
- * ..显示列表
- * <p>
- * 3.附件显示
- * ..显示列表(附件网址,附件名称)
- * <p>
- * 4.要点显示
- * ..显示列表
- * <p>
- * 5.审批节点显示
- * ..显示列表
- * <p>
- * 6.审批意见和操作选项
- * <p>
- * <p>
- * <p>
- * 显示列表:
- * ..id
- * ..type 类型
- * ..title 显示标题
- * ..subTitle 显示副标题
- * ..tag    显示状态
- * <p>
- * <p>
- * type  如下
- * Created by Bitliker on 2017/7/7.
+ * Created by Bitliker on 2017/7/21.
  */
-public class Approval {
 
+public class Approval {
+    private String title;
+    private Type type;
+    private List<Item> items;
 
-    //节点信息记录
-    public static class NodeRecord {
-        public int id = 0;
-        public int imId = 0;
-        public int nodeId = 0;
-        public int status = 0;//1.待审批("待审批"&&处理人为自己)  2.已审批(已审批) 3.已审批(未通过) 4.待审批(当前处理人为空)   0.不显示任何状态栏
-        public String title = "";
-        public String nodeName = "";
-        public String needInputKeys = "";
-        public String showNeedMessage = "";//保存必填字段时候,,没有填写时候提示信息
-        public String processInstanceId = "";
-        public String caller = "";
+    public String getTitle() {
+        return title;
     }
 
-    public static class ItemData {
-        public boolean mustInput;
-        public int id;
-        public ItemType type;
-        public int inputType;//1数字 2.日期  3|0.字符    4.浮点型
-        public int editGravity = Gravity.LEFT;//
-        public int editBg = R.drawable.shape_from_edit_hint;//
-        public String status = "";
-        public String key = "";
-        public String values = "";
-        public String keyTag = "";
-        public String valuesTag = "";
-        public String idTag = "";
-        public String data = "";
-
-
-        public boolean isNumber() {
-            return inputType == 1 || inputType == 4;
-        }
-
-        public boolean isDate() {
-            return inputType == 2;
-        }
-
-        @Override
-        public String toString() {
-            Map<String, Object> map = new HashMap<>();
-            map.put("mustInput", mustInput);
-            map.put("id", id);
-            map.put("status", status);
-            map.put("inputType", inputType);
-            map.put("type", type);
-            map.put("key", key);
-            map.put("values", values);
-            map.put("keyTag", keyTag);
-            map.put("editBg", editBg);
-            map.put("editGravity", editGravity);
-            map.put("valuesTag", valuesTag);
-            map.put("idTag", idTag);
-            return StringUtils.mapToJson(map);
-        }
+    public void setTitle(String title) {
+        this.title = title;
     }
 
-    public static class Enclosure {
-        public int reId;
-        public EnclosureType type;
-        public String name;
-        public String url;
+    public Type getType() {
+        return type == null ? Type.MAIN : type;
+    }
 
-        @Override
-        public String toString() {
-            Map<String, Object> map = new HashMap<>();
-            map.put("reId", reId);
-            map.put("url", url);
-            map.put("name", name);
-            map.put("type", type);
-            return StringUtils.mapToJson(map);
-        }
+    public void setType(Type type) {
+        this.type = type;
     }
 
-    public enum ItemType {
-        V           //一行显示一个字段
-        , P          //一行显示一个输入字段
-        , V_P        //一行显示两个字段,显示|输入
-        , P_V        //一行显示两个字段,输入|显示
-        , V_V        //
-        , P_P        //
-        , TAG           //标签
-        , DATE          //日期
-        , SELECT    //选择
+    public List<Item> getItems() {
+        return items;
     }
 
-    //附件类型
-    public enum EnclosureType {
-        PICTURE, WORK, PDF
+    public void setItems(List<Item> items) {
+        this.items = items;
     }
 
+    public static class Item {
+        public int id;
+        public String type;//
+        public boolean neerInput = false;//是否需要输入
+        public boolean mustInput = false;//是否是必填字段
+        public boolean twoColumn = false;//是否显示两列
+        public String caption = "";//字幕,表示备注
+        public String values = "";//字幕对应的值显示
+        public String valuesKey = "";//字幕对应的值显示的key值
+        public String status = "";//状态
+        public String data = "";//下拉框对应的值
+        public String idKey = "";
+
+
+        /**
+         * @return 输入类型:0字符输入  1.数字输入  2.日期输入选择  3.下拉选择  4.多选选择
+         */
+        public int inputType() {
+            return 0;
+        }
 
-    public static int type2Int(ItemType type) {
-        if (type == ItemType.V) {
-            return 1;
-        } else if (type == ItemType.P) {
-            return 2;
-        } else if (type == ItemType.V_P) {
-            return 3;
-        } else if (type == ItemType.P_V) {
-            return 4;
-        } else if (type == ItemType.V_V) {
-            return 5;
-        } else if (type == ItemType.TAG) {
-            return 6;
-        } else if (type == ItemType.DATE) {
-            return 7;
-        } else if (type == ItemType.P_P) {
-            return 8;
-        } else if (type == ItemType.SELECT) {
-            return 9;
-        } else return 10;
 
     }
 
-    public static ItemType int2Type(int type) {
-        switch (type) {
-            case 1: return ItemType.V;
-            case 2: return ItemType.P;
-            case 3: return ItemType.V_P;
-            case 4: return ItemType.P_V;
-            case 5: return ItemType.V_V;
-            case 6: return ItemType.TAG;
-            case 7: return ItemType.DATE;
-            case 8: return ItemType.P_P;
-            case 9: return ItemType.SELECT;
-            default:
-                return TAG;
-        }
+    public enum Type {
+        TITLE//标题
+        , MAIN   //主表
+        , DETAIL//从表
+        , ENCLOSURE//附件
+        , POINTS//要点
+        , NODES//审批节点
     }
 }

+ 221 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/model/oa/Approvals.java

@@ -0,0 +1,221 @@
+package com.xzjmyk.pm.activity.ui.erp.model.oa;
+
+import android.view.Gravity;
+
+import com.xzjmyk.pm.activity.R;
+import com.xzjmyk.pm.activity.ui.erp.util.StringUtils;
+import com.xzjmyk.pm.activity.util.TimeUtils;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import static com.xzjmyk.pm.activity.ui.erp.model.oa.Approvals.ItemType.TAG;
+
+/**
+ * 1.主表显示
+ * ··头像
+ * ··标题
+ * ··状态
+ * ..显示列表
+ * <p>
+ * 2.明细表显示
+ * ..显示列表
+ * <p>
+ * 3.附件显示
+ * ..显示列表(附件网址,附件名称)
+ * <p>
+ * 4.要点显示
+ * ..显示列表
+ * <p>
+ * 5.审批节点显示
+ * ..显示列表
+ * <p>
+ * 6.审批意见和操作选项
+ * <p>
+ * <p>
+ * <p>
+ * 显示列表:
+ * ..id
+ * ..type 类型
+ * ..title 显示标题
+ * ..subTitle 显示副标题
+ * ..tag    显示状态
+ * <p>
+ * <p>
+ * type  如下
+ * Created by Bitliker on 2017/7/7.
+ */
+public class Approvals {
+
+
+    //节点信息记录
+    public static class NodeRecord {
+        public int id = 0;
+        public int imId = 0;
+        public int nodeId = 0;
+        public int status = 0;//1.待审批("待审批"&&处理人为自己)  2.已审批(已审批) 3.已审批(未通过) 4.待审批(当前处理人为空)   0.不显示任何状态栏
+        public String title = "";
+        public String nodeName = "";
+        public String needInputKeys = "";
+        public String showNeedMessage = "";//保存必填字段时候,,没有填写时候提示信息
+        public String processInstanceId = "";
+        public String caller = "";
+    }
+
+    public static class ItemData {
+        public boolean mustInput;
+        public int id;
+        public ItemType type;
+        public int inputType;//1数字 2.日期  3|0.字符    4.浮点型
+        public int editGravity = Gravity.LEFT;//
+        public int editBg = R.drawable.shape_from_edit_hint;//
+        public String status = "";
+        public String key = "";
+        public String values = "";
+        public String keyTag = "";
+        public String valuesTag = "";
+        public String idTag = "";
+        public String data = "";
+        public String fdType = "";
+
+
+        public boolean isNumber() {
+            return inputType == 1 || inputType == 4;
+        }
+
+        public boolean isDate() {
+            return inputType == 2;
+        }
+
+        public void data2Values() {
+            if (fdType.equals("D")) {
+                long time = TimeUtils.f_str_2_long(values);
+                if (time > 0) {
+                    values = TimeUtils.s_long_2_str(time);
+                }
+            } else if ("C".equals(fdType) || "YN".equals(fdType)) {
+                if (values.equals("-1")) values = "是";
+                else if (values.equals("0")) values = "否";
+
+            } else if ("B".equals(fdType)) {
+                if (values.equals("1")) values = "是";
+                else values = "否";
+            }
+            //判断输入类型
+            if (fdType.equals("D")) {
+                inputType = 2;
+            } else if (fdType.equals("floatcolumn8")) {
+                inputType = 4;
+            } else {
+                inputType = 1;
+            }
+        }
+
+        public Object getValues() {
+            if ("C".equals(fdType) || "YN".equals(fdType)) {
+                if (values.equals("是")) return -1;
+                else if (values.equals("否")) return 0;
+            } else if ("B".equals(fdType)) {
+                if (values.equals("是")) return 1;
+                else return 0;
+            }
+            return values;
+        }
+
+        public boolean isSelect() {
+            return (fdType.equals("C") || fdType.equals("B") || fdType.equals("YN"));
+        }
+
+        @Override
+        public String toString() {
+            Map<String, Object> map = new HashMap<>();
+            map.put("mustInput", mustInput);
+            map.put("id", id);
+            map.put("status", status);
+            map.put("inputType", inputType);
+            map.put("type", type);
+            map.put("key", key);
+            map.put("values", values);
+            map.put("keyTag", keyTag);
+            map.put("editBg", editBg);
+            map.put("editGravity", editGravity);
+            map.put("valuesTag", valuesTag);
+            map.put("idTag", idTag);
+            return StringUtils.mapToJson(map);
+        }
+    }
+
+    public static class Enclosure {
+        public int reId;
+        public EnclosureType type;
+        public String name;
+        public String url;
+
+        @Override
+        public String toString() {
+            Map<String, Object> map = new HashMap<>();
+            map.put("reId", reId);
+            map.put("url", url);
+            map.put("name", name);
+            map.put("type", type);
+            return StringUtils.mapToJson(map);
+        }
+    }
+
+    public enum ItemType {
+        V           //一行显示一个字段
+        , P          //一行显示一个输入字段
+        , V_P        //一行显示两个字段,显示|输入
+        , P_V        //一行显示两个字段,输入|显示
+        , V_V        //
+        , P_P        //
+        , TAG           //标签
+        , DATE          //日期
+        , SELECT    //选择
+    }
+
+    //附件类型
+    public enum EnclosureType {
+        PICTURE, WORK, PDF
+    }
+
+
+    public static int type2Int(ItemType type) {
+        if (type == ItemType.V) {
+            return 1;
+        } else if (type == ItemType.P) {
+            return 2;
+        } else if (type == ItemType.V_P) {
+            return 3;
+        } else if (type == ItemType.P_V) {
+            return 4;
+        } else if (type == ItemType.V_V) {
+            return 5;
+        } else if (type == ItemType.TAG) {
+            return 6;
+        } else if (type == ItemType.DATE) {
+            return 7;
+        } else if (type == ItemType.P_P) {
+            return 8;
+        } else if (type == ItemType.SELECT) {
+            return 9;
+        } else return 10;
+
+    }
+
+    public static ItemType int2Type(int type) {
+        switch (type) {
+            case 1: return ItemType.V;
+            case 2: return ItemType.P;
+            case 3: return ItemType.V_P;
+            case 4: return ItemType.P_V;
+            case 5: return ItemType.V_V;
+            case 6: return ItemType.TAG;
+            case 7: return ItemType.DATE;
+            case 8: return ItemType.P_P;
+            case 9: return ItemType.SELECT;
+            default:
+                return TAG;
+        }
+    }
+}

+ 111 - 141
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/ApprovalPresenter.java

@@ -13,7 +13,7 @@ import com.xzjmyk.pm.activity.MyApplication;
 import com.xzjmyk.pm.activity.R;
 import com.xzjmyk.pm.activity.ui.erp.db.DBManager;
 import com.xzjmyk.pm.activity.ui.erp.entity.EmployeesEntity;
-import com.xzjmyk.pm.activity.ui.erp.model.oa.Approval;
+import com.xzjmyk.pm.activity.ui.erp.model.oa.Approvals;
 import com.xzjmyk.pm.activity.ui.erp.presenter.imp.IApproval;
 import com.xzjmyk.pm.activity.ui.erp.util.CommonUtil;
 import com.xzjmyk.pm.activity.ui.erp.util.Constants;
@@ -58,12 +58,8 @@ public class ApprovalPresenter implements OnHttpResultListener {
     private final int LOAD_FORMAND_GRIDDATA = 0x21;//当前明细表
 
     private DBManager manager;
-    private Approval.NodeRecord record;
-    private List<Approval.ItemData> mainList;//主表
-    private List<Approval.ItemData> detailedList;//明细表
-    private List<Approval.ItemData> nodeList;//历史审批节点列表
-    private List<Approval.ItemData> pointsList;//要点列表
-    private List<Approval.Enclosure> enclosureList;//附件列表
+    private Approvals.NodeRecord record;
+    private List<Approvals.ItemData> pointsList;//要点列表,用于记录
 
     private IApproval iApproval;
     private boolean submiting;
@@ -85,14 +81,9 @@ public class ApprovalPresenter implements OnHttpResultListener {
     }
 
     private void initLoad(int nodeId) {
-        iApproval.initStatus();
-        record = new Approval.NodeRecord();
-        mainList = new ArrayList<>();
-        detailedList = new ArrayList<>();
-        nodeList = new ArrayList<>();
-        pointsList = new ArrayList<>();
-        enclosureList = new ArrayList<>();
+        record = new Approvals.NodeRecord();
         record.nodeId = nodeId;
+        iApproval.initStatus();
         loadCurrentNode();
     }
 
@@ -103,10 +94,48 @@ public class ApprovalPresenter implements OnHttpResultListener {
         }
     }
 
+    public void loadProcessUpdate(String nodeLog,
+                                  List<Approvals.ItemData> mainList,
+                                  List<Approvals.ItemData> detailedList
+            , List<Approvals.ItemData> pointsList) {
+        this.pointsList = pointsList;
+        if (!customDes(new StringBuilder(), pointsList))
+            return;
+        String url = "common/processUpdate.action";
+        Map<String, Object> param = new HashMap<>();
+        Map<String, Object> formStore = new HashMap<>();
+        List<Map<String, Object>> params = new ArrayList<>();
+        if (!putItem2FormStore(formStore, mainList)) {
+            return;
+        }
+        if (!putItem2Params(params, detailedList)) {
+            return;
+        }
+        if ((formStore.isEmpty() || formStore.size() <= 1) && ListUtils.isEmpty(params)) {
+            LogUtil.i("formStore.isEmpty()&&ListUtils.isEmpty(params)");
+            agree(nodeLog);
+            return;
+        }
+        iApproval.showLoading();
+        param.put("caller", record.caller);
+        param.put("processInstanceId", record.processInstanceId);
+        String form = StringUtils.mapToJson(formStore);
+        param.put("formStore", StringUtils.isEmpty(form) ? "{}" : form);
+        param.put("param", StringUtils.mapToJson(params));
+        Bundle bundle = new Bundle();
+        bundle.putString("nodeLog", nodeLog);
+        Request.Bulider bulider = new Request.Bulider()
+                .setUrl(url)
+                .setBundle(bundle)
+                .setWhat(LOAD_PROCESS_UPDATE)
+                .setParam(param);
+        OAHttpHelper.getInstance().requestHttp(bulider.bulid(), this);
+    }
 
-    public void agree(String nodeLog) {
+    private void agree(String nodeLog) {
         StringBuilder customDes = new StringBuilder();
-        if (!customDes(customDes)) return;
+        if (!customDes(customDes, pointsList)) return;
+        pointsList = new ArrayList<>();
         LogUtil.i("customDes=" + customDes.toString());
         if (!canSubmit()) return;
         submiting = true;
@@ -167,7 +196,7 @@ public class ApprovalPresenter implements OnHttpResultListener {
         param.put("taskId", record.nodeId);
         param.put("assigneeId", emCode);//新处理人的员工编号
         param.put("processInstanceId", record.processInstanceId);//流程实例id
-        param.put("description", nodeLog.getText().toString());//流程实例id
+        param.put("description", OACheckUtil.getText(nodeLog));//流程实例id
         param.put("_center", "0");//是否集团账套
         param.put("_noc", 1);//权限管控
         Request.Bulider bulider = new Request.Bulider()
@@ -195,6 +224,8 @@ public class ApprovalPresenter implements OnHttpResultListener {
 
     public void loadNextProcess() {
         iApproval.showLoading();
+        if (submiting) return;
+        submiting = true;
         String url = "common/getNextProcess.action";
         Map<String, Object> param = new HashMap<>();
         param.put("taskId", record.nodeId);
@@ -296,40 +327,6 @@ public class ApprovalPresenter implements OnHttpResultListener {
         OAHttpHelper.getInstance().requestHttp(bulider.bulid(), this);
     }
 
-    public boolean loadProcessUpdate(String nodeLog) {
-        String url = "common/processUpdate.action";
-        Map<String, Object> param = new HashMap<>();
-        Map<String, Object> formStore = new HashMap<>();
-        List<Map<String, Object>> params = new ArrayList<>();
-        LogUtil.i("loadProcessUpdate");
-        if (!putItem2FormStore(formStore)) {
-            return false;
-        }
-        if (!putItem2Params(params)) {
-            return false;
-        }
-        if ((formStore.isEmpty() || formStore.size() <= 1) && ListUtils.isEmpty(params)) {
-            LogUtil.i("formStore.isEmpty()&&ListUtils.isEmpty(params)");
-            agree(nodeLog);
-            return true;
-        }
-        iApproval.showLoading();
-        param.put("caller", record.caller);
-        param.put("processInstanceId", record.processInstanceId);
-        String form = StringUtils.mapToJson(formStore);
-        param.put("formStore", StringUtils.isEmpty(form) ? "{}" : form);
-        param.put("param", StringUtils.mapToJson(params));
-        Bundle bundle = new Bundle();
-        bundle.putString("nodeLog", nodeLog);
-        Request.Bulider bulider = new Request.Bulider()
-                .setUrl(url)
-                .setBundle(bundle)
-                .setWhat(LOAD_PROCESS_UPDATE)
-                .setParam(param);
-        OAHttpHelper.getInstance().requestHttp(bulider.bulid(), this);
-        return true;
-    }
-
 
     @Override
     public void result(int what, boolean isJSON, String message, Bundle bundle) {
@@ -354,6 +351,7 @@ public class ApprovalPresenter implements OnHttpResultListener {
                             }
                         }
                     });
+                    submiting = false;
                     break;
                 case LOAD_JNODES:
                     handlerNode(object);
@@ -425,13 +423,16 @@ public class ApprovalPresenter implements OnHttpResultListener {
     public void error(int what, String message, Bundle bundle) {
         if (StringUtils.isEmpty(message)) return;
         iApproval.dimssLoading();
+        submiting = false;
         if (what == LOAD_AGREE && message.contains("程序错误")) {
             loadEndProcess();
-            submiting = false;
         } else {
-            String errorKey = "esss";
+            String errorKey = "exceptionInfo";
             if (new JsonValidator().validate(message) && !StringUtils.isEmpty(getJson2Text(parseObject(message), errorKey))) {
-                iApproval.showToast(getJson2Text(parseObject(message), errorKey), R.color.load_submit);
+                LogUtil.i("new JsonValidator().validate(message) && !StringUtils.isEmpty(getJson2Text(parseObject(message), errorKey)");
+                String remain = getJson2Text(parseObject(message), errorKey);
+                LogUtil.i("remain=" + remain);
+                iApproval.showToast(remain, R.color.load_submit);
             } else {
                 iApproval.showToast(message, R.color.load_submit);
             }
@@ -493,7 +494,7 @@ public class ApprovalPresenter implements OnHttpResultListener {
             loadDetailedList();
             loadCustomSetupOfTask();
         } else {
-            //TODO 由于个别原因出现的错误
+            submiting = false;
         }
     }
 
@@ -508,8 +509,9 @@ public class ApprovalPresenter implements OnHttpResultListener {
                 }
             });
             if (!ListUtils.isEmpty(formconfigs) && formdata != null) {
-                List<Approval.ItemData> itemDatas = setData2List(formdata, formconfigs);
+                List<Approvals.ItemData> itemDatas = setData2List(formdata, formconfigs);
                 if (!ListUtils.isEmpty(itemDatas)) {
+                    final List<Approvals.ItemData> mainList = new ArrayList<>();
                     mainList.addAll(itemDatas);
                     OAHttpHelper.getInstance().post(new Runnable() {
                         @Override
@@ -521,14 +523,15 @@ public class ApprovalPresenter implements OnHttpResultListener {
             }
             JSONArray griddatas = OACheckUtil.getJsonArray(object, "griddata");
             JSONArray gridconfigs = OACheckUtil.getJsonArray(object, "gridconfigs");
+            final List<Approvals.ItemData> detailedList = new ArrayList<>();
             if (!ListUtils.isEmpty(griddatas) && !ListUtils.isEmpty(gridconfigs)) {
                 for (int i = 0; i < griddatas.size(); i++) {
                     //获取到单个明细表单
-                    List<Approval.ItemData> itemDatas = setData2List(griddatas.getJSONObject(i), gridconfigs);
+                    List<Approvals.ItemData> itemDatas = setData2List(griddatas.getJSONObject(i), gridconfigs);
                     if (!ListUtils.isEmpty(itemDatas)) {
-                        Approval.ItemData itemData = new Approval.ItemData();
+                        Approvals.ItemData itemData = new Approvals.ItemData();
                         itemData.key = MyApplication.getInstance().getString(R.string.serial_number) + (i + 1);
-                        itemData.type = Approval.ItemType.TAG;
+                        itemData.type = Approvals.ItemType.TAG;
                         itemDatas.add(0, itemData);
                         detailedList.addAll(itemDatas);
                     }
@@ -556,11 +559,12 @@ public class ApprovalPresenter implements OnHttpResultListener {
     }
 
     private void handlerEnclosure(JSONArray array) throws Exception {
+        List<Approvals.Enclosure> enclosureList = new ArrayList<>();
         if (!ListUtils.isEmpty(array)) {
             for (int i = 0; i < array.size(); i++) {
                 JSONObject o = array.getJSONObject(i);
                 if (o == null) continue;
-                Approval.Enclosure enclosure = new Approval.Enclosure();
+                Approvals.Enclosure enclosure = new Approvals.Enclosure();
                 enclosure.reId = OACheckUtil.getJsonIntager(o, "fp_id");
 //                enclosure.url = baseUrl + OACheckUtil.getJson2Text(o, "fp_path");
                 enclosure.url = getImageUrl(enclosure.reId);
@@ -571,15 +575,15 @@ public class ApprovalPresenter implements OnHttpResultListener {
         iApproval.showEnclosureList(enclosureList);
     }
 
-    private List<Approval.ItemData> setData2List(JSONObject data, JSONArray configs) throws Exception {
-        List<Approval.ItemData> itemDatas = new ArrayList<>();
+    private List<Approvals.ItemData> setData2List(JSONObject data, JSONArray configs) throws Exception {
+        List<Approvals.ItemData> itemDatas = new ArrayList<>();
         String idTag = "";
         int id = 0;
         StringBuilder merged = new StringBuilder();
         for (int i = 0; i < configs.size(); i++) {
             JSONObject config = configs.getJSONObject(i);
             if (config == null) continue;
-            Approval.ItemData itemData = new Approval.ItemData();
+            Approvals.ItemData itemData = new Approvals.ItemData();
             String key = getJson2Text(config, "FD_CAPTION", "DG_CAPTION");//获取第一个字段字段名称
             String valueKey = getJson2Text(config, "FD_FIELD", "DG_FIELD");
             String type = getJson2Text(config, "FD_TYPE", "DG_TYPE");
@@ -597,41 +601,22 @@ public class ApprovalPresenter implements OnHttpResultListener {
             boolean mergeAble = OACheckUtil.getJsonIntager(config, "FD_APPWIDTH", "FD_APPWIDTH") == 1 || "MT".equals(OACheckUtil.getJson2Text(config, "FD_TYPE"));
             itemData.key = key;
             itemData.valuesTag = valueKey;
-            if (type.equals("D")) {
-                long time = TimeUtils.f_str_2_long(value);
-                if (time > 0) {
-                    itemData.values = TimeUtils.s_long_2_str(time);
-                } else {
-                    itemData.values = value;
-                }
-            } else if ("C".equals(type)) {
-                if (value.equals("0") || value.equals("-1")) {
-                    if (value.equals("0")) itemData.values = "是";
-                    else itemData.values = "否";
-                } else {
-                    itemData.values = value;
-                }
-            } else {
-                itemData.values = value;
-            }
+            itemData.values = value;
+            itemData.fdType = type;
+            itemData.data2Values();
             itemData.mustInput = true;
-            if (type.equals("D")) {
-                itemData.inputType = 2;
-            } else if (type.equals("floatcolumn8")) {
-                itemData.inputType = 4;
-            } else {
-                itemData.inputType = 1;
-            }
+
+
             if (!StringUtils.isEmpty(record.needInputKeys) && record.needInputKeys.contains(valueKey) && record.status == 1) {
-                if ("C".equals(type)) {
+                if (itemData.isSelect()) {
                     itemData.data = "是;否";
-                    itemData.type = Approval.ItemType.SELECT;
+                    itemData.type = Approvals.ItemType.SELECT;
                 } else {
-                    itemData.type = Approval.ItemType.P;
+                    itemData.type = Approvals.ItemType.P;
                 }
             } else {
                 if (StringUtils.isEmpty(itemData.values)) continue;//如果不是要输入的对象,同时显示值为空,需要隐藏去
-                itemData.type = Approval.ItemType.V;
+                itemData.type = Approvals.ItemType.V;
             }
             if (mergeAble) {
                 String valueTagKey = getJson2Text(config, "FD_LOGICTYPE", "DG_LOGICTYPE");//获取第二个值的key
@@ -646,7 +631,7 @@ public class ApprovalPresenter implements OnHttpResultListener {
             itemDatas.add(itemData);
         }
         if (!StringUtils.isEmpty(idTag) && id > 0 && !ListUtils.isEmpty(itemDatas)) {
-            for (Approval.ItemData itemData : itemDatas) {
+            for (Approvals.ItemData itemData : itemDatas) {
                 itemData.idTag = idTag;
                 itemData.id = id;
             }
@@ -670,16 +655,16 @@ public class ApprovalPresenter implements OnHttpResultListener {
                 JSONArray nodes = OACheckUtil.getJsonArray(object, "nodes");
                 JSONArray processs = OACheckUtil.getJsonArray(object, "processs");
                 JSONArray datas = OACheckUtil.getJsonArray(object, "data");
-                List<Approval.ItemData> itemDatas = getNodDatas(datas);
+                List<Approvals.ItemData> itemDatas = getNodDatas(datas);
                 if (!ListUtils.isEmpty(processs)) {
                     mergeNode(processs, itemDatas, false);
                 }
                 if (!ListUtils.isEmpty(nodes)) {
                     mergeNode(nodes, itemDatas, true);
                 }
-                for (Approval.ItemData itemData : itemDatas) {
+                for (Approvals.ItemData itemData : itemDatas) {
                     if (!StringUtils.isEmpty(itemData.values)) {
-                        if (itemData.status.contains("待审批") && record.status == 2) {
+                        if (StringUtils.isEmpty(itemData.status) || (itemData.status.contains("待审批") && record.status == 2)) {
                             record.status = 0;
                         }
                         String[] emcode = itemData.values.split(",");
@@ -689,7 +674,7 @@ public class ApprovalPresenter implements OnHttpResultListener {
                         }
                     }
                 }
-                nodeList = itemDatas;
+                final List<Approvals.ItemData> nodeList = itemDatas;
                 OAHttpHelper.getInstance().post(new Runnable() {
                     @Override
                     public void run() {
@@ -710,7 +695,7 @@ public class ApprovalPresenter implements OnHttpResultListener {
         });
     }
 
-    private void mergeNode(JSONArray array, List<Approval.ItemData> itemDatas, boolean isLog) {
+    private void mergeNode(JSONArray array, List<Approvals.ItemData> itemDatas, boolean isLog) {
         for (int i = 0; i < array.size(); i++) {
             JSONObject o = array.getJSONObject(i);
             String name = OACheckUtil.getJson2Text(o, "jp_nodeName", "jn_name");//节点名称
@@ -719,7 +704,7 @@ public class ApprovalPresenter implements OnHttpResultListener {
             String nodeDealCode = OACheckUtil.getJson2Text(o, "jp_nodeDealMan", "jn_dealManId");//执行人
             String nodeDealName = OACheckUtil.getJson2Text(o, "jp_nodeDealManName", "jn_dealManName");//执行人
             String nodeDescription = OACheckUtil.getJson2Text(o, "jn_nodeDescription");//执行操作
-            for (Approval.ItemData itemData : itemDatas) {
+            for (Approvals.ItemData itemData : itemDatas) {
                 if (name.equals(itemData.valuesTag)) {//为当前结点
                     if (!isLog) {
                         itemData.values = nodeDealCode;
@@ -744,14 +729,14 @@ public class ApprovalPresenter implements OnHttpResultListener {
         }
     }
 
-    private List<Approval.ItemData> getNodDatas(JSONArray datas) {
-        List<Approval.ItemData> itemDatas = new ArrayList<>();
+    private List<Approvals.ItemData> getNodDatas(JSONArray datas) {
+        List<Approvals.ItemData> itemDatas = new ArrayList<>();
         for (int i = datas.size() - 1; i >= 0; i--) {
             JSONObject object = datas.getJSONObject(i);
             String nodeName = OACheckUtil.getJson2Text(object, "JP_NODENAME");//当前结点名称
             String emCode = OACheckUtil.getJson2Text(object, "JP_NODEDEALMAN");//节点处理人编号
             String manName = OACheckUtil.getJson2Text(object, "JP_NODEDEALMANNAME");
-            Approval.ItemData itemData = new Approval.ItemData();
+            Approvals.ItemData itemData = new Approvals.ItemData();
             itemData.key = manName;
             itemData.values = emCode;
             itemData.valuesTag = nodeName;
@@ -780,8 +765,9 @@ public class ApprovalPresenter implements OnHttpResultListener {
                 //需要把该数据填充到对应上面
                 datas = data.split(";");
             }
+            List<Approvals.ItemData> pointsList = new ArrayList<>();
             for (int i = 0; i < arrayCS.size(); i++) {
-                Approval.ItemData itemData = getItemBySetupTask(arrayCS.getString(i), datas);
+                Approvals.ItemData itemData = getItemBySetupTask(arrayCS.getString(i), datas);
                 if (itemData != null) {
                     pointsList.add(itemData);
                 }
@@ -800,10 +786,10 @@ public class ApprovalPresenter implements OnHttpResultListener {
      * ..$N为非必填字段,
      * ..$Y表示该字段为必填字段,
      */
-    private Approval.ItemData getItemBySetupTask(String cs, String[] datas) throws Exception {
+    private Approvals.ItemData getItemBySetupTask(String cs, String[] datas) throws Exception {
         if (!StringUtils.isEmpty(cs)) {
             LogUtil.i("cs=" + cs);
-            Approval.ItemData itemData = new Approval.ItemData();
+            Approvals.ItemData itemData = new Approvals.ItemData();
             String[] css = cs.split("\\^");
             LogUtil.i("css[0]=" + css[0]);
             LogUtil.i("css[1]=" + css[1]);
@@ -820,29 +806,29 @@ public class ApprovalPresenter implements OnHttpResultListener {
                         //1数字 2.日期  3|0.字符
                         if ("D".equals(inputType)) {
                             itemData.inputType = 2;
-                            itemData.type = Approval.ItemType.DATE;
+                            itemData.type = Approvals.ItemType.DATE;
                         } else if ("N".equals(inputType)) {
                             itemData.inputType = 1;
-                            itemData.type = Approval.ItemType.P;
+                            itemData.type = Approvals.ItemType.P;
                         } else if ("C".equals(inputType)) {
                             itemData.data = OACheckUtil.getLastBracket(neer);
                             if (StringUtils.isEmpty(itemData.data)) {
-                                itemData.type = Approval.ItemType.P;
+                                itemData.type = Approvals.ItemType.P;
                             } else {
-                                itemData.type = Approval.ItemType.SELECT;
+                                itemData.type = Approvals.ItemType.SELECT;
                             }
                         } else if ("B".equals(inputType)) {
                             itemData.data = OACheckUtil.getLastBracket(neer);
                             if (StringUtils.isEmpty(itemData.data)) {
                                 itemData.data = "是;否";
                             }
-                            itemData.type = Approval.ItemType.SELECT;
+                            itemData.type = Approvals.ItemType.SELECT;
                         } else {
                             itemData.inputType = 3;
-                            itemData.type = Approval.ItemType.P;
+                            itemData.type = Approvals.ItemType.P;
                         }
                     } else {
-                        itemData.type = Approval.ItemType.P;
+                        itemData.type = Approvals.ItemType.P;
                     }
                     if (!StringUtils.isEmpty(neer)) {
                         itemData.mustInput = neer.contains("Y");
@@ -859,11 +845,11 @@ public class ApprovalPresenter implements OnHttpResultListener {
                     }
                 }
                 if (record.status != 1) {
-                    itemData.type = Approval.ItemType.V;
+                    itemData.type = Approvals.ItemType.V;
                 }
                 itemData.editBg = 0;
                 itemData.editGravity = Gravity.RIGHT;
-                if (itemData.type == Approval.ItemType.V && StringUtils.isEmpty(itemData.values))
+                if (itemData.type == Approvals.ItemType.V && StringUtils.isEmpty(itemData.values))
                     return null;
                 return itemData;
             }
@@ -872,10 +858,10 @@ public class ApprovalPresenter implements OnHttpResultListener {
     }
 
     //判断要点
-    private boolean customDes(StringBuilder customDes) {
+    private boolean customDes(StringBuilder customDes, List<Approvals.ItemData> pointsList) {
         if (!ListUtils.isEmpty(pointsList)) {
             LogUtil.i("show Presenter pointsList .....");
-            for (Approval.ItemData itemData : pointsList) {
+            for (Approvals.ItemData itemData : pointsList) {
                 LogUtil.i(itemData.toString());
                 if (itemData.mustInput && StringUtils.isEmpty(itemData.values)) {
                     String message = OACheckUtil.getString(R.string.approval_points) + " " + itemData.key + " " + OACheckUtil.getString(R.string.is_must_input);
@@ -891,23 +877,15 @@ public class ApprovalPresenter implements OnHttpResultListener {
         return true;
     }
 
-    private boolean putItem2FormStore(Map<String, Object> formstore) {
+    private boolean putItem2FormStore(Map<String, Object> formstore, List<Approvals.ItemData> mainList) {
         if (!ListUtils.isEmpty(mainList)) {
-            for (Approval.ItemData itemData : mainList) {
+            for (Approvals.ItemData itemData : mainList) {
                 if (StringUtils.isEmpty(itemData.key)) continue;
                 LogUtil.i(itemData.toString());
                 formstore.put(itemData.idTag, itemData.id);
-                if (itemData.type == Approval.ItemType.P || itemData.type == Approval.ItemType.SELECT || itemData.type == Approval.ItemType.DATE) {
+                if (itemData.type == Approvals.ItemType.P || itemData.type == Approvals.ItemType.SELECT || itemData.type == Approvals.ItemType.DATE) {
                     if (!StringUtils.isEmpty(itemData.values)) {
-                        if (itemData.type == Approval.ItemType.SELECT) {
-                            if (itemData.values.equals("是"))
-                                formstore.put(itemData.valuesTag, 0);
-                            else if (itemData.values.equals("否"))
-                                formstore.put(itemData.valuesTag, -1);
-                            else
-                                formstore.put(itemData.valuesTag, itemData.values);
-                        } else
-                            formstore.put(itemData.valuesTag, itemData.values);
+                        formstore.put(itemData.valuesTag,itemData. getValues());
                     } else {
                         String message = OACheckUtil.getString(R.string.must_input_key) + " " + itemData.key + " " + OACheckUtil.getString(R.string.is_must_input);
                         iApproval.showToast(message);
@@ -921,13 +899,12 @@ public class ApprovalPresenter implements OnHttpResultListener {
     }
 
 
-    private boolean putItem2Params(List<Map<String, Object>> params) {
-        LogUtil.i("setItem2Map");
+    private boolean putItem2Params(List<Map<String, Object>> params, List<Approvals.ItemData> detailedList) {
         if (!ListUtils.isEmpty(detailedList)) {
             Map<String, Object> param = null;
-            for (Approval.ItemData itemData : detailedList) {
+            for (Approvals.ItemData itemData : detailedList) {
                 if (StringUtils.isEmpty(itemData.key)) continue;
-                if (param == null || itemData.type == Approval.ItemType.TAG) {
+                if (param == null || itemData.type == Approvals.ItemType.TAG) {
                     if (param != null && !param.isEmpty()) {
                         LogUtil.i("params.add(param)111");
                         params.add(param);
@@ -937,17 +914,10 @@ public class ApprovalPresenter implements OnHttpResultListener {
                 }
                 LogUtil.i(itemData.toString());
                 param.put(itemData.idTag, itemData.id);
-                if (itemData.type == Approval.ItemType.P || itemData.type == Approval.ItemType.SELECT || itemData.type == Approval.ItemType.DATE) {
+                if (itemData.type == Approvals.ItemType.P || itemData.type == Approvals.ItemType.SELECT || itemData.type == Approvals.ItemType.DATE) {
                     if (!StringUtils.isEmpty(itemData.values)) {
-                        if (itemData.type == Approval.ItemType.SELECT) {
-                            if (itemData.values.equals("是"))
-                                param.put(itemData.valuesTag, 0);
-                            else if (itemData.values.equals("否"))
-                                param.put(itemData.valuesTag, -1);
-                            else
-                                param.put(itemData.valuesTag, itemData.values);
-                        } else
-                            param.put(itemData.valuesTag, itemData.values);
+                        param.put(itemData.valuesTag,itemData. getValues());
+
                     } else {
                         String message = OACheckUtil.getString(R.string.must_input_key) + " " + itemData.key + " " + OACheckUtil.getString(R.string.is_must_input);
                         iApproval.showToast(message);

+ 1 - 2
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/ComApprovalPresenter.java

@@ -74,7 +74,6 @@ public class ComApprovalPresenter implements OnHttpResultListener {
         if (intent != null) {
             int id = intent.getIntExtra("id", -1);
             String statusText = intent.getStringExtra("status");
-            LogUtil.i("statusText=" + statusText);
             if (id != -1) {
                 initLoad(id);
             } else {
@@ -554,7 +553,7 @@ public class ComApprovalPresenter implements OnHttpResultListener {
                 break;
         }
         if (!added) {
-            approvalItems.add(0,item);
+            approvalItems.add(0, item);
         }
     }
 

+ 7 - 7
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/imp/IApproval.java

@@ -1,6 +1,6 @@
 package com.xzjmyk.pm.activity.ui.erp.presenter.imp;
 
-import com.xzjmyk.pm.activity.ui.erp.model.oa.Approval;
+import com.xzjmyk.pm.activity.ui.erp.model.oa.Approvals;
 
 import java.util.List;
 
@@ -9,12 +9,12 @@ import java.util.List;
  */
 
 public interface IApproval extends HttpImp  {
-    void showMainList(List<Approval.ItemData> datas);
-    void showDetailList(List<Approval.ItemData> datas);
-    void showPointsList(List<Approval.ItemData> datas);
-    void showNodeList(List<Approval.ItemData> datas);
-    void showEnclosureList(List<Approval.Enclosure> enclosures);
-    void showTitile(Approval.NodeRecord record);
+    void showMainList(List<Approvals.ItemData> datas);
+    void showDetailList(List<Approvals.ItemData> datas);
+    void showPointsList(List<Approvals.ItemData> datas);
+    void showNodeList(List<Approvals.ItemData> datas);
+    void showEnclosureList(List<Approvals.Enclosure> enclosures);
+    void showTitile(Approvals.NodeRecord record);
     void showStatus(int reId);//显示状态
     void initStatus();
 }

+ 14 - 7
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/oa/http/OAHttpHelper.java

@@ -13,6 +13,7 @@ import com.xzjmyk.pm.activity.ui.erp.util.LogUtil;
 import com.xzjmyk.pm.activity.ui.erp.util.OACheckUtil;
 import com.xzjmyk.pm.activity.ui.erp.util.StringUtils;
 import com.xzjmyk.pm.activity.wxapi.ApiConfig;
+import com.xzjmyk.pm.activity.wxapi.ApiModel;
 import com.xzjmyk.pm.activity.wxapi.ApiPlatform;
 import com.xzjmyk.pm.activity.wxapi.ApiUtils;
 
@@ -28,6 +29,12 @@ import java.util.Map;
 
 public class OAHttpHelper extends Handler {
     private static OAHttpHelper instance;
+    private ApiModel apiModel;
+
+
+    public ApiModel getApiModel() {
+        return apiModel == null ? ApiUtils.getApiModel() : apiModel;
+    }
 
     private OAHttpHelper() {
         //在主线程里创建Handler
@@ -76,7 +83,7 @@ public class OAHttpHelper extends Handler {
     public void requestHttp(Request request, OnHttpResultListener listener) {
         if (request == null) new NullPointerException("Request is null");
         try {
-            if (ApiUtils.getApiModel() instanceof ApiPlatform)
+            if (getApiModel() instanceof ApiPlatform)
                 loadB2B(request, listener);
             else loadERP(request, listener);
         } catch (Exception e) {
@@ -91,13 +98,13 @@ public class OAHttpHelper extends Handler {
      * @param request  请求体
      * @param listener 回调监听器
      */
-    public void requestHttp(Request request, int dataSource,OnHttpResultListener listener) {
+    public void requestHttp(Request request, int dataSource, OnHttpResultListener listener) {
         if (request == null) new NullPointerException("Request is null");
         try {
-            if (dataSource==1){
+            if (dataSource == 1) {
                 loadIM(request, listener);
-            }else{
-                if (ApiUtils.getApiModel() instanceof ApiPlatform)
+            } else {
+                if (getApiModel() instanceof ApiPlatform)
                     loadB2B(request, listener);
                 else loadERP(request, listener);
             }
@@ -107,8 +114,8 @@ public class OAHttpHelper extends Handler {
                 LogUtil.d(e.getMessage());
         }
     }
-    
-    private void loadIM(Request request, OnHttpResultListener listener)throws Exception {
+
+    private void loadIM(Request request, OnHttpResultListener listener) throws Exception {
         String url = Constants.IM_BASE_URL + request.getUrl();
         Bundle bundle = getBundle(request);
         if (listener != null)

+ 67 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/view/NestingScrollview.java

@@ -0,0 +1,67 @@
+package com.xzjmyk.pm.activity.ui.erp.view;
+
+import android.content.Context;
+import android.graphics.Rect;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+import android.view.ViewConfiguration;
+import android.widget.ScrollView;
+
+public class NestingScrollview  extends ScrollView {
+    private int downX;
+    private int downY;
+    private int mTouchSlop;
+    private boolean autoScroll = true;
+
+    /**
+     * 多层嵌套时的自动滚动
+     * @param autoScroll
+     */
+    public void setAutoScroll(boolean autoScroll) {
+        this.autoScroll = autoScroll;
+    }
+
+    /**
+     * 防止多层嵌套时候的自动滚动
+     * @param rect
+     * @return
+     */
+    @Override
+    protected int computeScrollDeltaToGetChildRectOnScreen(Rect rect) {
+            return autoScroll?super.computeScrollDeltaToGetChildRectOnScreen(rect):0;
+    }
+
+
+    public NestingScrollview(Context context) {
+        super(context);
+        mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
+    }
+
+    public NestingScrollview(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
+    }
+
+    public NestingScrollview(Context context, AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+        mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
+    }
+
+    @Override
+    public boolean onInterceptTouchEvent(MotionEvent e) {
+        int action = e.getAction();
+        switch (action) {
+            case MotionEvent.ACTION_DOWN:
+                downX = (int) e.getRawX();
+                downY = (int) e.getRawY();
+                break;
+            case MotionEvent.ACTION_MOVE:
+                int moveY = (int) e.getRawY();
+                if (Math.abs(moveY - downY) > mTouchSlop) {
+                    return true;
+                }
+        }
+        return super.onInterceptTouchEvent(e);
+    }
+
+}

+ 2 - 2
WeiChat/src/main/res/layout/activity_approval.xml

@@ -125,7 +125,7 @@
             whatever:testType="regexp"/>
     </RelativeLayout>
 
-    <com.xzjmyk.pm.activity.ui.erp.view.CustomerScrollView
+    <com.xzjmyk.pm.activity.ui.erp.view.NestingScrollview
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:layout_above="@id/opinionRL">
@@ -263,6 +263,6 @@
 
         </LinearLayout>
 
-    </com.xzjmyk.pm.activity.ui.erp.view.CustomerScrollView>
+    </com.xzjmyk.pm.activity.ui.erp.view.NestingScrollview>
 
 </RelativeLayout>

+ 11 - 24
WeiChat/src/main/res/layout/item_approval_k_p.xml

@@ -10,29 +10,16 @@
         android:layout_weight="1"
         />
 
-    <FrameLayout
-        android:layout_width="wrap_content"
-        android:layout_height="match_parent"
-        android:layout_weight="2">
-
-        <WebView
-            android:id="@+id/donetaskWV"
-            style="@style/approvalItemStyle"
-            android:layout_width="match_parent"
-            android:background="@color/white"
-            android:visibility="gone"/>
-
-        <com.andreabaccega.widget.FormEditText
-            android:id="@+id/valueTv"
-            style="@style/approvalItemStyle"
-            android:layout_width="match_parent"
-            android:background="@drawable/shape_from_edit_hint"
-            android:gravity="center|left"
-            android:hint="@string/common_input"
-            android:paddingLeft="6dp"
-            android:paddingRight="6dp"/>
-
-
-    </FrameLayout>
+    <com.andreabaccega.widget.FormEditText
+        android:id="@+id/valueTv"
+        style="@style/approvalItemStyle"
+        android:layout_width="0dp"
+        android:layout_weight="2"
+        android:background="@drawable/shape_from_edit_hint"
+        android:gravity="center|left"
+        android:hint="@string/common_input"
+        android:paddingLeft="6dp"
+        android:paddingRight="6dp"
+        />
 
 </LinearLayout>

+ 33 - 0
WeiChat/src/main/res/layout/item_approval_title.xml

@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:background="@color/base_bg"
+    android:padding="10dp">
+
+    <com.xzjmyk.pm.activity.ui.erp.view.CircleImageView
+        android:id="@+id/handIv"
+        android:layout_width="50dp"
+        android:layout_height="50dp"/>
+
+    <ImageView
+        android:id="@+id/statusIv"
+        android:layout_width="50dp"
+        android:layout_height="50dp"
+        android:layout_alignParentRight="true"/>
+
+    <TextView
+        android:id="@+id/titleTv"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginLeft="10dp"
+        android:layout_marginTop="15dp"
+        android:layout_toLeftOf="@id/statusIv"
+        android:layout_toRightOf="@id/handIv"
+        android:ellipsize="end"
+        android:lines="1"
+        android:textColor="@color/text_main"
+        android:textSize="@dimen/text_main"/>
+
+</RelativeLayout>

+ 24 - 27
WeiChat/src/main/res/layout/item_base_rvlist.xml

@@ -1,31 +1,28 @@
 <?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-              android:orientation="vertical"
-              android:layout_width="match_parent"
-              android:background="@color/base_bg"
-              android:layout_height="wrap_content">
-    <RelativeLayout
-        android:id="@+id/pointsLL"
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:background="@color/base_bg">
+
+    <View
+        android:id="@+id/line"
         android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_marginTop="@dimen/paddingApp"
-        android:padding="@dimen/paddingApp">
+        android:layout_height="@dimen/paddingApp"
+        android:background="@color/item_line"/>
 
-        <TextView
-            android:id="@+id/titleTV"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:text="审批要点:"
-            android:textColor="@color/text_hine"
-            android:textSize="@dimen/text_main"/>
+    <TextView
+        android:id="@+id/titleTV"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_below="@id/line"
+        android:text="titleTV"
+        android:textColor="@color/text_hine"
+        android:textSize="@dimen/text_main"/>
 
-        <android.support.v7.widget.RecyclerView
-            android:id="@+id/contentRV"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:layout_below="@id/titleTV"
-            android:layout_marginTop="@dimen/paddingApp"
-            android:background="@color/base_bg"
-            android:padding="@dimen/paddingApp"/>
-    </RelativeLayout>
-</LinearLayout>
+    <android.support.v7.widget.RecyclerView
+        android:id="@+id/contentRV"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_below="@id/titleTV"
+        android:padding="@dimen/paddingApp"/>
+</RelativeLayout>