Browse Source

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

# Conflicts:
#	client/util/apiUrl1.js
fuxubing 4 years ago
parent
commit
bb115a17cf
33 changed files with 805 additions and 98 deletions
  1. 3 1
      client/app.json
  2. 8 6
      client/pages/customer/customerCenter/customerCenter.js
  3. 1 1
      client/pages/customer/dailytasks/dailytasks.axml
  4. 5 5
      client/pages/customer/dailytasks/dailytasks.js
  5. 2 2
      client/pages/customer/editDailyTask/editDailyTask.axml
  6. 37 46
      client/pages/customer/editDailyTask/editDailyTask.js
  7. 7 0
      client/pages/customer/monthReport/monthReport.acss
  8. 9 1
      client/pages/customer/monthReport/monthReport.axml
  9. 51 15
      client/pages/customer/monthReport/monthReport.js
  10. 2 2
      client/pages/customer/servantedit/servantedit.js
  11. 3 1
      client/pages/customer/servantedit/servantedit.json
  12. 1 1
      client/pages/customer/servantlist/servantlist.js
  13. 3 3
      client/pages/customer/servantsettings/servantsettings.axml
  14. 11 1
      client/pages/customer/servantsettings/servantsettings.js
  15. 1 1
      client/pages/customer/taskreminder/taskreminder.acss
  16. 1 1
      client/pages/customer/taskreminder/taskreminder.js
  17. 76 0
      client/pages/servant/monthReport/monthReport.acss
  18. 66 0
      client/pages/servant/monthReport/monthReport.axml
  19. 380 0
      client/pages/servant/monthReport/monthReport.js
  20. 7 0
      client/pages/servant/monthReport/monthReport.json
  21. 24 0
      client/pages/servant/reportList/reportList.acss
  22. 11 0
      client/pages/servant/reportList/reportList.axml
  23. 23 0
      client/pages/servant/reportList/reportList.js
  24. 3 0
      client/pages/servant/reportList/reportList.json
  25. 2 2
      client/pages/servant/servantCenter/servantCenter.axml
  26. 35 1
      client/pages/servant/servantCenter/servantCenter.js
  27. 0 1
      client/pages/servant/servantedit/servantedit.js
  28. 3 1
      client/pages/servant/servantlist/servantlist.json
  29. 1 1
      client/pages/servant/servantsettings/servantsettings.axml
  30. 1 1
      client/pages/servant/servantsettings/servantsettings.json
  31. 1 1
      client/pages/servant/taskreminder/taskreminder.acss
  32. 5 1
      client/pages/servant/taskreminder/taskreminder.js
  33. 22 2
      client/util/apiUrl1.js

+ 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": "保姆管家",

+ 8 - 6
client/pages/customer/customerCenter/customerCenter.js

@@ -62,6 +62,7 @@ Page({
  onShow(query){
     console.log(query);
       this.initCustomerInfo();
+       this.selectTodayTaskItem();
       this.getEmployerNotice();
       this.selectMonthlyReport();
   },
@@ -92,14 +93,14 @@ Page({
         });
         // 获取任务设置和服务标准设置
     this.isChooseSerStanSubject();
-    this.selectTodayTaskItem();
+    // this.selectTodayTaskItem();
            
         }else{
-           this.setData({
+          //  this.setData({
             //  unSetServiceModal:true,
             //  noSetSerStan:true,
              noAddTaskShow:true,
-             });
+            //  });
           //  获取服务标准和任务设置的具体情况
           this.isSetServiceAndTask();
         }
@@ -138,7 +139,8 @@ Page({
      request.httpServiceGet(apiUrl.selectTodayTaskItemPath,params).then(data=>{
         console.log(data);
         // 未设置任务
-        if(!data.isSet){
+        if(data.isSet==false){
+          console.log('isSet:false');
             this.setData({
          noAddTaskShow:true,
          noTaskShow:false,
@@ -216,7 +218,7 @@ Page({
              unSetTaskModal:false,
              finishSetModal:true,
              });
-             this.selectTodayTaskItem();//获取任务前三条
+            //  this.selectTodayTaskItem();//获取任务前三条
         }
      
           }).catch(e=>{
@@ -349,7 +351,7 @@ Page({
     });
     // 首次设置完成提交后台完成引导设置
 
-  // this.finishAllSet();
+  this.finishAllSet();
 
     }else{
      

+ 1 - 1
client/pages/customer/dailytasks/dailytasks.axml

@@ -3,7 +3,7 @@
     <view class="common-card dailyitem">
       <view class="cell-title">{{item.categoryName}}</view>
       <view class="daily-list">
-        <view a:for="{{item.TaskItems}}"  a:for-item="dailyitem" class="daily-item {{dailyitem.checked==true ?'daily-item-selected':''}}" a:for-item="dailyitem" a:for-index='sdddd' key="{{index}}" data-id="{{dailyitem.id}}" data-index="{{dailyitem.categoryId}}" onTap="toggleWashinGandnursing">{{dailyitem.itemName}}</view>
+        <view a:for="{{item.TaskItems}}"  a:for-item="dailyitem" class="daily-item {{dailyitem.disabled==true ?'daily-item-selected':''}}" a:for-item="dailyitem" a:for-index='sdddd' key="{{index}}" data-id="{{dailyitem.id}}" data-index="{{dailyitem.categoryId}}" onTap="toggleWashinGandnursing">{{dailyitem.itemName}}</view>
       </view>
     </view>
   </view>

+ 5 - 5
client/pages/customer/dailytasks/dailytasks.js

@@ -23,7 +23,7 @@ Page({
         var that = this;
         for(let i=0;i<dailytasklist.length;i++){
           for(let j=0;j<dailytasklist[i].TaskItems.length;j++){
-            dailytasklist[i].TaskItems[j].checked=false;
+            dailytasklist[i].TaskItems[j].disabled=false;
           }
         }
         this.setData({
@@ -48,10 +48,10 @@ Page({
       if(dailytasklist[i].categoryId==currentIndex){
         for(let j=0;j<dailytasklist[i].TaskItems.length;j++){
           if(dailytasklist[i].TaskItems[j].id==id){
-            if(dailytasklist[i].TaskItems[j].checked){
-              dailytasklist[i].TaskItems[j].checked=false;
+            if(dailytasklist[i].TaskItems[j].disabled){
+              dailytasklist[i].TaskItems[j].disabled=false;
             }else{
-              dailytasklist[i].TaskItems[j].checked=true;
+              dailytasklist[i].TaskItems[j].disabled=true;
             }
           }
         }
@@ -70,7 +70,7 @@ Page({
       let itemIds=[];
       let t=0;
         for(let j=0;j<this.data.allList[i].TaskItems.length;j++){
-          if(this.data.allList[i].TaskItems[j].checked==true){
+          if(this.data.allList[i].TaskItems[j].disabled==true){
             itemIds[t]=this.data.allList[i].TaskItems[j].id;
             t++;
           }

+ 2 - 2
client/pages/customer/editDailyTask/editDailyTask.axml

@@ -1,9 +1,9 @@
 <view class="common-page-padding daily-servant-page">
-  <view a:for="{{allList}}" key="{{index}}">
+  <view a:for="{{selectdailytasklist}}" key="{{index}}">
     <view class="common-card dailyitem">
       <view class="cell-title">{{item.categoryName}}</view>
       <view class="daily-list">
-        <view a:for="{{item.TaskItems}}"  a:for-item="dailyitem" class="daily-item {{dailyitem.checked==true ?'daily-item-selected':''}}" a:for-item="dailyitem" a:for-index='sdddd' key="{{index}}" data-id="{{dailyitem.id}}" data-index="{{dailyitem.categoryId}}" onTap="toggleWashinGandnursing">{{dailyitem.itemName}}</view>
+        <view a:for="{{item.TaskItems}}"  a:for-item="dailyitem" class="daily-item {{dailyitem.choose==1 ?'daily-item-selected':''}}" a:for-item="dailyitem" a:for-index='sdddd' key="{{index}}" data-id="{{dailyitem.itemId}}" data-index="{{dailyitem.categoryId}}" onTap="toggleWashinGandnursing">{{dailyitem.itemName}}</view>
       </view>
     </view>
   </view>

+ 37 - 46
client/pages/customer/editDailyTask/editDailyTask.js

@@ -4,7 +4,7 @@ import apiUrl1 from '../../../util/apiUrl1'
 var app = getApp();
 Page({
   data: {
-    allList: []
+    selectdailytasklist: [],
   },
   onLoad(options) {
     console.log(options);
@@ -14,24 +14,18 @@ Page({
   },
   //数据加载
   initDailyTaskList() {
-    let params = {
-    }
-    request.httpServiceGet(apiUrl.getDailyTaskList, params).then(data => {
-      if (data.length > 0) {
-        //添加选中的状态列
-        let dailytasklist = data;
-        var that = this;
-        for(let i=0;i<dailytasklist.length;i++){
-          for(let j=0;j<dailytasklist[i].TaskItems.length;j++){
-            dailytasklist[i].TaskItems[j].checked=false;
-          }
-        }
-        this.setData({
-          allList: dailytasklist
-        });
+  let employRelationNo = app.globalData.employRelationNo;
+  let params = {employRelationNo:employRelationNo}
+  request.httpServiceGet(apiUrl1.selectChooseDayTaskItem, params).then(data => {
+    if (data.length > 0) {
+      //添加选中的状态列
+      let selectdailytasklist = data;
+      this.setData({
+        selectdailytasklist: selectdailytasklist
+      });
       } else {
         this.setData({
-          allList: []
+          selectdailytasklist: []
         });
       }
     }).catch(e => {
@@ -43,51 +37,48 @@ Page({
   toggleWashinGandnursing(e) {
     let currentIndex= e.target.dataset.index;//类型ID
     let id = e.target.dataset.id;//选中当前ID
-    let dailytasklist=this.data.allList;
+    let dailytasklist=this.data.selectdailytasklist;
     for(let i=0;i<dailytasklist.length;i++){
       if(dailytasklist[i].categoryId==currentIndex){
         for(let j=0;j<dailytasklist[i].TaskItems.length;j++){
-          if(dailytasklist[i].TaskItems[j].id==id){
-            if(dailytasklist[i].TaskItems[j].checked){
-              dailytasklist[i].TaskItems[j].checked=false;
+          if(dailytasklist[i].TaskItems[j].itemId==id){
+            if(dailytasklist[i].TaskItems[j].choose==1){
+              dailytasklist[i].TaskItems[j].choose=0;
             }else{
-              dailytasklist[i].TaskItems[j].checked=true;
+              dailytasklist[i].TaskItems[j].choose=1;
             }
           }
         }
       }
     }
     this.setData({
-          allList: dailytasklist
+          selectdailytasklist: dailytasklist
         });
-
   },
   //提交数据
   dailytasksdeit() {
   let employRelationNo = app.globalData.employRelationNo;
   let dailytasklist=[];
-    for(let i=0;i<this.data.allList.length;i++){
-      let itemIds=[];
-      let t=0;
-        for(let j=0;j<this.data.allList[i].TaskItems.length;j++){
-          if(this.data.allList[i].TaskItems[j].checked==true){
-            itemIds[t]=this.data.allList[i].TaskItems[j].id;
-            t++;
+    for(let i=0;i<this.data.selectdailytasklist.length;i++){
+        let items=[];
+        for(let j=0;j<this.data.selectdailytasklist[i].TaskItems.length;j++){
+          if(this.data.selectdailytasklist[i].TaskItems[j].choose==1){
+            items.push({itemId:this.data.selectdailytasklist[i].TaskItems[j].itemId,choose:1});
+          }else{
+            items.push({itemId:this.data.selectdailytasklist[i].TaskItems[j].itemId,choose:0});
           }
         }
-        if(itemIds.length>0){
-          dailytasklist.push({categoryId:this.data.allList[i].categoryId,itemIds:itemIds});
-        }
+        dailytasklist.push({categoryId:this.data.selectdailytasklist[i].categoryId,itemIds:items});
     }
-    request.httpServicePost(apiUrl1.createDayTaskItem,{employRelationNo:employRelationNo,taskItems:dailytasklist}).then(data=>{
-      my.alert({
-        title: '提示',
-        content: '保存完成',
-        buttonText: '确定',
-        success: () => {
-          my.navigateBack();
-        }
-      } );
-    });
-  },
-});
+  request.httpServicePost(apiUrl1.updateDayTaskItem,{employRelationNo:employRelationNo,taskItems:dailytasklist}).then(data=>{
+    my.alert({
+      title: '提示',
+      content: '保存完成',
+      buttonText: '确定',
+      success: () => {
+        my.navigateBack();
+      }
+    } );
+  });
+},
+});

+ 7 - 0
client/pages/customer/monthReport/monthReport.acss

@@ -67,3 +67,10 @@
 .shape-chart5{
   padding:80rpx 40rpx 80rpx;
 }
+.no-chart-tip{
+  color: #fff;
+  font-size: 28rpx;
+  line-height: 60rpx;
+  text-align: center;
+  padding:60rpx 40rpx 120rpx ;
+}

+ 9 - 1
client/pages/customer/monthReport/monthReport.axml

@@ -18,7 +18,9 @@
           您的保姆本月服务花销共计
           <text>{{expendTotal}}</text> 元
      </view>
-     <view class="common-data-wrapper block-data-wrapper">
+
+     <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>
@@ -51,6 +53,12 @@
                <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"/> -->

+ 51 - 15
client/pages/customer/monthReport/monthReport.js

@@ -18,6 +18,7 @@ Page({
     expendTotal: '',
     taskNum: '',
     reportInfo:'',
+    chartShow:true,
   },
   onLoad() {
     let reportInfo=app.globalData.reportInfo;
@@ -25,11 +26,22 @@ Page({
     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.serviceDay,
+      serviceDay:serviceTime.serviceDays,
       percentTop:serviceTime.serviceQuality,
       expendTotal:reportInfo.expenses
     })
@@ -83,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',
@@ -146,7 +159,15 @@ Page({
   onInitChart2(F2, config) {
     //  本月任务完成情况
     const chart = new F2.Chart(config);
-    const data = JSON.parse(this.data.reportInfo.finishInfo);
+     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);
@@ -156,7 +177,7 @@ Page({
     chart.axis(false);
     chart
       .interval()
-      .position('a*proportion')
+      .position('const*percent')
       .color('name', [
         '#EB6F49',
         '#00D98B',
@@ -172,14 +193,14 @@ Page({
       activeShape: true,
       label1: function label1(data) {
         return {
-          text: data.taskName,
+          text: data.name,
           fill: '#7ED4F6',
           fontWeight: 'bold'
         };
       },
       label2: function label2(data) {
         return {
-          text: data.percentage,
+          text: data.percent+'%',
           fill: '#7ED4F6'
         };
       },
@@ -259,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,
@@ -277,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;
@@ -287,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

+ 2 - 2
client/pages/customer/servantedit/servantedit.js

@@ -15,7 +15,7 @@ Page({
   loadpage(subtypeNo){
     let employRelationNo = app.globalData.employRelationNo;
     let params = {employRelationNo:employRelationNo}
-    request.httpServiceGet(apiUrl.getSubjectWhenEdit, params).then(data => {
+    request.httpServiceGet(apiUrl.getEmployerSubjectWhenEdit, params).then(data => {
       if (data.length > 0) {
         //加载全部的类别
         let subjectList={};
@@ -56,7 +56,7 @@ Page({
       }
     }
       //console.log(servantselectedlist);
-      request.httpServicePost(apiUrl.updateServantLove,{employRelationNo:employRelationNo,subjectList:servantselectedlist,subjectType:"SN000002"}).then(data=>{
+      request.httpServicePost(apiUrl.updateEmployerLove,{employRelationNo:employRelationNo,subjectList:servantselectedlist,subjectType:"SN000001"}).then(data=>{
         my.alert({
           title: '提示',
           content: '设置完成',

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

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

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

@@ -10,7 +10,7 @@ Page({
   },
   loadpage(){
     let params = {}
-    request.httpServiceGet(apiUrl.getSubjectWhenEdit, params).then(data => {
+    request.httpServiceGet(apiUrl.getEmployerSubjectWhenEdit, params).then(data => {
       if (data.length > 0) {
         //添加选中的状态列
         let servantlist = data;

+ 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;

+ 1 - 1
client/pages/customer/taskreminder/taskreminder.acss

@@ -88,7 +88,7 @@
 .tasks-list{
   margin-top: 56rpx;
   background: #FFFFFF;
-  border-radius: 18px;
+  border-radius: 18rpx;
   margin-left: 23rpx;
   margin-right: 24rpx;
   padding-top: 35rpx;

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

@@ -106,6 +106,7 @@ Page({
       showchangetime: true,
     });
   },
+  //日历选中
   handleSelect(e) {
       console.log(e[0]);
   },
@@ -162,5 +163,4 @@ Page({
 
     })
   },
-
 });

+ 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'
+    });
   }
+}
 
 
 

+ 0 - 1
client/pages/servant/servantedit/servantedit.js

@@ -25,7 +25,6 @@ Page({
               console.log(subjectList);
           }
         }
-
         this.setData({
           servanteditlist: subjectList
         });

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

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

+ 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": "服务偏好"
 }

+ 1 - 1
client/pages/servant/taskreminder/taskreminder.acss

@@ -88,7 +88,7 @@
 .tasks-list{
   margin-top: 56rpx;
   background: #FFFFFF;
-  border-radius: 18px;
+  border-radius: 18rpx;
   margin-left: 23rpx;
   margin-right: 24rpx;
   padding-top: 35rpx;

+ 5 - 1
client/pages/servant/taskreminder/taskreminder.js

@@ -122,7 +122,11 @@ Page({
   handleSelect(e) {
     console.log(e[0]);
   },
-
+onSelectHasDisableDate() {
+    my.alert({
+      content: 'SelectHasDisableDate',
+    });
+  },
   // 查询保姆每日任务
   selectDayTaskItem() {
     let params = {

+ 22 - 2
client/util/apiUrl1.js

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