Parcourir la source

Merge branch 'master' of http://47.102.110.240:3000/yuxiangpei/tbServantMini_cloud into master

yangyongyong il y a 3 ans
Parent
commit
be5c210e94
27 fichiers modifiés avec 788 ajouts et 74 suppressions
  1. 9 2
      client/app.acss
  2. 3 1
      client/app.json
  3. 1 1
      client/pages/customer/customerCenter/customerCenter.js
  4. 31 12
      client/pages/customer/monthReport/monthReport.js
  5. 1 4
      client/pages/customer/servantdetail/servantdetail.acss
  6. 3 1
      client/pages/customer/servantedit/servantedit.json
  7. 2 1
      client/pages/customer/servantsettings/servantsettings.acss
  8. 3 3
      client/pages/customer/servantsettings/servantsettings.axml
  9. 11 1
      client/pages/customer/servantsettings/servantsettings.js
  10. 76 0
      client/pages/servant/monthReport/monthReport.acss
  11. 66 0
      client/pages/servant/monthReport/monthReport.axml
  12. 380 0
      client/pages/servant/monthReport/monthReport.js
  13. 7 0
      client/pages/servant/monthReport/monthReport.json
  14. 24 0
      client/pages/servant/reportList/reportList.acss
  15. 11 0
      client/pages/servant/reportList/reportList.axml
  16. 23 0
      client/pages/servant/reportList/reportList.js
  17. 3 0
      client/pages/servant/reportList/reportList.json
  18. 2 2
      client/pages/servant/servantCenter/servantCenter.axml
  19. 35 1
      client/pages/servant/servantCenter/servantCenter.js
  20. 1 4
      client/pages/servant/servantdetail/servantdetail.acss
  21. 3 1
      client/pages/servant/servantlist/servantlist.json
  22. 2 1
      client/pages/servant/servantsettings/servantsettings.acss
  23. 1 1
      client/pages/servant/servantsettings/servantsettings.axml
  24. 1 1
      client/pages/servant/servantsettings/servantsettings.json
  25. 19 25
      client/pages/servant/taskreminder/taskreminder.axml
  26. 57 4
      client/pages/servant/taskreminder/taskreminder.js
  27. 13 8
      client/util/apiUrl1.js

+ 9 - 2
client/app.acss

@@ -103,5 +103,12 @@ font-size: 28rpx;
  color: #09AFFF;
 text-decoration:underline;
 }
-
-
+.work-day{
+  color: #999;
+  font-size: 22rpx;
+  margin:0 0 16rpx;
+}
+.cell-type{
+   margin:0 0 16rpx;
+   font-size:28rpx;
+}

+ 3 - 1
client/app.json

@@ -22,7 +22,9 @@
     "pages/customer/servantsettings/servantsettings",
    "pages/customer/servantedit/servantedit",
     "pages/customer/reportList/reportList",
-    "pages/customer/editDailyTask/editDailyTask"
+    "pages/customer/editDailyTask/editDailyTask",
+    "pages/servant/monthReport/monthReport",
+    "pages/servant/reportList/reportList"
   ],
   "window": {
     "defaultTitle": "保姆管家",

+ 1 - 1
client/pages/customer/customerCenter/customerCenter.js

@@ -351,7 +351,7 @@ Page({
     });
     // 首次设置完成提交后台完成引导设置
 
-  // this.finishAllSet();
+  this.finishAllSet();
 
     }else{
      

+ 31 - 12
client/pages/customer/monthReport/monthReport.js

@@ -41,7 +41,7 @@ Page({
       reportInfo:reportInfo,
       reportDate:year+'年'+month+'月',
       servantName:serviceTime.nickName,
-      serviceDay:serviceTime.serviceDay,
+      serviceDay:serviceTime.serviceDays,
       percentTop:serviceTime.serviceQuality,
       expendTotal:reportInfo.expenses
     })
@@ -95,19 +95,20 @@ Page({
           item.percentage=(item.percentage)*1;
        });
        const data =dataList;
+
     // const data = JSON.parse(this.data.reportInfo.pieChart).randList;
-    //  const data=[{"taskName":"洗护类","percentage":100.00}]
+    //  const data=[{"taskName":"洗护类","percentage":0.2},{"taskName":"洗e类","percentage":0.8}]
 
     chart.source(data);
     chart.legend(false);
     chart.coord('polar', {
       transposed: true,
-      innerRadius: 0.5,
+      innerRadius: 0.6,
     });
     chart.axis(false);
     chart
       .interval()
-      .position('taskName*percentage')
+      .position('1*percentage')
       .color('taskName', [
         '#EB6F49',
         '#00D98B',
@@ -161,8 +162,11 @@ Page({
      let dataList=JSON.parse(this.data.reportInfo.finishInfo);
        dataList.forEach(item => {
           item.percent=(item.percent)*1;
+          item.const='const';
        });
        const data =dataList;
+
+      //  const data=[{"name":"完成","percent":100,"const":'const'},{"name":"无法完成","percent":200,"const":'const'},{"name":"未完成","percent":300,"const":'const'},{"name":"补打卡","percent":400,"const":'const'}]
     // const data = JSON.parse(this.data.reportInfo.finishInfo);
 
     chart.source(data);
@@ -173,7 +177,7 @@ Page({
     chart.axis(false);
     chart
       .interval()
-      .position('name*percent')
+      .position('const*percent')
       .color('name', [
         '#EB6F49',
         '#00D98B',
@@ -276,12 +280,21 @@ chart.render();
   onInitChart4(F2, config) {
     //  任务类完成详细情况
     const chart = new F2.Chart(config);
-    // const data = [{"number":"20","typeName":"任务太多"},{"number":"0","typeName":"我不会"},{"number":"10","typeName":"任务不详细"}];
-    const data=JSON.parse(this.data.reportInfo.classfInish).lefts;
+      let dataList=JSON.parse(this.data.reportInfo.classfInish).lefts;
+       dataList.forEach(item => {
+          item.finishRate=(item.finishRate)*1;
+       });
+       const data =dataList;
+    // const data = [{"taskClass":"洗护类","finishRate":100.00,"type":"1","name":null},{"taskClass":"做饭类","finishRate":66.67,"type":"2","name":null},{"taskClass":"打扫类","finishRate":83.33,"type":"3","name":null},{"taskClass":"照顾老人类","finishRate":100.00,"type":"4","name":null},{"taskClass":"照顾孩子类","finishRate":66.67,"type":"5","name":null}];
+    // const data=JSON.parse(this.data.reportInfo.classfInish).lefts;
     chart.source(data, {
-      sales: {
-        tickCount: 5
-      }
+      finishRate: {
+    tickCount: 3,
+    range: [ 0, 1 ],
+    formatter: function formatter(ivalue) {
+      return ivalue + '%';
+    }
+  }
     });
     // chart.tooltip({
     //   showItemMarker: false,
@@ -294,7 +307,7 @@ chart.render();
     // });
     chart.interval()
       .position('taskClass*finishRate')
-      .color('l(90) 0:#FBEC9F 1:#F3D34D'); // 定义柱状图渐变色
+      .color('l(90) 0:#1890ff 1:#70cdd0'); // 定义柱状图渐变色
     chart.render();
     // 注意:需要把chart return 出来
     return chart;
@@ -304,7 +317,13 @@ chart.render();
     //任务无法完成原因
     const chart = new F2.Chart(config);
     // const data = [{"number":"20","typeName":"任务太多"},{"number":"0","typeName":"我不会"},{"number":"10","typeName":"任务不详细"}];
-    const data=JSON.parse(this.data.reportInfo.unfinishd);
+    
+     let dataList=JSON.parse(this.data.reportInfo.unfinishd);
+       dataList.forEach(item => {
+          item.number=(item.number)*1;
+       });
+       const data =dataList;
+    // const data=JSON.parse(this.data.reportInfo.unfinishd);
     chart.source(data, {
       sales: {
         tickCount: 5

+ 1 - 4
client/pages/customer/servantdetail/servantdetail.acss

@@ -31,10 +31,7 @@
   color: #999999;
   font-size: 14px;
 }
-.cell-type{
-  color: #666666;
-  font-size: 16px;
-}
+
 .nosettingservaent{
   background: #FFFFFF;
   text-align: center;

+ 3 - 1
client/pages/customer/servantedit/servantedit.json

@@ -1 +1,3 @@
-{}
+{
+  "defaultTitle": "编辑服务标准"
+}

+ 2 - 1
client/pages/customer/servantsettings/servantsettings.acss

@@ -1,5 +1,6 @@
 .servant-settings-page{
   background-color: #F3F3F3;
+  padding:0 0 160rpx;
 }
 .servant-setting-header{
   height: 62rpx;
@@ -26,7 +27,7 @@
 .setting-list{
   background: #FFFFFF;
   border-radius: 18px;
-  margin: 25.99rpx 24rpx 20rpx 24rpx;
+  margin: 26rpx 24rpx 30rpx 24rpx;
 }
 .setting-list-title{
   color: #333333;

+ 3 - 3
client/pages/customer/servantsettings/servantsettings.axml

@@ -1,9 +1,9 @@
 <view class="servant-settings-page">
 <!--服务设置-->
-  <view class="servant-setting-header">
+  <view class="servant-setting-header"  a:if="{{tips}}">
     <image mode="scaleToFill" src="/image/notice-blue.png" class="notice-style"/>
-    <text>您可以查看保姆偏好,双向沟通更清晰</text>
-    <image mode="scaleToFill" src="/image/close-blue.png" class="close-stle"/>
+    <text  onTap="toservantdetail">您可以查看保姆偏好,双向沟通更清晰</text>
+    <image mode="scaleToFill" src="/image/close-blue.png" class="close-stle" onTap="closeTip"/>
   </view>
   <!--服务列表-->
   <view class="setting-list" a:for="{{servantlist}}" key="{{index}}">

+ 11 - 1
client/pages/customer/servantsettings/servantsettings.js

@@ -7,6 +7,7 @@ var app = getApp();
 
 Page({
   data: {
+     tips:true,
     servantlist:[],
   },
   onLoad() {
@@ -169,7 +170,16 @@ Page({
       servantlist: servantlist
     })
   },
-  
+  closeTip(){
+    this.setData({
+      tips: false
+    })
+  },
+    toservantdetail(){
+    my.navigateTo({
+      url: '../servantdetail/servantdetail'
+    });
+  },
   //切换tab
   loadclasslist(e){
     let nowsubtypeNo=e.target.dataset.id;

+ 76 - 0
client/pages/servant/monthReport/monthReport.acss

@@ -0,0 +1,76 @@
+.f2-chart {
+  width: 100%;
+  height: 500rpx;
+}
+.report-wrapper{
+  font-size: 0;
+  background: #5C4CEA;
+  padding:0  0 10rpx;
+}
+.report-img{
+  width:100%;
+}
+.block-data-wrapper{
+  position: relative;
+  font-size: 30rpx;
+}
+.common-data{
+  position:absolute;
+  top:0;
+  left:0;
+  right:0;
+  bottom:0;
+  z-index:100;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  color:#5C4CEA;
+  flex-direction: column;
+}
+.report-date{
+  margin:36rpx 0;
+  font-size: 90rpx;
+  font-weight:bold;
+}
+.service-day{
+  margin:0 0 36rpx 0;
+}
+.service-day text{
+  font-size:48rpx;
+  color:#E95E4A;
+  font-weight: bolder;
+}
+.percent-top text{
+  color:#E95E4A;
+  font-weight: bolder;
+}
+
+.expend-total{
+  height: 90rpx;
+  line-height: 90rpx;
+  margin:30rpx 44rpx 20rpx; ;
+  border-radius: 20rpx;
+  font-size: 36rpx;
+  color: white;
+  text-align: center;
+  border:3rpx solid #fff;
+}
+.expend-total text{
+  color: #EFC149;
+}
+.shape-chart1{
+  padding:100rpx 40rpx 40rpx;
+}
+.shape-chart2{
+  padding:260rpx 40rpx 40rpx;
+}
+.shape-chart5{
+  padding:80rpx 40rpx 80rpx;
+}
+.no-chart-tip{
+  color: #fff;
+  font-size: 28rpx;
+  line-height: 60rpx;
+  text-align: center;
+  padding:60rpx 40rpx 120rpx ;
+}

+ 66 - 0
client/pages/servant/monthReport/monthReport.axml

@@ -0,0 +1,66 @@
+<view class="report-wrapper">
+     <!--<view class="f2-chart"><f2 onInit="onInitChart"></f2></view><view class="f2-chart"><f2 onInit="onInitChart2"></f2></view> -->
+     <image mode="widthFix" class="report-img" src="/image/report-01.jpg"/>
+     <view class="common-data-wrapper block-data-wrapper">
+          <image mode="widthFix" class="report-img" src="/image/report-02.jpg"/>
+          <view class="common-data">
+               <view>——保姆服务月度回顾——</view>
+               <view class="report-date">{{reportDate}}</view>
+               <view class="service-day">您已服务[{{servantName}}]
+                    <text>{{serviceDay}}</text>天啦!</view>
+               <view class="percent-top">超过全国
+                    <text>{{percentTop}}</text>的同行</view>
+          </view>
+     </view>
+     <image mode="widthFix" class="report-img" src="/image/report-03.jpg"/>
+     <!-- 本月花销合计 -->
+     <view class="expend-total">
+          您本月服务花销共计
+          <text>{{expendTotal}}</text> 元
+     </view>
+
+     <view class="chart-module-wrapper"  a:if={{chartShow}}>
+         <view class="common-data-wrapper block-data-wrapper">
+          <image mode="widthFix" class="report-img" src="/image/report-04.jpg"/>
+          <view class="common-data shape-chart1">
+               <f2 onInit="onInitChart1"></f2>
+          </view>
+     </view>
+     <view class="common-data-wrapper block-data-wrapper">
+          <image mode="widthFix" class="report-img" src="/image/report-05.jpg"/>
+          <view class="common-data shape-chart2">
+               <f2 onInit="onInitChart2"></f2>
+          </view>
+     </view>
+     <!-- 任务完成趋势图 -->
+     <view class="common-data-wrapper block-data-wrapper">
+          <image mode="widthFix" class="report-img" src="/image/report-06.jpg"/>
+          <view class="common-data shape-chart1">
+               <f2 onInit="onInitChart3"></f2>
+          </view>
+     </view>
+     <!-- 任务完成详细情况 -->
+     <view class="common-data-wrapper block-data-wrapper">
+          <image mode="widthFix" class="report-img" src="/image/report-07.jpg"/>
+          <view class="common-data shape-chart1">
+               <f2 onInit="onInitChart4"></f2>
+          </view>
+     </view>
+     <!-- 任务无法完成原因 -->
+     <view class="common-data-wrapper block-data-wrapper">
+          <image mode="widthFix" class="report-img" src="/image/report-08.png"/>
+          <view class="common-data shape-chart5">
+               <f2 onInit="onInitChart5"></f2>
+          </view>
+     </view>
+     </view>
+     <view class="no-chart-tip" a:if={{!chartShow}}>
+        <view>好可惜,您的雇主本月未设置任务服务,快去让雇主设置吧</view>
+        <view>精彩下次为您呈现~</view>
+     </view>
+     
+     <!--<image mode="widthFix" class="report-img" src="/image/report-04.jpg"/><image mode="widthFix" class="report-img" src="/image/report-05.jpg"/> -->
+     <!--<image mode="widthFix" class="report-img" src="/image/report-06.jpg"/> -->
+     <!--<image mode="widthFix" class="report-img" src="/image/report-07.jpg"/> -->
+     <!--<image mode="widthFix" class="report-img" src="/image/report-08.png"/> -->
+</view>

+ 380 - 0
client/pages/servant/monthReport/monthReport.js

@@ -0,0 +1,380 @@
+
+
+import F2 from '@antv/f2';
+// 建议统一从 lib 下引入
+const PieLabel = require('@antv/f2/lib/plugin/pie-label'); // 引入 PieLabel 模块
+
+// 方式一:全局注册
+F2.Chart.plugins.register(PieLabel);
+import request from '../../../util/http'
+import apiUrl from '../../../util/apiUrl'
+var app = getApp();
+Page({
+  data: {
+    reportDate: '',
+    servantName: '',
+    serviceDay: '',
+    percentTop: '',
+    expendTotal: '',
+    taskNum: '',
+    reportInfo:'',
+    chartShow:true,
+  },
+  onLoad() {
+    let reportInfo=app.globalData.reportInfo;
+    let serviceTime=JSON.parse(reportInfo.serviceTime);
+    let year=(serviceTime.year==null?'':serviceTime.year);
+    let month=(serviceTime.month==null?'':serviceTime.month);
+    console.log(reportInfo);
+      if(reportInfo.attrOne=='3'){
+        this.setData({
+          chartShow:false,
+
+        })
+      }else{
+         this.setData({
+          chartShow:true,
+
+        })
+      }
+    this.setData({
+      reportInfo:reportInfo,
+      reportDate:year+'年'+month+'月',
+      servantName:serviceTime.nickName,
+      serviceDay:serviceTime.serviceDays,
+      percentTop:serviceTime.serviceQuality,
+      expendTotal:reportInfo.expenses
+    })
+  },
+  onInitChart(F2, config) {
+    //  饼状图
+    const chart = new F2.Chart(config);
+    const data = [
+      { name: '打扫房间', proportion: 0.4, a: '1' },
+      { name: '打扫厨房', proportion: 0.2, a: '1' },
+      { name: '带孩子', proportion: 0.18, a: '1' },
+      { name: '照顾老人', proportion: 0.15, a: '1' },
+      { name: '清洁厨房', proportion: 0.05, a: '1' },
+      { name: '其他', proportion: 0.02, a: '1' },
+    ];
+
+    chart.source(data);
+    chart.legend({
+      position: 'right'
+    });
+    chart.coord('polar', {
+      transposed: true,
+      innerRadius: 0.7,
+    });
+    chart.axis(false);
+    chart
+      .interval()
+      .position('a*proportion')
+      .color('name', [
+        '#1890FF',
+        '#13C2C2',
+        '#2FC25B',
+        '#FACC14',
+        '#F04864',
+        '#8543E0',
+      ])
+      .adjust('stack');
+
+    chart.render();
+
+    // 注意:需要把chart return 出来
+    return chart;
+  },
+
+  onInitChart1(F2, config) {
+    //  本月任务分布饼状图
+    const chart = new F2.Chart(config);
+    let taskNum = JSON.parse(this.data.reportInfo.pieChart).taskSum;
+       let dataList=JSON.parse(this.data.reportInfo.pieChart).randList;
+       dataList.forEach(item => {
+          item.percentage=(item.percentage)*1;
+       });
+       const data =dataList;
+
+    // const data = JSON.parse(this.data.reportInfo.pieChart).randList;
+    //  const data=[{"taskName":"洗护类","percentage":0.2},{"taskName":"洗e类","percentage":0.8}]
+
+    chart.source(data);
+    chart.legend(false);
+    chart.coord('polar', {
+      transposed: true,
+      innerRadius: 0.6,
+    });
+    chart.axis(false);
+    chart
+      .interval()
+      .position('1*percentage')
+      .color('taskName', [
+        '#EB6F49',
+        '#00D98B',
+        '#FDB628',
+        '#0091F1',
+        '#00E4EC',
+        '#8256E8',
+      ])
+      .adjust('stack');
+    chart.guide()
+      .text({
+        position: ['50%', '50%'],
+        style: {
+          fill: '#7ED4F6',
+          fontSize: '12',
+        },
+        content: ` 本月共
+  ${taskNum}条任务`,
+
+        limitInPlot: true,
+      });
+    chart.pieLabel({
+      sidePadding: 30,
+      activeShape: true,
+      label1: function label1(data) {
+        return {
+          text: data.taskName,
+          fill: '#7ED4F6',
+          fontWeight: 'bold'
+        };
+      },
+      label2: function label2(data) {
+        return {
+          text: data.percentage+'%',
+          fill: '#7ED4F6'
+        };
+      },
+      onClick: function onClick(ev) {
+        console.log(ev.data);
+
+      }
+    });
+    chart.render();
+
+    // 注意:需要把chart return 出来
+    return chart;
+  },
+  onInitChart2(F2, config) {
+    //  本月任务完成情况
+    const chart = new F2.Chart(config);
+     let dataList=JSON.parse(this.data.reportInfo.finishInfo);
+       dataList.forEach(item => {
+          item.percent=(item.percent)*1;
+          item.const='const';
+       });
+       const data =dataList;
+
+      //  const data=[{"name":"完成","percent":100,"const":'const'},{"name":"无法完成","percent":200,"const":'const'},{"name":"未完成","percent":300,"const":'const'},{"name":"补打卡","percent":400,"const":'const'}]
+    // const data = JSON.parse(this.data.reportInfo.finishInfo);
+
+    chart.source(data);
+    chart.legend(false);
+    chart.coord('polar', {
+      transposed: true,
+    });
+    chart.axis(false);
+    chart
+      .interval()
+      .position('const*percent')
+      .color('name', [
+        '#EB6F49',
+        '#00D98B',
+        '#FDB628',
+        '#0091F1',
+        '#00E4EC',
+        '#8256E8',
+      ])
+      .adjust('stack');
+
+    chart.pieLabel({
+      sidePadding: 30,
+      activeShape: true,
+      label1: function label1(data) {
+        return {
+          text: data.name,
+          fill: '#7ED4F6',
+          fontWeight: 'bold'
+        };
+      },
+      label2: function label2(data) {
+        return {
+          text: data.percent+'%',
+          fill: '#7ED4F6'
+        };
+      },
+      onClick: function onClick(ev) {
+        console.log(ev.data);
+
+      }
+    });
+    chart.render();
+
+    // 注意:需要把chart return 出来
+    return chart;
+  },
+   onInitChart3(F2, config) {
+
+    //任务完成趋势图
+    const chart = new F2.Chart(config);
+ const data = JSON.parse(this.data.reportInfo.taskTrend);
+    chart.source(data, {
+      workDay: {
+    type: 'timeCat',
+    tickCount: 5,
+    // mask: 'hh:mm',
+    range: [ 0, 1 ]
+  },
+  taskNum: {
+    tickCount: 3,
+    // formatter: function formatter(ivalue) {
+    //   return ivalue + '%';
+    // }
+  }
+    });
+    // chart.tooltip({
+    //   showItemMarker: false,
+    //   onShow: function onShow(ev) {
+    //     const items = ev.items;
+    //     items[0].name = null;
+    //     items[0].name = items[0].title;
+    //     items[0].value = '¥ ' + items[0].value;
+    //   }
+    // });
+  chart.axis('workDay', {
+  line: null,
+  label: function label(text, index, total) {
+    const textCfg = {};
+    if (index === 0) {
+      textCfg.textAlign = 'left';
+    } else if (index === total - 1) {
+      textCfg.textAlign = 'right';
+    }
+    return textCfg;
+  }
+});
+chart.axis('tem', {
+  grid: function grid(text) {
+    if (text === '0%') {
+      return {
+        lineDash: null,
+        lineWidth: 1
+      };
+    }
+  }
+});
+chart.legend({
+  position: 'bottom',
+  offsetY: -5
+});
+chart.line()
+  .position('workDay*taskNum')
+  .color('name');
+  
+
+chart.render();
+    // 注意:需要把chart return 出来
+    return chart;
+  },
+  onInitChart4(F2, config) {
+    //  任务类完成详细情况
+    const chart = new F2.Chart(config);
+      let dataList=JSON.parse(this.data.reportInfo.classfInish).lefts;
+       dataList.forEach(item => {
+          item.finishRate=(item.finishRate)*1;
+       });
+       const data =dataList;
+    // const data = [{"taskClass":"洗护类","finishRate":100.00,"type":"1","name":null},{"taskClass":"做饭类","finishRate":66.67,"type":"2","name":null},{"taskClass":"打扫类","finishRate":83.33,"type":"3","name":null},{"taskClass":"照顾老人类","finishRate":100.00,"type":"4","name":null},{"taskClass":"照顾孩子类","finishRate":66.67,"type":"5","name":null}];
+    // const data=JSON.parse(this.data.reportInfo.classfInish).lefts;
+    chart.source(data, {
+      finishRate: {
+    tickCount: 3,
+    range: [ 0, 1 ],
+    formatter: function formatter(ivalue) {
+      return ivalue + '%';
+    }
+  }
+    });
+    // chart.tooltip({
+    //   showItemMarker: false,
+    //   onShow: function onShow(ev) {
+    //     const items = ev.items;
+    //     items[0].name = null;
+    //     items[0].name = items[0].title;
+    //     items[0].value = '¥ ' + items[0].value;
+    //   }
+    // });
+    chart.interval()
+      .position('taskClass*finishRate')
+      .color('l(90) 0:#1890ff 1:#70cdd0'); // 定义柱状图渐变色
+    chart.render();
+    // 注意:需要把chart return 出来
+    return chart;
+  },
+  onInitChart5(F2, config) {
+
+    //任务无法完成原因
+    const chart = new F2.Chart(config);
+    // const data = [{"number":"20","typeName":"任务太多"},{"number":"0","typeName":"我不会"},{"number":"10","typeName":"任务不详细"}];
+    
+     let dataList=JSON.parse(this.data.reportInfo.unfinishd);
+       dataList.forEach(item => {
+          item.number=(item.number)*1;
+       });
+       const data =dataList;
+    // const data=JSON.parse(this.data.reportInfo.unfinishd);
+    chart.source(data, {
+      sales: {
+        tickCount: 5
+      }
+    });
+    // chart.tooltip({
+    //   showItemMarker: false,
+    //   onShow: function onShow(ev) {
+    //     const items = ev.items;
+    //     items[0].name = null;
+    //     items[0].name = items[0].title;
+    //     items[0].value = '¥ ' + items[0].value;
+    //   }
+    // });
+    chart.interval()
+      .position('typeName*number')
+      .color('l(90) 0:#FBEC9F 1:#F3D34D'); // 定义柱状图渐变色
+    chart.render();
+    // 注意:需要把chart return 出来
+    return chart;
+  },
+  onInitChart0(F2, config) {
+
+    //折线图
+    const chart = new F2.Chart(config);
+    const data = [
+      { value: 63.4, city: 'New York', date: '2011-10-01' },
+      { value: 62.7, city: 'Alaska', date: '2011-10-01' },
+      { value: 72.2, city: 'Austin', date: '2011-10-01' },
+      { value: 58, city: 'New York', date: '2011-10-02' },
+      { value: 59.9, city: 'Alaska', date: '2011-10-02' },
+      { value: 67.7, city: 'Austin', date: '2011-10-02' },
+      { value: 53.3, city: 'New York', date: '2011-10-03' },
+      { value: 59.1, city: 'Alaska', date: '2011-10-03' },
+      { value: 69.4, city: 'Austin', date: '2011-10-03' },
+    ];
+    chart.source(data, {
+      date: {
+        range: [0, 1],
+        type: 'timeCat',
+        mask: 'MM-DD'
+      },
+      value: {
+        max: 300,
+        tickCount: 4
+      }
+    });
+    chart.area().position('date*value').color('city').adjust('stack');
+    chart.line().position('date*value').color('city').adjust('stack');
+    chart.render();
+    // 注意:需要把chart return 出来
+    return chart;
+  },
+});

+ 7 - 0
client/pages/servant/monthReport/monthReport.json

@@ -0,0 +1,7 @@
+{
+   "defaultTitle": "保姆月报",
+  "usingComponents": {
+    "f2": "@antv/my-f2"
+  }
+
+}

+ 24 - 0
client/pages/servant/reportList/reportList.acss

@@ -0,0 +1,24 @@
+.servantlistpage{
+  padding-top: 27rpx;
+}
+.servantlistitem{
+  height: 102rpx;
+  line-height: 102rpx;
+  background: #FFFFFF;
+  border-radius: 18rpx;
+  font-size: 28rpx;
+  font-weight: bold;
+  margin-bottom: 17rpx;
+}
+.servantlistitem image{
+  width: 9.75rpx;
+  height: 17.2rpx;
+}
+.servantlistitem-left{
+  float: left;
+  padding-left: 28rpx;
+}
+.servantlistitem-right{
+  float: right;
+  padding-right: 31rpx;
+}

+ 11 - 0
client/pages/servant/reportList/reportList.axml

@@ -0,0 +1,11 @@
+<view class="common-page-padding servantlistpage">
+<!---服务列表-->
+  <view class="servantlistitem"  a:for="{{reportList}}" onTap="switchMonthReport" data-reportIndex="{{index}}" key="{{index}}">
+     <view class="servantlistitem-left">{{item.reportTime+'月报'}}</view>
+     <view class="servantlistitem-right">
+      <image mode="scaleToFill" src="/image/icon-right.png"/>
+     </view>
+  </view>
+  
+  
+</view>

+ 23 - 0
client/pages/servant/reportList/reportList.js

@@ -0,0 +1,23 @@
+import request from '../../../util/http'
+import apiUrl from '../../../util/apiUrl'
+var app = getApp();
+Page({
+  data: {
+    reportList:[],
+  },
+  onLoad() {
+     console.log(app.globalData);
+     this.setData({
+       reportList:app.globalData.reportList
+     });
+
+  },
+  switchMonthReport(e){
+    let reportIndex=e.target.dataset.reportIndex;
+    app.globalData.reportInfo=this.data.reportList[reportIndex];
+    console.log(app.globalData.reportInfo);
+    my.navigateTo({
+      url: '../monthReport/monthReport'
+    });
+  }
+});

+ 3 - 0
client/pages/servant/reportList/reportList.json

@@ -0,0 +1,3 @@
+{
+  "defaultTitle":"月报列表"
+}

+ 2 - 2
client/pages/servant/servantCenter/servantCenter.axml

@@ -105,11 +105,11 @@
       </view>
    </view>
    <!-- 月报 -->
-    <view class="common-card module-card">
+    <view class="common-card module-card" onTap="switchReportList">
        <view class="module-text">
       <view class="module-title">
       保姆月报
-      <text class="report-tips">服务时间较短,暂未生成~</text>
+      <text class="report-tips"  a:if="{{noReportShow}}">服务时间较短,暂未生成~</text>
       </view>
       <view class="module-detail">服务回顾 发现问题</view>
       </view>

+ 35 - 1
client/pages/servant/servantCenter/servantCenter.js

@@ -31,7 +31,8 @@ Page({
     workDay:'',//工作日
     serviceType:'',//保姆工种
     completeTaskCount:'',
-    totalTaskCount:''
+    totalTaskCount:'',
+    noReportShow:false,//没有月报
   },
   onLoad(query) {
      console.log(query);
@@ -58,6 +59,7 @@ Page({
     this.isChooseSerStanSubject();
     this.selectTodayTaskItem();
     this.getServantNotice();
+    this.selectMonthlyReport();
   },
   // 获取雇佣关系详情
   initCustomerInfo(){
@@ -387,7 +389,39 @@ Page({
          console.log(e);
        }
 
+  },
+   // 获取月报
+
+   selectMonthlyReport(){
+  
+let params={
+        "employRelationNo":app.globalData.employRelationNo,
+        "reportType": '2',
+    }
+     request.httpServicePost(apiUrl.selectMonthlyReportPath,params).then(data=>{
+        console.log('月报信息response');
+      console.log(data);
+      let noReport=(data.length==0)
+          this.setData({
+      noReportShow: noReport,
+    });
+        if(!noReport){
+          app.globalData.reportList=data;
+        }
+
+          }).catch(e=>{
+           console.log(e);
+           
+        })
+
+  },
+  switchReportList(){
+  if(!this.data.noReportShow){
+        my.navigateTo({
+      url: '../reportList/reportList'
+    });
   }
+}
 
 
 

+ 1 - 4
client/pages/servant/servantdetail/servantdetail.acss

@@ -31,10 +31,7 @@
   color: #999999;
   font-size: 14px;
 }
-.cell-type{
-  color: #666666;
-  font-size: 16px;
-}
+
 .nosettingservaent{
   background: #FFFFFF;
   text-align: center;

+ 3 - 1
client/pages/servant/servantlist/servantlist.json

@@ -1 +1,3 @@
-{}
+{
+    "defaultTitle": "选择编辑服务偏好"
+}

+ 2 - 1
client/pages/servant/servantsettings/servantsettings.acss

@@ -1,5 +1,6 @@
 .servant-settings-page{
   background-color: #F3F3F3;
+   padding:0 0 160rpx;
 }
 .servant-setting-header{
   height: 62rpx;
@@ -26,7 +27,7 @@
 .setting-list{
   background: #FFFFFF;
   border-radius: 18px;
-  margin: 25.99rpx 24rpx 20rpx 24rpx;
+  margin: 26rpx 24rpx 30rpx 24rpx;
 }
 .setting-list-title{
   color: #333333;

+ 1 - 1
client/pages/servant/servantsettings/servantsettings.axml

@@ -2,7 +2,7 @@
 <!--服务设置-->
   <view class="servant-setting-header" a:if="{{tips}}">
     <image mode="scaleToFill" src="/image/notice-blue.png" class="notice-style"/>
-    <text onTap="toservantdetail">您可以查看保姆偏好,双向沟通更清晰</text>
+    <text onTap="toservantdetail">服务标准</text>
     <image mode="scaleToFill" src="/image/close-blue.png" class="close-stle" onTap="closeTip"/>
   </view>
   <!--服务列表-->

+ 1 - 1
client/pages/servant/servantsettings/servantsettings.json

@@ -1,3 +1,3 @@
 {
-    "defaultTitle": "服务标准"
+    "defaultTitle": "服务偏好"
 }

+ 19 - 25
client/pages/servant/taskreminder/taskreminder.axml

@@ -1,27 +1,21 @@
+<import-sjs from="../../../util/formateFuc.sjs" name="formate"></import-sjs>
 <view class="tasks-page">
   <!---客户信息-->
-  <view class="tasks-head">
-    <view class="cell-title">
-      <label>王阿姨</label>
-      <view class="cell-right">
-        <image mode="scaleToFill" src="/image/switch-grey.png"/>
-        <label>切换到其他家庭</label>
+ <view class="tasks-head">
+      <view class="cell-title">
+        <label>{{servantName}}</label>
+        <view class="cell-right">
+          <image mode="scaleToFill" src="/image/switch-grey.png"/>
+          <label>切换到其他家庭</label>
+        </view>
+      </view>
+      <view class="cell-list">
+        {{weekday}}
+      </view>
+        <view class="cell-type">
+          保姆工种:<label>{{formate.serviceType(servantTypeValue)}}</label>
+        </view>
       </view>
-    </view>
-    <view class="cell-list">
-      <label>周一▪</label>
-      <label>周二▪</label>
-      <label>周三▪</label>
-      <label>周四▪</label>
-      <label>周五▪</label>
-      <label>周六▪</label>
-      <label>周日</label>
-    </view>
-    <view class="cell-type">
-          保姆工种:
-      <label>钟点工</label>
-    </view>
-  </view>
   <!---一周任务查看器-->
   <view class="tasks-line">
     <view class="common-page-padding tasks-tik">
@@ -51,10 +45,10 @@
       <view a:if="{{isreminds}}" a:for="{{taskList}}" key="{{index}}">
         <view class="tasks-list-item" a:if="{{item.state == 0}}">
           <text> {{item.itemName}}</text>
-          <view class="tasks-item-yes">
+          <view class="tasks-item-yes" onTap="showyes" data-id="{{item.id}}">
             <image mode="scaleToFill" src="/image/icon-yes.png"/>
           </view>
-          <view class="tasks-item-no" onTap="showcancel">
+          <view class="tasks-item-no" onTap="showcancel" data-id="{{item.id}}">
             <image mode="scaleToFill" src="/image/icon-no.png"/>
           </view>
         </view>
@@ -102,7 +96,7 @@
   <modal show="{{showcancelbox}}">
     <view class="cancel-box">
       <text>取消原因</text>
-      <radio-group class="radio-group weui-input">
+      <radio-group class="radio-group weui-input" onChange="swiperChange">
         <label a:for="{{cancellist}}" a:key={{value}}>
           <radio value="{{item.value}}" class="radio" checked="{{item.checked}}"/>{{item.label}}
         </label>
@@ -111,7 +105,7 @@
     <view class="am-modal-buttons--vertical" onTap="hidecnacelbox">
       取消
     </view>
-    <view class="am-modal-buttons--vertical">
+    <view class="am-modal-buttons--vertical" onTap="confirmbox">
       确认选择
     </view>
   </modal>

+ 57 - 4
client/pages/servant/taskreminder/taskreminder.js

@@ -11,7 +11,12 @@ Page({
     showcancelbox: false,
     cancellist: [{ value: '1', label: '任务太多', checked: true }, { value: '2', label: '我不会', checked: false }, { value: '3', label: '任务不详细', checked: false }],
     taskList: [],
-    cost: ""
+    servantName: '',//保姆姓名
+    weekday: '',//日前
+    servantTypeValue: '',//保姆工种,
+    cost: "",
+    taskId: "",
+    incompleteReason: 1
   },
   onLoad() {
     //加载选中的时间
@@ -31,14 +36,36 @@ Page({
       }
     }
     this.setData({
-      datelist: data
+      datelist: data,
+      servantName: app.globalData.servantInfo.employerName,
+      weekday: app.globalData.servantInfo.servantTaskPeriod.workDay,
+      servantTypeValue: app.globalData.servantInfo.servantType
     });
+
+
     //处理时间完成
     this.selectDayTaskItem();
   },
-  showcancel() {
+  showcancel(e) {
     this.setData({
-      showcancelbox: true
+      showcancelbox: true,
+      taskId: e.target.dataset.id
+    });
+    console.log(this.data.taskId);
+  },
+
+  showyes(e) {
+    console.log(e.target.dataset.id);
+    let id = e.target.dataset.id;
+    request.httpServicePost(apiUrl1.servantTaskSubmitPath, { id: id, state: 1 }).then(data => {
+      my.alert({
+        title: '提示',
+        content: '提交完成',
+        buttonText: '确定',
+        success: () => {
+          this.selectDayTaskItem();
+        }
+      });
     });
   },
   hidecnacelbox() {
@@ -147,5 +174,31 @@ Page({
         }
       });
     });
+  },
+
+  swiperChange(e) {
+    console.log(e.detail.value);
+    this.setData({
+      incompleteReason: e.detail.value,
+    });
+  },
+
+  //确定提交任务
+  confirmbox() {
+    let id = this.data.taskId;
+    let incompleteReason = this.data.incompleteReason;
+    request.httpServicePost(apiUrl1.servantTaskSubmitPath, { id: id, state: 2, incompleteReason: incompleteReason }).then(data => {
+      my.alert({
+        title: '提示',
+        content: '提交完成',
+        buttonText: '确定',
+        success: () => {
+          this.setData({
+            showcancelbox: false
+          });
+          this.selectDayTaskItem();
+        }
+      });
+    });
   }
 });

+ 13 - 8
client/util/apiUrl1.js

@@ -3,15 +3,15 @@ let baseService = '/servantappletservice';
 const servantappletservicePath = baseService + '/servantlove/getSubjectWhenFirst';
 //新设置服务标准
 
-const insertNewservantappletservicePath = baseService+'/servantlove/insertNewServantLove';
+const insertNewservantappletservicePath = baseService + '/servantlove/insertNewServantLove';
 
 
 //设置每日任务
-const createDayTaskItem = baseService+'/taskItem/createDayTaskItem';
+const createDayTaskItem = baseService + '/taskItem/createDayTaskItem';
 //通过雇佣关系编号查询已选择每日任务
-const selectChooseDayTaskItem=baseService+'/taskItem/selectChooseDayTaskItem';
+const selectChooseDayTaskItem = baseService + '/taskItem/selectChooseDayTaskItem';
 //编辑每日任务
-const updateDayTaskItem=baseService+'/taskItem/updateDayTaskItem';
+const updateDayTaskItem = baseService + '/taskItem/updateDayTaskItem';
 
 
 
@@ -25,22 +25,27 @@ const selectDayTaskItemPath = baseService + '/servantTask/selectDayTaskItem';
 // 添加保姆今日花销
 const insertDailyCostPath = baseService + '/servantTask/insertDailyCost';
 // 雇主段编辑阿姨偏好
-const updateEmployerLove =baseService+'/servicestandard/updateServiceStandards';
+const updateEmployerLove = baseService + '/servicestandard/updateServiceStandards';
 //雇主端编辑时获取已选择的题目答案
-const getEmployerSubjectWhenEdit = baseService+'/servicestandard/getSubjectWhenEdit';
+const getEmployerSubjectWhenEdit = baseService + '/servicestandard/getSubjectWhenEdit';
 
 
+// 保姆任务提交
+const servantTaskSubmitPath = baseService + '/servantTask/servantTaskSubmit';
+
 
 export default {
   servantappletservicePath,
   insertNewservantappletservicePath,
   createDayTaskItem,
-   selectChooseDayTaskItem,
+  selectChooseDayTaskItem,
   getSubjectWhenEdit,
   selectDayTaskItemPath,
   updateServantLove,
   insertDailyCostPath,
+  servantTaskSubmitPath,
   updateEmployerLove,
   getEmployerSubjectWhenEdit,
-updateDayTaskItem
+  updateDayTaskItem
 }
+