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

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

Bitliker 9 лет назад
Родитель
Сommit
7c915121b7

+ 1 - 1
WeiChat/build.gradle

@@ -4,7 +4,7 @@ apply plugin: 'com.getkeepsafe.dexcount'
 android {
     signingConfigs {
         config {
-            storeFile file('D:/config/applicationsignname[20150409]')
+            storeFile file('C:/Users/Arison/Desktop/applicationsignname[20150409]')
             storePassword '13237658359'
             keyAlias 'jie-20150409'
             keyPassword '13237658359'

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

@@ -2,12 +2,12 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
     package="com.xzjmyk.pm.activity"
-    android:versionCode="48"
-    android:versionName="4.8">
+    android:versionCode="49"
+    android:versionName="4.9">
 
     <uses-sdk
         android:minSdkVersion="11"
-        android:targetSdkVersion="22" />
+        android:targetSdkVersion="23" />
 
     <!-- 拨打电话 -->
     <uses-permission android:name="android.permission.CALL_PHONE" />

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

@@ -427,7 +427,8 @@ public class BusinessDetailActivty extends BaseActivity {
                 params.put("condition", "nvl(bc_status,' ')<>'已失效' and nvl(bc_doman,' ')=' ' and bc_nichehouse in (select bd_name from BusinessDataBase where bd_admincode=" +
                         "'" + CommonUtil.getSharedPreferences(ct, "erp_username") + "')");
             } else if (type == 3) {//商机列表
-                params.put("condition", "bc_currentprocess='" + business_steps + "'");
+                params.put("condition", "bc_currentprocess='" + business_steps + "' and bc_domancode='"+
+                CommonUtil.getSharedPreferences(ct,"erp_username")+"'");
             } else {//跟进
                 params.put("condition", "(bc_type='公有' or nvl(bc_type,' ')=' ')");
             }

+ 55 - 9
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/crm/ClientActivity.java

@@ -38,6 +38,7 @@ import com.github.mikephil.charting.listener.OnChartValueSelectedListener;
 import com.github.mikephil.charting.utils.ColorTemplate;
 import com.github.mikephil.charting.utils.Highlight;
 import com.github.mikephil.charting.utils.LargeValueFormatter;
+import com.github.mikephil.charting.utils.ValueFormatter;
 import com.lidroid.xutils.ViewUtils;
 import com.lidroid.xutils.view.annotation.ViewInject;
 import com.xzjmyk.pm.activity.R;
@@ -52,6 +53,7 @@ import com.xzjmyk.pm.activity.util.DisplayUtil;
 import com.xzjmyk.pm.activity.util.ToastUtil;
 import com.xzjmyk.pm.activity.view.wheel.DatePicker;
 
+import java.text.DecimalFormat;
 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Date;
@@ -227,9 +229,9 @@ public class ClientActivity extends BaseActivity implements View.OnClickListener
         xAxis.setAxisLineColor(getResources().getColor(R.color.red));
         xAxis.setSpaceBetweenLabels(8);
         xAxis.setAxisLineWidth(0f);
-
         xAxis.setDrawGridLines(false);
         mChart.getAxisLeft().setDrawGridLines(false);
+     
         mChart.animateY(2500);
         tf = Typeface.createFromAsset(getAssets(),
                 "OpenSans-Regular.ttf");
@@ -237,14 +239,14 @@ public class ClientActivity extends BaseActivity implements View.OnClickListener
         l.setPosition(Legend.LegendPosition.BELOW_CHART_LEFT);
         l.setTypeface(tf);
 
-        XAxis xl = mChart.getXAxis();
-        xl.setTypeface(tf);
 
         YAxis leftAxis = mChart.getAxisLeft();
         leftAxis.setTypeface(tf);
         leftAxis.setValueFormatter(new LargeValueFormatter());
         leftAxis.setDrawGridLines(false);
         leftAxis.setSpaceTop(25f);
+        leftAxis.setAxisMinValue(0f);
+        leftAxis.setAxisMaxValue(100f);
         leftAxis.setAxisLineColor(getResources().getColor(R.color.red));
         mChart.getAxisRight().setEnabled(false);
         mChart.getAxisLeft().setEnabled(true);
@@ -260,21 +262,20 @@ public class ClientActivity extends BaseActivity implements View.OnClickListener
 
             }
         });
+        
         ArrayList<BarEntry> yVals1 = new ArrayList<BarEntry>();
         ArrayList<String> xVals = new ArrayList<String>();
-
         BarDataSet set1 = new BarDataSet(yVals1, "日销售额");
         set1.setColor(Color.rgb(164, 228, 251));
         dataSets1 = new ArrayList<BarDataSet>();
         dataSets1.add(set1);
         data = new BarData(xVals, dataSets1);
-        mChart.setNoDataText(" ");
         mChart.setData(data);
         mChart.setNoDataText("暂时没有数据");
         mChart.invalidate();
-        
     }
-    
+
+  
     private void initSaleBarChart(){
         mv = new MyMarkerView(this, R.layout.custom_marker_view);
         sChart.setMarkerView(mv);
@@ -288,6 +289,7 @@ public class ClientActivity extends BaseActivity implements View.OnClickListener
         xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
         // xAxis.setSpaceBetweenLabels(30);
         xAxis.setLabelsToSkip(0);
+        
         xAxis.setAxisLineColor(getResources().getColor(R.color.red));
         xAxis.setSpaceBetweenLabels(8);
         xAxis.setAxisLineWidth(0f);
@@ -309,6 +311,8 @@ public class ClientActivity extends BaseActivity implements View.OnClickListener
         leftAxis.setValueFormatter(new LargeValueFormatter());
         leftAxis.setDrawGridLines(false);
         leftAxis.setSpaceTop(25f);
+        leftAxis.setAxisMinValue(0f);
+        leftAxis.setAxisMaxValue(100f);
         leftAxis.setAxisLineColor(getResources().getColor(R.color.red));
         sChart.getAxisRight().setEnabled(false);
         sChart.getAxisLeft().setEnabled(true);
@@ -388,6 +392,28 @@ public class ClientActivity extends BaseActivity implements View.OnClickListener
         set1.setColors(ColorTemplate.JOYFUL_COLORS);
         //set1.setVisible(false);
         //set1.setDrawValues(false);
+        set1.setValueFormatter(new ValueFormatter() {
+            private DecimalFormat mFormat;
+            public void DefaultValueFormatter(int digits) {
+
+                StringBuffer b = new StringBuffer();
+                for (int i = 0; i < digits; i++) {
+                    if (i == 0)
+                        b.append(".");
+                    b.append("0");
+                }
+
+                mFormat = new DecimalFormat("###,###,###,##0" + b.toString());
+            }
+            @Override
+            public String getFormattedValue(float value) {
+                if (value==0){
+                    return "0";
+                }else {
+                    return mFormat.format(value);
+                }
+            }
+        });
         dataSets.clear();
         dataSets.add(set1);
 
@@ -395,10 +421,8 @@ public class ClientActivity extends BaseActivity implements View.OnClickListener
         mChart.setData(data);
         /**@注释:清空任何缩放  */
         mChart.zoom(0, 0, 0, 0);
-    
         mChart.zoom(ydata.length/4.2f,0,0,0);
         mChart.invalidate();
-        
     }
 
 
@@ -422,6 +446,28 @@ public class ClientActivity extends BaseActivity implements View.OnClickListener
         set1.setColors(ColorTemplate.JOYFUL_COLORS);
         //set1.setVisible(false);
         //set1.setDrawValues(false);
+        set1.setValueFormatter(new ValueFormatter() {
+            private DecimalFormat mFormat;
+            public void DefaultValueFormatter(int digits) {
+
+                StringBuffer b = new StringBuffer();
+                for (int i = 0; i < digits; i++) {
+                    if (i == 0)
+                        b.append(".");
+                    b.append("0");
+                }
+
+                mFormat = new DecimalFormat("###,###,###,##0" + b.toString());
+            }
+            @Override
+            public String getFormattedValue(float value) {
+                if (value==0){
+                    return "0";
+                }else {
+                    return mFormat.format(value);
+                }
+            }
+        });
         dataSets1.clear();
         dataSets1.add(set1);
 

+ 5 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/crm/CustomerAddActivity.java

@@ -82,6 +82,7 @@ public class CustomerAddActivity extends BaseActivity implements View.OnClickLis
     PopupMenu popup = null;
 
     private List<String> mLists = new ArrayList<String>();
+    private String et_cu_sellercode;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -172,6 +173,9 @@ public class CustomerAddActivity extends BaseActivity implements View.OnClickLis
                         " \"cu_add1\":\"" + tv_cu_address.getText().toString() + "\",\n" +
                         " \"cu_kind\":\"" + et_cu_kind.getText().toString() + "\",\n" +
                         " \"cu_district\":\"" + et_cu_district.getText().toString() + "\",\n" +
+                        " \"cu_auditstatus\":\"" +"在录入" + "\",\n" +
+                        " \"cu_auditstatuscode\":\"" + "ENTERING" + "\",\n" +
+                        " \"cu_sellercode\":\"" + et_cu_sellercode+ "\",\n" +
                         " \"cu_payments\":\"" +URLEncoder.encode(et_cu_payments.getText().toString()) + "\",\n" +
                         " \"cu_sellername\":\"" + et_cu_sellername.getText().toString() + "\",\n" +
                         " \"cu_contact\":\"" + tv_cu_contact.getText().toString() + "\",\n" +
@@ -476,6 +480,7 @@ public class CustomerAddActivity extends BaseActivity implements View.OnClickLis
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
         if (requestCode == REQUEST_CLERK && resultCode == 2 && data != null){
             et_cu_sellername.setText(data.getStringExtra("en_name"));
+            et_cu_sellercode=data.getStringExtra("en_code");
         }
         super.onActivityResult(requestCode, resultCode, data);
     }

+ 1 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/crm/CustomerListActivity.java

@@ -153,6 +153,7 @@ public class CustomerListActivity extends BaseActivity implements View.OnClickLi
             for (EmployeesEntity model:db) {
                 Log.i(TAG, "initData:" + model.getEM_DEPART());
                 Log.i(TAG, "initData:" + model.getEM_POSITION());
+                Log.i(TAG, "initData:" + model.getCOMPANY());
             }
             tv_position.setText(db.get(0).getEM_POSITION());
             tv_department.setText(db.get(0).getEM_DEFAULTORNAME()+"—>");

+ 14 - 13
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/crm/VisitReportAddActivity.java

@@ -28,7 +28,7 @@ import com.xzjmyk.pm.activity.ui.erp.view.SingleDialog;
 import com.xzjmyk.pm.activity.util.BaiduMapUtil;
 import com.xzjmyk.pm.activity.util.DateFormatUtil;
 import com.xzjmyk.pm.activity.util.TimeUtils;
-import com.xzjmyk.pm.activity.view.wheel.DatePicker;
+import com.xzjmyk.pm.activity.view.wheel.DateTimePicker;
 
 import java.util.ArrayList;
 import java.util.Calendar;
@@ -268,28 +268,29 @@ public class VisitReportAddActivity extends BaseActivity implements View.OnClick
     }
 
     private void showDateDialog(final FormEditText tv) {
-        DatePicker picker = new DatePicker(this);
-        picker.setRange(1950, 2030);
-        picker.setSelectedItem(
-                Calendar.getInstance().get(Calendar.YEAR),
-                Calendar.getInstance().get(Calendar.MONTH) + 1,
-                Calendar.getInstance().get(Calendar.DAY_OF_MONTH));
-        picker.setOnDatePickListener(new DatePicker.OnYearMonthDayPickListener() {
+        DateTimePicker picker = new DateTimePicker(this, DateTimePicker.HOUR_OF_DAY);
+        picker.setRange(2000, 2030);
+        picker.setSelectedItem( Calendar.getInstance().get(Calendar.YEAR),  
+                Calendar.getInstance().get(Calendar.MONTH)+1,
+                Calendar.getInstance().get(Calendar.DAY_OF_MONTH),
+                Calendar.getInstance().get(Calendar.HOUR_OF_DAY),
+                Calendar.getInstance().get(Calendar.MINUTE));
+        picker.setOnDateTimePickListener(new DateTimePicker.OnYearMonthDayTimePickListener() {
             @Override
-            public void onDatePicked(String year, String month, String day) {
-//                        ToastUtil.showToast(ct, year + "-" + month + "-" + day);
+            public void onDateTimePicked(String year, String month, String day, String hour, String minute) {
+                
                 switch (tv.getId()) {
                     case R.id.tv_date_start:
-                        tv_date_start.setText(year + "-" + month + "-" + day);
+                        tv_date_start.setText(year + "-" + month + "-" + day + " " + hour + ":" + minute+":00");
                         break;
                     case R.id.tv_date_end:
-                        tv_date_end.setText(year + "-" + month + "-" + day);
+                        tv_date_end.setText(year + "-" + month + "-" + day + " " + hour + ":" + minute+":00");
                         break;
                 }
-
             }
         });
         picker.show();
+        
     }
 //    private void getCodeByNet() {
 //        String url = Constants.getAppBaseUrl(ct) + "mobile/crm/updateVistPlan.action";

+ 12 - 12
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/crm/VisitReportPlanActivity.java

@@ -25,7 +25,7 @@ import com.xzjmyk.pm.activity.ui.erp.view.SingleDialog;
 import com.xzjmyk.pm.activity.util.BaiduMapUtil;
 import com.xzjmyk.pm.activity.util.DateFormatUtil;
 import com.xzjmyk.pm.activity.util.TimeUtils;
-import com.xzjmyk.pm.activity.view.wheel.DatePicker;
+import com.xzjmyk.pm.activity.view.wheel.DateTimePicker;
 
 import java.util.ArrayList;
 import java.util.Calendar;
@@ -220,22 +220,22 @@ public class VisitReportPlanActivity extends BaseActivity implements View.OnClic
         finish();
     }
     private void showDateDialog(final FormEditText tv) {
-        DatePicker picker = new DatePicker(this);
-        picker.setRange(1950, 2030);
-        picker.setSelectedItem(
-                Calendar.getInstance().get(Calendar.YEAR),
-                Calendar.getInstance().get(Calendar.MONTH) + 1,
-                Calendar.getInstance().get(Calendar.DAY_OF_MONTH));
-        picker.setOnDatePickListener(new DatePicker.OnYearMonthDayPickListener() {
+        DateTimePicker picker = new DateTimePicker(this, DateTimePicker.HOUR_OF_DAY);
+        picker.setRange(2000, 2030);
+        picker.setSelectedItem( Calendar.getInstance().get(Calendar.YEAR),
+                Calendar.getInstance().get(Calendar.MONTH)+1,
+                Calendar.getInstance().get(Calendar.DAY_OF_MONTH),
+                Calendar.getInstance().get(Calendar.HOUR_OF_DAY),
+                Calendar.getInstance().get(Calendar.MINUTE));
+        picker.setOnDateTimePickListener(new DateTimePicker.OnYearMonthDayTimePickListener() {
             @Override
-            public void onDatePicked(String year, String month, String day) {
-//                        ToastUtil.showToast(ct, year + "-" + month + "-" + day);
+            public void onDateTimePicked(String year, String month, String day, String hour, String minute) {
                 switch (tv.getId()) {
                     case R.id.tv_date_select:
-                        tv_date_select.setText(year + "-" + month + "-" + day);
+                        tv_date_select.setText(year + "-" + month + "-" + day + " " + hour + ":" + minute + ":00");
                         break;
                     case R.id.tv_visit_enddate:
-                        tv_date_end.setText(year + "-" + month + "-" + day);
+                        tv_date_end.setText(year + "-" + month + "-" + day + " " + hour + ":" + minute + ":00");
                         break;
                 }
             }

+ 471 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/view/wheel/DateTimePicker.java

@@ -0,0 +1,471 @@
+package com.xzjmyk.pm.activity.view.wheel;
+
+import android.app.Activity;
+import android.support.annotation.IntDef;
+import android.support.annotation.NonNull;
+import android.text.TextUtils;
+import android.view.Gravity;
+import android.view.View;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Collections;
+import java.util.Comparator;
+
+/**
+ * Created by Dong on 2016/5/13.
+ * 年月日 时分秒
+ */
+public class DateTimePicker extends WheelPicker {
+
+    /**
+     * 年月日
+     */
+    public static final int YEAR_MONTH_DAY = 0;
+    /**
+     * 年月
+     */
+    public static final int YEAR_MONTH = 1;
+    /**
+     * 月日
+     */
+    public static final int MONTH_DAY = 2;
+
+    /**
+     * 24小时
+     */
+    public static final int HOUR_OF_DAY = 3;
+    /**
+     * 12小时
+     */
+    public static final int HOUR = 4;
+
+    private ArrayList<String> years = new ArrayList<String>();
+    private ArrayList<String> months = new ArrayList<String>();
+    private ArrayList<String> days = new ArrayList<String>();
+    private String yearLabel = "年", monthLabel = "月", dayLabel = "日";
+    private int selectedYearIndex = 0, selectedMonthIndex = 0, selectedDayIndex = 0;
+    private String hourLabel = "时", minuteLabel = "分";
+    private String selectedHour = "", selectedMinute = "";
+    private OnDateTimePickListener onDateTimePickListener;
+    private int mode;
+
+
+    @IntDef(flag = false, value = {YEAR_MONTH_DAY, YEAR_MONTH, MONTH_DAY, HOUR_OF_DAY, HOUR})
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface Mode {
+    }
+
+    public DateTimePicker(Activity activity, @Mode int mode) {
+        super(activity);
+        textSize = 16;//年月日时分,比较宽,设置字体小一点才能显示完整
+        this.mode = mode;
+        for (int i = 2000; i <= 2050; i++) {
+            years.add(String.valueOf(i));
+        }
+        for (int i = 1; i <= 12; i++) {
+            months.add(DateUtils.fillZero(i));
+        }
+        for (int i = 1; i <= 31; i++) {
+            days.add(DateUtils.fillZero(i));
+        }
+        selectedHour = DateUtils.fillZero(Calendar.getInstance().get(Calendar.HOUR_OF_DAY));
+        selectedMinute = DateUtils.fillZero(Calendar.getInstance().get(Calendar.MINUTE));
+    }
+
+    @NonNull
+    @Override
+    protected View makeCenterView() {
+        LinearLayout layout = new LinearLayout(activity);
+        layout.setOrientation(LinearLayout.HORIZONTAL);
+        layout.setGravity(Gravity.CENTER);
+        WheelView yearView = new WheelView(activity.getBaseContext());
+        yearView.setLayoutParams(new LinearLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT));
+        yearView.setTextSize(textSize);
+        yearView.setTextColor(textColorNormal, textColorFocus);
+        yearView.setLineVisible(lineVisible);
+        yearView.setLineColor(lineColor);
+        yearView.setOffset(offset);
+        layout.addView(yearView);
+        TextView yearTextView = new TextView(activity);
+        yearTextView.setLayoutParams(new LinearLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT));
+        yearTextView.setTextSize(textSize);
+        yearTextView.setTextColor(textColorFocus);
+        if (!TextUtils.isEmpty(yearLabel)) {
+            yearTextView.setText(yearLabel);
+        }
+        layout.addView(yearTextView);
+
+        WheelView monthView = new WheelView(activity.getBaseContext());
+        monthView.setLayoutParams(new LinearLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT));
+        monthView.setTextSize(textSize);
+        monthView.setTextColor(textColorNormal, textColorFocus);
+        monthView.setLineVisible(lineVisible);
+        monthView.setLineColor(lineColor);
+        monthView.setOffset(offset);
+        layout.addView(monthView);
+        TextView monthTextView = new TextView(activity);
+        monthTextView.setLayoutParams(new LinearLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT));
+        monthTextView.setTextSize(textSize);
+        monthTextView.setTextColor(textColorFocus);
+        if (!TextUtils.isEmpty(monthLabel)) {
+            monthTextView.setText(monthLabel);
+        }
+        layout.addView(monthTextView);
+
+        final WheelView dayView = new WheelView(activity.getBaseContext());
+        dayView.setLayoutParams(new LinearLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT));
+        dayView.setTextSize(textSize);
+        dayView.setTextColor(textColorNormal, textColorFocus);
+        dayView.setLineVisible(lineVisible);
+        dayView.setLineColor(lineColor);
+        dayView.setOffset(offset);
+        layout.addView(dayView);
+        TextView dayTextView = new TextView(activity);
+        dayTextView.setLayoutParams(new LinearLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT));
+        dayTextView.setTextSize(textSize);
+        dayTextView.setTextColor(textColorFocus);
+        if (!TextUtils.isEmpty(dayLabel)) {
+            dayTextView.setText(dayLabel);
+        }
+        layout.addView(dayTextView);
+
+        WheelView hourView = new WheelView(activity);
+        hourView.setLayoutParams(new LinearLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT));
+        hourView.setTextSize(textSize);
+        hourView.setTextColor(textColorNormal, textColorFocus);
+        hourView.setLineVisible(lineVisible);
+        hourView.setLineColor(lineColor);
+        layout.addView(hourView);
+        TextView hourTextView = new TextView(activity);
+        hourTextView.setLayoutParams(new LinearLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT));
+        hourTextView.setTextSize(textSize);
+        hourTextView.setTextColor(textColorFocus);
+        if (!TextUtils.isEmpty(hourLabel)) {
+            hourTextView.setText(hourLabel);
+        }
+        layout.addView(hourTextView);
+
+        WheelView minuteView = new WheelView(activity);
+        minuteView.setLayoutParams(new LinearLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT));
+        minuteView.setTextSize(textSize);
+        minuteView.setTextColor(textColorNormal, textColorFocus);
+        minuteView.setLineVisible(lineVisible);
+        minuteView.setLineColor(lineColor);
+        minuteView.setOffset(offset);
+        layout.addView(minuteView);
+
+        TextView minuteTextView = new TextView(activity);
+        minuteTextView.setLayoutParams(new LinearLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT));
+        minuteTextView.setTextSize(textSize);
+        minuteTextView.setTextColor(textColorFocus);
+        if (!TextUtils.isEmpty(minuteLabel)) {
+            minuteTextView.setText(minuteLabel);
+        }
+        layout.addView(minuteTextView);
+
+        if (mode == YEAR_MONTH) {
+            dayView.setVisibility(View.GONE);
+            dayTextView.setVisibility(View.GONE);
+        } else if (mode == MONTH_DAY) {
+            yearView.setVisibility(View.GONE);
+            yearTextView.setVisibility(View.GONE);
+        }
+        if (mode != MONTH_DAY) {
+            if (!TextUtils.isEmpty(yearLabel)) {
+                yearTextView.setText(yearLabel);
+            }
+            if (selectedYearIndex == 0) {
+                yearView.setItems(years);
+            } else {
+                yearView.setItems(years, selectedYearIndex);
+            }
+            yearView.setOnWheelViewListener(new WheelView.OnWheelViewListener() {
+                @Override
+                public void onSelected(boolean isUserScroll, int selectedIndex, String item) {
+                    selectedYearIndex = selectedIndex;
+                    //需要根据年份及月份动态计算天数
+                    days.clear();
+                    int maxDays = DateUtils.calculateDaysInMonth(stringToYearMonthDay(item), stringToYearMonthDay(months.get(selectedMonthIndex)));
+                    for (int i = 1; i <= maxDays; i++) {
+                        days.add(DateUtils.fillZero(i));
+                    }
+                    if (selectedDayIndex >= maxDays) {
+                        //年或月变动时,保持之前选择的日不动:如果之前选择的日是之前年月的最大日,则日自动为该年月的最大日
+                        selectedDayIndex = days.size() - 1;
+                    }
+                    dayView.setItems(days, selectedDayIndex);
+                }
+            });
+        }
+        if (!TextUtils.isEmpty(monthLabel)) {
+            monthTextView.setText(monthLabel);
+        }
+        if (selectedMonthIndex == 0) {
+            monthView.setItems(months);
+        } else {
+            monthView.setItems(months, selectedMonthIndex);
+        }
+        monthView.setOnWheelViewListener(new WheelView.OnWheelViewListener() {
+            @Override
+            public void onSelected(boolean isUserScroll, int selectedIndex, String item) {
+                selectedMonthIndex = selectedIndex;
+                if (mode != YEAR_MONTH) {
+                    //年月日或年月模式下,需要根据年份及月份动态计算天数
+                    days.clear();
+                    int maxDays = DateUtils.calculateDaysInMonth(stringToYearMonthDay(years.get(selectedYearIndex)), stringToYearMonthDay(item));
+                    for (int i = 1; i <= maxDays; i++) {
+                        days.add(DateUtils.fillZero(i));
+                    }
+                    if (selectedDayIndex >= maxDays) {
+                        //年或月变动时,保持之前选择的日不动:如果之前选择的日是之前年月的最大日,则日自动为该年月的最大日
+                        selectedDayIndex = days.size() - 1;
+                    }
+                    dayView.setItems(days, selectedDayIndex);
+                }
+            }
+        });
+        if (mode != YEAR_MONTH) {
+            if (!TextUtils.isEmpty(dayLabel)) {
+                dayTextView.setText(dayLabel);
+            }
+            if (selectedDayIndex == 0) {
+                dayView.setItems(days);
+            } else {
+                dayView.setItems(days, selectedDayIndex);
+            }
+            dayView.setOnWheelViewListener(new WheelView.OnWheelViewListener() {
+                @Override
+                public void onSelected(boolean isUserScroll, int selectedIndex, String item) {
+                    selectedDayIndex = selectedIndex;
+                }
+            });
+        }
+
+        ArrayList<String> hours = new ArrayList<String>();
+        if (mode == HOUR) {
+            for (int i = 1; i <= 12; i++) {
+                hours.add(DateUtils.fillZero(i));
+            }
+        } else {
+            for (int i = 0; i < 24; i++) {
+                hours.add(DateUtils.fillZero(i));
+            }
+        }
+        hourView.setItems(hours, selectedHour);
+        ArrayList<String> minutes = new ArrayList<String>();
+        for (int i = 0; i < 60; i++) {
+            minutes.add(DateUtils.fillZero(i));
+        }
+        minuteView.setItems(minutes, selectedMinute);
+        hourView.setOnWheelViewListener(new WheelView.OnWheelViewListener() {
+            @Override
+            public void onSelected(boolean isUserScroll, int selectedIndex, String item) {
+                selectedHour = item;
+            }
+        });
+        minuteView.setOnWheelViewListener(new WheelView.OnWheelViewListener() {
+            @Override
+            public void onSelected(boolean isUserScroll, int selectedIndex, String item) {
+                selectedMinute = item;
+            }
+        });
+
+        return layout;
+    }
+
+    @Override
+    protected void onSubmit() {
+        if (onDateTimePickListener != null) {
+            String year = getSelectedYear();
+            String month = getSelectedMonth();
+            String day = getSelectedDay();
+            switch (mode) {
+                case YEAR_MONTH:
+                    ((OnYearMonthPickListener) onDateTimePickListener).onDateTimePicked(year, month, selectedHour, selectedMinute);
+                    break;
+                case MONTH_DAY:
+                    ((OnMonthDayPickListener) onDateTimePickListener).onDateTimePicked(month, day, selectedHour, selectedMinute);
+                    break;
+                default:
+                    ((OnYearMonthDayTimePickListener) onDateTimePickListener).onDateTimePicked(year, month, day, selectedHour, selectedMinute);
+                    break;
+            }
+        }
+    }
+
+    /**
+     * Gets selected year.
+     *
+     * @return the selected year
+     */
+    public String getSelectedYear() {
+        return years.get(selectedYearIndex);
+    }
+
+    /**
+     * Gets selected month.
+     *
+     * @return the selected month
+     */
+    public String getSelectedMonth() {
+        return months.get(selectedMonthIndex);
+    }
+
+    /**
+     * Gets selected day.
+     *
+     * @return the selected day
+     */
+    public String getSelectedDay() {
+        return days.get(selectedDayIndex);
+    }
+
+    private int stringToYearMonthDay(String text) {
+        if (text.startsWith("0")) {
+            //截取掉前缀0以便转换为整数
+            text = text.substring(1);
+        }
+        return Integer.parseInt(text);
+    }
+
+    /**
+     * Sets label.
+     *
+     * @param yearLabel  the year label
+     * @param monthLabel the month label
+     * @param dayLabel   the day label
+     */
+    public void setLabel(String yearLabel, String monthLabel, String dayLabel, String hourLabel, String minuteLabel) {
+        this.yearLabel = yearLabel;
+        this.monthLabel = monthLabel;
+        this.dayLabel = dayLabel;
+        this.hourLabel = hourLabel;
+        this.minuteLabel = minuteLabel;
+    }
+
+    /**
+     * Sets range.
+     *
+     * @param startYear the start year
+     * @param endYear   the end year
+     */
+    public void setRange(int startYear, int endYear) {
+        years.clear();
+        for (int i = startYear; i <= endYear; i++) {
+            years.add(String.valueOf(i));
+        }
+    }
+
+    private int findItemIndex(ArrayList<String> items, int item) {
+        //折半查找有序元素的索引
+        int index = Collections.binarySearch(items, item, new Comparator<Object>() {
+            @Override
+            public int compare(Object lhs, Object rhs) {
+                String lhsStr = lhs.toString();
+                String rhsStr = rhs.toString();
+                lhsStr = lhsStr.startsWith("0") ? lhsStr.substring(1) : lhsStr;
+                rhsStr = rhsStr.startsWith("0") ? rhsStr.substring(1) : rhsStr;
+                return Integer.parseInt(lhsStr) - Integer.parseInt(rhsStr);
+            }
+        });
+        if (index < 0) {
+            index = 0;
+        }
+        return index;
+    }
+
+    /**
+     * @param year
+     * @param month
+     * @param day
+     * @param hour
+     * @param minute
+     */
+    public void setSelectedItem(int year, int month, int day, int hour, int minute) {
+        selectedYearIndex = findItemIndex(years, year);
+        selectedMonthIndex = findItemIndex(months, month);
+        selectedDayIndex = findItemIndex(days, day);
+        selectedHour = String.valueOf(hour);
+        selectedMinute = String.valueOf(minute);
+    }
+
+    /**
+     * Sets selected item.
+     *
+     * @param yearOrMonth the year or month
+     * @param monthOrDay  the month or day
+     */
+    public void setSelectedItem(int yearOrMonth, int monthOrDay) {
+        if (mode == MONTH_DAY) {
+            selectedMonthIndex = findItemIndex(months, yearOrMonth);
+            selectedDayIndex = findItemIndex(days, monthOrDay);
+        } else {
+            selectedYearIndex = findItemIndex(years, yearOrMonth);
+            selectedMonthIndex = findItemIndex(months, monthOrDay);
+        }
+    }
+
+
+    /**
+     * The interface On DateTime pick listener.
+     */
+    protected interface OnDateTimePickListener {
+
+    }
+
+    /**
+     * The interface On year month day pick listener.
+     */
+    public interface OnYearMonthDayTimePickListener extends OnDateTimePickListener {
+
+        /**
+         * On date picked.
+         *
+         * @param year  the year
+         * @param month the month
+         * @param day   the day
+         */
+        void onDateTimePicked(String year, String month, String day, String hour, String minute);
+
+    }
+
+    /**
+     * The interface On year month pick listener.
+     */
+    public interface OnYearMonthPickListener extends OnDateTimePickListener {
+
+        /**
+         * On date picked.
+         *
+         * @param year  the year
+         * @param month the month
+         */
+        void onDateTimePicked(String year, String month, String hour, String minute);
+
+    }
+
+    /**
+     * The interface On month day pick listener.
+     */
+    public interface OnMonthDayPickListener extends OnDateTimePickListener {
+
+        /**
+         * On date picked.
+         *
+         * @param month the month
+         * @param day   the day
+         */
+        void onDateTimePicked(String month, String day, String hour, String minute);
+
+    }
+
+    public void setOnDateTimePickListener(OnDateTimePickListener listener) {
+        this.onDateTimePickListener = listener;
+    }
+
+}

+ 7 - 7
WeiChat/src/main/res/layout/activity_add_meeting.xml

@@ -32,7 +32,7 @@
                 android:id="@+id/name_et"
                 style="@style/add_meet_tv"
                 android:layout_toRightOf="@+id/name_tag"
-                android:hint="请输入,必填"
+                android:hint="请输入"
                 android:layout_marginLeft="20dp"
                 android:inputType="text" />
         </RelativeLayout>
@@ -65,7 +65,7 @@
                 android:layout_toRightOf="@id/start_tag"
                 android:drawableRight="@drawable/oa_next"
                 android:layout_marginLeft="20dp"
-                android:hint="请选择,必填" />
+                android:hint="请选择" />
         </RelativeLayout>
 
         <View
@@ -95,7 +95,7 @@
                 android:layout_toRightOf="@id/end_tag"
                 android:drawableRight="@drawable/oa_next"
                 android:layout_marginLeft="20dp"
-                android:hint="请选择,必填" />
+                android:hint="请选择" />
         </RelativeLayout>
 
         <View
@@ -124,7 +124,7 @@
                 style="@style/add_meet_tv"
                 android:layout_toRightOf="@id/location_tag"
                 android:layout_marginLeft="20dp"
-                android:hint="请输入,必填" />
+                android:hint="请输入" />
         </RelativeLayout>
 
         <RelativeLayout
@@ -171,7 +171,7 @@
                 android:layout_toRightOf="@+id/users_tag"
                 android:drawableRight="@drawable/oa_next"
                 android:layout_marginLeft="20dp"
-                android:hint="请选择,必填" />
+                android:hint="请选择" />
         </RelativeLayout>
 
         <View
@@ -225,7 +225,7 @@
                 android:layout_toRightOf="@+id/tag_tag"
                 android:drawableRight="@drawable/oa_next"
                 android:layout_marginLeft="20dp"
-                android:hint="请选择,非必填" />
+                android:hint="请选择" />
         </RelativeLayout>
 
         <View
@@ -249,7 +249,7 @@
                 style="@style/add_meet_tv"
                 android:layout_toRightOf="@id/about_tag"
                 android:layout_marginLeft="20dp"
-                android:hint="请输入,非必填" />
+                android:hint="请输入" />
         </RelativeLayout>
 
         <View

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

@@ -801,7 +801,7 @@
                     <com.github.mikephil.charting.charts.BarChart
                         android:id="@+id/crm_chart_bar"
                         android:layout_width="match_parent"
-                        android:layout_height="match_parent"
+                        android:layout_height="200dp"
                         android:layout_marginTop="10dp"
                         android:layout_marginBottom="10dp" />
                 </LinearLayout>