Преглед изворни кода

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

SpringBoots пре 8 година
родитељ
комит
333114f2b2
25 измењених фајлова са 1607 додато и 1074 уклоњено
  1. 3 2
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/MainActivity.java
  2. 6 3
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/TaskActivity.java
  3. 3 1
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/message/ProcessMsgActivity.java
  4. 97 158
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/ApprovalActivity.java
  5. 1 1
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/FlihtsDateSelectActivity.java
  6. 411 49
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/adapter/oa/ApprovalAdapter.java
  7. 437 437
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/adapter/oa/ApprovalRVItemAdapter.java
  8. 3 3
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/model/form/Data.java
  9. 151 97
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/model/oa/Approval.java
  10. 279 221
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/ApprovaPresenter.java
  11. 1 12
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/imp/IApproval.java
  12. 6 4
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/BadgeUtil.java
  13. 2 4
      WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/oa/http/DepositNoticeUtil.java
  14. 9 0
      WeiChat/src/main/java/com/xzjmyk/pm/newpedo/view/VpDemoActivity.java
  15. BIN
      WeiChat/src/main/res/drawable-hdpi/node_delete.png
  16. 6 0
      WeiChat/src/main/res/drawable/bg_bule_yellow_text.xml
  17. 48 18
      WeiChat/src/main/res/layout/activity_approval.xml
  18. 1 1
      WeiChat/src/main/res/layout/activity_expense_reimbursement.xml
  19. 45 33
      WeiChat/src/main/res/layout/item_approval_node.xml
  20. 13 1
      WeiChat/src/main/res/layout/item_approval_tag.xml
  21. 38 25
      WeiChat/src/main/res/layout/item_approval_title.xml
  22. 14 0
      WeiChat/src/main/res/layout/item_list_pop.xml
  23. 4 1
      WeiChat/src/main/res/layout/item_process_state.xml
  24. 25 0
      WeiChat/src/main/res/layout/simple_list_cm.xml
  25. 4 3
      WeiChat/src/main/res/values/strings.xml

+ 3 - 2
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/MainActivity.java

@@ -584,6 +584,7 @@ public class MainActivity extends BaseActivity implements NetWorkObservable.NetW
 
     private Handler handler = new Handler();
     private Runnable runnable = new MyRunnable();
+    private Boolean firstRed = true;
     private void doHiTask() {
         int isUUStep = PreferenceUtils.getInt(MyApplication.getInstance(), MainActivity.UU_STEP);
         if (isUUStep != 0 && StepCountCheckUtil.isSupportStepCountSensor(this)) { // 开启UU运动
@@ -592,7 +593,6 @@ public class MainActivity extends BaseActivity implements NetWorkObservable.NetW
             PreferenceUtils.putInt(MainActivity.UU_STEP, 1);
             PushManager.resumeWork(MyApplication.getInstance());
         }
-        //        CommonUtil.SaveAutoLogtoLocal("APP启动","外勤计划监控");
         doSendSignAutoLog(); // 获取数据库中监控日志上传至服务器操作
         //TODO 桌面红点显示逻辑
         if (handler == null) {
@@ -602,13 +602,14 @@ public class MainActivity extends BaseActivity implements NetWorkObservable.NetW
             runnable = new MyRunnable();
         }
         handler.post(runnable);
+
     }
     public class MyRunnable implements Runnable {
 
         @Override
         public void run() {
             handler.postDelayed(runnable, 5000);
-            BadgeUtil.setBadgeCount(getApplicationContext(), mMsgUnReadNum, R.drawable.hongdian);
+            BadgeUtil.setBadgeCount(getApplicationContext(), mMsgUnReadNum, R.drawable.hongdian);//启动红点显示逻辑
         }
     }
     private PopupWindow popupWindow;

+ 6 - 3
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/TaskActivity.java

@@ -191,6 +191,9 @@ public class TaskActivity extends BaseActivity implements OnClickListener {
     private void doClassifyAllList(List<AllProcess> allList) {
         if (mCurrentPage == 1) {
             if (!ListUtils.isEmpty(real_List)) real_List.clear();
+            if (!ListUtils.isEmpty(waitList)) waitList.clear();
+            if (!ListUtils.isEmpty(doneList)) doneList.clear();
+            if (!ListUtils.isEmpty(isendList)) isendList.clear();
             ToastMessage(getString(R.string.common_refresh_finish));
         } else {
             ToastMessage(getString(R.string.common_up_finish));
@@ -353,9 +356,9 @@ public class TaskActivity extends BaseActivity implements OnClickListener {
         listview_main.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
             @Override
             public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
-                if (!ListUtils.isEmpty(waitList)) waitList.clear();
-                if (!ListUtils.isEmpty(doneList)) doneList.clear();
-                if (!ListUtils.isEmpty(isendList)) isendList.clear();
+//                if (!ListUtils.isEmpty(waitList)) waitList.clear();
+//                if (!ListUtils.isEmpty(doneList)) doneList.clear();
+//                if (!ListUtils.isEmpty(isendList)) isendList.clear();
                 mCurrentPage = 1;
                 sendResquestForServerAll(2, mCurrentPage);
             }

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

@@ -127,6 +127,7 @@ public class ProcessMsgActivity extends BaseActivity implements View.OnClickList
                         tv_process_un_num.setVisibility(View.VISIBLE);
                         tv_process_un_num.setText(array.size() + "");
                     }
+                    progressDialog.dismiss();
                     break;
                 case SUSSCESS_already:
                     itemArray = JSON.parseObject(result).getJSONArray("data");
@@ -187,6 +188,7 @@ public class ProcessMsgActivity extends BaseActivity implements View.OnClickList
                     } catch (Exception e) {
                         e.printStackTrace();
                     }
+                    progressDialog.dismiss();
                     break;
                 case 0x16:
                     try {
@@ -450,7 +452,7 @@ public class ProcessMsgActivity extends BaseActivity implements View.OnClickList
 
 
     private void loadProcessToDo(int page) {
-//        progressDialog.show();
+        progressDialog.show();
         String url = Constants.getAppBaseUrl(ct) + "common/desktop/process/toDo.action";
         Map<String, Object> params = new HashMap<>();
         // count=10&page=1&limit=25

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

@@ -5,12 +5,20 @@ import android.os.Bundle;
 import android.support.v7.widget.LinearLayoutManager;
 import android.support.v7.widget.RecyclerView;
 import android.text.Editable;
+import android.view.Gravity;
+import android.view.LayoutInflater;
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AdapterView;
+import android.widget.BaseAdapter;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
+import android.widget.ListView;
+import android.widget.PopupWindow;
 import android.widget.RelativeLayout;
+import android.widget.TextView;
 
 import com.afollestad.materialdialogs.MaterialDialog;
 import com.alibaba.fastjson.JSONArray;
@@ -46,7 +54,7 @@ import java.util.List;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-public class ApprovalActivity extends OABaseActivity implements IApproval, View.OnClickListener, RecognizerDialogListener {
+public class ApprovalActivity extends OABaseActivity implements IApproval, ApprovalAdapter.OnChangeClickListener, View.OnClickListener, RecognizerDialogListener {
     @ViewInject(R.id.operationLL)
     LinearLayout operationLL; //操作
     @ViewInject(R.id.opinionRL)
@@ -58,10 +66,8 @@ public class ApprovalActivity extends OABaseActivity implements IApproval, View.
     @ViewInject(R.id.inputTagIV)
     ImageView inputTagIV;
 
-    private List<Approval> approvals;
     private ApprovaPresenter mPresenter;
     private ApprovalAdapter mAdapter;
-    private int keyValue = -1;
 
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
@@ -109,7 +115,7 @@ public class ApprovalActivity extends OABaseActivity implements IApproval, View.
             if (d == null) return;
             String name = StringUtils.isEmpty(d.getName()) ? "" : d.getName();
             getEmnameByReturn(name);
-        } else if (0x25 == requestCode) {
+        } else if (0x25 == requestCode && 0x25 == resultCode) {
             mPresenter.initLoad();
         }
         super.onActivityResult(requestCode, resultCode, data);
@@ -127,11 +133,12 @@ public class ApprovalActivity extends OABaseActivity implements IApproval, View.
         contentRV.setLayoutManager(new LinearLayoutManager(ct));
         findViewById(R.id.commonWordsIV).setOnClickListener(this);//常用语
         findViewById(R.id.nextTV).setOnClickListener(this);
+        findViewById(R.id.voiceIV).setOnClickListener(this);
         findViewById(R.id.changedealmanTV).setOnClickListener(this);
         findViewById(R.id.disagreeTV).setOnClickListener(this);
         findViewById(R.id.agreeTV).setOnClickListener(this);
         findViewById(R.id.takeOverTV).setOnClickListener(this);
-        findViewById(R.id.voiceIV).setOnClickListener(this);
+
         String title = getIntent().getStringExtra("title");
         opinionET.addTextChangedListener(new EditChangeListener() {
             @Override
@@ -173,16 +180,15 @@ public class ApprovalActivity extends OABaseActivity implements IApproval, View.
     public void onClick(View v) {
         switch (v.getId()) {
             case R.id.agreeTV://同意
-                for (Approval approval : approvals)
-                    approval.show();
+                List<Approval> approvals = null;
+                if (mAdapter != null) {
+                    approvals = mAdapter.getApprovals();
+                }
                 mPresenter.loadProcessUpdate(OACheckUtil.getText(opinionET), approvals);
                 break;
             case R.id.disagreeTV://不同意
                 mPresenter.disAgree(OACheckUtil.getText(opinionET));
                 break;
-            case R.id.changedealmanTV://变更审批人
-                selectEmCode();
-                break;
             case R.id.nextTV: //下一条
                 mPresenter.loadNextProcess();
                 break;
@@ -190,6 +196,7 @@ public class ApprovalActivity extends OABaseActivity implements IApproval, View.
                 RecognizerDialogUtil.showRecognizerDialog(ct, this);
                 break;
             case R.id.commonWordsIV://常用语
+                showCommonWordsIV();
                 break;
             case R.id.takeOverTV://接管
                 mPresenter.loadTakeOver();
@@ -237,7 +244,7 @@ public class ApprovalActivity extends OABaseActivity implements IApproval, View.
         } else {
             String emcode = CommonUtil.getEmcode();
             if (nodeDealMan.contains(emcode)) {
-                findViewById(R.id.changedealmanTV).setVisibility(View.VISIBLE);
+                findViewById(R.id.changedealmanTV).setVisibility(View.GONE);
                 findViewById(R.id.disagreeTV).setVisibility(View.VISIBLE);
                 findViewById(R.id.agreeTV).setVisibility(View.VISIBLE);
                 findViewById(R.id.takeOverTV).setVisibility(View.GONE);
@@ -248,147 +255,12 @@ public class ApprovalActivity extends OABaseActivity implements IApproval, View.
         }
     }
 
-    @Override
-    public void showTitle(String imid, String title, int statusId) {
-        Approval approval = null;
-        if (ListUtils.isEmpty(approvals) || approvals.get(0).getType() != Approval.TITLE) {
-            if (ListUtils.isEmpty(approvals))
-                approvals = new ArrayList<>();
-            approval = new Approval();
-            approval.setType(Approval.TITLE);
-            approvals.add(0, approval);
-        } else {
-            approval = approvals.get(0);
-        }
-        if (statusId > 0)
-            approval.setId(statusId);
-        if (!StringUtils.isEmpty(title))
-            approval.setTitle(title);
-        if (!StringUtils.isEmpty(imid))
-            approval.setIdKey(imid);
-        showApproval(-1, -1);
-    }
-
-    @Override
-    public void showMainList(int keyValue, Approval mainApproval) {
-        if (this.keyValue != keyValue) return;
-        mainApproval.show();
-        if (!ListUtils.isEmpty(approvals))
-            for (Approval a : approvals) {
-                a.show();
-            }
-        if (ListUtils.getSize(approvals) > 1 && (approvals.get(1).getType() == Approval.MAIN
-                || approvals.get(0).getType() == Approval.MAIN)) {
-            Approval main = null;
-            if (approvals.get(1).getType() == Approval.MAIN) {
-                main = approvals.get(1);
-                main.setApproval(mainApproval);
-                showApproval(1, approvals.size() - 1);
-            } else {
-                main = approvals.get(0);
-                main.setApproval(mainApproval);
-                showApproval(-1, -1);
-            }
-        } else {
-            if (ListUtils.isEmpty(approvals)) {
-                approvals = new ArrayList<>();
-                approvals.add(0, mainApproval);
-                showApproval(-1, -1);
-            } else {
-                approvals.add(1, mainApproval);
-                showApproval(1, approvals.size() - 1);
-            }
-        }
-    }
-
-    @Override
-    public void showDetailList(int keyValue, List<Approval> detailedList) {
-        if (this.keyValue != keyValue) return;
-        for (Approval approval : detailedList)
-            approval.show();
-        for (int i = approvals.size() - 1; i >= 0; i--) {
-            if (approvals.get(i).getType() == Approval.DETAIL
-                    || approvals.get(i).getType() == Approval.MAIN
-                    || approvals.get(i).getType() == Approval.TITLE) {
-                approvals.addAll(i + 1, detailedList);
-                showApproval(i + 1, i + 1 + detailedList.size());
-                break;
-            }
-        }
-    }
-
-    @Override
-    public void showEnclosureList(int keyValue, Approval enclosureApproval) {
-        if (this.keyValue != keyValue) return;
-        enclosureApproval.show();
-        for (int i = approvals.size() - 1; i >= 0; i--) {
-            if (approvals.get(i).getType() == Approval.DETAIL
-                    || approvals.get(i).getType() == Approval.MAIN
-                    || approvals.get(i).getType() == Approval.TITLE
-                    || approvals.get(i).getType() == Approval.ENCLOSURE
-                    ) {
-                approvals.add(i + 1, enclosureApproval);
-                showApproval(i + 1, approvals.size() - 1);
-                break;
-            }
-        }
-    }
-
-    @Override
-    public void showPointsList(int keyValue, Approval points) {
-        if (this.keyValue != keyValue) return;
-        points.show();
-        for (int i = approvals.size() - 1; i >= 0; i--) {
-            if (approvals.get(i).getType() == Approval.DETAIL
-                    || approvals.get(i).getType() == Approval.MAIN
-                    || approvals.get(i).getType() == Approval.TITLE
-                    || approvals.get(i).getType() == Approval.ENCLOSURE
-                    || approvals.get(i).getType() == Approval.POINTS
-                    ) {
-                approvals.add(i + 1, points);
-                showApproval(i + 1, approvals.size() - 1);
-                break;
-            }
-        }
-    }
 
     @Override
-    public void showNodeList(int keyValue, Approval nodes) {
-        if (this.keyValue != keyValue) return;
-        nodes.show();
-        for (int i = approvals.size() - 1; i >= 0; i--) {
-            if (approvals.get(i).getType() == Approval.DETAIL
-                    || approvals.get(i).getType() == Approval.MAIN
-                    || approvals.get(i).getType() == Approval.TITLE
-                    || approvals.get(i).getType() == Approval.ENCLOSURE
-                    || approvals.get(i).getType() == Approval.POINTS
-                    || approvals.get(i).getType() == Approval.NODES
-                    ) {
-                approvals.add(i + 1, nodes);
-                showApproval(i + 1, approvals.size() - 1);
-                break;
-            }
-        }
-    }
-
-    private void newAdapter() {
-        mAdapter = new ApprovalAdapter(this, approvals);
+    public void showModels(List<Approval> approvals) {
+        mAdapter = new ApprovalAdapter(this, approvals, mPresenter.isApprovaling());
         contentRV.setAdapter(mAdapter);
-    }
-
-    private void showApproval(int startItem, int endItem) {
-        if (mAdapter == null) {
-            newAdapter();
-        } else {
-            mAdapter.setApprovals(approvals);
-            if (startItem < 0 && endItem < 0) {
-                mAdapter.notifyDataSetChanged();
-            } else if (startItem == endItem && startItem >= 0) {
-                mAdapter.notifyItemChanged(startItem);
-            } else {
-                mAdapter.notifyItemRangeChanged(startItem, endItem);
-            }
-        }
+        mAdapter.setOnChangeClickListener(this);
     }
 
     @Override
@@ -398,11 +270,7 @@ public class ApprovalActivity extends OABaseActivity implements IApproval, View.
         findViewById(R.id.agreeTV).setVisibility(View.GONE);
         findViewById(R.id.takeOverTV).setVisibility(View.GONE);
         opinionET.setText("");
-        approvals = new ArrayList<>();
-        if (mAdapter != null) {
-            mAdapter.setApprovals(approvals);
-            mAdapter.notifyDataSetChanged();
-        }
+        mAdapter = null;
     }
 
     @Override
@@ -419,10 +287,6 @@ public class ApprovalActivity extends OABaseActivity implements IApproval, View.
                 }).show();
     }
 
-    @Override
-    public void setKeyValue(int keyValue) {
-        this.keyValue = keyValue;
-    }
 
     @Override
     public void sendToSelect(JSONArray data) {
@@ -442,4 +306,79 @@ public class ApprovalActivity extends OABaseActivity implements IApproval, View.
     }
 
 
+    @Override
+    public void click() {
+        selectEmCode();
+    }
+
+    private void showCommonWordsIV() {
+        LogUtil.i("showCommonWordsIV");
+        final PopupWindow window = new PopupWindow(ct);
+        View view = LayoutInflater.from(ct).inflate(R.layout.item_list_pop, null);
+        window.setContentView(view);
+        ListView contentLV = (ListView) view.findViewById(R.id.contentLV);
+        final String[] messages = {"非常好", "(赞)", "再接再厉", "加油"};
+        contentLV.setAdapter(new PopListAdapter(messages));
+        window.setTouchable(true);
+        window.getContentView().measure(0, 0);
+        window.setHeight(window.getContentView().getMeasuredHeight() + 150);
+        window.setWidth(window.getContentView().getMeasuredWidth());
+        window.setOutsideTouchable(false);
+        window.setFocusable(true);
+        //获取需要在其上方显示的控件的位置信息
+        View v = findViewById(R.id.commonWordsIV);
+        int[] location = new int[2];
+        v.getLocationOnScreen(location);
+        //在控件上方显示
+        window.showAtLocation(v, Gravity.NO_GRAVITY, (location[0] + v.getWidth() / 2) - window.getWidth() / 2, location[1] - window.getHeight());
+        contentLV.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+            @Override
+            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+                String message = messages[position];
+                opinionET.setText(OACheckUtil.getIntagerByText(opinionET) + message);
+            }
+        });
+    }
+
+    private class PopListAdapter extends BaseAdapter {
+        String[] messages = null;
+
+        public PopListAdapter(String[] messages) {
+            this.messages = messages;
+        }
+
+        @Override
+        public int getCount() {
+            return messages == null ? 0 : messages.length;
+        }
+
+        @Override
+        public Object getItem(int position) {
+            return messages[position];
+        }
+
+        @Override
+        public long getItemId(int position) {
+            return position;
+        }
+
+        @Override
+        public View getView(int position, View convertView, ViewGroup parent) {
+            ViewHolder holder = null;
+            if (convertView == null) {
+                convertView = LayoutInflater.from(ct).inflate(R.layout.item_simple_text, null);
+                holder = new ViewHolder();
+                holder.tv_text = (TextView) convertView.findViewById(R.id.tv_text);
+                convertView.setTag(holder);
+            } else {
+                holder = (ViewHolder) convertView.getTag();
+            }
+            holder.tv_text.setText(messages[position]);
+            return convertView;
+        }
+
+        class ViewHolder {
+            TextView tv_text;
+        }
+    }
 }

+ 1 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/oa/FlihtsDateSelectActivity.java

@@ -137,7 +137,7 @@ public class FlihtsDateSelectActivity extends BaseActivity implements DatePicker
 
     private void daDateUpdate(List<FlightsModel> models, String date,int position) {
         String url = Constants.getAppBaseUrl(getApplicationContext())+"/mobile/updateEmpWorkDate.action";
-//        String url = "https://192.168.253.252:8080/ERP/"+"mobile/updateEmpWorkDate.action";
+//        String url = "http://192.168.253.252:8080/ERP/"+"mobile/updateEmpWorkDate.action";
         Map<String,Object> param = new HashMap<>();
         param.put("deptcodes", models.get(position).getHrorgsModel().getEmployeecode());
         param.put("emcodes",models.get(position).getEmployeesModel().getEmployeecode() == null ? "":

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

@@ -1,20 +1,38 @@
 package com.xzjmyk.pm.activity.ui.erp.adapter.oa;
 
-import android.support.v7.widget.LinearLayoutManager;
+import android.content.Intent;
 import android.support.v7.widget.RecyclerView;
+import android.text.Editable;
+import android.text.Html;
+import android.text.InputType;
+import android.text.TextUtils;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
+import android.webkit.WebView;
+import android.widget.EditText;
+import android.widget.FrameLayout;
 import android.widget.ImageView;
 import android.widget.TextView;
 
+import com.afollestad.materialdialogs.MaterialDialog;
+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.activity.oa.OABaseActivity;
+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.ListUtils;
+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.OpenFilesUtils;
 import com.xzjmyk.pm.activity.ui.erp.util.StringUtils;
+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;
 
 /**
@@ -24,8 +42,10 @@ import java.util.List;
 public class ApprovalAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
     private OABaseActivity ct;
     private List<Approval> approvals;
+    private boolean isApprovaling;
 
-    public ApprovalAdapter(OABaseActivity ct, List<Approval> approvals) {
+    public ApprovalAdapter(OABaseActivity ct, List<Approval> approvals, boolean isApprovaling) {
+        this.isApprovaling = isApprovaling;
         this.ct = ct;
         this.approvals = approvals;
     }
@@ -48,21 +68,23 @@ public class ApprovalAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
         return ListUtils.getSize(approvals);
     }
 
-    private LinearLayoutManager getLinearLayoutManager() {
-        return new LinearLayoutManager(ct);
-    }
 
     @Override
     public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
         switch (this.approvals.get(viewType).getType()) {
             case Approval.TITLE:
                 return new TitleViewHolder(parent);
-            case Approval.MAIN:
+            case Approval.MAIN://列表
             case Approval.DETAIL:
-            case Approval.ENCLOSURE:
+                return new BaseRVViewHodler(parent);
+            case Approval.ENCLOSURE://单行列表
+            case Approval.TAG:
+                return new TagViewHolder(parent);
             case Approval.POINTS:
+                return new PointsViewHolder(parent);
             case Approval.NODES:
-            default: return new BaseRVViewHolder(parent);
+                return new NodeViewHolder(parent);
+            default: return new BaseRVViewHodler(parent);
         }
     }
 
@@ -70,55 +92,297 @@ public class ApprovalAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
     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);
+        } else if (holder instanceof BaseRVViewHodler) {
+            bindBaseRVView((BaseRVViewHodler) holder, position);
+        } else if (holder instanceof TagViewHolder) {
+            bindTAGView((TagViewHolder) holder, position);
+        } else if (holder instanceof PointsViewHolder) {
+            bindPointsView((PointsViewHolder) holder, position);
+        } else if (holder instanceof NodeViewHolder) {
+            bindNodeView((NodeViewHolder) holder, position);
         }
     }
 
-
-    private void bindTitleView(TitleViewHolder holder, int position) {
+    private void bindNodeView(NodeViewHolder holder, int position) {
         Approval approval = approvals.get(position);
-        holder.titleTv.setText(approval.getTitle());
-        AvatarHelper.getInstance().display(approval.getIdKey(), holder.handIv, true, false);
-        if (approval.getId() > 0) {
-            holder.statusIv.setVisibility(View.VISIBLE);
-            holder.statusIv.setImageResource(approval.getId());
+        if (position > 0 && approvals.get(position - 1).getType() != Approval.NODES) {
+            holder.padding.setVisibility(View.VISIBLE);
         } else {
-            holder.statusIv.setVisibility(View.GONE);
+            holder.padding.setVisibility(View.GONE);
+        }
+        int textColor = R.color.hintColor;
+        if (!StringUtils.isEmpty(approval.getIdKey())) {
+            holder.valuesTv.setText(approval.getIdKey());
+            if (approval.getIdKey().startsWith("待审批")) {
+                textColor = R.color.approvaling;
+            } else if (approval.getIdKey().startsWith("未通过")) {
+                textColor = R.color.crimson;
+            }
+        } else {
+            holder.valuesTv.setText("");
+        }
+        holder.valuesTv.setTextColor(ct.getResources().getColor(textColor));
+        holder.keyTv.setText(approval.getCaption());
+        int reId = R.drawable.weishenpi;
+        if (!StringUtils.isEmpty(approval.getIdKey())) {
+            String status = approval.getIdKey().split("\\(")[0];
+            if (StringUtils.isEmpty(status)) status = "";
+            if ("已审批".equals(status)) {
+                reId = R.drawable.node_finished3;
+            } else if ("待审批".equals(status)) {
+                reId = R.drawable.daishenpi;
+            } else if ("未通过".equals(status)) {
+                reId = R.drawable.node_delete;
+            } else {
+                reId = R.drawable.weishenpi;
+            }
         }
+        holder.statusIV.setImageResource(reId);
+        AvatarHelper.getInstance().display(String.valueOf(approval.getId()), holder.handIv, true, false);
+        if (reId == R.drawable.daishenpi && isApprovaling) {
+            holder.timeTv.setText(OACheckUtil.getString(R.string.common_changedealman));
+            holder.timeTv.setOnClickListener(new View.OnClickListener() {
+                @Override
+                public void onClick(View v) {
+                    if (onChangeClickListener != null)
+                        onChangeClickListener.click();
+                }
+            });
+            holder.timeTv.setTextColor(ct.getResources().getColor(R.color.titleBlue));
+        } else {
+            holder.timeTv.setOnClickListener(null);
+            holder.timeTv.setTextColor(ct.getResources().getColor(R.color.text_normal));
+            holder.timeTv.setText(approval.getValues());
+        }
+
     }
 
-    private void bindBaseRVView(BaseRVViewHolder holder, int position) {
-        Approval approval = approvals.get(position);
-        //判断是否显示上面的背景线
-        if (position > 0 && approvals.get(position - 1).getType() != approval.getType() && approval.getType() != Approval.MAIN) {
+    private void bindPointsView(final PointsViewHolder holder, final int position) {
+        final Approval approval = approvals.get(position);
+        if (approvals.size() > position + 1) {
             holder.line.setVisibility(View.VISIBLE);
         } else {
             holder.line.setVisibility(View.GONE);
         }
-        if (position > 0 && (approvals.get(position - 1).getType() == approval.getType()
-                && approval.getType() == Approval.DETAIL)
-                || approval.getType() == Approval.MAIN) {
-            holder.lineMin.setVisibility(View.VISIBLE);
+        holder.captionTV.setText(approval.getCaption());
+        if (approval.isNeerInput()) {
+            if (approval.isSelect()) {
+                if (approval.isMustInput()) {
+                    holder.valueTv.setHint(R.string.common_select);
+                } else {
+                    holder.valueTv.setHint(R.string.common_select_not_must);
+                }
+                setViewShowAble(false, holder.valueEt);
+                setViewShowAble(true, holder.valueTv);
+                holder.valueTv.setText(approval.getValues());
+                holder.valueTv.setOnClickListener(new View.OnClickListener() {
+                    @Override
+                    public void onClick(View v) {
+                        if (approval.inputType() == 2) {
+                            showTimeSelect(holder.valueTv, position);
+                        } else {
+                            selectItem(approval, position);
+                        }
+                    }
+                });
+            } else {
+                if (approval.isMustInput()) {
+                    holder.valueEt.setHint(R.string.common_input);
+                } else {
+                    holder.valueEt.setHint(R.string.common_input1);
+                }
+                if (approval.isDftypeEQ("N")) {
+                    holder.valueEt.setInputType(InputType.TYPE_CLASS_NUMBER);
+                } else {
+                    holder.valueEt.setInputType(InputType.TYPE_CLASS_TEXT);
+                }
+                setViewShowAble(true, holder.valueEt);
+                setViewShowAble(false, holder.valueTv);
+                holder.valueEt.setText(approval.getValues());
+                holder.valueEt.addTextChangedListener(new TextChangListener(holder, position));
+            }
         } else {
-            holder.lineMin.setVisibility(View.GONE);
+            setViewShowAble(false, holder.valueEt);
+            setViewShowAble(true, holder.valueTv);
+            holder.valueTv.setCompoundDrawables(null, null, null, null);
+            holder.valueTv.setText(approval.getValues());
+        }
+
+    }
+
+    private void bindTAGView(TagViewHolder holder, final int position) {
+        String name = approvals.get(position).getCaption();
+        if (approvals.get(position).getType() == Approval.ENCLOSURE) {
+            holder.line.setVisibility(View.GONE);
+            holder.padding.setVisibility(View.GONE);
+            holder.nameTv.setText(Html.fromHtml("<u>" + name + "</u>"));
+            holder.nameTv.setOnClickListener(new View.OnClickListener() {
+                @Override
+                public void onClick(View v) {
+                    gotoReadEnclosure(approvals.get(position));
+                }
+            });
+        } else {
+            if (ListUtils.getSize(approvals) > position + 1 && position > 0) {
+                if (approvals.get(position + 1).getType() == approvals.get(position - 1).getType()) {
+                    holder.line.setVisibility(View.VISIBLE);
+                    holder.padding.setVisibility(View.GONE);
+                } else {
+                    holder.line.setVisibility(View.GONE);
+                    holder.padding.setVisibility(View.VISIBLE);
+                }
+            }
+            holder.nameTv.setText(name);
+        }
+    }
+
+    private void gotoReadEnclosure(Approval approval) {
+        String url = approval.getIdKey();
+        if (!StringUtils.isEmpty(approval.getCaption())) {
+            if (approval.getCaption().endsWith("jpeg")
+                    || approval.getCaption().endsWith("jpg")
+                    || approval.getCaption().endsWith("png")) {
+                Intent intent = new Intent(ct, SingleImagePreviewActivity.class);
+                intent.putExtra(AppConstant.EXTRA_IMAGE_URI, url);
+                ct.startActivity(intent);
+            } else {
+                OpenFilesUtils.downLoadFile(url, approval.getCaption(), 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 bindBaseRVView(final BaseRVViewHodler holder, final int position) {
+        final Approval approval = approvals.get(position);
+        holder.captionTV.setText(approval.getCaption());
+        if (!StringUtils.isEmpty(approval.getValues())) {
+            if (holder.valueTv.getVisibility() == View.VISIBLE) {
+                holder.valueTv.setText(approval.getValues());
+            } else if (holder.valueEt.getVisibility() == View.VISIBLE) {
+                holder.valueEt.setText(approval.getValues());
+            }
         }
-        if (StringUtils.isEmpty(approval.getTitle())) {
-            holder.titleTV.setVisibility(View.GONE);
+        if (approval.isNeerInput()) {
+            setViewShowAble(true, holder.valueEt);
+            setViewShowAble(false, holder.valueTv, holder.valueWeb);
+            holder.valueEt.setText(approval.getValues());
+            if (approval.isMustInput()) {
+                holder.valueEt.setHint(R.string.common_input);
+            } else {
+                holder.valueEt.setHint(R.string.common_input1);
+            }
+            //0字符输入  1.数字输入  2.日期输入选择  3.下拉选择  4.多选选择
+            switch (approval.inputType()) {
+                case 2:
+                case 3:
+                case 4:
+                    if (approval.isMustInput()) {
+                        holder.valueEt.setHint(R.string.common_select);
+                    } else {
+                        holder.valueEt.setHint(R.string.common_select_not_must);
+                    }
+                    holder.valueEt.setFocusable(true);
+                    holder.valueEt.setFocusableInTouchMode(false);
+                    holder.valueEt.setOnClickListener(new View.OnClickListener() {
+                        @Override
+                        public void onClick(View v) {
+                            if (approval.inputType() == 2) {
+                                showTimeSelect(holder.valueEt, position);
+                            } else {
+                                selectItem(approval, position);
+                            }
+                        }
+                    });
+                    break;
+                case 1:
+                    holder.valueEt.setInputType(InputType.TYPE_CLASS_NUMBER);
+                    holder.valueEt.addTextChangedListener(new TextChangListener(holder, position));
+                    break;
+                default:
+                    holder.valueEt.setInputType(InputType.TYPE_CLASS_TEXT);
+                    holder.valueEt.addTextChangedListener(new TextChangListener(holder, position));
+            }
         } else {
-            holder.titleTV.setVisibility(View.VISIBLE);
-            holder.titleTV.setText(approval.getTitle());
+            if (isWeb(approval.getValues())) {
+                setViewShowAble(true, holder.valueWeb);
+                setViewShowAble(false, holder.valueEt, holder.valueTv);
+                holder.valueWeb.loadDataWithBaseURL(null, approval.getValues(), "text/html", "utf-8", null);
+            } else {
+                setViewShowAble(true, holder.valueTv);
+                setViewShowAble(false, holder.valueEt, holder.valueWeb);
+                holder.valueTv.setText(approval.getValues());
+            }
         }
-        holder.contentRV.setLayoutManager(getLinearLayoutManager());
-        holder.contentRV.setAdapter(new ApprovalRVItemAdapter(ct, approval.getType(), position, approval.getItems()));
-//        if (holder.contentRV.getAdapter() != null && holder.contentRV.getAdapter() instanceof ApprovalRVItemAdapter) {
-//            ApprovalRVItemAdapter adapter = (ApprovalRVItemAdapter) holder.contentRV.getAdapter();
-//            adapter.setItemDatas(approval.getType(),approval.getItems());
-//        } else {
-//        holder.contentRV.setAdapter(new ApprovalRVItemAdapter(ct, approval.getType(), position, approval.getItems()));
-//        }
     }
 
+    private boolean isWeb(String values) {
+        return values != null && values.length() > 100 && values.contains("<br>");
+    }
+
+    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;
+                LogUtil.i("time=" + time);
+                showView.setText(time);
+                approvals.get(position).setValues(time);
+            }
+        });
+        picker.show();
+    }
+
+    private void selectItem(Approval approval, final int position) {
+        if (!ListUtils.isEmpty(approval.getDatas())) {
+            String[] items = new String[approval.getDatas().size()];
+            for (int i = 0; i < approval.getDatas().size(); i++) {
+                items[i] = approval.getDatas().get(i).display;
+            }
+            new MaterialDialog.Builder(ct)
+                    .title(approval.getCaption())
+                    .items(items)
+                    .itemsCallbackSingleChoice(0, new MaterialDialog.ListCallbackSingleChoice() {
+                        @Override
+                        public boolean onSelection(MaterialDialog dialog, View view, int which, CharSequence text) {
+                            if (!TextUtils.isEmpty(text)) {
+                                approvals.get(position).setValues(text.toString());
+                                notifyItemChanged(position);
+                            }
+                            return true;
+                        }
+                    }).positiveText(MyApplication.getInstance().getString(R.string.common_sure)).show();
+
+        }
+    }
+
+    private void bindTitleView(TitleViewHolder holder, int position) {
+        Approval approval = approvals.get(position);
+        holder.titleTv.setText(approval.getCaption());
+        AvatarHelper.getInstance().display(approval.getIdKey(), holder.handIv, true, false);
+        if (approval.getId() > 0) {
+            holder.statusIv.setVisibility(View.VISIBLE);
+            holder.statusIv.setImageResource(approval.getId());
+        } else {
+            holder.statusIv.setVisibility(View.GONE);
+        }
+    }
 
     private class TitleViewHolder extends RecyclerView.ViewHolder {
         TextView titleTv;
@@ -136,21 +400,119 @@ public class ApprovalAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
         }
     }
 
-    private class BaseRVViewHolder extends RecyclerView.ViewHolder {
-        TextView titleTV;
-        RecyclerView contentRV;
-        View line, lineMin;
+    private class TagViewHolder extends RecyclerView.ViewHolder {
+        TextView nameTv;
+        View padding, line;
 
-        public BaseRVViewHolder(ViewGroup parent) {
-            this(LayoutInflater.from(ct).inflate(R.layout.item_base_rvlist, parent, false));
+        public TagViewHolder(ViewGroup parent) {
+            this(LayoutInflater.from(ct).inflate(R.layout.item_approval_tag, parent, false));
         }
 
-        public BaseRVViewHolder(View itemView) {
+        public TagViewHolder(View itemView) {
             super(itemView);
-            titleTV = (TextView) itemView.findViewById(R.id.titleTV);
-            contentRV = (RecyclerView) itemView.findViewById(R.id.contentRV);
+            nameTv = (TextView) itemView.findViewById(R.id.tagTv);
+            padding = itemView.findViewById(R.id.padding);
             line = itemView.findViewById(R.id.line);
-            lineMin = itemView.findViewById(R.id.lineMin);
         }
     }
+
+    private class NodeViewHolder extends RecyclerView.ViewHolder {
+        ImageView handIv, statusIV;
+        TextView timeTv, keyTv, valuesTv;
+        View padding;
+
+        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);
+            padding = itemView.findViewById(R.id.padding);
+        }
+    }
+
+    private class PointsViewHolder extends BaseViewHolder {
+        View line;
+
+        public PointsViewHolder(ViewGroup parent) {
+            this(LayoutInflater.from(ct).inflate(R.layout.item_approval_points, parent, false));
+        }
+
+        public PointsViewHolder(View itemView) {
+            super(itemView);
+            line = itemView.findViewById(R.id.line);
+
+        }
+    }
+
+    private class BaseViewHolder extends RecyclerView.ViewHolder {
+        TextView captionTV, valueTv;
+        EditText valueEt;
+        FrameLayout valuesFl;
+
+        public BaseViewHolder(View itemView) {
+            super(itemView);
+            captionTV = (TextView) itemView.findViewById(R.id.captionTV);
+            valueTv = (TextView) itemView.findViewById(R.id.valueTv);
+            valueEt = (EditText) itemView.findViewById(R.id.valueEt);
+            valuesFl = (FrameLayout) itemView.findViewById(R.id.valuesFl);
+
+        }
+    }
+
+    private class BaseRVViewHodler extends BaseViewHolder {
+        WebView valueWeb;
+
+        public BaseRVViewHodler(ViewGroup parent) {
+            this(LayoutInflater.from(ct).inflate(R.layout.item_approval_rv, parent, false));
+        }
+
+        public BaseRVViewHodler(View itemView) {
+            super(itemView);
+            valueWeb = (WebView) itemView.findViewById(R.id.valueWeb);
+        }
+    }
+
+    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 {
+        BaseViewHolder hodler;
+        private int position;
+
+        public TextChangListener(BaseViewHolder hodler, int position) {
+            this.hodler = hodler;
+            this.position = position;
+        }
+
+        @Override
+        public void afterTextChanged(Editable s) {
+            if (this.position >= 0) {
+                if (this.hodler.valueEt != null && this.hodler.valueEt.getVisibility() == View.VISIBLE) {
+                    String valueEt = this.hodler.valueEt.getText().toString();
+                    approvals.get(this.position).setValues(valueEt == null ? "" : valueEt);
+                }
+            }
+        }
+    }
+
+    private OnChangeClickListener onChangeClickListener;
+
+    public void setOnChangeClickListener(OnChangeClickListener onChangeClickListener) {
+        this.onChangeClickListener = onChangeClickListener;
+    }
+
+    public interface OnChangeClickListener {
+        void click();
+    }
 }

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

@@ -1,437 +1,437 @@
-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.Html;
-import android.text.InputType;
-import android.text.TextUtils;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.webkit.WebView;
-import android.widget.EditText;
-import android.widget.FrameLayout;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-import com.afollestad.materialdialogs.MaterialDialog;
-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.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.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> {
-    private Activity ct;
-    private int type;
-    private List<Approval.Item> itemDatas;
-    private int itemPosition = 0;
-
-    public ApprovalRVItemAdapter(Activity ct, int 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(int type, List<Approval.Item> itemDatas) {
-        this.type = type;
-        this.itemDatas = itemDatas;
-        notifyDataSetChanged();
-        notifyItemRangeChanged(0, itemDatas.size());
-    }
-
-    @Override
-    public int getItemCount() {
-        return ListUtils.getSize(itemDatas);
-    }
-
-
-    @Override
-    public int getItemViewType(int position) {
-        return position;
-    }
-
-    @Override
-    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
-        if (this.type == Approval.ENCLOSURE) {
-            return new EnclosureViewHolder(parent);
-        } else if (this.type == Approval.NODES) {
-            return new NodeViewHolder(parent);
-        } else if (this.type == Approval.POINTS) {
-            return new PointsViewHolder(parent);
-        } else {
-            return new BaseRVViewHodler(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 PointsViewHolder) {
-            bindPointsView((PointsViewHolder) 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 = item.data;
-        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);
-        int textColor = R.color.hintColor;
-        if (!StringUtils.isEmpty(itemData.status)) {
-            holder.valuesTv.setText(itemData.status);
-            if (itemData.status.startsWith("待审批")) {
-                textColor = R.color.approvaling;
-            } else if (itemData.status.startsWith("未通过")) {
-                textColor = R.color.crimson;
-            }
-        } else {
-            holder.valuesTv.setText("");
-        }
-        holder.valuesTv.setTextColor(ct.getResources().getColor(textColor));
-        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)) {
-                reId = R.drawable.node_finished3;
-            } else if ("待审批".equals(status)) {
-                reId = R.drawable.daishenpi;
-            } else if ("未通过".equals(status)) {
-                reId = R.drawable.node_wait3;
-            } else {
-                reId = R.drawable.weishenpi;
-            }
-        }
-        holder.statusIV.setImageResource(reId);
-        AvatarHelper.getInstance().display(itemData.data, holder.handIv, true, false);
-    }
-
-    private void bindPointsView(final PointsViewHolder holder, final int position) {
-        final Approval.Item itemData = itemDatas.get(position);
-        if (itemDatas.size() > position + 1) {
-            holder.line.setVisibility(View.VISIBLE);
-        } else {
-            holder.line.setVisibility(View.GONE);
-        }
-        holder.captionTV.setText(itemData.caption);
-        if (itemData.neerInput) {
-            if (itemData.isSelect()) {
-                if (itemData.mustInput) {
-                    holder.valueTv.setHint(R.string.common_select);
-                } else {
-                    holder.valueTv.setHint(R.string.common_select_not_must);
-                }
-                setViewShowAble(false, holder.valueEt);
-                setViewShowAble(true, holder.valueTv);
-                holder.valueTv.setText(itemData.values);
-                holder.valueTv.setOnClickListener(new View.OnClickListener() {
-                    @Override
-                    public void onClick(View v) {
-                        if (itemData.inputType() == 2) {
-                            showTimeSelect(holder.valueTv, position);
-                        } else {
-                            selectItem(itemData, position);
-                        }
-                    }
-                });
-            } else {
-                if (itemData.mustInput) {
-                    holder.valueEt.setHint(R.string.common_input);
-                } else {
-                    holder.valueEt.setHint(R.string.common_input1);
-                }
-                if (itemData.type.equals("N")) {
-                    holder.valueEt.setInputType(InputType.TYPE_CLASS_NUMBER);
-                } else {
-                    holder.valueEt.setInputType(InputType.TYPE_CLASS_TEXT);
-                }
-                setViewShowAble(true, holder.valueEt);
-                setViewShowAble(false, holder.valueTv);
-                holder.valueEt.setText(itemData.values);
-                holder.valueEt.addTextChangedListener(new TextChangListener(holder, position));
-            }
-        } else {
-            setViewShowAble(false, holder.valueEt);
-            setViewShowAble(true, holder.valueTv);
-            holder.valueTv.setCompoundDrawables(null, null, null, null);
-            holder.valueTv.setText(itemData.values);
-        }
-
-    }
-
-    private void bindBaseRVView(final BaseRVViewHodler holder, final int position) {
-        final Approval.Item itemData = itemDatas.get(position);
-        holder.captionTV.setText(itemData.caption);
-        if (!StringUtils.isEmpty(itemData.values)) {
-            if (holder.valueTv.getVisibility() == View.VISIBLE) {
-                holder.valueTv.setText(itemData.values);
-            } else if (holder.valueEt.getVisibility() == View.VISIBLE) {
-                holder.valueEt.setText(itemData.values);
-            }
-        }
-        if (itemData.neerInput) {
-            setViewShowAble(true, holder.valueEt);
-            setViewShowAble(false, holder.valueTv, holder.valueWeb);
-            holder.valueEt.setText(itemData.values);
-            if (itemData.mustInput) {
-                holder.valueEt.setHint(R.string.common_input);
-            } else {
-                holder.valueEt.setHint(R.string.common_input1);
-            }
-            //0字符输入  1.数字输入  2.日期输入选择  3.下拉选择  4.多选选择
-            switch (itemData.inputType()) {
-                case 2:
-                case 3:
-                case 4:
-                    if (itemData.mustInput) {
-                        holder.valueEt.setHint(R.string.common_select);
-                    } else {
-                        holder.valueEt.setHint(R.string.common_select_not_must);
-                    }
-                    holder.valueEt.setFocusable(true);
-                    holder.valueEt.setFocusableInTouchMode(false);
-                    holder.valueEt.setOnClickListener(new View.OnClickListener() {
-                        @Override
-                        public void onClick(View v) {
-                            if (itemData.inputType() == 2) {
-                                showTimeSelect(holder.valueEt, position);
-                            } else {
-                                selectItem(itemData, position);
-                            }
-                        }
-                    });
-                    break;
-                case 1:
-                    holder.valueEt.setInputType(InputType.TYPE_CLASS_NUMBER);
-                    holder.valueEt.addTextChangedListener(new TextChangListener(holder, position));
-                    break;
-                default:
-                    holder.valueEt.setInputType(InputType.TYPE_CLASS_TEXT);
-                    holder.valueEt.addTextChangedListener(new TextChangListener(holder, position));
-            }
-        } else {
-            if (isWeb(itemData.values)) {
-                setViewShowAble(true, holder.valueWeb);
-                setViewShowAble(false, holder.valueEt, holder.valueTv);
-                holder.valueWeb.loadDataWithBaseURL(null, itemData.values, "text/html", "utf-8", null);
-            } else {
-                setViewShowAble(true, holder.valueTv);
-                setViewShowAble(false, holder.valueEt, holder.valueWeb);
-                holder.valueTv.setText(itemData.values);
-            }
-        }
-    }
-
-    private boolean isWeb(String values) {
-        return values != null && values.length() > 100 && values.contains("<br>");
-    }
-
-    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;
-                LogUtil.i("time=" + time);
-                showView.setText(time);
-                itemDatas.get(position).values = time;
-            }
-        });
-        picker.show();
-    }
-
-    private void selectItem(Approval.Item itemData, final int position) {
-        if (!ListUtils.isEmpty(itemData.datas)) {
-            String[] items = new String[itemData.datas.size()];
-            for (int i = 0; i < itemData.datas.size(); i++) {
-                items[i] = itemData.datas.get(i).display;
-            }
-            new MaterialDialog.Builder(ct)
-                    .title(itemData.caption)
-                    .items(items)
-                    .itemsCallbackSingleChoice(0, new MaterialDialog.ListCallbackSingleChoice() {
-                        @Override
-                        public boolean onSelection(MaterialDialog dialog, View view, int which, CharSequence text) {
-                            if (!TextUtils.isEmpty(text)) {
-                                itemDatas.get(position).values = text.toString();
-                                notifyItemChanged(position);
-                            }
-                            return true;
-                        }
-                    }).positiveText(MyApplication.getInstance().getString(R.string.common_sure)).show();
-
-        }
-    }
-
-    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);
-            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 PointsViewHolder extends BaseViewHolder {
-        View line;
-
-        public PointsViewHolder(ViewGroup parent) {
-            this(LayoutInflater.from(ct).inflate(R.layout.item_approval_points, parent, false));
-        }
-
-        public PointsViewHolder(View itemView) {
-            super(itemView);
-            line = itemView.findViewById(R.id.line);
-        }
-    }
-
-    private class BaseViewHolder extends RecyclerView.ViewHolder {
-        TextView captionTV, valueTv;
-        EditText valueEt;
-        FrameLayout valuesFl;
-
-        public BaseViewHolder(View itemView) {
-            super(itemView);
-            captionTV = (TextView) itemView.findViewById(R.id.captionTV);
-            valueTv = (TextView) itemView.findViewById(R.id.valueTv);
-            valueEt = (EditText) itemView.findViewById(R.id.valueEt);
-            valuesFl = (FrameLayout) itemView.findViewById(R.id.valuesFl);
-        }
-    }
-
-    private class BaseRVViewHodler extends BaseViewHolder {
-        WebView valueWeb;
-
-        public BaseRVViewHodler(ViewGroup parent) {
-            this(LayoutInflater.from(ct).inflate(R.layout.item_approval_rv, parent, false));
-        }
-
-        public BaseRVViewHodler(View itemView) {
-            super(itemView);
-            valueWeb = (WebView) itemView.findViewById(R.id.valueWeb);
-        }
-    }
-
-    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 {
-        BaseViewHolder hodler;
-        private int position;
-
-        public TextChangListener(BaseViewHolder 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.valueEt != null && this.hodler.valueEt.getVisibility() == View.VISIBLE) {
-                    String valueEt = this.hodler.valueEt.getText().toString();
-                    itemDatas.get(this.position).values = valueEt == null ? "" : valueEt;
-                    LogUtil.i("V1=" + valueEt);
-                }
-            }
-        }
-    }
-
-}
+//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.Html;
+//import android.text.InputType;
+//import android.text.TextUtils;
+//import android.view.LayoutInflater;
+//import android.view.View;
+//import android.view.ViewGroup;
+//import android.webkit.WebView;
+//import android.widget.EditText;
+//import android.widget.FrameLayout;
+//import android.widget.ImageView;
+//import android.widget.TextView;
+//
+//import com.afollestad.materialdialogs.MaterialDialog;
+//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.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.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> {
+//    private Activity ct;
+//    private int type;
+//    private List<Approval.Item> itemDatas;
+//    private int itemPosition = 0;
+//
+//    public ApprovalRVItemAdapter(Activity ct, int 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(int type, List<Approval.Item> itemDatas) {
+//        this.type = type;
+//        this.itemDatas = itemDatas;
+//        notifyDataSetChanged();
+//        notifyItemRangeChanged(0, itemDatas.size());
+//    }
+//
+//    @Override
+//    public int getItemCount() {
+//        return ListUtils.getSize(itemDatas);
+//    }
+//
+//
+//    @Override
+//    public int getItemViewType(int position) {
+//        return position;
+//    }
+//
+//    @Override
+//    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+//        if (this.type == Approval.ENCLOSURE) {
+//            return new EnclosureViewHolder(parent);
+//        } else if (this.type == Approval.NODES) {
+//            return new NodeViewHolder(parent);
+//        } else if (this.type == Approval.POINTS) {
+//            return new PointsViewHolder(parent);
+//        } else {
+//            return new BaseRVViewHodler(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 PointsViewHolder) {
+//            bindPointsView((PointsViewHolder) 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 = item.data;
+//        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);
+//        int textColor = R.color.hintColor;
+//        if (!StringUtils.isEmpty(itemData.status)) {
+//            holder.valuesTv.setText(itemData.status);
+//            if (itemData.status.startsWith("待审批")) {
+//                textColor = R.color.approvaling;
+//            } else if (itemData.status.startsWith("未通过")) {
+//                textColor = R.color.crimson;
+//            }
+//        } else {
+//            holder.valuesTv.setText("");
+//        }
+//        holder.valuesTv.setTextColor(ct.getResources().getColor(textColor));
+//        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)) {
+//                reId = R.drawable.node_finished3;
+//            } else if ("待审批".equals(status)) {
+//                reId = R.drawable.daishenpi;
+//            } else if ("未通过".equals(status)) {
+//                reId = R.drawable.node_wait3;
+//            } else {
+//                reId = R.drawable.weishenpi;
+//            }
+//        }
+//        holder.statusIV.setImageResource(reId);
+//        AvatarHelper.getInstance().display(itemData.data, holder.handIv, true, false);
+//    }
+//
+//    private void bindPointsView(final PointsViewHolder holder, final int position) {
+//        final Approval.Item itemData = itemDatas.get(position);
+//        if (itemDatas.size() > position + 1) {
+//            holder.line.setVisibility(View.VISIBLE);
+//        } else {
+//            holder.line.setVisibility(View.GONE);
+//        }
+//        holder.captionTV.setText(itemData.caption);
+//        if (itemData.neerInput) {
+//            if (itemData.isSelect()) {
+//                if (itemData.mustInput) {
+//                    holder.valueTv.setHint(R.string.common_select);
+//                } else {
+//                    holder.valueTv.setHint(R.string.common_select_not_must);
+//                }
+//                setViewShowAble(false, holder.valueEt);
+//                setViewShowAble(true, holder.valueTv);
+//                holder.valueTv.setText(itemData.values);
+//                holder.valueTv.setOnClickListener(new View.OnClickListener() {
+//                    @Override
+//                    public void onClick(View v) {
+//                        if (itemData.inputType() == 2) {
+//                            showTimeSelect(holder.valueTv, position);
+//                        } else {
+//                            selectItem(itemData, position);
+//                        }
+//                    }
+//                });
+//            } else {
+//                if (itemData.mustInput) {
+//                    holder.valueEt.setHint(R.string.common_input);
+//                } else {
+//                    holder.valueEt.setHint(R.string.common_input1);
+//                }
+//                if (itemData.type.equals("N")) {
+//                    holder.valueEt.setInputType(InputType.TYPE_CLASS_NUMBER);
+//                } else {
+//                    holder.valueEt.setInputType(InputType.TYPE_CLASS_TEXT);
+//                }
+//                setViewShowAble(true, holder.valueEt);
+//                setViewShowAble(false, holder.valueTv);
+//                holder.valueEt.setText(itemData.values);
+//                holder.valueEt.addTextChangedListener(new TextChangListener(holder, position));
+//            }
+//        } else {
+//            setViewShowAble(false, holder.valueEt);
+//            setViewShowAble(true, holder.valueTv);
+//            holder.valueTv.setCompoundDrawables(null, null, null, null);
+//            holder.valueTv.setText(itemData.values);
+//        }
+//
+//    }
+//
+//    private void bindBaseRVView(final BaseRVViewHodler holder, final int position) {
+//        final Approval.Item itemData = itemDatas.get(position);
+//        holder.captionTV.setText(itemData.caption);
+//        if (!StringUtils.isEmpty(itemData.values)) {
+//            if (holder.valueTv.getVisibility() == View.VISIBLE) {
+//                holder.valueTv.setText(itemData.values);
+//            } else if (holder.valueEt.getVisibility() == View.VISIBLE) {
+//                holder.valueEt.setText(itemData.values);
+//            }
+//        }
+//        if (itemData.neerInput) {
+//            setViewShowAble(true, holder.valueEt);
+//            setViewShowAble(false, holder.valueTv, holder.valueWeb);
+//            holder.valueEt.setText(itemData.values);
+//            if (itemData.mustInput) {
+//                holder.valueEt.setHint(R.string.common_input);
+//            } else {
+//                holder.valueEt.setHint(R.string.common_input1);
+//            }
+//            //0字符输入  1.数字输入  2.日期输入选择  3.下拉选择  4.多选选择
+//            switch (itemData.inputType()) {
+//                case 2:
+//                case 3:
+//                case 4:
+//                    if (itemData.mustInput) {
+//                        holder.valueEt.setHint(R.string.common_select);
+//                    } else {
+//                        holder.valueEt.setHint(R.string.common_select_not_must);
+//                    }
+//                    holder.valueEt.setFocusable(true);
+//                    holder.valueEt.setFocusableInTouchMode(false);
+//                    holder.valueEt.setOnClickListener(new View.OnClickListener() {
+//                        @Override
+//                        public void onClick(View v) {
+//                            if (itemData.inputType() == 2) {
+//                                showTimeSelect(holder.valueEt, position);
+//                            } else {
+//                                selectItem(itemData, position);
+//                            }
+//                        }
+//                    });
+//                    break;
+//                case 1:
+//                    holder.valueEt.setInputType(InputType.TYPE_CLASS_NUMBER);
+//                    holder.valueEt.addTextChangedListener(new TextChangListener(holder, position));
+//                    break;
+//                default:
+//                    holder.valueEt.setInputType(InputType.TYPE_CLASS_TEXT);
+//                    holder.valueEt.addTextChangedListener(new TextChangListener(holder, position));
+//            }
+//        } else {
+//            if (isWeb(itemData.values)) {
+//                setViewShowAble(true, holder.valueWeb);
+//                setViewShowAble(false, holder.valueEt, holder.valueTv);
+//                holder.valueWeb.loadDataWithBaseURL(null, itemData.values, "text/html", "utf-8", null);
+//            } else {
+//                setViewShowAble(true, holder.valueTv);
+//                setViewShowAble(false, holder.valueEt, holder.valueWeb);
+//                holder.valueTv.setText(itemData.values);
+//            }
+//        }
+//    }
+//
+//    private boolean isWeb(String values) {
+//        return values != null && values.length() > 100 && values.contains("<br>");
+//    }
+//
+//    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;
+//                LogUtil.i("time=" + time);
+//                showView.setText(time);
+//                itemDatas.get(position).values = time;
+//            }
+//        });
+//        picker.show();
+//    }
+//
+//    private void selectItem(Approval.Item itemData, final int position) {
+//        if (!ListUtils.isEmpty(itemData.datas)) {
+//            String[] items = new String[itemData.datas.size()];
+//            for (int i = 0; i < itemData.datas.size(); i++) {
+//                items[i] = itemData.datas.get(i).display;
+//            }
+//            new MaterialDialog.Builder(ct)
+//                    .title(itemData.caption)
+//                    .items(items)
+//                    .itemsCallbackSingleChoice(0, new MaterialDialog.ListCallbackSingleChoice() {
+//                        @Override
+//                        public boolean onSelection(MaterialDialog dialog, View view, int which, CharSequence text) {
+//                            if (!TextUtils.isEmpty(text)) {
+//                                itemDatas.get(position).values = text.toString();
+//                                notifyItemChanged(position);
+//                            }
+//                            return true;
+//                        }
+//                    }).positiveText(MyApplication.getInstance().getString(R.string.common_sure)).show();
+//
+//        }
+//    }
+//
+//    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);
+//            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 PointsViewHolder extends BaseViewHolder {
+//        View line;
+//
+//        public PointsViewHolder(ViewGroup parent) {
+//            this(LayoutInflater.from(ct).inflate(R.layout.item_approval_points, parent, false));
+//        }
+//
+//        public PointsViewHolder(View itemView) {
+//            super(itemView);
+//            line = itemView.findViewById(R.id.line);
+//        }
+//    }
+//
+//    private class BaseViewHolder extends RecyclerView.ViewHolder {
+//        TextView captionTV, valueTv;
+//        EditText valueEt;
+//        FrameLayout valuesFl;
+//
+//        public BaseViewHolder(View itemView) {
+//            super(itemView);
+//            captionTV = (TextView) itemView.findViewById(R.id.captionTV);
+//            valueTv = (TextView) itemView.findViewById(R.id.valueTv);
+//            valueEt = (EditText) itemView.findViewById(R.id.valueEt);
+//            valuesFl = (FrameLayout) itemView.findViewById(R.id.valuesFl);
+//        }
+//    }
+//
+//    private class BaseRVViewHodler extends BaseViewHolder {
+//        WebView valueWeb;
+//
+//        public BaseRVViewHodler(ViewGroup parent) {
+//            this(LayoutInflater.from(ct).inflate(R.layout.item_approval_rv, parent, false));
+//        }
+//
+//        public BaseRVViewHodler(View itemView) {
+//            super(itemView);
+//            valueWeb = (WebView) itemView.findViewById(R.id.valueWeb);
+//        }
+//    }
+//
+//    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 {
+//        BaseViewHolder hodler;
+//        private int position;
+//
+//        public TextChangListener(BaseViewHolder 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.valueEt != null && this.hodler.valueEt.getVisibility() == View.VISIBLE) {
+//                    String valueEt = this.hodler.valueEt.getText().toString();
+//                    itemDatas.get(this.position).values = valueEt == null ? "" : valueEt;
+//                    LogUtil.i("V1=" + valueEt);
+//                }
+//            }
+//        }
+//    }
+//
+//}

+ 3 - 3
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/model/form/Data.java

@@ -207,10 +207,10 @@ public class Data implements Parcelable {
     public Data() {
     }
 
-    public Data(boolean isMain, Approval.Item item) {
+    public Data(boolean isMain, Approval  approval) {
         this.groupId = isMain ? 0 : 1;
-        this.field = item.valuesKey;
-        this.name = item.caption;
+        this.field = approval.getValuesKey();
+        this.name = approval.getCaption();
     }
 
     protected Data(Parcel in) {

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

@@ -1,11 +1,14 @@
 package com.xzjmyk.pm.activity.ui.erp.model.oa;
 
+import android.support.annotation.IntDef;
+
 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.ui.tool.ThreadUtil;
+import com.xzjmyk.pm.activity.util.StringUtils;
 import com.xzjmyk.pm.activity.util.TimeUtils;
 
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -16,67 +19,94 @@ import java.util.Map;
  */
 
 public class Approval {
-    public static final int TITLE = 0x11,//标题
-            MAIN = 0x12  //主表
-            , DETAIL = 0x13//从表
-            , ENCLOSURE = 0x14//附件
-            , POINTS = 0x15//要点
-            , NODES = 0x16;//审批节点
-
+    public static final int
+            TITLE = 11//标题
+            , MAIN = 12  //主表
+            , DETAIL = 13//从表
+            , ENCLOSURE = 14//附件
+            , POINTS = 15//要点
+            , NODES = 16//审批节点
+            , TAG = 17;//标题
+
+    private boolean neerInput = false;//是否需要输入
+    private boolean mustInput = false;//是否是必填字段
     private int id;
-    private String idKey;
-    private String title;
     private int type;
-    private List<Item> items;
+    private String idKey;
+    private String caller;
+    private String dfType;//返回的字段类型
+    private String caption = "";//字幕,表示备注
+    private String values = "";//字幕对应的值显示
+    private String valuesKey = "";//字幕对应的值显示的key值
+    private List<Data> datas = new ArrayList<>();
+
+    public Approval(@Duration int type) {
+        this.type = type;
+    }
 
-    public void show() {
-        ThreadUtil.getInstance().addTask(new Runnable() {
-            @Override
-            public void run() {
-                LogUtil.i("title=" + title);
-                LogUtil.i("type=" + type);
-                LogUtil.i("idKey=" + idKey);
-                LogUtil.i("id=" + id);
-                if (!ListUtils.isEmpty(items)) {
-                    for (Item item : items)
-                        LogUtil.i(item.toString());
-                } else {
-                    LogUtil.i("items is null");
-                }
-            }
-        });
+    public boolean isNeerInput() {
+        return neerInput;
     }
 
-    public void setApproval(Approval approval) {
-        setId(approval.getId());
-        setIdKey(approval.getIdKey());
-        setTitle(approval.getTitle());
-        setType(approval.getType());
-        setItems(approval.getItems());
+    public void setNeerInput(boolean neerInput) {
+        this.neerInput = neerInput;
     }
 
-    public String getTitle() {
-        return title;
+    public boolean isMustInput() {
+        return mustInput;
     }
 
-    public void setTitle(String title) {
-        this.title = title;
+    public void setMustInput(boolean mustInput) {
+        this.mustInput = mustInput;
     }
 
-    public int getType() {
-        return type == 0 ? MAIN : type;
+    public String getDfType() {
+        return dfType == null ? "" : dfType;
     }
 
-    public void setType(int type) {
-        this.type = type;
+    public void setDfType(String dfType) {
+        this.dfType = dfType;
+    }
+
+    public String getCaption() {
+        return caption == null ? "" : caption;
+    }
+
+    public void setCaption(String caption) {
+        this.caption = caption;
+    }
+
+    public String getValues() {
+        return values == null ? "" : values;
+    }
+
+    public void setValues(String values) {
+        this.values = values;
+    }
+
+    public String getValuesKey() {
+        return valuesKey == null ? "" : valuesKey;
+    }
+
+    public void setValuesKey(String valuesKey) {
+        this.valuesKey = valuesKey;
+    }
+
+    public List<Data> getDatas() {
+        return datas;
+    }
+
+    public void setDatas(List<Data> datas) {
+        this.datas = datas;
     }
 
-    public List<Item> getItems() {
-        return items == null ? new ArrayList<Item>() : items;
+
+    public int getType() {
+        return type == 0 ? MAIN : type;
     }
 
-    public void setItems(List<Item> items) {
-        this.items = items;
+    public void setType(@Duration int type) {
+        this.type = type;
     }
 
     public int getId() {
@@ -88,74 +118,75 @@ public class Approval {
     }
 
     public String getIdKey() {
-        return idKey;
+        return idKey == null ? "" : idKey;
     }
 
     public void setIdKey(String idKey) {
         this.idKey = idKey;
     }
 
+    public String getCaller() {
+        return caller;
+    }
+
+    public void setCaller(String caller) {
+        this.caller = caller;
+    }
 
-    public static class Item {
-        public String type;//
-        public boolean neerInput = false;//是否需要输入
-        public boolean mustInput = false;//是否是必填字段
-        public String caption = "";//字幕,表示备注
-        public String values = "";//字幕对应的值显示
-        public String valuesKey = "";//字幕对应的值显示的key值
-        public String status = "";//状态
-        public String data = "";//下拉框对应的值
-        public List<Data> datas = new ArrayList<>();
-
-        @Override
-        public String toString() {
-            Map<String, Object> map = new HashMap<>();
-            map.put("type", type);
-            map.put("neerInput", neerInput);
-            map.put("mustInput", mustInput);
-            map.put("caption", caption);
-            map.put("values", values);
-            map.put("valuesKey", valuesKey);
-            map.put("status", status);
-            map.put("data", data);
-            return StringUtils.mapToJson(map);
+    /**
+     * @return 输入类型:0字符输入  1.数字输入  2.日期输入选择  3.下拉选择  4.多选选择
+     */
+    public int inputType() {
+        if (dfType.equals("N"))
+            return 1;
+        else if ("D".equals(dfType) || "DT".equals(dfType)) {
+            return 2;
+        } else if ("C".equals(dfType) || "YN".equals(dfType) || "B".equals(dfType)) {
+            return 3;
         }
+        return 0;
+    }
+
+    public boolean isSelect() {
+        return dfType.equals("C")
+                || "D".equals(dfType)
+                || "DT".equals(dfType)
+                || "C".equals(dfType)
+                || "YN".equals(dfType)
+                || "B".equals(dfType);
+    }
 
-        /**
-         * @return 输入类型:0字符输入  1.数字输入  2.日期输入选择  3.下拉选择  4.多选选择
-         */
-        public int inputType() {
-            if (type.equals("N"))
-                return 1;
-            else if ("D".equals(type) || "DT".equals(type)) {
-                return 2;
-            } else if ("C".equals(type) || "YN".equals(type) || "B".equals(type)) {
-                return 3;
+    public void data2Values() {
+        if (dfType.equals("D") && values.endsWith("00:00:00")) {
+            long time = TimeUtils.f_str_2_long(values);
+            if (time > 0) {
+                values = TimeUtils.s_long_2_str(time);
             }
-            return 0;
-        }
+        } else if ("C".equals(dfType) || "YN".equals(dfType)) {
+            if (values.equals("-1")) values = "是";
+            else if (values.equals("0")) values = "否";
 
-        public boolean isSelect() {
-            return type.equals("C") || "D".equals(type) || "DT".equals(type) || "C".equals(type) || "YN".equals(type) || "B".equals(type);
+        } else if ("B".equals(dfType)) {
+            if (values.equals("1")) values = "是";
+            else values = "否";
         }
+    }
 
-        public void data2Values() {
-            if (type.equals("D") && values.endsWith("00:00:00")) {
-                long time = TimeUtils.f_str_2_long(values);
-                if (time > 0) {
-                    values = TimeUtils.s_long_2_str(time);
-                }
-            } else if ("C".equals(type) || "YN".equals(type)) {
-                if (values.equals("-1")) values = "是";
-                else if (values.equals("0")) values = "否";
-
-            } else if ("B".equals(type)) {
-                if (values.equals("1")) values = "是";
-                else values = "否";
+    public void addValues(String str) {
+        values = StringUtils.isEmpty(values) ? str : values + str;
+    }
+
+    public boolean isDftypeEQ(String... str) {
+        if (str != null && str.length > 0) {
+            for (String s : str) {
+                if (getDfType().equals(s))
+                    return true;
             }
         }
+        return false;
     }
 
+
     public static class Data {
         public String value = "";
         public String display = "";
@@ -169,4 +200,27 @@ public class Approval {
         }
     }
 
+
+    public void show() {
+        Map<String, Object> map = new HashMap<>();
+        map.put("neerInput", neerInput);
+        map.put("mustInput", mustInput);
+        map.put("id", id);
+        map.put("idKey", idKey);
+        map.put("type", type);
+        map.put("dfType", dfType);
+        map.put("caption", caption);
+        map.put("values", values);
+        map.put("valuesKey", valuesKey);
+        LogUtil.i(StringUtils.mapToJson(map));
+        if (ListUtils.isEmpty(datas)) return;
+        for (Data d : datas) {
+            LogUtil.i("value=" + d.value + "|||" + "   display=" + d.display);
+        }
+    }
+
+    @IntDef({TITLE, MAIN, DETAIL, ENCLOSURE, POINTS, NODES, TAG})
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface Duration {
+    }
 }

+ 279 - 221
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/presenter/ApprovaPresenter.java

@@ -65,8 +65,9 @@ public class ApprovaPresenter implements OnHttpResultListener {
     private DBManager manager;
     public String chchePoints = "";
     private String title;
+    private List<Approval> approvals;
 
-    private boolean isApprovaling() {
+    public boolean isApprovaling() {
         if (StringUtils.isEmpty(title)) return false;
         return title.equals(OACheckUtil.getString(R.string.title_approval));
     }
@@ -74,20 +75,18 @@ public class ApprovaPresenter implements OnHttpResultListener {
     public void trun2SetActivity(Activity activity, List<Approval> approvals) {
         ArrayList<Data> fields = new ArrayList<>();
         ArrayList<Data> fieldsDis = new ArrayList<>();
-        boolean detail = false;
+        boolean addDetailed = false;
+        boolean canAddDetail = true;
         for (Approval approval : approvals) {
-            if (approval.getType() == Approval.MAIN
-                    || approval.getType() == Approval.DETAIL
-                    && !ListUtils.isEmpty(approval.getItems())) {
-                if (approval.getType() == Approval.DETAIL) {
-                    if (detail)
-                        continue;
-                    detail = true;
-                }
-                for (Approval.Item item : approval.getItems()) {
-                    Data data = new Data(approval.getType() == Approval.MAIN, item);
-                    fieldsDis.add(data);
-                }
+            if (approval.getType() == Approval.MAIN) {
+                Data data = new Data(true, approval);
+                fieldsDis.add(data);
+            } else if (approval.getType() == Approval.DETAIL && canAddDetail) {
+                Data data = new Data(true, approval);
+                fieldsDis.add(data);
+                addDetailed = true;
+            } else if (addDetailed) {
+                canAddDetail = false;
             }
         }
         activity.startActivityForResult(new Intent(activity, DataFormFieldActivity.class)
@@ -136,6 +135,7 @@ public class ApprovaPresenter implements OnHttpResultListener {
 
     private void initLoad(int nodeId, String imid) {
         record = new ApprovalRecord();
+        approvals = new ArrayList<>();
         record.nodeId = nodeId;
         if (imid != null)
             record.imid = imid;
@@ -148,14 +148,12 @@ public class ApprovaPresenter implements OnHttpResultListener {
         if (!inputAllPoints(points, approvals))
             return;
         chchePoints = points.toString();
+        LogUtil.i("chchePoints=" + chchePoints);
         String url = "common/processUpdate.action";
         Map<String, Object> param = new HashMap<>();
         List<Map<String, Object>> params = new ArrayList<>();
         Map<String, Object> formStore = new HashMap<>();
-        if (!inputAllMain(formStore, approvals)) {
-            return;
-        }
-        if (!inputAllDetail(params, approvals)) {
+        if (!inputAllInput(params, formStore, approvals)) {
             return;
         }
         if ((formStore.isEmpty() || formStore.size() <= 1) && ListUtils.isEmpty(params)) {
@@ -457,11 +455,11 @@ public class ApprovaPresenter implements OnHttpResultListener {
                         try {
                             handlerFormandGriddataInThread(OACheckUtil.getJSONObject(object, "datas"));
                         } catch (Exception e) {
+                            submiting = false;
                             e.printStackTrace();
                         }
                     }
                 });
-                submiting = false;
                 break;
             case LOAD_JNODES:
                 handlerNode(object);
@@ -563,20 +561,6 @@ public class ApprovaPresenter implements OnHttpResultListener {
             LogUtil.i("不存在");
             loadNextProcess();
         }
-
-
-//        JSONArray array = OACheckUtil.getJsonArray(object, "actorUsers");
-//        if (!ListUtils.isEmpty(array)) {
-//            JSONObject o = array.getJSONObject(0);
-//            if (o == null) loadNextProcess();
-//            else {
-//                JSONArray candidates = OACheckUtil.getJsonArray(o, "JP_CANDIDATES");
-//                //TODO 选择审批人
-//
-//            }
-//        } else {
-////            loadNextProcess();
-//        }
     }
 
     //处理当前结点信息
@@ -598,7 +582,6 @@ public class ApprovaPresenter implements OnHttpResultListener {
                 String caller = OACheckUtil.getJson2Text(currentnode, "jp_caller");
                 if (keyValue != 0) {
                     record.id = keyValue;
-                    iApproval.setKeyValue(keyValue);
                 }
                 if (!StringUtils.isEmpty(title)) {
                     if (!StringUtils.isEmpty(recordName)) {
@@ -619,7 +602,7 @@ public class ApprovaPresenter implements OnHttpResultListener {
             if (currentnode != null) {
                 record.needInputKeys = getJson2Text(button, "jt_neccessaryfield");
             }
-            iApproval.showTitle(record.imid, title, -1);
+            showTitle(record.imid, title, -1);
             loadDetailedList();//获取明细表
             loadCustomSetupOfTask();//获取审批要点
         } else {
@@ -629,55 +612,76 @@ public class ApprovaPresenter implements OnHttpResultListener {
 
     private void handlerFormandGriddataInThread(JSONObject object) throws Exception {
         if (object != null) {
+            //计算主表
             final JSONObject formdata = OACheckUtil.getJsonArray(object, "formdata").getJSONObject(0);
             JSONArray formconfigs = OACheckUtil.getJsonArray(object, "formconfigs");
-
             if (!ListUtils.isEmpty(formconfigs) && formdata != null) {
-                final Approval mainApproval = formandGriddata(formdata, formconfigs, true);
-                mainApproval.setType(Approval.MAIN);
-                OAHttpHelper.getInstance().post(new Runnable() {
-                    @Override
-                    public void run() {
-                        iApproval.showMainList(record.id,mainApproval);
-                    }
-                });
+                final List<Approval> mainApproval = formandGriddata(formdata, formconfigs, record.caller, true);
+                setData2ListThread(Approval.MAIN, mainApproval);
             }
+            //计算从表,包含多从表
             JSONArray griddatas = OACheckUtil.getJsonArray(object, "griddata");
             JSONArray gridconfigs = OACheckUtil.getJsonArray(object, "gridconfigs");
+            JSONArray othergrids = OACheckUtil.getJsonArray(object, "othergrids");
             final List<Approval> detailedList = new ArrayList<>();
             if (!ListUtils.isEmpty(griddatas) && !ListUtils.isEmpty(gridconfigs)) {
                 for (int i = 0; i < griddatas.size(); i++) {
                     //获取到单个明细表单
-                    final Approval detailedApproval = formandGriddata(griddatas.getJSONObject(i), gridconfigs, false);
-                    detailedApproval.setType(Approval.DETAIL);
-                    detailedApproval.setTitle(getString(R.string.serial_number) + (i + 1));
-                    detailedList.add(detailedApproval);
+                    final List<Approval> detailedApproval = formandGriddata(griddatas.getJSONObject(i), gridconfigs, record.caller, false);
+                    Approval approval = new Approval(Approval.TAG);
+                    approval.setCaption(getString(R.string.serial_number) + (i + 1));
+                    detailedApproval.add(0, approval);
+                    detailedList.addAll(detailedApproval);
+                }
+            }
+            if (!ListUtils.isEmpty(othergrids)) {
+                JSONObject o = null;
+                String caller = null;
+                JSONArray otherGriddata = null;
+                JSONArray otherGridconfigs = null;
+                for (int i = 0; i < othergrids.size(); i++) {
+                    o = othergrids.getJSONObject(i);
+                    caller = OACheckUtil.getJson2Text(o, "caller");
+                    otherGriddata = OACheckUtil.getJsonArray(o, "griddata");
+                    otherGridconfigs = OACheckUtil.getJsonArray(o, "gridconfigs");
+                    if (!ListUtils.isEmpty(otherGriddata) && !ListUtils.isEmpty(otherGridconfigs)) {
+                        for (int j = 0; j < otherGriddata.size(); j++) {
+                            //获取到单个明细表单
+                            final List<Approval> detailedApproval = formandGriddata(otherGriddata.getJSONObject(j), otherGridconfigs, caller, false);
+                            Approval approval = new Approval(Approval.TAG);
+                            approval.setCaption(getString(R.string.subtabulation) + " " + (i + 1) + " " +
+                                    getString(R.string.serial_number) + (j + 1));
+                            detailedApproval.add(0, approval);
+                            detailedList.addAll(detailedApproval);
+                        }
+                    }
                 }
             }
+            setData2ListThread(Approval.DETAIL, detailedList);
             OAHttpHelper.getInstance().post(new Runnable() {
                 @Override
                 public void run() {
-                    iApproval.showDetailList(record.id,detailedList);
                     loadJnodes();
                 }
             });
         }
     }
 
-    private Approval formandGriddata(final JSONObject data, final JSONArray configs, boolean isMain) throws Exception {
-        Approval approval = new Approval();
-        List<Approval.Item> itemDatas = new ArrayList<>();
+    private List<Approval> formandGriddata(final JSONObject data, final JSONArray configs, String caller, boolean isMain) throws Exception {
+        List<Approval> approvals = 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.Item itemData = new Approval.Item();
+            Approval approval = new Approval(isMain ? Approval.MAIN : Approval.DETAIL);
             String caption = getJson2Text(config, "FD_CAPTION", "DG_CAPTION");//获取第一个字段字段名称
             String valueKey = getJson2Text(config, "FD_FIELD", "DG_FIELD");
             JSONArray combostore = OACheckUtil.getJsonArray(config, "COMBOSTORE");
-            itemData.type = getJson2Text(config, "FD_TYPE", "DG_TYPE");
+            String type = getJson2Text(config, "FD_TYPE", "DG_TYPE");
+            //添加类型
+            approval.setDfType(type);
             int isdefault = OACheckUtil.getJsonIntager(config, "MFD_ISDEFAULT", "MDG_ISDEFAULT");
             int appwidth = OACheckUtil.getJsonIntager(config, "FD_APPWIDTH", "DG_APPWIDTH");
             if (isMain && caption.equals("附件")) {
@@ -695,7 +699,7 @@ public class ApprovaPresenter implements OnHttpResultListener {
                 id = OACheckUtil.getJsonIntager(data, valueKey);
             }
             if (isdefault != -1
-                    || itemData.type.equals("H")
+                    || approval.isDftypeEQ("H")
                     || appwidth == 0
                     || (!isMain && OACheckUtil.getJsonIntager(config, "DG_WIDTH") == 0)
                     || OACheckUtil.isEmpty(valueKey)
@@ -703,36 +707,38 @@ public class ApprovaPresenter implements OnHttpResultListener {
                     || (merged.length() > 0 && merged.toString().contains(valueKey))) {
                 continue;
             }
+            //添加下拉数据
             if (!ListUtils.isEmpty(combostore)) {
                 for (int j = 0; j < combostore.size(); j++) {
                     JSONObject object = combostore.getJSONObject(j);
                     String value = getJson2Text(object, "DLC_VALUE");
                     String display = getJson2Text(object, "DLC_DISPLAY");
                     if (!StringUtils.isEmpty(value) || !StringUtils.isEmpty(display))
-                        itemData.datas.add(new Approval.Data(display, value));
+                        approval.getDatas().add(new Approval.Data(display, value));
                 }
             }
-            itemData.values = OACheckUtil.getJson2Text(data, valueKey);//获取第一个字段的值
-            boolean mergeAble = appwidth == 1 || "MT".equals(itemData.type);
-            itemData.caption = caption;
-            itemData.valuesKey = valueKey;
-            itemData.data2Values();
-            itemData.mustInput = true;
-            if (!StringUtils.isEmpty(record.needInputKeys) && ("," + record.needInputKeys + ",").contains("," + valueKey + ",")) {
-                itemData.neerInput = true;
-                if (itemData.datas.size() <= 0) {
-                    if (itemData.type.equals("YN") || itemData.type.equals("C")) {
-                        itemData.datas.add(new Approval.Data("-1", "是"));
-                        itemData.datas.add(new Approval.Data("0", "否"));
-                    } else if (itemData.type.equals("B")) {
-                        itemData.datas.add(new Approval.Data("1", "是"));
-                        itemData.datas.add(new Approval.Data("0", "否"));
+            approval.setValues(OACheckUtil.getJson2Text(data, valueKey)); ;//获取第一个字段的值
+            boolean mergeAble = appwidth == 1 || (approval.isDftypeEQ("MT"));
+            approval.setCaption(caption);
+            approval.setValuesKey(valueKey);
+            approval.data2Values();
+            approval.setMustInput(true);
+            if (!StringUtils.isEmpty(record.needInputKeys)
+                    && ("," + record.needInputKeys + ",").contains("," + valueKey + ",")) {
+                approval.setNeerInput(true);
+                if (approval.getDatas().size() <= 0) {
+                    if (approval.isDftypeEQ("YN", "C")) {
+                        approval.getDatas().add(new Approval.Data("-1", "是"));
+                        approval.getDatas().add(new Approval.Data("0", "否"));
+                    } else if (approval.isDftypeEQ("B")) {
+                        approval.getDatas().add(new Approval.Data("1", "是"));
+                        approval.getDatas().add(new Approval.Data("0", "否"));
                     }
                 }
             }
             if (!isApprovaling())
-                itemData.neerInput = false;
-            if (!itemData.neerInput && StringUtils.isEmpty(itemData.values))
+                approval.setNeerInput(false);
+            if (!approval.isNeerInput() && StringUtils.isEmpty(approval.getValues()))
                 continue;//如果不是要输入的对象,同时显示值为空,需要隐藏去
             if (mergeAble) {
                 String valueTagKey = getJson2Text(config, "FD_LOGICTYPE", "DG_LOGICTYPE");//获取第二个值的key
@@ -740,17 +746,18 @@ public class ApprovaPresenter implements OnHttpResultListener {
                     String valueTag = OACheckUtil.getJson2Text(data, valueTagKey);
                     if (!StringUtils.isEmpty(valueTag)) {
                         merged.append(valueTagKey + ",");
-                        itemData.values += "/" + valueTag;
+                        approval.addValues("/" + valueTag);
                     }
                 }
             }
-
-            itemDatas.add(itemData);
+            approval.setCaller(caller);
+            approvals.add(approval);
         }
-        approval.setId(id);
-        approval.setIdKey(idTag);
-        approval.setItems(itemDatas);
-        return approval;
+        for (Approval approval : approvals) {
+            approval.setId(id);
+            approval.setIdKey(idTag);
+        }
+        return approvals;
     }
 
     /**
@@ -772,30 +779,26 @@ public class ApprovaPresenter implements OnHttpResultListener {
                 JSONArray nodes = OACheckUtil.getJsonArray(object, "nodes");
                 JSONArray processs = OACheckUtil.getJsonArray(object, "processs");
                 JSONArray datas = OACheckUtil.getJsonArray(object, "data");
-                List<Approval.Item> itemDatas = getNodDatas(datas);
+                final List<Approval> approvals = getNodDatas(datas);
                 if (!ListUtils.isEmpty(processs)) {
-                    mergeNode(processs, itemDatas, false);
+                    mergeNode(processs, approvals, false);
                 }
                 if (!ListUtils.isEmpty(nodes)) {
-                    mergeNode(nodes, itemDatas, true);
+                    mergeNode(nodes, approvals, true);
                 }
                 //判断当前
-                for (Approval.Item itemData : itemDatas) {
-                    if (StringUtils.isEmpty(itemData.status) || itemData.status.contains("待审批")) {
-                        itemData.values = "";
+                for (Approval a : approvals) {
+                    if (a.getIdKey().contains("待审批")) {
+                        a.setValues("");
                         record.status = "待审批";
                     }
-                    if (!StringUtils.isEmpty(itemData.type)) {
-                        String[] emcode = itemData.type.split(",");
-                        if (!StringUtils.isEmpty(emcode[0])) {
-                            int imId = getImByCode(emcode[0]);
-                            itemData.data = String.valueOf(imId);
-                        }
+                    String[] emcode = a.getDfType().split(",");
+                    if (!StringUtils.isEmpty(emcode[0])) {
+                        int imId = getImByCode(emcode[0]);
+                        a.setId(imId);
                     }
                 }
-                final Approval node = new Approval();
-                node.setItems(itemDatas);
-                node.setType(Approval.NODES);
+                setData2ListThread(Approval.NODES, approvals);
                 OAHttpHelper.getInstance().post(new Runnable() {
                     @Override
                     public void run() {
@@ -805,36 +808,40 @@ public class ApprovaPresenter implements OnHttpResultListener {
                         } else if ("已审批".equals(record.status)) {
                             reId = R.drawable.approved;
                         }
-                        iApproval.showTitle(null, null, reId);
-                        iApproval.showNodeList(record.id,node);
+                        showTitle(null, null, reId);
                     }
                 });
             }
         });
+        submiting = false;
     }
 
-    private void handlerEnclosure(JSONArray array) throws Exception {
-        List<Approval.Item> 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.Item enclosure = new Approval.Item();
-                int id = OACheckUtil.getJsonIntager(o, "fp_id");
-                enclosure.data = getImageUrl(id);
-                enclosure.caption = OACheckUtil.getJson2Text(o, "fp_name");
-                enclosureList.add(enclosure);
+    private void handlerEnclosure(final JSONArray array) throws Exception {
+        ThreadUtil.getInstance().addTask(new Runnable() {
+            @Override
+            public void run() {
+                List<Approval> 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 = new Approval(Approval.ENCLOSURE);
+                        int id = OACheckUtil.getJsonIntager(o, "fp_id");
+                        enclosure.setId(id);
+                        enclosure.setIdKey(getImageUrl(id));
+                        enclosure.setCaption(OACheckUtil.getJson2Text(o, "fp_name"));
+                        enclosureList.add(enclosure);
+                    }
+                }
+                Approval tag = new Approval(Approval.TAG);
+                tag.setCaption("附件");
+                enclosureList.add(0, tag);
+                setData2ListThread(Approval.ENCLOSURE, enclosureList);
             }
-        }
-        Approval enclosureApproval = new Approval();
-        enclosureApproval.setTitle("附件");
-        enclosureApproval.setItems(enclosureList);
-        enclosureApproval.setType(Approval.ENCLOSURE);
-        iApproval.showEnclosureList(record.id,enclosureApproval);
+        });
     }
 
-
-    private void mergeNode(JSONArray array, List<Approval.Item> itemDatas, boolean isLog) {
+    private void mergeNode(JSONArray array, List<Approval> approvals, boolean isLog) {
         for (int i = 0; i < array.size(); i++) {
             JSONObject o = array.getJSONObject(i);
             String name = OACheckUtil.getJson2Text(o, "jp_nodeName", "jn_name");//节点名称
@@ -843,22 +850,22 @@ public class ApprovaPresenter 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.Item itemData : itemDatas) {
-                if (name.equals(itemData.valuesKey)) {//为当前结点
+            for (Approval a : approvals) {
+                if (name.equals(a.getValuesKey())) {//为当前结点
                     if (!isLog) {
-                        itemData.type = nodeDealCode;
-                        itemData.caption = nodeDealName;
-                        itemData.status = status;
+                        a.setDfType(nodeDealCode);
+                        a.setCaption(nodeDealName);
+                        a.setIdKey(status);
                         if (launchTime > 0) {
-                            itemData.values = TimeUtils.long2str(launchTime, "MM-dd HH:mm");
+                            a.setValues(TimeUtils.long2str(launchTime, "MM-dd HH:mm"));
                         }
                     } else {
-                        if (itemData.type.equals(nodeDealCode)) {
+                        if (a.isDftypeEQ(nodeDealCode)) {
                             if (launchTime > 0) {
-                                itemData.values = TimeUtils.long2str(launchTime, "MM-dd HH:mm");
+                                a.setValues(TimeUtils.long2str(launchTime, "MM-dd HH:mm"));
                             }
                             if (!StringUtils.isEmpty(nodeDescription)) {
-                                itemData.status = itemData.status + "(" + nodeDescription + ")";
+                                a.setIdKey(a.getIdKey() + "(" + nodeDescription + ")");
                             }
                         }
                     }
@@ -874,46 +881,51 @@ public class ApprovaPresenter implements OnHttpResultListener {
      * @param datas
      * @return
      */
-    private List<Approval.Item> getNodDatas(JSONArray datas) {
-        List<Approval.Item> itemDatas = new ArrayList<>();
+    private List<Approval> getNodDatas(JSONArray datas) {
+        List<Approval> approvals = 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.Item itemData = new Approval.Item();
-            itemData.caption = manName;//处理人名称
-            itemData.type = emCode;//处理人编号
-            itemData.valuesKey = nodeName;//节点名称
-            itemDatas.add(itemData);
+            Approval approval = new Approval(Approval.NODES);
+            approval.setCaption(manName);
+            approval.setDfType(emCode);
+            approval.setValuesKey(nodeName);
+            approvals.add(approval);
         }
-        return itemDatas;
+        return approvals;
     }
 
-    private void handlerSetupTask(JSONObject object) throws Exception {
-        JSONArray arrayCS = OACheckUtil.getJsonArray(object, "cs");
-        if (!ListUtils.isEmpty(arrayCS)) {
-            String data = OACheckUtil.getJson2Text(object, "data");
-            String[] datas = null;
-            if (!StringUtils.isEmpty(data)) {
-                //需要把该数据填充到对应上面
-                datas = data.split(";");
-            }
-            List<Approval.Item> pointsList = new ArrayList<>();
-            for (int i = 0; i < arrayCS.size(); i++) {
-                Approval.Item itemData = getItemBySetupTask(arrayCS.getString(i), datas);
-                if (itemData != null) {
-                    pointsList.add(itemData);
+    private void handlerSetupTask(final JSONObject object) throws Exception {
+        ThreadUtil.getInstance().addTask(new Runnable() {
+            @Override
+            public void run() {
+                JSONArray arrayCS = OACheckUtil.getJsonArray(object, "cs");
+                if (!ListUtils.isEmpty(arrayCS)) {
+                    String data = OACheckUtil.getJson2Text(object, "data");
+                    String[] datas = null;
+                    if (!StringUtils.isEmpty(data)) {
+                        //需要把该数据填充到对应上面
+                        datas = data.split(";");
+                    }
+                    List<Approval> pointsList = new ArrayList<>();
+                    for (int i = 0; i < arrayCS.size(); i++) {
+                        Approval itemData = getItemBySetupTask(arrayCS.getString(i), datas);
+                        if (itemData != null) {
+                            pointsList.add(itemData);
+                        }
+                    }
+                    if (!ListUtils.isEmpty(pointsList)) {
+                        Approval points = new Approval(Approval.TAG);
+                        points.setCaption(OACheckUtil.getString(R.string.approval_points));
+                        pointsList.add(0, points);
+                        setData2ListThread(Approval.POINTS, pointsList);
+                    }
                 }
             }
-            if (!ListUtils.isEmpty(pointsList)) {
-                Approval points = new Approval();
-                points.setItems(pointsList);
-                points.setType(Approval.POINTS);
-                points.setTitle(OACheckUtil.getString(R.string.approval_points));
-                iApproval.showPointsList(record.id,points);
-            }
-        }
+        });
+
     }
 
     /**
@@ -926,16 +938,16 @@ public class ApprovaPresenter implements OnHttpResultListener {
      * ..$N为非必填字段,
      * ..$Y表示该字段为必填字段,
      */
-    private Approval.Item getItemBySetupTask(String cs, String[] datas) throws Exception {
+    private Approval getItemBySetupTask(String cs, String[] datas) {
         if (!StringUtils.isEmpty(cs)) {
-            Approval.Item itemData = new Approval.Item();
+            Approval approval = new Approval(Approval.POINTS);
             String[] css = cs.split("\\^");
             if (!StringUtils.isEmpty(css[0])) {
-                itemData.caption = css[0];
+                approval.setCaption(css[0]);
                 String tag = css[1];
                 if (!StringUtils.isEmpty(tag)) {
                     String[] tags = tag.split("\\$");
-                    itemData.type = tags[0];
+                    approval.setDfType(tags[0]);
                     String neer = tags[1];
                     String data = OACheckUtil.getLastBracket(neer);
                     if (StringUtils.isEmpty(data)) {
@@ -945,32 +957,30 @@ public class ApprovaPresenter implements OnHttpResultListener {
                     if (combostore != null && combostore.length > 0) {
                         for (String v : combostore) {
                             if (v != null && v.length() > 0)
-                                itemData.datas.add(new Approval.Data(v, v));
+                                approval.getDatas().add(new Approval.Data(v, v));
                         }
                     }
                     if (!StringUtils.isEmpty(neer))
-                        itemData.mustInput = neer.contains("Y");
+                        approval.setMustInput(neer.startsWith("Y"));
                 }
-                if (datas != null && datas.length > 0 && !StringUtils.isEmpty(itemData.caption)) {
+                if (datas != null && datas.length > 0) {
                     for (String data : datas) {
-                        if (data.startsWith(itemData.caption)) {
+                        if (data.startsWith(approval.getCaption())) {
                             String values = OACheckUtil.getFirstBrackets(data);
                             if (!StringUtils.isEmpty(values)
                                     && !values.equals("null")
                                     && !values.equals("(null)")
                                     && !values.equals("(null")) {
-                                itemData.values = values;
+                                approval.setValues(values);
                             }
                         }
                     }
                 }
-                if (isApprovaling()) {
-                    itemData.neerInput = true;
-                }
-                if (!itemData.neerInput && StringUtils.isEmpty(itemData.values)) {
+                approval.setNeerInput(isApprovaling());
+                if (!approval.isNeerInput() && StringUtils.isEmpty(approval.getValues())) {
                     return null;
                 }
-                return itemData;
+                return approval;
             }
         }
         return null;
@@ -998,7 +1008,7 @@ public class ApprovaPresenter implements OnHttpResultListener {
             iApproval.showToast("正在提交请求,请不要重复提交", R.color.load_submit);
             return false;
         }
-        return true;
+        return false;
     }
 
     //判断要点
@@ -1006,24 +1016,21 @@ public class ApprovaPresenter implements OnHttpResultListener {
         if (!ListUtils.isEmpty(approvals)) {
             LogUtil.i("show Presenter pointsList .....");
             for (Approval approval : approvals) {
-                approval.show();
                 if (approval.getType() == Approval.POINTS) {
-                    for (Approval.Item itemData : approval.getItems()) {
-                        if (itemData.mustInput && StringUtils.isEmpty(itemData.values)) {
-                            String message = OACheckUtil.getString(R.string.approval_points) + " " + itemData.caption + " " + OACheckUtil.getString(R.string.is_must_input);
-                            LogUtil.i("message=" + message);
+                    if (approval.isMustInput() && StringUtils.isEmpty(approval.getValues())) {
+                        String message = OACheckUtil.getString(R.string.approval_points) + " " + approval.getCaption() + " " + OACheckUtil.getString(R.string.is_must_input);
+                        LogUtil.i("message=" + message);
+                        iApproval.showToast(message, R.color.load_submit);
+                        return false;
+                    }
+                    if (!StringUtils.isEmpty(approval.getCaption())
+                            && !StringUtils.isEmpty(approval.getValues()) && customDes != null) {
+                        if (approval.getValues().contains("@")) {
+                            String message = OACheckUtil.getString(R.string.approval_points) + " " + approval.getCaption() + " 带有特殊字符";
                             iApproval.showToast(message, R.color.load_submit);
                             return false;
                         }
-
-                        if (!StringUtils.isEmpty(itemData.caption) && !StringUtils.isEmpty(itemData.values) && customDes != null) {
-                            if (itemData.values.contains("@")) {
-                                String message = OACheckUtil.getString(R.string.approval_points) + " " + itemData.caption + " 带有特殊字符";
-                                iApproval.showToast(message, R.color.load_submit);
-                                return false;
-                            }
-                            customDes.append(itemData.caption + "(" + itemData.values + ");");
-                        }
+                        customDes.append(approval.getCaption() + "(" + approval.getValues() + ");");
                     }
                 }
             }
@@ -1032,70 +1039,121 @@ public class ApprovaPresenter implements OnHttpResultListener {
         return true;
     }
 
-    private boolean inputAllMain(Map<String, Object> formStore, List<Approval> approvals) {
-        Map<String, Object> formstore = null;
+    private boolean inputAllInput(List<Map<String, Object>> params, Map<String, Object> formStore, List<Approval> approvals) {
         if (!ListUtils.isEmpty(approvals)) {
-            for (Approval approval : approvals) {
+            List<Approval> mainList = new ArrayList();
+            List<List<Approval>> detailList = new ArrayList<>();
+            List<Approval> detail = new ArrayList<>();
+            for (int i = 0; i < approvals.size(); i++) {
+                Approval approval = approvals.get(i);
                 if (approval.getType() == Approval.MAIN) {
-                    formstore = putItem2Params(approval.getItems());
-                    if (formstore == null)
-                        return false;
-                    formstore.put(approval.getIdKey(), approval.getId());
-                    break;
+                    mainList.add(approval);
+                } else if (approval.getType() == Approval.DETAIL) {
+                    detail.add(approval);
+                    if (approvals.size() > i + 1 && approvals.get(i + 1).getType() != approval.getType()) {
+                        detailList.add(detail);
+                        detail = new ArrayList<>();
+                    }
                 }
             }
-        }
-        if (formstore != null) {
+            Map<String, Object> formstore = putItem2Params(mainList);
+            if (formstore == null)
+                return false;
             formStore.putAll(formstore);
-        }
-        return true;
-    }
-
-    private boolean inputAllDetail(List<Map<String, Object>> params, List<Approval> approvals) {
-        if (!ListUtils.isEmpty(approvals)) {
-            for (Approval approval : approvals) {
-                if (approval.getType() == Approval.DETAIL) {
-                    Map<String, Object> formstore = putItem2Params(approval.getItems());
-                    if (formstore == null)
-                        return false;
-                    if (formstore.isEmpty()) continue;
-                    formstore.put(approval.getIdKey(), approval.getId());
-                    params.add(formstore);
-                }
+            for (List<Approval> details : detailList) {
+                Map<String, Object> param = putItem2Params(details);
+                if (param == null)
+                    return false;
+                if (param.isEmpty()) continue;
+                params.add(param);
             }
         }
         return true;
     }
 
-    private Map<String, Object> putItem2Params(List<Approval.Item> items) {
+    private Map<String, Object> putItem2Params(List<Approval> approvals) {
         Map<String, Object> formstore = new HashMap<>();
-        for (Approval.Item itemData : items) {
-            if (itemData.neerInput) {
-                if (StringUtils.isEmpty(itemData.values)) {
-                    String message = OACheckUtil.getString(R.string.must_input_key) + " " + itemData.caption + " " + OACheckUtil.getString(R.string.is_must_input);
+        for (Approval approval : approvals) {
+            if (approval.isNeerInput()) {
+                if (StringUtils.isEmpty(approval.getValues())) {
+                    String message = OACheckUtil.getString(R.string.must_input_key) + " " + approval.getCaption() + " " + OACheckUtil.getString(R.string.is_must_input);
                     iApproval.showToast(message);
                     return null;
-                } else if (StringUtils.isEmpty(StringUtils.string2Json(itemData.values))) {
-                    String message = OACheckUtil.getString(R.string.must_input_key) + " " + itemData.caption + " " + OACheckUtil.getString(R.string.limit_unno_zijie);
+                } else if (StringUtils.isEmpty(StringUtils.string2Json(approval.getValues()))) {
+                    String message = OACheckUtil.getString(R.string.must_input_key) + " " + approval.getCaption() + " " + OACheckUtil.getString(R.string.limit_unno_zijie);
                     iApproval.showToast(message);
                     return null;
                 } else {
                     boolean isputed = false;
-                    for (Approval.Data data : itemData.datas) {
+                    for (Approval.Data data : approval.getDatas()) {
                         isputed = false;
-                        if (data.display.equals(itemData.values)) {
-                            formstore.put(itemData.valuesKey,
-                                    StringUtils.isEmpty(data.value) ? itemData.values : data.value);
+                        if (data.display.equals(approval.getValues())) {
+                            formstore.put(approval.getValuesKey(),
+                                    StringUtils.isEmpty(data.value) ? approval.getValues() : data.value);
                             isputed = true;
                             break;
                         }
                     }
                     if (!isputed) {
-                        formstore.put(itemData.valuesKey, itemData.values);
+                        formstore.put(approval.getValuesKey(), approval.getValues());
                     }
                 }
             }
+            if (!StringUtils.isEmpty(approval.getIdKey()) && approval.getId() > 0) {
+                formstore.put(approval.getIdKey(), approval.getId());
+            }
         }
         return formstore;
     }
+
+    public void showTitle(String imid, String title, int statusId) {
+        Approval approval;
+        if (!ListUtils.isEmpty(approvals) && approvals.get(0).getType() == Approval.TITLE) {
+            approval = approvals.get(0);
+        } else {
+            approval = new Approval(Approval.TITLE);
+            approvals.add(approval);
+        }
+        if (statusId > 0)
+            approval.setId(statusId);
+        if (!StringUtils.isEmpty(title))
+            approval.setCaption(title);
+        if (!StringUtils.isEmpty(imid))
+            approval.setIdKey(imid);
+        iApproval.showModels(approvals);
+    }
+
+
+    private synchronized void setData2ListThread(int type, List<Approval> newApprovals) {
+        LogUtil.i("come to setData2ListThread=" + type);
+        final List<Approval> merges = new ArrayList<>();
+        if (!ListUtils.isEmpty(approvals)) {
+            boolean added = false;
+            for (int i = 0; i < approvals.size(); i++) {
+                int oldType = approvals.get(i).getType();
+                if (!added && ((oldType != Approval.TAG && oldType > type)
+                        || oldType == Approval.TAG && approvals.size() > i + 1 && approvals.get(i + 1).getType() > type)) {
+                    merges.addAll(i, newApprovals);
+                    added = true;
+                }
+                merges.add(approvals.get(i));
+            }
+            LogUtil.i("added=" + added);
+            if (!added) {
+                merges.addAll(newApprovals);
+            }
+        } else {
+            merges.addAll(newApprovals);
+        }
+        approvals = merges;
+        LogUtil.i("end of setData2ListThread");
+        OAHttpHelper.getInstance().post(new Runnable() {
+            @Override
+            public void run() {
+                LogUtil.i("showModel");
+                iApproval.showModels(merges);
+
+            }
+        });
+    }
 }

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

@@ -14,21 +14,10 @@ public interface IApproval extends HttpImp {
 
     void nodeDealMan(String nodeDealMan);
 
-    void showTitle(String imid, String title, int statusId);
-
-    void showMainList(int keyValue,Approval mainApproval);
-
-    void showDetailList(int keyValue,List<Approval> detailedList);
-
-    void showNodeList(int keyValue,Approval nodes);
-
-    void showPointsList(int keyValue,Approval points);
-
-    void showEnclosureList(int keyValue,Approval enclosureApproval);
+    void showModels(List<Approval> approvals);
 
     void initStatus();
 
     void endProcess();
 
-    void setKeyValue(int keyValue);
 }

+ 6 - 4
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/BadgeUtil.java

@@ -30,7 +30,7 @@ public final class BadgeUtil {
      */
     public static void setBadgeCount(Context context, int count, int iconResId) {
         if (count <= 0) {
-            count = 0;
+            return;
         } else {
             count = Math.max(0, Math.min(count, 99));
         }
@@ -55,10 +55,13 @@ public final class BadgeUtil {
      * 设置MIUI的Badge
      */
     private static void setBadgeOfMIUI(Context context, int count, int iconResId) {
+
         NotificationManager mNotificationManager = (NotificationManager) context
                 .getSystemService(Context.NOTIFICATION_SERVICE);
         NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
-        builder.setContentTitle("UU提示").setContentText("您有"+count+"条新消息").setSmallIcon(iconResId);
+//        if (mark){
+            builder.setContentTitle("UU提示").setContentText("您有"+count+"条新消息").setSmallIcon(iconResId);
+//        }
         Notification notification = builder.build();
         try {
             Field field = notification.getClass().getDeclaredField("extraNotification");
@@ -68,8 +71,7 @@ public final class BadgeUtil {
         } catch (Exception e) {
             e.printStackTrace();
         }
-        if (count > 0)
-            mNotificationManager.notify(count, notification);
+        mNotificationManager.notify(0, notification);
     }
 
     /**

+ 2 - 4
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/oa/http/DepositNoticeUtil.java

@@ -133,13 +133,11 @@ public class DepositNoticeUtil {
                 LogUtil.i("distance == -1f");
                 continue;
             }
-            LogUtil.prinlnLongMsg("startTime,current_T",model.getAb_starttime()+","+TimeUtils.f_long_2_str(System.currentTimeMillis()));
             if (model.getAb_starttime().compareTo(TimeUtils.f_long_2_str(System.currentTimeMillis())) > 0){
-
                 setNoticeTime(model.getAb_starttime(), latLng, distance);
-
-                LogUtil.prinlnLongMsg("startTime,current_T",model.getAb_starttime()+","+TimeUtils.f_long_2_str(System.currentTimeMillis()));
             }
+            LogUtil.prinlnLongMsg("startTime,current_T",model.getAb_starttime()+","+TimeUtils.f_long_2_str(System.currentTimeMillis()));
+
         }
     }
 

+ 9 - 0
WeiChat/src/main/java/com/xzjmyk/pm/newpedo/view/VpDemoActivity.java

@@ -0,0 +1,9 @@
+package com.xzjmyk.pm.newpedo.view;
+
+/**
+ * Created by FANGlh on 2017/7/28.
+ * function:
+ */
+
+public class VpDemoActivity  {
+}

BIN
WeiChat/src/main/res/drawable-hdpi/node_delete.png


+ 6 - 0
WeiChat/src/main/res/drawable/bg_bule_yellow_text.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:color="@color/yellow_home" android:state_selected="true"></item>
+    <item android:color="@color/yellow_home" android:state_pressed="true"></item>
+    <item android:color="@color/titleBlue" android:state_selected="false"></item>
+</selector>

+ 48 - 18
WeiChat/src/main/res/layout/activity_approval.xml

@@ -25,11 +25,13 @@
             android:text="@string/take_over"
             android:visibility="gone"/>
 
-        <TextView
+        <Button
             android:id="@+id/agreeTV"
             style="@style/bottomTextStyle"
             android:layout_weight="2"
-            android:text="@string/agree"/>
+            android:background="@color/base_bg"
+            android:text="@string/agree"
+            android:textColor="@drawable/bg_bule_yellow_text"/>
 
         <View
             android:layout_width="@dimen/line"
@@ -37,11 +39,13 @@
             android:layout_gravity="center_vertical"
             android:background="@color/item_line"/>
 
-        <TextView
+        <Button
             android:id="@+id/disagreeTV"
             style="@style/bottomTextStyle"
             android:layout_weight="3"
-            android:text="@string/common_disagree"/>
+            android:background="@color/base_bg"
+            android:text="@string/common_disagree"
+            android:textColor="@drawable/bg_bule_yellow_text"/>
 
         <View
             android:layout_width="@dimen/line"
@@ -53,7 +57,8 @@
             android:id="@+id/changedealmanTV"
             style="@style/bottomTextStyle"
             android:layout_weight="5"
-            android:text="@string/common_changedealman"/>
+            android:text="@string/common_changedealman"
+            android:visibility="gone"/>
 
         <View
 
@@ -62,11 +67,13 @@
             android:layout_gravity="center_vertical"
             android:background="@color/item_line"/>
 
-        <TextView
+        <Button
             android:id="@+id/nextTV"
             style="@style/bottomTextStyle"
             android:layout_weight="3"
-            android:text="@string/next_article"/>
+            android:background="@color/base_bg"
+            android:text="@string/next_article"
+            android:textColor="@drawable/bg_bule_yellow_text"/>
     </LinearLayout>
 
     <RelativeLayout
@@ -82,13 +89,12 @@
             android:id="@+id/commonWordsIV"
             android:layout_width="20dp"
             android:layout_height="20dp"
-            android:layout_alignParentRight="true"
             android:layout_gravity="center_vertical"
-            android:layout_marginRight="10dp"
-            android:layout_marginTop="3dp"
             android:src="@drawable/changyongyu"
             android:visibility="visible"
-            />
+            android:layout_alignTop="@+id/voiceIV"
+            android:layout_alignParentRight="true"
+            android:layout_alignParentEnd="true" />
 
         <ImageView
             android:id="@+id/voiceIV"
@@ -113,27 +119,51 @@
         <com.andreabaccega.widget.FormEditText
             android:id="@+id/opinionET"
             style="@style/form_relative_right_text2"
-            android:layout_marginLeft="20dp"
-            android:layout_toLeftOf="@+id/voiceIV"
-            android:layout_toRightOf="@+id/inputTagIV"
-            android:layout_toStartOf="@+id/voiceIV"
+            android:layout_alignParentTop="true"
             android:hint="请输入审批意见..."
             android:minHeight="50dp"
             android:paddingLeft="10dp"
             android:paddingTop="5dp"
             whatever:customRegexp="^[\\s\\S]{0,30}$"
             whatever:testErrorString="输入错误或内容超长"
-            whatever:testType="regexp"/>
+            whatever:testType="regexp"
+            android:layout_toLeftOf="@+id/voiceIV"
+            android:layout_toRightOf="@+id/inputTagIV"
+            />
     </RelativeLayout>
 
     <RelativeLayout
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:layout_above="@id/opinionRL">
+        android:layout_above="@id/opinionRL"
+        android:focusableInTouchMode="true">
 
         <android.support.v7.widget.RecyclerView
             android:id="@+id/contentRV"
             android:layout_width="match_parent"
-            android:layout_height="match_parent"/>
+            android:layout_height="match_parent"
+            android:layout_alignParentLeft="true"
+            android:layout_alignParentStart="true"
+            android:layout_alignParentTop="true"
+            android:background="@color/base_bg"
+            android:focusableInTouchMode="false"/>
     </RelativeLayout>
+    <LinearLayout
+        android:background="@color/bg_main"
+        android:id="@+id/cWll"
+        android:layout_width="100dp"
+        android:layout_height="wrap_content"
+        android:orientation="vertical"
+        android:layout_alignParentRight="true"
+        android:layout_above="@+id/opinionRL"
+        android:layout_marginRight="10dp"
+        android:visibility="gone"
+        >
+        <ListView
+            android:id="@+id/cWlist"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:dividerHeight="1dp">
+        </ListView>
+    </LinearLayout>
 </RelativeLayout>

+ 1 - 1
WeiChat/src/main/res/layout/activity_expense_reimbursement.xml

@@ -235,7 +235,7 @@
                     android:layout_height="wrap_content"
                     android:layout_marginLeft="10dp"
                     android:layout_marginRight="10dp"
-                    android:background="#ebe9e9">
+                    >
                 </com.xzjmyk.pm.activity.view.MyListView>
                 <LinearLayout
                     android:id="@+id/detail_table_bottom_ll"

+ 45 - 33
WeiChat/src/main/res/layout/item_approval_node.xml

@@ -1,39 +1,51 @@
 <?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:padding="8dp">
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+              android:layout_width="match_parent"
+              android:layout_height="wrap_content"
+              android:orientation="vertical">
 
-    <ImageView
-        android:id="@+id/statusIV"
-        android:layout_width="15dp"
-        android:layout_height="15dp"
-        android:layout_centerVertical="true"
-        android:layout_marginRight="8dp"/>
+    <View
+        android:id="@+id/padding"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/paddingApp"
+        android:background="@color/item_line"/>
 
-    <ImageView
-        android:id="@+id/handIv"
-        android:layout_width="40dp"
-        android:layout_height="40dp"
-        android:layout_marginRight="10dp"
-        android:layout_toRightOf="@id/statusIV"/>
+    <RelativeLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:padding="8dp">
 
-    <TextView
-        android:id="@+id/timeTv"
-        style="@style/commonTextStyle"
-        android:layout_alignParentRight="true"/>
+        <ImageView
+            android:id="@+id/statusIV"
+            android:layout_width="15dp"
+            android:layout_height="15dp"
+            android:layout_centerVertical="true"
+            android:layout_marginRight="8dp"/>
 
-    <TextView
-        android:id="@+id/keyTv"
-        style="@style/commonTextStyle"
-        android:layout_toLeftOf="@id/timeTv"
-        android:layout_toRightOf="@id/handIv"/>
+        <ImageView
+            android:id="@+id/handIv"
+            android:layout_width="40dp"
+            android:layout_height="40dp"
+            android:layout_marginRight="10dp"
+            android:layout_toRightOf="@id/statusIV"/>
 
-    <TextView
-        android:id="@+id/valuesTv"
-        style="@style/commonTextStyle"
-        android:layout_below="@id/keyTv"
-        android:layout_toLeftOf="@id/timeTv"
-        android:layout_toRightOf="@id/handIv"
-        android:textSize="@dimen/text_min"/>
-</RelativeLayout>
+        <TextView
+            android:id="@+id/timeTv"
+            style="@style/commonTextStyle"
+            android:layout_alignParentRight="true"/>
+
+        <TextView
+            android:id="@+id/keyTv"
+            style="@style/commonTextStyle"
+            android:layout_toLeftOf="@id/timeTv"
+            android:layout_toRightOf="@id/handIv"/>
+
+        <TextView
+            android:id="@+id/valuesTv"
+            style="@style/commonTextStyle"
+            android:layout_below="@id/keyTv"
+            android:layout_toLeftOf="@id/timeTv"
+            android:layout_toRightOf="@id/handIv"
+            android:textSize="@dimen/text_min"/>
+    </RelativeLayout>
+</LinearLayout>

+ 13 - 1
WeiChat/src/main/res/layout/item_approval_tag.xml

@@ -1,15 +1,27 @@
 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-              style="@style/approvalStyle"
               android:layout_width="match_parent"
               android:layout_height="wrap_content"
               android:orientation="vertical">
 
+    <View
+        android:id="@+id/padding"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/paddingApp"
+        android:background="@color/item_line"/>
+
+    <View
+        android:id="@+id/line"
+        android:layout_width="match_parent"
+        android:layout_height="2px"
+        android:background="@color/item_line"/>
+
     <TextView
         android:id="@+id/tagTv"
         style="@style/approvalItemStyle"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
+        android:paddingLeft="10dp"
         android:text="tagTv"
         android:textColor="@color/titleBlue"/>
 </LinearLayout>

+ 38 - 25
WeiChat/src/main/res/layout/item_approval_title.xml

@@ -1,33 +1,46 @@
 <?xml version="1.0" encoding="utf-8"?>
-<RelativeLayout
+<LinearLayout
     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">
+    android:orientation="vertical">
 
-    <com.xzjmyk.pm.activity.ui.erp.view.CircleImageView
-        android:id="@+id/handIv"
-        android:layout_width="50dp"
-        android:layout_height="50dp"/>
+    <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">
 
-    <ImageView
-        android:id="@+id/statusIv"
-        android:layout_width="50dp"
-        android:layout_height="50dp"
-        android:layout_alignParentRight="true"/>
+        <com.xzjmyk.pm.activity.ui.erp.view.CircleImageView
+            android:id="@+id/handIv"
+            android:layout_width="50dp"
 
-    <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"/>
+            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>
 
-</RelativeLayout>
+    <View
+        android:id="@+id/line"
+        android:layout_width="match_parent"
+        android:layout_height="2px"
+        android:background="@color/item_line"/>
+</LinearLayout>

+ 14 - 0
WeiChat/src/main/res/layout/item_list_pop.xml

@@ -0,0 +1,14 @@
+<?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="match_parent"
+    android:gravity="center_horizontal"
+    android:paddingLeft="10dp"
+    android:paddingRight="10dp"
+    android:paddingTop="10dp">
+
+  <ListView
+      android:id="@+id/contentLV"
+      android:layout_width="match_parent"
+      android:layout_height="match_parent"/>
+</RelativeLayout>

+ 4 - 1
WeiChat/src/main/res/layout/item_process_state.xml

@@ -38,7 +38,10 @@
                 android:layout_height="wrap_content"
                 android:layout_margin="10dp"
                 android:textSize="15sp"
-                android:text="采购单-2013212"/>
+                android:text="采购单-2013212"
+                android:maxLength="12"
+                android:singleLine="true"
+                android:ellipsize="end"/>
 
             <TextView
                 android:id="@+id/tv_date"

+ 25 - 0
WeiChat/src/main/res/layout/simple_list_cm.xml

@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2006 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+  
+          http://www.apache.org/licenses/LICENSE-2.0
+  
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@android:id/text1"
+    android:layout_width="match_parent"
+    android:layout_height="30dp"
+    android:textSize="16sp"
+    android:gravity="center_vertical"
+    android:paddingStart="?android:attr/listPreferredItemPaddingStart"
+    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
+    />

+ 4 - 3
WeiChat/src/main/res/values/strings.xml

@@ -1532,10 +1532,10 @@
     <string name="sign_calendar">日历</string>
     <string name="sign_Average_hours">平均工时</string>
     <string name="work_business_me">我的商务</string>
-    <string name="auto_sign_failed">自动打卡失败</string>
-    <string name="auto_outplan_failed">自动外勤签到失败</string>
+    <string name="auto_sign_failed">Android自动打卡失败</string>
+    <string name="auto_outplan_failed">Android自动外勤签到失败</string>
     <string name="app_start_log">APP启动</string>
-    <string name="app_monitor_log">APP监控</string>
+    <string name="app_monitor_log">AndroidAPP监控</string>
     <string name="app_outplan_running">APP外勤任务进行中</string>
 
     <string name="create_business">创建商机</string>
@@ -1853,6 +1853,7 @@
     <string name="end_approval">流程异常,结束当前流程</string>
     <string name="approval_opinion_error">审批意见未填写或填写不正确</string>
     <string name="enclosure">附件</string>
+    <string name="subtabulation">副表</string>
 
     <string name="person_register">个人注册</string>
     <string name="phone_number">手机号</string>