Просмотр исходного кода

提交类型 修改bug、提交备份
提交内容 出差单修改部分敏感操作,明细表写死的日期选择字段修改,可通过SwtchUtil来控制

冲突文件 版本文件、ViewUtil 取网络

Bitliker 8 лет назад
Родитель
Сommit
866481fd2d

+ 3 - 3
WeiChat/version.properties

@@ -1,5 +1,5 @@
-#Tue Jan 16 09:04:51 CST 2018
-debugName=427
+#Tue Jan 16 11:12:55 CST 2018
+debugName=435
 versionName=624
-debugCode=427
+debugCode=435
 versionCode=163

+ 4 - 4
app_modular/appmessages/src/main/java/com/modular/appmessages/presenter/MessagePresenter.java

@@ -598,8 +598,8 @@ public class MessagePresenter implements OnHttpResultListener {
         List<MessageModel> models = new ArrayList<>();
         List<MessageModel> detailModels = new ArrayList<>();
         MessageModel model = null;
-        MessageModel  detailModel = null;
-        LogUtil.i("array="+array.size());
+        MessageModel detailModel = null;
+        LogUtil.i("array=" + array.size());
         for (int i = 0; i < array.size(); i++) {
             object = array.getJSONObject(i);
             model = new MessageModel();
@@ -621,7 +621,7 @@ public class MessagePresenter implements OnHttpResultListener {
                     detailModel.setId(JSONUtil.getInt(detail, "id"));
                     detailModel.setTitle(JSONUtil.getText(detail, "title"));
                     detailModel.setSubTitle(JSONUtil.getText(detail, "subTitle"));
-                    detailModel.setTime(DateFormatUtil.long2Str(JSONUtil.getTime(detail,"createTime"), "yyyy-MM-dd HH:mm"));
+                    detailModel.setTime(DateFormatUtil.long2Str(JSONUtil.getTime(detail, "createTime"), "yyyy-MM-dd HH:mm"));
                     detailModel.setType(type);
                     detailModel.setHierarchy(1);
                     detailModels.add(detailModel);
@@ -1275,7 +1275,7 @@ public class MessagePresenter implements OnHttpResultListener {
                 ct.startActivity(intent);
                 break;
             case 10:
-                intent = new Intent(ct, PurchaseDetailsActivity.class).putExtra(Constants.FLAG.KEY_PURCHASE_STATUS,"已结案");
+                intent = new Intent(ct, PurchaseDetailsActivity.class).putExtra(Constants.FLAG.KEY_PURCHASE_STATUS, "待回复");
                 ct.startActivity(intent);
                 break;
             default:

+ 14 - 0
app_modular/apputils/src/main/java/com/modular/apputils/utils/TestStr.java

@@ -52,6 +52,7 @@ public class TestStr {
            "\t\"REMARKS\": null,\n" +
            "\t\"ALLS\": 30000,\n" +
            "\t\"DATA\": [{\n" +
+           "\t\t\"ID\": 17,\n" +
            "\t\t\"TIME\": \"2018-01-01\",\n" +
            "\t\t\"REMARKS\": null,\n" +
            "\t\t\"ALLS\": 30000,\n" +
@@ -59,6 +60,7 @@ public class TestStr {
            "\t\t\"NUMBER\": null\n" +
            "\t},\n" +
            "\t{\n" +
+           "\t\t\"ID\": 16,\n" +
            "\t\t\"TIME\": \"2018-01-01\",\n" +
            "\t\t\"REMARKS\": null,\n" +
            "\t\t\"ALLS\": 30000,\n" +
@@ -66,6 +68,7 @@ public class TestStr {
            "\t\t\"NUMBER\": null\n" +
            "\t},\n" +
            "\t{\n" +
+           "\t\t\"ID\": 15,\n" +
            "\t\t\"TIME\": \"2018-01-01\",\n" +
            "\t\t\"REMARKS\": null,\n" +
            "\t\t\"ALLS\": 30000,\n" +
@@ -73,6 +76,7 @@ public class TestStr {
            "\t\t\"NUMBER\": null\n" +
            "\t},\n" +
            "\t{\n" +
+           "\t\t\"ID\": 14,\n" +
            "\t\t\"TIME\": \"2018-01-01\",\n" +
            "\t\t\"REMARKS\": null,\n" +
            "\t\t\"ALLS\": 30000,\n" +
@@ -80,6 +84,7 @@ public class TestStr {
            "\t\t\"NUMBER\": null\n" +
            "\t},\n" +
            "\t{\n" +
+           "\t\t\"ID\": 13,\n" +
            "\t\t\"TIME\": \"2018-01-01\",\n" +
            "\t\t\"REMARKS\": null,\n" +
            "\t\t\"ALLS\": 30000,\n" +
@@ -87,6 +92,7 @@ public class TestStr {
            "\t\t\"NUMBER\": null\n" +
            "\t},\n" +
            "\t{\n" +
+           "\t\t\"ID\": 10,\n" +
            "\t\t\"TIME\": \"2018-01-01\",\n" +
            "\t\t\"REMARKS\": null,\n" +
            "\t\t\"ALLS\": 30000,\n" +
@@ -94,6 +100,7 @@ public class TestStr {
            "\t\t\"NUMBER\": null\n" +
            "\t},\n" +
            "\t{\n" +
+           "\t\t\"ID\": 11,\n" +
            "\t\t\"TIME\": \"2018-01-01\",\n" +
            "\t\t\"REMARKS\": null,\n" +
            "\t\t\"ALLS\": 30000,\n" +
@@ -101,6 +108,7 @@ public class TestStr {
            "\t\t\"NUMBER\": null\n" +
            "\t},\n" +
            "\t{\n" +
+           "\t\t\"ID\": 12,\n" +
            "\t\t\"TIME\": \"2018-01-01\",\n" +
            "\t\t\"REMARKS\": null,\n" +
            "\t\t\"ALLS\": 30000,\n" +
@@ -108,6 +116,12 @@ public class TestStr {
            "\t\t\"NUMBER\": null\n" +
            "\t}],\n" +
            "\t\"fields\": [{\n" +
+           "\t\t\"caption\": \"ID\",\n" +
+           "\t\t\"field\": \"ID\",\n" +
+           "\t\t\"type\": \"int\",\n" +
+           "\t\t\"needInput\": true\n" +
+           "\t},\n" +
+           "\t{\n" +
            "\t\t\"caption\": \"单据时间\",\n" +
            "\t\t\"field\": \"TIME\",\n" +
            "\t\t\"type\": \"date\",\n" +

+ 68 - 273
app_modular/appworks/src/main/java/com/uas/appworks/OA/platform/activity/PurchaseDetailsActivity.java

@@ -3,6 +3,8 @@ package com.uas.appworks.OA.platform.activity;
 import android.app.Activity;
 import android.content.Intent;
 import android.support.v7.widget.AppCompatButton;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
 import android.text.Editable;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -35,6 +37,8 @@ import com.modular.apputils.listener.OnSmartHttpListener;
 import com.modular.apputils.network.Parameter;
 import com.modular.apputils.network.Tags;
 import com.modular.apputils.utils.TestStr;
+import com.uas.appworks.OA.platform.adapter.PurchaseDetailsAdapter;
+import com.uas.appworks.OA.platform.model.Purchase;
 import com.uas.appworks.R;
 
 
@@ -48,14 +52,13 @@ import java.util.List;
  * Created by Bitlike on 2018/1/15.
  */
 
-public class PurchaseDetailsActivity extends BaseNetActivity implements View.OnClickListener, OnSmartHttpListener {
+public class PurchaseDetailsActivity extends BaseNetActivity implements OnSmartHttpListener {
 
     private long varId;
     private String varStatus;
 
-    private AppCompatButton replyBtn;
-    private ListView mListView;
-    private DataAdapter mAdapter;
+    private RecyclerView mRecyclerView;
+    private PurchaseDetailsAdapter mAdapter;
 
     @Override
     protected int getLayoutId() {
@@ -78,96 +81,19 @@ public class PurchaseDetailsActivity extends BaseNetActivity implements View.OnC
             varStatus = "";
         }
         initView();
+        initData();
     }
 
     private void initView() {
-        replyBtn = findViewById(R.id.replyBtn);
-        mListView = findViewById(R.id.mListView);
-        if (varStatus.equals("已结案")) {
-            replyBtn.setVisibility(View.GONE);
-            replyBtn.setFocusable(false);
-            replyBtn.setClickable(false);
-            replyBtn.setPressed(true);
-        } else {
-            replyBtn.setOnClickListener(this);
-        }
+        mRecyclerView = findViewById(R.id.mRecyclerView);
+        mRecyclerView.setLayoutManager(new LinearLayoutManager(ct));
 
-        initData();
     }
 
     private void initData() {
-        ThreadPool.getThreadPool().addTask(new Runnable() {
-
-
-            @Override
-            public void run() {
-                JSONObject object = JSON.parseObject(TestStr.PURCHASE_STR);
-                List<Data> dataList = new ArrayList<>();
-                //添加头部固定功能
-                Data data = new Data();
-                Item item = new Item();
-                item.field = "客户";
-                item.values = JSONUtil.getText(object, "CLIENT");
-                data.add(item);
-                item = new Item();
-                item.field = "收货地址";
-                item.values = JSONUtil.getText(object, "ADDRESS");
-                data.add(item);
-                item = new Item();
-                item.field = "订单号";
-                item.values = JSONUtil.getText(object, "CODE");
-                data.add(item);
-                item = new Item();
-                item.field = "单据时间";
-                item.values = JSONUtil.getText(object, "TIME");
-                data.add(item);
-                item = new Item();
-                item.field = "备注";
-                item.values = JSONUtil.getText(object, "REMARKS");
-                data.add(item);
-                item = new Item();
-                item.field = "总额";
-                item.values = JSONUtil.getText(object, "ALLS");
-                data.add(item);
-                dataList.add(data);
-                JSONArray dataJSONs = JSONUtil.getJSONArray(object, "DATA");
-                JSONArray fields = JSONUtil.getJSONArray(object, "fields");
-                if (!ListUtils.isEmpty(dataJSONs) && !ListUtils.isEmpty(fields)) {
-                    for (int i = 0; i < dataJSONs.size(); i++) {
-                        JSONObject dataJSON = dataJSONs.getJSONObject(i);
-                        Data dataIn = new Data();
-                        for (int j = 0; j < fields.size(); j++) {
-                            JSONObject field = fields.getJSONObject(j);
-                            Item it = new Item();
-                            it.field = JSONUtil.getText(field, "caption");
-                            it.type = JSONUtil.getText(field, "type");
-                            it.needInput = JSONUtil.getBoolean(field, "needInput");
-                            String fiel = JSONUtil.getText(field, "caption");
-                            it.values = JSONUtil.getText(dataJSON, fiel);
-                            dataIn.add(it);
-                        }
-                        dataList.add(dataIn);
-                    }
-                }
-                mAdapter = new DataAdapter(dataList);
-                OAHttpHelper.getInstance().post(new Runnable() {
-                    @Override
-                    public void run() {
-                        mListView.setAdapter(mAdapter);
-                    }
-                });
-            }
-        });
-
+        handleMessage(TestStr.PURCHASE_STR);
     }
 
-    @Override
-    public void onClick(View v) {
-        int id = v.getId();
-        if (id == R.id.replyBtn) {
-            verifiReply();
-        }
-    }
 
     private void verifiReply() {
         reply();
@@ -182,214 +108,83 @@ public class PurchaseDetailsActivity extends BaseNetActivity implements View.OnC
         requestHttp(builder, this);
     }
 
-
-    @Override
-    public void onSuccess(int what, String message, Tags tag) throws Exception {
-
+    private Purchase getPurchase(int id, JSONObject object, String caption, String field) {
+        Purchase purchase = new Purchase(id);
+        purchase.setCaption(caption);
+        purchase.setField(field);
+        purchase.setValues(JSONUtil.getText(object, purchase.getField()));
+        return purchase;
     }
 
-    @Override
-    public void onFailure(int what, String message, Tags tag) throws Exception {
-
-    }
-
-
-    private class DataAdapter extends BaseAdapter {
-        private List<Data> datas;
-
-        public DataAdapter(List<Data> datas) {
-            this.datas = datas;
-        }
-
-        @Override
-        public int getCount() {
-            return ListUtils.getSize(datas);
-        }
-
-        @Override
-        public Object getItem(int position) {
-            return datas.get(position);
-        }
-
-        @Override
-        public long getItemId(int position) {
-            return position;
-        }
-
-        @Override
-        public View getView(int position, View convertView, ViewGroup parent) {
-            ListView dataListView = null;
-            if (convertView == null || !(convertView instanceof ListView)) {
-                convertView = LayoutInflater.from(ct).inflate(R.layout.item_ls_purchase, null);
-                dataListView = convertView.findViewById(R.id.dataListView);
-                convertView.setTag(dataListView);
-            } else {
-                dataListView = (ListView) convertView;
-            }
-            dataListView.setAdapter(new ItemAdapter(position, datas.get(position).datas));
-            return convertView;
-        }
-
-        private class ItemAdapter extends BaseAdapter {
-            private int group;
-            private List<Item> items;
-
-            public ItemAdapter(int group, List<Item> items) {
-                this.group = group;
-                this.items = items;
-            }
-
-            @Override
-            public int getCount() {
-                return ListUtils.getSize(items);
-            }
-
-            @Override
-            public Item getItem(int position) {
-                return items.get(position);
-            }
-
+    private void handleMessage(final String message) {
+        ThreadPool.getThreadPool().addTask(new Runnable() {
             @Override
-            public long getItemId(int position) {
-                return position;
-            }
+            public void run() {
+                JSONObject object = JSON.parseObject(message);
+                final List<Purchase> dataList = new ArrayList<>();
+                //添加头部固定功能
+                dataList.add(getPurchase(0, object, "客户", "CLIENT"));
+                dataList.add(getPurchase(0, object, "收货地址", "ADDRESS"));
+                dataList.add(getPurchase(0, object, "订单号", "CODE"));
+                dataList.add(getPurchase(0, object, "单据时间", "TIME"));
+                dataList.add(getPurchase(0, object, "备注", "REMARKS"));
+                dataList.add(getPurchase(0, object, "总额", "ALLS"));
 
-            @Override
-            public View getView(int position, View convertView, ViewGroup parent) {
-                Item item = getItem(position);
-                ViewHolder holder = null;
-                if (convertView == null) {
-                    holder = new ViewHolder();
-                    convertView = LayoutInflater.from(ct).inflate(R.layout.item_purchase, null);
-                    holder.captionTV = convertView.findViewById(R.id.captionTV);
-                    holder.valueEt = convertView.findViewById(R.id.valueEt);
-                    holder.valueTv = convertView.findViewById(R.id.valueTv);
-                    convertView.setTag(holder);
-                } else {
-                    holder = (ViewHolder) convertView.getTag();
-                }
-                holder.captionTV.setText(item.field);
-                TextChangListener textChangListener = null;
-                if (convertView.getTag(R.id.tag_key) != null && convertView.getTag(R.id.tag_key) instanceof TextChangListener) {
-                    textChangListener = (TextChangListener) convertView.getTag(R.id.tag_key);
-                }
-                if (item.needInput) {
-                    holder.valueEt.setBackgroundResource(R.drawable.edit_hint_right_angle);
-                    holder.valueEt.setClickable(true);
-                    if (item.type.equals("date")) {
-                        holder.valueTv.setText(item.values);
-                        holder.valueTv.setBackgroundResource(R.drawable.edit_hint_right_angle);
-                        holder.valueEt.setVisibility(View.GONE);
-                        holder.valueTv.setVisibility(View.VISIBLE);
-                        holder.valueTv.setTag(position);
-                        holder.valueTv.setOnClickListener(onClickListener);
-                    } else {
-                        holder.valueEt.setText(item.values);
-                        holder.valueTv.setVisibility(View.GONE);
-                        holder.valueEt.setVisibility(View.VISIBLE);
-                        holder.valueEt.setFocusable(true);
-                        if (textChangListener == null) {
-                            textChangListener = new TextChangListener(holder, position);
-                            convertView.setTag(R.id.tag_key, textChangListener);
-                        }
-                        holder.valueEt.addTextChangedListener(textChangListener);
-                    }
-                } else {
-                    holder.valueTv.setText(item.values);
-                    holder.valueTv.setBackgroundDrawable(null);
-                    holder.valueEt.setVisibility(View.GONE);
-                    holder.valueTv.setVisibility(View.VISIBLE);
-                }
-                return convertView;
-            }
+                JSONArray dataJSONs = JSONUtil.getJSONArray(object, "DATA");
+                JSONArray fields = JSONUtil.getJSONArray(object, "fields");
 
-            private View.OnClickListener onClickListener = new View.OnClickListener() {
-                @Override
-                public void onClick(View v) {
-                    if (v != null && v.getTag() != null && v.getTag() instanceof Integer) {
-                        int position = (int) v.getTag();
-                        showDateSelect(position);
+                String idField = null;
+                for (int j = 0; j < fields.size(); j++) {
+                    if ("ID".equals(JSONUtil.getText(fields.getJSONObject(j), "caption"))) {
+                        idField = JSONUtil.getText(fields.getJSONObject(j), "field");
+                        break;
                     }
                 }
-            };
-
-            private class TextChangListener extends EditChangeListener {
-                ViewHolder hodler;
-                private int position;
-
-                public TextChangListener(ViewHolder hodler, int position) {
-                    this.hodler = hodler;
-                    this.position = position;
-                }
-
-                @Override
-                public void afterTextChanged(Editable s) {
-                    if (this.position >= 0 && ListUtils.getSize(items) > this.position) {
-                        if (this.hodler.valueEt != null && this.hodler.valueEt.getVisibility() == View.VISIBLE) {
-                            String valueEt = this.hodler.valueEt.getText().toString();
-                            LogUtil.i("valueEt="+valueEt);
-                            LogUtil.i("s="+s.toString());
-                            LogUtil.i("position="+this.position);
-                            items.get(this.position).values =valueEt == null ? "" : valueEt;
+                if (!ListUtils.isEmpty(dataJSONs) && !ListUtils.isEmpty(fields)) {
+                    for (int i = 0; i < dataJSONs.size(); i++) {
+                        JSONObject dataJSON = dataJSONs.getJSONObject(i);
+                        for (int j = 0; j < fields.size(); j++) {
+                            JSONObject fieldJSON = fields.getJSONObject(j);
+                            Purchase purchaseItem = new Purchase();
+                            purchaseItem.setField(JSONUtil.getText(fieldJSON, "field"));
+                            purchaseItem.setCaption(JSONUtil.getText(fieldJSON, "caption"));
+                            purchaseItem.setType(JSONUtil.getText(fieldJSON, "type"));
+                            purchaseItem.setNeedInput(JSONUtil.getBoolean(fieldJSON, "needInput"));
+                            purchaseItem.setValues(JSONUtil.getText(dataJSON, purchaseItem.getField()));
+                            purchaseItem.setId(JSONUtil.getInt(dataJSON, idField));
+                            dataList.add(purchaseItem);
                         }
                     }
                 }
-            }
-
-            private void showDateSelect(final int position) {
-                DateTimePicker picker = new DateTimePicker(ct, DateTimePicker.YEAR_MONTH_DAY);
-                picker.setRange(2000, 2030);
-                int year, month, day;
-                Date time = null;
-                if (ListUtils.getSize(items) > position && !StringUtil.isEmpty(items.get(position).values)) {
-                    time = DateFormatUtil.str2date(items.get(position).values, DateFormatUtil.YMD);
-                }
-                year = CalendarUtil.getYear(time);
-                month = CalendarUtil.getMonth(time);
-                day = CalendarUtil.getDay(time);
-                LogUtil.i("year="+year);
-                LogUtil.i("month="+month);
-                LogUtil.i("day="+day);
-                picker.setSelectedItem(year, month, day);
-                picker.setOnDateTimePickListener(new DateTimePicker.OnYearMonthDayTimePickListener() {
+                OAHttpHelper.getInstance().post(new Runnable() {
                     @Override
-                    public void onDateTimePicked(String year, String month, String day, String hour, String minute) {
-                        if (ListUtils.getSize(items) > position) {
-                            items.get(position).values = year + "-" + month + "-" + day;
-                            DataAdapter.this.notifyDataSetChanged();
-                        }
+                    public void run() {
+                        setData2Adapter(dataList);
                     }
                 });
-                picker.show();
             }
-        }
-
-        class ViewHolder {
-            TextView captionTV, valueTv;
-            EditText valueEt;
-        }
-
-
+        });
     }
 
-    private class Data {
-        List<Item> datas;
-
-        public void add(Item item) {
-            if (item == null) return;
-            if (datas == null) {
-                datas = new ArrayList<>();
+    private void setData2Adapter(List<Purchase> dataList) {
+        mAdapter = new PurchaseDetailsAdapter(ct, varStatus, dataList);
+        mAdapter.setOnReplyLisenter(new PurchaseDetailsAdapter.OnReplyLisenter() {
+            @Override
+            public void reply(List<Purchase> purchases) {
+                LogUtil.prinlnLongMsg("gongpengming","json="+JSON.toJSONString(purchases));
             }
-            datas.add(item);
-        }
+        });
+        mRecyclerView.setAdapter(mAdapter);
 
+    }
+
+    @Override
+    public void onSuccess(int what, String message, Tags tag) throws Exception {
 
     }
 
-    public class Item {
-        String field = "";
-        String values = "";
-        String type = "";
-        boolean needInput = false;
+    @Override
+    public void onFailure(int what, String message, Tags tag) throws Exception {
+
     }
 }

+ 218 - 0
app_modular/appworks/src/main/java/com/uas/appworks/OA/platform/adapter/PurchaseDetailsAdapter.java

@@ -0,0 +1,218 @@
+package com.uas.appworks.OA.platform.adapter;
+
+import android.app.Activity;
+import android.content.Context;
+import android.support.v7.widget.RecyclerView;
+import android.text.Editable;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.TextView;
+
+import com.common.LogUtil;
+import com.common.data.CalendarUtil;
+import com.common.data.DateFormatUtil;
+import com.common.data.ListUtils;
+import com.common.data.StringUtil;
+import com.common.system.DisplayUtil;
+import com.core.utils.time.wheel.DateTimePicker;
+import com.core.widget.listener.EditChangeListener;
+import com.uas.appworks.OA.platform.model.Purchase;
+import com.uas.appworks.R;
+
+import java.util.Date;
+import java.util.List;
+
+
+/**
+ * Created by Bitlike on 2018/1/16.
+ */
+
+public class PurchaseDetailsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
+    private Context context;
+    private List<Purchase> purchases;
+    private LayoutInflater mInflater;
+    private String status;
+
+    public PurchaseDetailsAdapter(Context context, String status, List<Purchase> purchases) {
+        this.context = context;
+        this.purchases = purchases;
+        this.status = status;
+        mInflater = LayoutInflater.from(context);
+    }
+
+    @Override
+    public int getItemViewType(int position) {
+        return position;
+    }
+
+    @Override
+    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+        return viewType == (getItemCount() - 1) ? new BtnViewHolder(parent) : new ViewHolder(parent);
+    }
+
+    @Override
+    public int getItemCount() {
+        return ListUtils.getSize(purchases) + 1;
+    }
+
+
+    class BtnViewHolder extends RecyclerView.ViewHolder {
+        Button replyBtn;
+
+        public BtnViewHolder(ViewGroup viewGroup) {
+            this(mInflater.inflate(R.layout.item_btn, viewGroup, false));
+        }
+
+        public BtnViewHolder(View itemView) {
+            super(itemView);
+            replyBtn = itemView.findViewById(R.id.replyBtn);
+        }
+    }
+
+    class ViewHolder extends RecyclerView.ViewHolder {
+        TextView captionTV, valueTv;
+        EditText valueEt;
+        View line;
+
+        public ViewHolder(ViewGroup viewGroup) {
+            this(mInflater.inflate(R.layout.item_purchase, viewGroup, false));
+        }
+
+        public ViewHolder(View itemView) {
+            super(itemView);
+            captionTV = itemView.findViewById(R.id.captionTV);
+            valueTv = itemView.findViewById(R.id.valueTv);
+            valueEt = itemView.findViewById(R.id.valueEt);
+            line = itemView.findViewById(R.id.line);
+        }
+    }
+
+
+    @Override
+    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
+        if (holder instanceof ViewHolder && position < ListUtils.getSize(purchases)) {
+            onBindViewHolder((ViewHolder) holder, position);
+        } else if (holder instanceof BtnViewHolder) {
+            onBindViewHolder((BtnViewHolder) holder);
+        }
+    }
+
+    private void onBindViewHolder(BtnViewHolder holder) {
+        boolean canReply = (status != null && !status.equals("已结案"));
+        holder.replyBtn.setFocusable(canReply);
+        holder.replyBtn.setClickable(canReply);
+        holder.replyBtn.setPressed(!canReply);
+        int padd = DisplayUtil.dip2px(context, 10);
+        if (canReply) {
+            holder.replyBtn.setBackgroundResource(R.drawable.bg_bule_btn);
+            holder.replyBtn.setOnClickListener(onClickListener);
+
+        } else {
+            holder.replyBtn.setBackgroundResource(R.drawable.bg_orange_btn_pass);
+        }
+        holder.replyBtn.setPadding(padd, padd, padd, padd);
+    }
+
+    private void onBindViewHolder(ViewHolder holder, int position) {
+        Purchase purchase = purchases.get(position);
+        holder.captionTV.setText(purchase.getCaption());
+
+        if (purchase.isNeedInput()) {
+            holder.valueEt.setBackgroundResource(R.drawable.edit_hint_right_angle);
+            holder.valueEt.setClickable(true);
+            if (purchase.getType().equals("date")) {
+                holder.valueTv.setText(purchase.getValues());
+                holder.valueTv.setBackgroundResource(R.drawable.edit_hint_right_angle);
+                holder.valueEt.setVisibility(View.GONE);
+                holder.valueTv.setVisibility(View.VISIBLE);
+                holder.valueTv.setTag(position);
+                holder.valueTv.setOnClickListener(onClickListener);
+            } else {
+                holder.valueEt.setText(purchase.getValues());
+                holder.valueTv.setVisibility(View.GONE);
+                holder.valueEt.setVisibility(View.VISIBLE);
+                holder.valueEt.setFocusable(true);
+                holder.valueEt.addTextChangedListener(new TextChangListener(holder, position));
+            }
+        } else {
+            holder.valueTv.setText(StringUtil.isEmpty(purchase.getValues()) ? "无" : purchase.getValues());
+            holder.valueTv.setBackgroundDrawable(null);
+            holder.valueEt.setVisibility(View.GONE);
+            holder.valueTv.setVisibility(View.VISIBLE);
+        }
+        holder.line.setVisibility((position > 0 && purchases.get(position - 1).getId() != purchase.getId()) ? View.VISIBLE : View.GONE);
+//        holder.line.setVisibility(View.VISIBLE);
+    }
+
+    private View.OnClickListener onClickListener = new View.OnClickListener() {
+        @Override
+        public void onClick(View v) {
+            if (v.getId() == R.id.valueTv && v.getTag() != null && v.getTag() instanceof Integer) {
+                int position = (int) v.getTag();
+                showDateSelect(position);
+            } else if (v.getId() == R.id.replyBtn) {
+                if (onReplyLisenter != null) {
+                    onReplyLisenter.reply(purchases);
+                }
+            }
+        }
+    };
+
+    private void showDateSelect(final int position) {
+        DateTimePicker picker = new DateTimePicker((Activity) context, DateTimePicker.YEAR_MONTH_DAY);
+        picker.setRange(2000, 2030);
+        int year, month, day;
+        Date time = null;
+        if (ListUtils.getSize(purchases) > position && !StringUtil.isEmpty(purchases.get(position).getValues())) {
+            time = DateFormatUtil.str2date(purchases.get(position).getValues(), DateFormatUtil.YMD);
+        }
+        year = CalendarUtil.getYear(time);
+        month = CalendarUtil.getMonth(time);
+        day = CalendarUtil.getDay(time);
+        picker.setSelectedItem(year, month, day);
+        picker.setOnDateTimePickListener(new DateTimePicker.OnYearMonthDayTimePickListener() {
+            @Override
+            public void onDateTimePicked(String year, String month, String day, String hour, String minute) {
+                if (ListUtils.getSize(purchases) > position) {
+                    purchases.get(position).setValues(year + "-" + month + "-" + day);
+                    notifyItemChanged(position);
+                }
+            }
+        });
+        picker.show();
+    }
+
+    private class TextChangListener extends EditChangeListener {
+        ViewHolder hodler;
+        private int position;
+
+        public TextChangListener(ViewHolder hodler, int position) {
+            this.hodler = hodler;
+            this.position = position;
+        }
+
+        @Override
+        public void afterTextChanged(Editable s) {
+            if (this.position >= 0 && ListUtils.getSize(purchases) > this.position) {
+                if (this.hodler.valueEt != null && this.hodler.valueEt.getVisibility() == View.VISIBLE) {
+                    LogUtil.i("s=" + s.toString());
+                    LogUtil.i("position=" + this.position);
+                    purchases.get(this.position).setValues(s == null ? "" : s.toString());
+                }
+            }
+        }
+    }
+
+    private OnReplyLisenter onReplyLisenter;
+
+    public void setOnReplyLisenter(OnReplyLisenter onReplyLisenter) {
+        this.onReplyLisenter = onReplyLisenter;
+    }
+
+    public interface OnReplyLisenter {
+        void reply(List<Purchase> purchases);
+    }
+}

+ 85 - 0
app_modular/appworks/src/main/java/com/uas/appworks/OA/platform/model/Purchase.java

@@ -0,0 +1,85 @@
+package com.uas.appworks.OA.platform.model;
+
+/**
+ * Created by Bitlike on 2018/1/16.
+ */
+
+public class Purchase {
+    private int position;
+    private int id;
+    private String field;
+    private String caption;
+    private String values;
+    private String type;
+    private boolean needInput;
+
+    public Purchase(int position) {
+        this.position = position;
+        this.id = 0;
+        this.field = "";
+        this.values = "无";
+        this.caption = "";
+        this.type = "";
+        this.needInput = false;
+    }
+
+    public Purchase() {
+        this(0);
+    }
+
+    public String getCaption() {
+        return caption;
+    }
+
+    public void setCaption(String caption) {
+        this.caption = caption;
+    }
+
+    public int getPosition() {
+        return position;
+    }
+
+    public void setPosition(int position) {
+        this.position = position;
+    }
+
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    public String getField() {
+        return field;
+    }
+
+    public void setField(String field) {
+        this.field = field;
+    }
+
+    public String getValues() {
+        return values;
+    }
+
+    public void setValues(String values) {
+        this.values = values;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public boolean isNeedInput() {
+        return needInput;
+    }
+
+    public void setNeedInput(boolean needInput) {
+        this.needInput = needInput;
+    }
+}

+ 5 - 31
app_modular/appworks/src/main/res/layout/activity_purchase_details.xml

@@ -1,39 +1,13 @@
 <?xml version="1.0" encoding="utf-8"?>
-<com.core.widget.CustomerScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:background="@color/base_bg">
 
-
-    <LinearLayout
+    <android.support.v7.widget.RecyclerView
+        android:id="@+id/mRecyclerView"
         android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:orientation="vertical">
-
-
-        <com.core.widget.MyListView
-            android:id="@+id/mListView"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:divider="@color/item_line"
-            android:dividerHeight="@dimen/line" />
-
-        <android.support.v7.widget.AppCompatButton
-            android:id="@+id/replyBtn"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:layout_alignParentBottom="true"
-            android:layout_marginBottom="30dp"
-            android:layout_marginLeft="20dp"
-            android:layout_marginRight="20dp"
-            android:layout_marginTop="30dp"
-            android:background="@drawable/bg_bule_btn"
-            android:gravity="center_horizontal"
-            android:padding="10dp"
-            android:text="@string/task_reply"
-            android:textColor="@color/white"
-            android:textSize="@dimen/text_main" />
-    </LinearLayout>
+        android:layout_height="match_parent" />
 
 
-</com.core.widget.CustomerScrollView>
+</RelativeLayout>

+ 18 - 0
app_modular/appworks/src/main/res/layout/item_btn.xml

@@ -0,0 +1,18 @@
+<?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">
+    <Button
+        android:id="@+id/replyBtn"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginLeft="20dp"
+        android:layout_marginRight="20dp"
+        android:layout_marginBottom="20dp"
+        android:layout_marginTop="20dp"
+        android:background="@drawable/bg_bule_btn"
+        android:padding="10dp"
+        android:text="@string/task_reply"
+        android:textColor="@color/white"
+        android:textSize="@dimen/text_main" />
+</RelativeLayout>

+ 45 - 30
app_modular/appworks/src/main/res/layout/item_purchase.xml

@@ -1,40 +1,55 @@
 <?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:paddingLeft="@dimen/paddingApp">
+    android:orientation="vertical">
+    <View
+        android:id="@+id/line"
+        android:layout_marginTop="@dimen/padding"
+        android:layout_marginBottom="@dimen/padding"
+        android:layout_width="match_parent"
+        android:background="@color/item_line"
+        android:layout_height="@dimen/line"/>
 
-    <TextView
-        android:id="@+id/captionTV"
-        style="@style/approvalItemStyle"
-        android:layout_width="0dp"
+    <LinearLayout
+        style="@style/approvalStyle"
+        android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:layout_marginRight="10dp"
-        android:layout_weight="1" />
-
-    <FrameLayout
-        android:id="@+id/valuesFl"
-        android:layout_width="0dp"
-        android:layout_height="wrap_content"
-        android:layout_weight="3">
-
-        <EditText
-            android:id="@+id/valueEt"
-            style="@style/approvalItemStyle"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:background="@drawable/edit_hint_right_angle"
-            android:hint="@string/common_input2"
-            android:textColor="@color/text_main"/>
+        android:paddingLeft="@dimen/paddingApp">
 
         <TextView
-            android:id="@+id/valueTv"
+            android:id="@+id/captionTV"
             style="@style/approvalItemStyle"
-            android:layout_width="match_parent"
-            android:gravity="center|left"
-            android:background="@drawable/edit_hint_right_angle"
-            android:visibility="gone"
-            android:textColor="@color/text_main"/>
-    </FrameLayout>
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_marginRight="10dp"
+            android:layout_weight="1" />
+
+        <FrameLayout
+            android:id="@+id/valuesFl"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_weight="3">
+
+            <EditText
+                android:id="@+id/valueEt"
+                style="@style/approvalItemStyle"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:background="@drawable/edit_hint_right_angle"
+                android:hint="@string/common_input2"
+                android:textColor="@color/text_main" />
+
+            <TextView
+                android:id="@+id/valueTv"
+                style="@style/approvalItemStyle"
+                android:layout_width="match_parent"
+                android:background="@drawable/edit_hint_right_angle"
+                android:gravity="center|left"
+                android:hint="@string/common_select1"
+                android:textColor="@color/text_main"
+                android:visibility="gone" />
+        </FrameLayout>
+    </LinearLayout>
+
 </LinearLayout>