Преглед на файлове

长链接,上线版本

guojy преди 2 години
родител
ревизия
6374f63f5e
променени са 97 файла, в които са добавени 3625 реда и са изтрити 225 реда
  1. 19 0
      .mini-ide/compileMode.json
  2. 4 0
      .mini-ide/project-ide.json
  3. 70 0
      Component/ReviewSelect/ReviewSelect.acss
  4. 21 0
      Component/ReviewSelect/ReviewSelect.axml
  5. 103 0
      Component/ReviewSelect/ReviewSelect.js
  6. 3 0
      Component/ReviewSelect/ReviewSelect.json
  7. 15 0
      Component/selectSectionStaff/selectSectionStaff.acss
  8. 8 4
      Component/selectSectionStaff/selectSectionStaff.axml
  9. 15 1
      Component/selectSectionStaff_tow/selectSectionStaff_tow.acss
  10. 3 1
      Component/selectSectionStaff_tow/selectSectionStaff_tow.axml
  11. 7 6
      app.acss
  12. 2 2
      app.js
  13. 8 1
      app.json
  14. 0 0
      image/approval_process.svg
  15. BIN
      image/fuhe.png
  16. BIN
      image/pj.png
  17. 9 0
      mintty.exe.stackdump
  18. 18 0
      pages/arLogin/arLogin.acss
  19. 12 0
      pages/arLogin/arLogin.axml
  20. 4 0
      pages/arLogin/arLogin.js
  21. 3 0
      pages/arLogin/arLogin.json
  22. 1 1
      pages/exchange/prizeDetail/prizeDetail.axml
  23. 13 1
      pages/exchange/prizeDetail/prizeDetail.js
  24. 6 6
      pages/statistics/assaign/assaign.axml
  25. 4 3
      pages/statistics/assaign_set/assaign_set.axml
  26. 59 0
      pages/statistics/awardDetail/awardDetail.acss
  27. 33 0
      pages/statistics/awardDetail/awardDetail.axml
  28. 106 0
      pages/statistics/awardDetail/awardDetail.js
  29. 1 0
      pages/statistics/awardDetail/awardDetail.json
  30. 47 0
      pages/statistics/awardJl/awardJl.acss
  31. 47 0
      pages/statistics/awardJl/awardJl.axml
  32. 156 0
      pages/statistics/awardJl/awardJl.js
  33. 8 0
      pages/statistics/awardJl/awardJl.json
  34. 2 2
      pages/statistics/glz_execute/glz_execute.axml
  35. 86 23
      pages/statistics/glz_execute/glz_execute.js
  36. 93 0
      pages/statistics/grantAward/grantAward.acss
  37. 66 0
      pages/statistics/grantAward/grantAward.axml
  38. 221 0
      pages/statistics/grantAward/grantAward.js
  39. 8 0
      pages/statistics/grantAward/grantAward.json
  40. 8 1
      pages/statistics/index/index.js
  41. 16 0
      pages/statistics/integralEvent/integralEvent.acss
  42. 9 3
      pages/statistics/integralEvent/integralEvent.axml
  43. 21 5
      pages/statistics/integralEvent/integralEvent.js
  44. 2 1
      pages/statistics/integralEvent/integralEvent.json
  45. 1 1
      pages/statistics/integralEventTwo/integralEventTwo.acss
  46. 2 2
      pages/statistics/integralEventTwo/integralEventTwo.axml
  47. 43 3
      pages/statistics/integralEventTwo/integralEventTwo.js
  48. 1 1
      pages/statistics/jfDetail/jfDetail.acss
  49. 2 2
      pages/statistics/jfDetail/jfDetail.axml
  50. 204 0
      pages/statistics/myGrant - 副本/myGrant.acss
  51. 40 0
      pages/statistics/myGrant - 副本/myGrant.axml
  52. 87 0
      pages/statistics/myGrant - 副本/myGrant.js
  53. 6 0
      pages/statistics/myGrant - 副本/myGrant.json
  54. 1 2
      pages/statistics/myGrant/myGrant.js
  55. 14 2
      pages/statistics/my_PrizeBuckle/my_PrizeBuckle.acss
  56. 96 53
      pages/statistics/my_PrizeBuckle/my_PrizeBuckle.axml
  57. 25 9
      pages/statistics/my_PrizeBuckle/my_PrizeBuckle.js
  58. 13 1
      pages/statistics/my_apply/my_apply.acss
  59. 15 4
      pages/statistics/my_apply/my_apply.axml
  60. 20 5
      pages/statistics/my_apply/my_apply.js
  61. 1 1
      pages/statistics/my_sp/my_sp.js
  62. 4 3
      pages/statistics/offerAreward/offerAreward.axml
  63. 5 8
      pages/statistics/offerAreward_set/offerAreward_set.axml
  64. 1 1
      pages/statistics/openPerform/openPerform.axml
  65. 1 1
      pages/statistics/prizeBuckleDetail/prizeBuckleDetail.axml
  66. 1 1
      pages/statistics/taskSList/taskSList.axml
  67. 8 1
      pages/statistics/taskSList/taskSList.js
  68. 1 1
      pages/statistics/workDetail/workDetail.js
  69. 2 1
      pages/workbench/apply/apply.axml
  70. 9 1
      pages/workbench/apply/apply.js
  71. 2 2
      pages/workbench/approval_batch/approval_batch.js
  72. 7 7
      pages/workbench/approve/approve.axml
  73. 1 2
      pages/workbench/approve/approve.js
  74. 1 1
      pages/workbench/index/index.acss
  75. 9 5
      pages/workbench/index/index.axml
  76. 48 17
      pages/workbench/index/index.js
  77. 10 10
      pages/workbench/jk_B/jk_B.axml
  78. 9 1
      pages/workbench/jk_B/jk_B.js
  79. 2 2
      pages/workbench/my_approve/my_approve.axml
  80. 3 3
      pages/workbench/prize_buckle/prize_buckle.axml
  81. 46 3
      pages/workbench/prize_buckle/prize_buckle.js
  82. 180 0
      pages/workbench/review/review.acss
  83. 144 0
      pages/workbench/review/review.axml
  84. 420 0
      pages/workbench/review/review.js
  85. 7 0
      pages/workbench/review/review.json
  86. 150 0
      pages/workbench/reviewDetail/reviewDetail.acss
  87. 126 0
      pages/workbench/reviewDetail/reviewDetail.axml
  88. 216 0
      pages/workbench/reviewDetail/reviewDetail.js
  89. 7 0
      pages/workbench/reviewDetail/reviewDetail.json
  90. 53 1
      pages/workbench/statistics_B/statistics_B.acss
  91. 12 1
      pages/workbench/statistics_B/statistics_B.axml
  92. 4 1
      pages/workbench/statistics_B/statistics_B.js
  93. 65 0
      pages/workbench/tZpoint/tZpoint.acss
  94. 31 0
      pages/workbench/tZpoint/tZpoint.axml
  95. 122 0
      pages/workbench/tZpoint/tZpoint.js
  96. 3 0
      pages/workbench/tZpoint/tZpoint.json
  97. 7 4
      utils/websocket.js

+ 19 - 0
.mini-ide/compileMode.json

@@ -89,6 +89,25 @@
       "title": "使用指南",
       "page": "pages/workbench/noticeDetailTow/noticeDetailTow",
       "pageQuery": "id=60&index=0"
+    },
+    {
+      "title": "奖票详情",
+      "page": "pages/statistics/awardDetail/awardDetail",
+      "pageQuery": "id=73992"
+    },
+    {
+      "title": "我的奖票",
+      "page": "pages/statistics/myGrant/myGrant",
+      "pageQuery": "id=73992",
+      "update": false
+    },
+    {
+      "title": "发放奖票",
+      "page": "pages/statistics/grantAward/grantAward"
+    },
+    {
+      "title": "授权登录",
+      "page": "pages/arLogin/arLogin"
     }
   ]
 }

+ 4 - 0
.mini-ide/project-ide.json

@@ -0,0 +1,4 @@
+{
+  "ignoreHttpDomainCheck": true,
+  "ignoreWebViewDomainCheck": true
+}

+ 70 - 0
Component/ReviewSelect/ReviewSelect.acss

@@ -0,0 +1,70 @@
+.all-date{
+  overflow: hidden;
+  height: 100vh;
+  position: fixed;
+  left: 0;
+  right:0;
+  top:80rpx;
+  z-index: 5;
+  /* background-color: rgba(0,0,0,.7); */
+}
+.staff-header{
+  background-color: #fff;
+  box-shadow:inset 0px 0px 5px #ccc;
+  padding-top: 28rpx;
+  margin-top: 0rpx;
+  transform: translateY(-100%);
+    position: fixed;
+  left: 0;
+  right: 0;
+  z-index: 8;
+}
+
+.staff-btn view{
+  text-align: center;
+  padding: 20rpx 0;
+}
+.staff-btn view:nth-child(1){
+  background-color: #f1f1f1;
+}
+.staff-btn view:nth-child(2){
+  background-color: #26a2ff;
+  color: #fff;
+}
+
+.sx-ul{
+  width: 100%;
+  background-color: #fff;
+  height: 600rpx;
+  box-sizing: border-box;
+}
+.rule-title{
+  margin-bottom: 20rpx;
+  padding:0 28rpx;
+}
+.rule-item{
+  margin-bottom: 20rpx;
+}
+.ruleGe{
+  background: #f5f7fa;
+  padding: 16rpx;
+  font-size: 28rpx;
+  width: 22%;
+  text-align: center;
+  box-sizing: border-box;
+  margin: 0rpx  1.5%  20rpx 1.5%;
+}
+.rule-all-text{
+  font-size: 28rpx;
+  color: #999;
+  position: relative;
+  right: 10rpx;
+  bottom: 5rpx;
+}
+.rule-items{
+  padding: 0 14rpx;
+}
+.ruleActive{
+    color: #26a2ff!important;
+    background: #26a2ff33!important;
+}

+ 21 - 0
Component/ReviewSelect/ReviewSelect.axml

@@ -0,0 +1,21 @@
+<view class="all-date">
+  <view class="data-tier" catchTap="onClose"></view>
+  <view class="staff-header {{isShow?'showPop':''}}">
+    <scroll-view class="sx-ul" scroll-y="{{true}}">
+      <view a:for="{{sxArr}}" class="rule-item">
+        <view class="flex-box flex-v-ce rule-title">
+          <view class="flex-1">{{item.name}}</view>
+        </view>
+        <view class="flex-box flex-d-wrap rule-items" a:if="{{item.child.length>0}}">
+          <view catchTap="ruleActive" data-index="{{index}}" data-indexChild="{{idx}}" class="{{itemName.checked==true? 'ruleActive':''}} ruleGe font-flex-word" a:for="{{item.child}}" a:for-index="idx" a:for-item="itemName">{{itemName.name}}</view>
+        </view>
+        <view style="text-align: center;font-size:22rpx;" class="fontColorD" a:else>暂无相关规则</view>
+      </view>
+    </scroll-view>
+    <view class="flex-box staff-btn">
+      <view class="flex-1" catchTap="onClose">取消</view>
+      <view class="flex-1" catchTap="onConfirm">确定</view>
+    </view>
+  </view>
+   <view class="meng" catchTap="onClose"></view>
+</view>

+ 103 - 0
Component/ReviewSelect/ReviewSelect.js

@@ -0,0 +1,103 @@
+var app = getApp()
+var that;
+Component({
+  mixins: [],
+  data: {
+    isShow: false,
+
+    sxArr: [
+      {
+        name: '复核状态',
+        child: [
+          { name: "通过", code: "1", checked: true },
+          { name: "待复核", code: "0", checked: false },
+          { name: "不通过", code: "2", checked: false },
+        ],
+      },
+      {
+        name: '积分分类',
+        child: [
+          { name: "全部", code: "0", checked: true },
+          { name: "B分", code: "3", checked: false },
+          { name: "A分", code: "2", checked: false },
+        ],
+      }
+    ],
+    sxArr2: [
+      {
+        name: '人员',
+        child: [
+          { name: "通过", code: "1", checked: false },
+          { name: "待复核", code: "0", checked: false },
+          { name: "不通过", code: "2", checked: false },
+        ],
+      },
+      {
+        name: '积分分类',
+        child: [
+          { name: "全部", code: "0", checked: false },
+          { name: "B分", code: "3", checked: false },
+          { name: "A分", code: "2", checked: false },
+        ],
+      }
+    ]
+  },
+  props: {
+    onConfirm: (data) => console.log(data),
+    onClose: (data) => console.log(data),
+    defaultSx:['1','0'],
+  },
+  didMount() {
+    that = this;
+    var sxArr=this.data.sxArr;
+    sxArr.map(item=>{
+        item.child.map(item2=>{
+          item2.checked=false;
+          if(item.name=='复核状态'&&this.props.defaultSx[0]==item2.code){
+            item2.checked=true;
+          }
+          if(item.name=='积分分类'&&this.props.defaultSx[1]==item2.code){
+            item2.checked=true;
+          }
+        })
+    })
+    this.setData({ isShow: this.props.isShow,sxArr:sxArr })
+  },
+  didUpdate() { },
+  didUnmount() { },
+  methods: {
+    //单
+    ruleActive(e) {
+      var index = e.target.dataset.index;
+      var sxArrItem = `sxArr[${index}].child`;
+      this.setData({
+        [sxArrItem]: this.data.sxArr2[index].child
+      })
+      var indexChild = e.target.dataset.indexChild;
+      var isChecked = this.data.sxArr[index].child[indexChild].checked;
+      var elem = `sxArr[${index}].child[${indexChild}].checked`;
+      this.setData({
+        [elem]: !isChecked
+      })
+    },
+    onConfirm() {
+      var sxArr = this.data.sxArr;
+      var arr = [];
+      sxArr.forEach(item => {
+        if (item.child.length > 0) {
+          item.child.forEach((a) => {
+            if (a.checked == true) {
+              arr.push(a.code);
+            }
+          })
+        }
+      });
+      this.props.onConfirm(arr);
+      this.props.onClose();
+    },
+    //关闭
+    onClose(e) {
+      this.props.onClose();
+    },
+  },
+});

+ 3 - 0
Component/ReviewSelect/ReviewSelect.json

@@ -0,0 +1,3 @@
+{
+  "component": true
+}

+ 15 - 0
Component/selectSectionStaff/selectSectionStaff.acss

@@ -1,4 +1,19 @@
 
+.img-name{
+  width: 70rpx;
+  height: 70rpx;
+  border-radius: 100%;
+  background: #26A2FF;
+  color: #fff;
+  text-align: center;
+  line-height: 70rpx;
+  font-size: 28rpx;
+}
+.img-url{
+  width: 70rpx;
+  height: 70rpx;
+  border-radius: 100%;
+}
 .all{
   background-color: #fff;
   height: 100%;

+ 8 - 4
Component/selectSectionStaff/selectSectionStaff.axml

@@ -1,6 +1,6 @@
 <view class="all">
-  <view class="close">
-      <image mode="scaleToFill" catchTap="onClose"  src="../../../image/close.png"/>
+  <view class="close" catchTap="onClose">
+      <image mode="scaleToFill"   src="../../../image/close.png"/>
   </view>
   <form onReset="onReset">
     <view class="search flex-box flex-v-ce">
@@ -35,14 +35,18 @@
       </view>
       <view a:if="{{userList.length>0&&isAll&&item.name.indexOf(keyVal)>= 0}}" a:for="{{userList}}" class="flex-box flex-v-ce userItem">
           <label class="flex-box flex-v-ce flex-1">
-            <img-box name="{{item.name}}" imgUrl="{{item.img_url}}" height="70rpx" width="70rpx"></img-box>
+            <image a:if="{{item.img_url}}" class="img-url" mode="scaleToFill" src="{{item.img_url}}"/>
+            <view class="img-name" a:else>{{item.name}}</view>
+            <!-- <img-box name="{{item.name}}" imgUrl="{{item.img_url}}" height="70rpx" width="70rpx"></img-box> -->
             <text style="margin-left:20rpx;" class="flex-1">{{item.name}}</text>
             <checkbox onChange="radioChange" data-index="{{index}}" data-item="{{item}}" checked="{{item.checked}}" name="{{item.id}}"></checkbox>
           </label>
       </view>
       <view a:if="{{userList.length>0&&!isAll&&item.name.indexOf(keyVal)>= 0}}" a:for="{{userList}}" class="flex-box flex-v-ce userItem">
           <view class="{{item.checked? 'active':''}} flex-box flex-v-ce flex-1" catchTap="radioChange" data-index="{{index}}" data-item="{{item}}">
-            <img-box name="{{item.name}}" imgUrl="{{item.img_url}}" height="70rpx" width="70rpx"></img-box>
+            <image a:if="{{item.img_url}}" class="img-url" mode="scaleToFill" src="{{item.img_url}}"/>
+            <view class="img-name" a:else>{{item.name}}</view>
+            <!-- <img-box name="{{item.name}}" imgUrl="{{item.img_url}}" height="70rpx" width="70rpx"></img-box> -->
             <text style="margin-left:20rpx;" class="flex-1">{{item.name}}</text>
             <view class="radio_"></view>
           </view>

+ 15 - 1
Component/selectSectionStaff_tow/selectSectionStaff_tow.acss

@@ -1,4 +1,18 @@
-
+.img-name{
+  width: 70rpx;
+  height: 70rpx;
+  border-radius: 100%;
+  background: #26A2FF;
+  color: #fff;
+  text-align: center;
+  line-height: 70rpx;
+  font-size: 28rpx;
+}
+.img-url{
+  width: 70rpx;
+  height: 70rpx;
+  border-radius: 100%;
+}
 .all{
   background-color: #fff;
   height: 100%;

+ 3 - 1
Component/selectSectionStaff_tow/selectSectionStaff_tow.axml

@@ -29,7 +29,9 @@
 
       <view a:if="{{item.name.indexOf(keyVal)>= 0}}" class="flex-box flex-v-ce userItem" a:for="{{userList}}" a:key="{{index}}">
         <view class="{{item.checked? 'active':''}} flex-box flex-v-ce flex-1" catchTap="bindtap1" data-index="{{index}}" data-item="{{item}}">
-          <img-box name="{{item.name}}" imgUrl="{{item.img_url}}" height="70rpx" width="70rpx"></img-box>
+          <!-- <img-box name="{{item.name}}" imgUrl="{{item.img_url}}" height="70rpx" width="70rpx"></img-box> -->
+          <image a:if="{{item.img_url}}" class="img-url" mode="scaleToFill" src="{{item.img_url}}"/>
+          <view class="img-name" a:else>{{item.name}}</view>
           <text style="margin-left:20rpx;" class="flex-1">{{item.name}}</text>
           <view class="radio_"></view>
         </view>

+ 7 - 6
app.acss

@@ -212,6 +212,7 @@ text {
 	right: 10rpx;
 	width: 100rpx;
 	height: 100rpx;
+  z-index: 2;
 	border-radius: 50%;
 	background: #fff;
 	text-align: center;
@@ -240,7 +241,7 @@ text {
 .redBox {
 	border-radius: 6rpx;
 	background: rgba(245, 108, 108, .1);
-	color: #F56C6C;
+	color: #F56C6C !important;
 	font-size: 28rpx;
 	padding: 0 6rpx;
 }
@@ -248,7 +249,7 @@ text {
 .greenBox {
 	border-radius: 6rpx;
 	background: rgba(103, 194, 58, .1);
-	color: #67C23A;
+	color: #67C23A !important;
 	font-size: 28rpx;
 	padding: 0 6rpx;
 }
@@ -256,7 +257,7 @@ text {
 .yellowBox {
 	border-radius: 6rpx;
 	background: rgba(255, 204, 0, .1);
-	color: #FFC910;
+	color: #FFC910 !important;
 	font-size: 28rpx;
 	padding: 0 6rpx;
 }
@@ -264,7 +265,7 @@ text {
 .orangeBox {
 	border-radius: 6rpx;
 	background: rgba(230, 162, 60, .1);
-	color: #FF9600;
+	color: #FF9600 !important;
 	font-size: 28rpx;
 	padding: 0 6rpx;
 }
@@ -272,7 +273,7 @@ text {
 .blueBox {
 	border-radius: 6rpx;
 	background: rgba(38, 162, 255, .1);
-	color: #26A2FF;
+	color: #26A2FF !important;
 	font-size: 28rpx;
 	padding: 0 6rpx;
 }
@@ -280,7 +281,7 @@ text {
 .textBox {
 	border-radius: 6rpx;
 	background: rgba(48, 49, 51, .1);
-	color: #303133;
+	color: #303133 !important;
 	font-size: 28rpx;
 	padding: 0 6rpx;
 }

+ 2 - 2
app.js

@@ -273,8 +273,8 @@ App({
                 that.globalData.token = token;
                 that.globalData.userData = user;
                 var getIsStart = dd.getStorageSync({ key: 'isStart' });//判断是否需要打开引导页
-                // console.log(JSON.stringify(user));
-                // that.getUserList();//缓存人员列表
+                console.log(JSON.stringify(user));
+                that.getUserList();//缓存人员列表
                 if (isStart && !getIsStart.data&&isShowStart) {//判断是否需要打开引导
                   dd.reLaunch({
                     url: '../start/start'

+ 8 - 1
app.json

@@ -11,6 +11,9 @@
     "pages/workbench/jk_B/jk_B",
     "pages/workbench/apply/apply",
     "pages/workbench/prize_buckle/prize_buckle",
+    "pages/workbench/review/review",
+    "pages/workbench/reviewDetail/reviewDetail",
+    "pages/workbench/tZpoint/tZpoint",
     "pages/workbench/my_approve/my_approve",
     "pages/workbench/approveDetail/approveDetail",
     "pages/statistics/my_PrizeBuckle/my_PrizeBuckle",
@@ -80,7 +83,11 @@
     "pages/deploy/serveMore/serveMore",
     "pages/deploy/yuY/yuY",
     "pages/deploy/webView/webView",
-    "pages/statistics/reviewsList/reviewsList"
+    "pages/statistics/reviewsList/reviewsList",
+    "pages/statistics/grantAward/grantAward",
+    "pages/statistics/awardJl/awardJl",
+    "pages/statistics/awardDetail/awardDetail",
+    "pages/arLogin/arLogin"
   ],
   "window": {
     "defaultTitle": "功道云",

Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
image/approval_process.svg


BIN
image/fuhe.png


BIN
image/pj.png


+ 9 - 0
mintty.exe.stackdump

@@ -0,0 +1,9 @@
+Exception: STATUS_ACCESS_VIOLATION at rip=0010041EFC7
+rax=0000000000000000 rbx=000000080009E430 rcx=0000000000024520
+rdx=00000001004C5E00 rsi=0000000000000000 rdi=0000000000000000
+r8 =0000000000000000 r9 =00000000FFFFFFFF r10=00000000FFFFFFFF
+r11=0000000000000000 r12=0000000000000000 r13=0000000000000000
+r14=000000080009E430 r15=0000000000000000
+rbp=0000000000000001 rsp=00000000FFFFC0A0
+program=C:\Program Files\Git\usr\bin\mintty.exe, pid 267, thread main
+cs=0033 ds=002B es=002B fs=0053 gs=002B ss=002B

+ 18 - 0
pages/arLogin/arLogin.acss

@@ -0,0 +1,18 @@
+page {
+	background: #fff;
+}
+
+.initImg{
+  width: 200rpx;
+  height: 200rpx;
+  margin-top: 1.6rem;
+}
+.footer{
+  position: fixed;
+  left: 0;
+  right: 0;
+  bottom: 1rem;
+  z-index: 99;
+  text-align: center;
+  font-size: 0.3rem;
+}

+ 12 - 0
pages/arLogin/arLogin.axml

@@ -0,0 +1,12 @@
+<view>
+  <view class="noData" style="text-align:center">
+    <image mode="scaleToFill" src="../../image/logo.png" class="initImg"/>
+  </view>
+  <view class="flex-box-v flex-center-center fontColorC"  style="font-size:28rpx;margin:0.4rem 0">
+    <text>网页版[功道云积分制]登录确认</text>
+    <text>请确认使用本人账号登录</text>
+  </view>
+  <button type="primary" style="margin:0 0.4rem;">授权登录</button>
+
+  <view class="fontColorC footer">取消登录</view>
+</view>

+ 4 - 0
pages/arLogin/arLogin.js

@@ -0,0 +1,4 @@
+Page({
+  data: {},
+  onLoad() {},
+});

+ 3 - 0
pages/arLogin/arLogin.json

@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}

+ 1 - 1
pages/exchange/prizeDetail/prizeDetail.axml

@@ -43,7 +43,7 @@
     </view>
 
   </view>
-  <view class="footer" a:if="{{is&&detail.status==0}}">
+  <view class="footer" a:if="{{is&&detail.status==0&&isShowYy}}">
       <button size="default" type="primary" loading="{{disabled}}" disabled="{{disabled}}" catchTap="openText">发放</button>
   </view>
   

+ 13 - 1
pages/exchange/prizeDetail/prizeDetail.js

@@ -7,7 +7,8 @@ Page({
     is: true,//是否是发放员进来
     disabled: false,
     sn:'',
-    image:''
+    image:'',
+    isShowYy:false,
   },
   onLoad(e) {
     that = this;
@@ -18,6 +19,7 @@ Page({
     if (e.is) {
       this.setData({ is: false })
     }
+    console.log(e)
   },
   showImg(e) {
     var url = e.target.dataset.url
@@ -29,10 +31,20 @@ Page({
   onShow() {
     if (app.globalData.userData) {
       that.getData();
+      app.globalData.userData.employee_detail.role_list.forEach(item=>{
+        if(item.name=='admin'||item.name=='creator'|| item.name == 'point_manager'){
+          this.setData({ isShowYy: true })
+        }
+      })
     } else {
       app.login(app.globalData.corpId, function (is) {
         if (is) {
           that.getData();
+          app.globalData.userData.employee_detail.role_list.forEach(item=>{
+            if(item.name=='admin'||item.name=='creator'|| item.name == 'point_manager'){
+              this.setData({ isShowYy: true })
+            }
+          })
         } else {
           dd.reLaunch({
             url: '../../noJurisdiction/noJurisdiction'

+ 6 - 6
pages/statistics/assaign/assaign.axml

@@ -13,7 +13,7 @@
         <image mode="scaleToFill" src="../../../image/right.png" class="rightImg"/>
       </view> -->
       <view class="li">
-        <textarea class="textarea" maxlength="20" value="{{items.task_name}}" onInput="bindTextAreaBlur" placeholder="请输入任务内容"></textarea>
+        <textarea class="textarea" maxlength="100" value="{{items.task_name}}" onInput="bindTextAreaBlur" placeholder="请输入任务内容"></textarea>
         <image mode="scaleToFill" src="../../../image/addImg.png" class="addImg" catchTap="openImg"/>
       </view>
       <view style="background:#fff;padding:0 28rpx;" a:if="{{items.file_list[0]}}" class="flex-box flex-v-ce">
@@ -67,18 +67,18 @@
             </view>
           </view>
           <block a:if="{{selectRule}}">
+            <view style="color: #333; margin-bottom: 5px; margin-top: 10px;text-align:left">{{selectRule.remark}}</view>
             <view class="fontColorD input_text" a:if="{{selectRule.range_type==1&&selectRule.min_point==selectRule.max_point}}">固定:{{selectRule.min_point}} {{selectRule.pt_Obj[0].name}}</view>
-            <view class="fontColorD input_text" a:else> 范围(可修改):{{selectRule.min_point}}至{{selectRule.max_point}}
-              <text>{{selectRule.pt_Obj[0].name}}</text></view>
+            <view class="fontColorD input_text" a:else> 范围(可修改):{{selectRule.min_point}}至{{selectRule.max_point}} <text>{{selectRule.pt_Obj[0].name}}</text></view>
           </block>
         </view>
       </view>
       
       <view class="flex-box li margin-bottom" style="padding:15rpx 28rpx;margin-top:24rpx" a:else>
         <view class="label isBt" style="position: relative;top:10rpx;">任务积分</view>
-        <text class="red" style="position: relative;top:10rpx;">+</text>
+        <text class="red" style="position: relative;top:10rpx;"></text>
         <view class="flex-1">
-          <input value="{{items.base_point2}}" placeholder="0" type="number" onInput="bindKeyInput2" class="flex-1"/>
+          <input value="{{items.base_point2}}" placeholder="0" type="number" onInput="bindKeyInput2"/>
         </view>
       </view>
 
@@ -117,7 +117,7 @@
         <image mode="scaleToFill" src="../../../image/right.png" class="rightImg"/>
       </view>
       <view class="li">
-        <textarea maxlength="300" value="{{items.task_remark}}" onInput="bindTextAreaBlur2" placeholder="请输入任务描述" data-index="{{index}}"></textarea>
+        <textarea maxlength="300" value="{{items.task_remark}}" onInput="bindTextAreaBlur2" placeholder="请输入任务备注" data-index="{{index}}"></textarea>
       </view>
       <view class="flex-box li" style="padding:15rpx 28rpx;">
         <view class="label2" style="position: relative;top:10rpx;">提前奖分(天)</view>

+ 4 - 3
pages/statistics/assaign_set/assaign_set.axml

@@ -4,7 +4,7 @@
     
 
       <view class="li">
-        <textarea class="textarea" maxlength="20" value="{{items.task_name}}" onInput="bindTextAreaBlur" placeholder="请输入任务内容" data-index="{{index}}"></textarea>
+        <textarea class="textarea" maxlength="100" value="{{items.task_name}}" onInput="bindTextAreaBlur" placeholder="请输入任务内容" data-index="{{index}}"></textarea>
         <image mode="scaleToFill" src="../../../image/addImg.png"  class="addImg" catchTap="openImg"/>
       </view>
       <view style="background:#fff;padding:0 28rpx;" a:if="{{items.file_list[0]}}" class="flex-box flex-v-ce">
@@ -51,6 +51,7 @@
             </view>
           </view>
           <block a:if="{{selectRule}}">
+            <view style="color: #333; margin-bottom: 5px; margin-top: 10px;text-align:left">{{selectRule.remark}}</view>
             <view class="fontColorD input_text" a:if="{{selectRule.range_type==1&&selectRule.min_point==selectRule.max_point}}">固定:{{selectRule.min_point}} {{items.pt_name}}</view>
             <view class="fontColorD input_text" a:else> 范围(可修改):{{selectRule.min_point}}至{{selectRule.max_point}}
               <text>{{items.pt_name}}</text>
@@ -60,7 +61,7 @@
       </view>
       <view class="flex-box li margin-bottom" style="padding:15rpx 28rpx;margin-top:24rpx" a:else>
         <view class="label isBt" style="position: relative;top:10rpx;">任务积分</view>
-        <text class="red" style="position: relative;top:10rpx;">+</text>
+        <text class="red" style="position: relative;top:10rpx;"></text>
         <view class="flex-1">
           <input value="{{items.base_point2}}" placeholder="0" type="number" onInput="bindKeyInput2" class="flex-1"/>
         </view>
@@ -86,7 +87,7 @@
         <image mode="scaleToFill" src="../../../image/right.png" class="rightImg"/>
       </view>
       <view class="li">
-        <textarea maxlength="100" value="{{items.task_remark}}" onInput="bindTextAreaBlur2" placeholder="请输入任务描述" data-index="{{index}}"></textarea>
+        <textarea maxlength="100" value="{{items.task_remark}}" onInput="bindTextAreaBlur2" placeholder="请输入任务备注" data-index="{{index}}"></textarea>
       </view>
       <view class="flex-box li" style="padding:15rpx 28rpx;">
         <view class="label2" style="position: relative;top:10rpx;">提前奖分(天)</view>

+ 59 - 0
pages/statistics/awardDetail/awardDetail.acss

@@ -0,0 +1,59 @@
+
+.shijContent{
+    background-color: rgb(245, 247, 250);
+    border-radius: 5px;
+    padding: 0.2rem;
+    font-size: 0.28rem;
+}
+.header-main{
+  background: #fff;
+  padding:16rpx 32rpx;
+}
+.header-main .laber{
+  color: #909399;
+  width: 180rpx;
+}
+.header-main .flex-box{
+ padding: 5rpx 0;
+}
+.mian-title{
+  padding: 0.24rem 0.32rem;
+  background: #fff;
+  font-size: 0.32rem;
+  color: #222;
+}
+.bottom{
+  background: #fff;
+  position: fixed;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  z-index: 2;
+  text-align: center;
+  padding: 10rpx;
+  padding-bottom: 30rpx;
+  border-top: 1px solid #f1f1f1;
+
+}
+.bottom .blueBtn{
+  color: #fff;
+  background: #26A2FF;
+  padding: 0.22rem 0;
+  border-radius: 5rpx;
+}
+.name{
+  margin: 16rpx 0;
+  font-weight: 600;
+}
+.imgs{
+  width: 120rpx;
+  height: 120rpx;
+  margin-right: 10rpx;
+  margin-bottom: 10rpx;
+}
+.log{
+  padding:32rpx;
+  color: #26A2FF;
+  text-align: center;
+  background: #fff;
+}

+ 33 - 0
pages/statistics/awardDetail/awardDetail.axml

@@ -0,0 +1,33 @@
+<view>
+  <view class="header margin-bottom">
+    <view class="header-main">
+      <view class="flex-box flex-v-ce" >
+        <view class="laber">奖票对象</view>
+        <view class="flex-1">{{dataDetail.rule_list }}</view>
+      </view>
+      <view class="flex-box flex-v-ce" >
+        <view class="laber">奖票时间</view>
+        <view class="flex-1">{{dataDetail.date }}</view>
+      </view>
+      <view class="flex-box flex-v-ce">
+        <view class="laber">发放人</view>
+        <view class="flex-1">{{dataDetail.recorder_name}}</view>
+      </view>
+    </view>
+  </view>
+  <view class="main margin-bottom">
+      <view class="mian-title border-bottom">对于积分事件</view>
+      <view class="header-main">
+          <view class="shijContent">
+            <view style="word-break: break-all;">
+              在本题中,读入一个无向图的邻接矩阵(即数组表示),建立无向图并按照以上描述中的算法遍历所有顶点,输出遍历顶点的顺序。【输入形式】输入的第
+              一行包含一个正整数n,表示图中共有n个顶点。其中n不超过50。以后的n行中每行有n个用空格隔
+            </view>
+            <view class="red">+ 10分</view>
+          </view>
+      </view>
+  </view>
+
+  <view class="bottom"> <view class="blueBtn" catchTap="openCx">撤回奖票</view></view>
+  <view style="height:2rem"></view>
+</view>

+ 106 - 0
pages/statistics/awardDetail/awardDetail.js

@@ -0,0 +1,106 @@
+
+var app = getApp()
+var that;
+Page({
+  data: {
+    date: app.globalData.month,
+    review_id: '',
+    userId: '',
+    see_log: 1,
+  },
+  onLoad(e) {
+    that = this;
+    dd.setNavigationBar({ title: "事件详情" });
+    that.setData({
+      userId: app.globalData.userData.id
+    })
+    if (e.id) {
+      that.setData({
+        review_id: e.id
+      })
+    }
+  },
+  onShow() {
+    if (app.globalData.userData) {
+        dd.hideLoading();
+        that.getDetail();
+        that.cheakAx();
+    } else {
+      app.login(app.globalData.corpId, function (is) {
+        if (is) {
+          dd.hideLoading();
+          that.getDetail();
+          that.cheakAx();
+        } else {
+          dd.reLaunch({
+            url: '../../noJurisdiction/noJurisdiction'
+          })
+        }
+      }, function () { })
+    }
+
+  },
+  cheakAx() {
+    app.$get("api/integral/site/config", {}).then((res) => {
+      var data = res.data.data;
+      this.setData({ see_log: data.see_log ? data.see_log : 0 })
+    })
+  },
+  openCx() {
+    dd.confirm({
+      title: '撤销奖扣',
+      content: '你确定撤销此项吗?',
+      confirmButtonText: '确定',
+      cancelButtonText: '取消',
+      success: (result) => {
+        if (result.confirm) {
+          app.$post("api/integral/review/prize/destroy", { target_id: that.data.review_id, type: 1 }).then((res) => {
+            app.globalData.showToast("已撤销");
+            // var pages=getCurrentPages();//当上一页的page不等于一时,执行上一页的方法
+            // var active=pages[pages.length-2];
+            // if(active.data.page!=1){
+            //     active.refreshData(that.data.review_id);
+            // }
+            setTimeout(() => {
+              dd.navigateBack({
+                delta: 1
+              })
+            }, 1000);
+          })
+        }
+      },
+    });
+  },
+  // 查看日志详情
+  openLog() {
+    dd.navigateTo({
+      url: '../logDetail/logDetail?id=' + this.data.review_id
+    })
+  },
+  showImg(e) {
+    var index = e.target.dataset.index;
+    var item = e.target.dataset.item
+    dd.previewImage({
+      current: index,
+      urls: item
+    });
+  },
+  activeItem(e) {
+    var index = e.target.dataset.index;
+    this.setData({ activeIndex: index })
+  },
+  openSearch() {
+    app.globalData.showToast("暂不支持筛选");
+  },
+  getDetail() {
+    app.$get("api/integral/statistics/integral/info", { event_id:  that.data.review_id }).then((res) => {
+      var data = res.data.data;
+      app.globalData.types.forEach(item => {
+        if (item.id == data.pt_id) {
+          data.typeName = item.name
+        }
+      });
+      this.setData({ dataDetail: data })
+    })
+  },
+});

+ 1 - 0
pages/statistics/awardDetail/awardDetail.json

@@ -0,0 +1 @@
+{}

+ 47 - 0
pages/statistics/awardJl/awardJl.acss

@@ -0,0 +1,47 @@
+
+.main{
+  padding: 0rpx 32rpx;
+}
+.li{
+  background: #fff;
+  margin-bottom: 0.2rem;
+  border-radius: 5px;
+}
+ .context {
+  overflow: hidden;
+  text-overflow: ellipsis;
+  display: -webkit-box;
+  -webkit-line-clamp: 2;
+  -webkit-box-orient: vertical;
+  margin-bottom: 0.1rem;
+  height: 0.8rem;
+}
+
+.users{
+margin-left: 20rpx;
+}
+.num{
+font-size: 28rpx;
+color: #909399;
+}
+.index{
+width: 90rpx;
+text-align: center;
+}
+.index image{
+width: 40rpx;
+height: 40rpx;
+}
+.scroll {
+ height: calc(100vh - 210rpx);
+}
+.search {
+  background-color: #f1f1f1;
+  border-radius: 0.1rem;
+  width: 90%;
+  margin: 0 auto;
+  padding: 0.06rem 0.1rem;
+}
+.header{
+background-color: #fff;
+}

+ 47 - 0
pages/statistics/awardJl/awardJl.axml

@@ -0,0 +1,47 @@
+<view>
+  <view class="{{popupCx}}">
+    <view class="header margin-bottom">
+      <view class="flex-box flex-v-ce tab" style="border-bottom:1px solid #f1f1f1">
+        <view class="flex-1" catchTap="selectStaff">
+          <text class="{{showStaff? 'activeView blue':''}}">{{staffVal}}</text>
+        </view>
+        <view class="flex-1" catchTap="selectDate">
+          <text class="{{showDate? 'activeView blue':''}}">{{selectDateVal}}</text>
+        </view>
+      </view>
+      <form onReset="onReset">
+        <view style="margin:16rpx 0;padding-bottom:16rpx">
+          <view class="search flex-box flex-v-ce">
+            <image mode="scaleToFill" src="../../../image/ss.png" />
+            <input class="flex-1" placeholder="请输入任务内容" onInput="bindKeyInput" />
+            <button a:if="{{isVal}}" class="delVal" formType="reset">×</button>
+          </view>
+        </view>
+      </form>
+    </view>
+    <view class="main scroll">
+      <scroll-view class="scroll" a:if="{{list.length>0}}" scroll-y="{{true}}" onScrollToLower="onScrollToLower">
+        <view class="flex-box-ce li " a:for="{{list}}" catchTap="openDetail" data-item="{{item}}" key="{{item.id}}">
+           <view class="flex-box-v flex-center-center" style="width:140rpx;background:#C3E0FD;height:160rpx">
+             <image mode="scaleToFill" src="../../../image/pj.png" style="width:60rpx;height:60rpx;margin-bottom:0.1rem"/>
+             <text style="font-size:28rpx">奖票</text>
+           </view>
+           <view class="flex-1" style="padding:16rpx 20rpx">
+             <view class="context">
+              在本题中,读入一个无向图的邻接矩阵(即数组表示),建立无向图并按照以上描述中的算法遍历所有顶点,输出遍历
+              顶点的顺序。【输入形式】输入的第一行包含一个正整数n,表示图中共有n个顶点。其中n不超过50。以后的n行中每行有n个用空格隔
+             </view>
+             <view class="flex-box-ce fontColorC" style="font-size:28rpx">
+               <text class="flex-1">某某某</text>
+               <text class="">2024-08-04</text>
+             </view>
+           </view>
+        </view>
+        <view class="noDatas" a:if="{{isData}}">没有更多咯</view>
+      </scroll-view>
+      <no-data a:if="{{list.length==0}}"></no-data>
+    </view>
+  </view>
+  <select-staff defaultUser="{{employee_ids}}" isShow="{{showStaff}}" a:if="{{showStaff==true}}" onClose="onClose" onConfirm="onConfirmStaff"></select-staff>
+  <select-date defaultDate="{{defaultDate}}" isShow="{{showDate}}" a:if="{{showDate==true}}" onClose="onClose" onConfirm="onConfirmDate"></select-date>
+</view>

+ 156 - 0
pages/statistics/awardJl/awardJl.js

@@ -0,0 +1,156 @@
+
+var app = getApp()
+var that;
+var typeArr = [];
+Page({
+  data: {
+    date: app.globalData.month,
+    minuteIndex: 0,//条件选择
+    minuteArray: [
+      { id: 0, name: '总分' },
+      { id: 1, name: '加班' },
+      { id: 2, name: '迟到' },
+    ],
+
+    showDate: false,//是否显示时间组件
+    selectDateVal: '本月',
+
+    showStaff: false,//显示员工选择
+    staffVal: '员工',
+    employee_ids:[],
+    page: 1,
+    popupCx: '',
+    list:[1,2,3]
+
+  },
+  onLoad(e) {
+    that = this;
+    dd.setNavigationBar({ title: "发放记录" });
+  },
+  onShow() {
+
+  },
+  onReset() {
+    this.setData({
+      page: 1,
+      isVal: false,
+      keyword: ''
+    })
+    this.getData();
+  },
+  bindKeyInput(e) {
+    this.setData({
+      page: 1,
+      isVal: e.detail.value ? true : false,
+      keyword: e.detail.value ? e.detail.value : '',
+    })
+    this.getData();
+  },
+  getData(is) {
+    var data = {
+      page: that.data.page,
+      page_size: 20,
+      rule_id: that.data.rule_id,
+      pt_id: that.data.types.length > 0 ? that.data.types[that.data.typesIndex].id : '2',
+      employee_ids: that.data.employee_ids,
+      keyword:that.data.keyword,
+      dc_status: JSON.stringify([1]),
+      order_key:'update_time'
+    }
+    if (that.data.date_type == 2) {
+      data.start_day = that.data.dateObj[0];
+      data.end_day = that.data.dateObj[1];
+    }
+    app.$get('api/integral/statistics/integral', data).then((res) => {
+      var data = res.data.data.list;
+      data.map((item) => {
+        item.ptObj = app.getTypesItem(item.pt_id);
+      })
+      if (is) {
+        if (data.length == 0) {
+          this.setData({
+            isData: true
+          })
+          return;
+        }
+        var list = that.data.list;
+        this.setData({
+          list: list.concat(data)
+        })
+      } else {
+        this.setData({ list: [] });
+        this.setData({
+          list: data,
+          isData: false
+        })
+      }
+    })
+  },
+  //上啦加载
+  onScrollToLower() {
+    if (!that.data.isData) {
+      this.setData({ page: ++that.data.page })
+      this.getData(true);
+    }
+  },
+  //打开兴趣
+  openDetail(e) {
+    var item = e.target.dataset.item;
+    dd.navigateTo({
+      url: '../prizeBuckleDetail/prizeBuckleDetail?id=' + item.id
+    })
+  },
+  //显示选择时间组件
+  selectDate() {
+    this.setData({
+      popupCx: 'container__mask',
+      showDate: true
+    })
+  },
+  //显示选择员工
+  selectStaff() {
+    this.setData({
+      popupCx: 'container__mask',
+      showStaff: true
+    })
+  },
+  //选择时间
+  onConfirmDate(data) {
+    that.setData({
+      defaultDate: data,
+      dateObj: data.date,
+      date_type: data.type == 1 ? 3 : data.type,
+      page: 1,
+      selectDateVal: data.type == 1 ? (data.date == that.data.date ? '本月' : '月') : '日',
+    })
+    this.getData();
+  },
+  //关闭弹窗
+  onClose() {
+    this.setData({
+      showDate: false,
+      showStaff: false,
+      popupCx: '',
+    })
+  },
+  //选择员工
+  onConfirmStaff(data) {
+    if (data.length > 0) {
+      if (data.length > 1) {
+        var str = "";
+        var arr = [];
+        data.forEach((item) => {
+          str += item.name + ','
+          arr.push(item.id);
+        })
+        var employee_ids = arr.join(',');
+        this.setData({ staffVal: str.substring(0, str.length - 1), employee_ids: employee_ids, page: 1})
+      } else {
+        this.setData({ staffVal: data[0].name, employee_ids: [data[0].id], page: 1 })
+      }
+    } else {
+      this.setData({ staffVal: '员工', employee_ids: [], page: 1})
+    }
+    // this.getData();
+  },
+});

+ 8 - 0
pages/statistics/awardJl/awardJl.json

@@ -0,0 +1,8 @@
+{
+  "usingComponents": {
+    "img-box": "/Component/img-box/index",
+    "select-date": "/Component/selectDate/selectDate",
+    "select-staff": "/Component/selectStaff/selectStaff",
+    "no-data": "/Component/noData/noData"
+  }
+}

+ 2 - 2
pages/statistics/glz_execute/glz_execute.axml

@@ -2,7 +2,7 @@
   <view class="{{popupCx}}">
     <view class="flex-box flex-v-ce selectItems border-bottom">
       <view data-index="1" class="{{dataIndex == 1? 'active':''}} flex-1" catchTap="activeItem">奖扣完成情况</view>
-      <view data-index="2" class="{{dataIndex == 2? 'active':''}} flex-1" catchTap="activeItem">奖扣执行对比</view>
+      <view data-index="2" class="{{dataIndex == 2? 'active':''}} flex-1" catchTap="activeItem" a:if="{{false}}">奖扣执行对比</view>
     </view>
     <view class="flex-box flex-v-ce tab">
       <view class="flex-1" onTap="openDate">
@@ -72,7 +72,7 @@
               <view class="num" a:if="{{item.ratio.enable==1}}">{{item.ratio.reward_ratio }}:1</view>
               <view class="num" a:else>-</view>
               <view class="jiangfen">奖扣比例</view>
-              <view class="target">目标{{item.ratio.target}}</view>
+              <view class="target">目标{{item.ratio.target}}:1</view>
             </view>
             <view class="flex-1">
               <view class="num">{{item.exec.count}}</view>

+ 86 - 23
pages/statistics/glz_execute/glz_execute.js

@@ -8,13 +8,13 @@ Page({
     array: [{ name: '奖分次数最多', value: 1 }, { name: '扣分次数最多', value: 0 }],
     showTissue: false,
     page: 1,
-    page2:1,
+    page2: 1,
     tissueValName: '全公司',
     popupCx: '',
-    dataIndex:1,
-    listTwo:[],
-    list:[],
-    isAllChecked:false,  
+    dataIndex: 1,
+    listTwo: [],
+    list: [],
+    isAllChecked: false,
   },
   onLoad() {
     that = this;
@@ -22,27 +22,31 @@ Page({
     // this.getData();
     this.getData2();
   },
+  onUnload() {
+    // 页面被关闭
+    app.globalData.socketApi.closewebsocket();
+  },
   showText() {
     dd.alert({
-        title: '温馨提示',
-        content: '管理者奖扣任务均为B分,对A分不做要求',
-        buttonText: '我知道了',
-        success: (result) => {
+      title: '温馨提示',
+      content: '管理者奖扣任务均为B分,对A分不做要求',
+      buttonText: '我知道了',
+      success: (result) => {
 
-        },
-      });
+      },
+    });
   },
   ruleActiveAll(e) {
     this.setData({
       isAllChecked: e.detail.value,
-      page2:1,
+      page2: 1,
     })
     this.getData2();
   },
   activeItem(e) {
     var index = e.target.dataset.index;
-    this.setData({ dataIndex: index,page2: 1, page: 1, list: [],listTwo:[] })
-    index==1? this.getData2():this.getData()
+    this.setData({ dataIndex: index, page2: 1, page: 1, list: [], listTwo: [] })
+    index == 1 ? this.getData2() : this.getData()
   },
   sotrs(str) {
     return function (a, b) {
@@ -51,16 +55,71 @@ Page({
       return val2 - val
     }
   },
+  opneWebSocket(data, is) {
+    app.globalData.socketApi.sendData(data, (res) => {
+      if (res.code == 1&&res.type=='es') {
+        var data = res.result.list || [];
+        if (is) {
+          if (data.length == 0) {
+            this.setData({
+              isData2: true
+            })
+            return;
+          }
+          var listTwo = that.data.listTwo;
+          this.setData({
+            listTwo: listTwo.concat(data)
+          })
+        } else {
+          this.setData({ listTwo: [] });
+          this.setData({
+            listTwo: data,
+            isData2: false
+          })
+        }
+      }
+      if (res.code == 1&&res.type=='es_avg') {
+        var data = res.result.list || [];
+        if (that.data.activeIndex == 0) {
+          data.sort(that.sotrs('reward_count'));
+        } else {
+          data.sort(that.sotrs('deduct_count'));
+        }
+        if (is) {
+          if (data.length == 0) {
+            this.setData({
+              isData: true
+            })
+            return;
+          }
+          var list = that.data.list;
+          this.setData({
+            list: list.concat(data)
+          })
+        } else {
+          this.setData({ list: [] });
+          this.setData({
+            list: data,
+            isData: false
+          })
+        }
+      }
+    }, true);
+  },
   getData2(is) {
     var data;
     data = {
+      type: "es",
       page: that.data.page2,
       page_size: 20,
+      employee_id: app.globalData.userData.id,
       month: that.data.month,
-      dept_id: that.data.tissueVal,
-      complete:that.data.isAllChecked? 1:'',
+      dept_id: that.data.tissueVal||0,
+      complete: that.data.isAllChecked ? 1 : 0,
     }
-    app.$get('api/integral/statistics/prize/list', data,'application/vnd.test.v4+json').then((res) => {
+    this.opneWebSocket(data, is);
+    return false;
+    app.$get('api/integral/statistics/prize/list', data, 'application/vnd.test.v4+json').then((res) => {
       var data = res.data.data.list || [];
       if (is) {
         if (data.length == 0) {
@@ -85,12 +144,16 @@ Page({
   getData(is) {
     var data;
     data = {
+      type: "es_avg",
       page: that.data.page,
       page_size: 20,
+      employee_id:app.globalData.userData.id,
       month: that.data.month,
-      dept_id: that.data.tissueVal,
+      dept_id: that.data.tissueVal||0,
     }
-    app.$get('api/integral/statistics/prize/list', data,'application/vnd.test.v3+json').then((res) => {
+    this.opneWebSocket(data, is);
+    return false;
+    app.$get('api/integral/statistics/prize/list', data, 'application/vnd.test.v3+json').then((res) => {
       var data = res.data.data.list || [];
       if (that.data.activeIndex == 0) {
         data.sort(that.sotrs('reward_count'));
@@ -166,7 +229,7 @@ Page({
             page: 1,
             page2: 1
           })
-          that.data.dataIndex==1? that.getData2():that.getData()
+          that.data.dataIndex == 1 ? that.getData2() : that.getData()
         }
       },
       complete: (res) => {
@@ -184,11 +247,11 @@ Page({
   },
   //关闭弹窗
   onClose() {
-    this.setData({ showDate: false, showTissue: false,popupCx: '' })
+    this.setData({ showDate: false, showTissue: false, popupCx: '' })
   },
   //选择部门
   onConfirmTissue(data) {
-    this.setData({ tissueValName: data.name, tissueVal: data.id, page: 1,page2: 1 });
-    this.data.dataIndex==1? this.getData2():this.getData()
+    this.setData({ tissueValName: data.name, tissueVal: data.id, page: 1, page2: 1 });
+    this.data.dataIndex == 1 ? this.getData2() : this.getData()
   },
 });

+ 93 - 0
pages/statistics/grantAward/grantAward.acss

@@ -0,0 +1,93 @@
+
+.main{
+    background: #fff;
+}
+.li{
+   padding: 24rpx 32rpx; 
+}
+.main-right{
+  margin-left: 10rpx;
+}
+.main-right .name{
+  padding-top:12rpx;
+  font-size: 36rpx;
+}
+.main-right .context{
+    overflow : hidden;
+    text-overflow: ellipsis;
+    display: -webkit-box;
+    -webkit-line-clamp: 2;
+    -webkit-box-orient: vertical;
+    padding-top: 10rpx;
+    margin-bottom: 10rpx;
+}
+.main-right .date{
+   color: #909399;
+   
+}
+.item{
+  padding: 10rpx 0;
+}
+.item .flex-2{
+    padding-left: 28rpx; 
+}
+.users{
+  margin-left: 20rpx;
+}
+.num{
+  font-size: 28rpx;
+  color: #909399;
+}
+.index{
+  width: 90rpx;
+  text-align: center;
+}
+.index image{
+  width: 40rpx;
+  height: 40rpx;
+}
+.scroll {
+   height: calc(100vh - 210rpx);
+}
+.search {
+    background-color: #f1f1f1;
+    border-radius: 0.1rem;
+    width: 90%;
+    margin: 0 auto;
+    padding: 0.06rem 0.1rem;
+}
+.header{
+  background-color: #fff;
+}
+.bottom{
+  background: #fff;
+  position: fixed;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  z-index: 2;
+  text-align: center;
+  padding: 10rpx;
+  padding-bottom: 30rpx;
+  border-top: 1px solid #f1f1f1;
+
+}
+.bottom text{
+  display: block;
+  padding: 16rpx 0;;
+  text-align: left;
+}
+.bottom  .defBtn{
+  color: #909399;
+  border: 1px solid #909399;
+  padding: 16rpx 0;
+  border-radius: 5rpx;
+  margin-right: 16px;
+  background: #fff;
+}
+.bottom .blueBtn{
+  color: #fff;
+  background: #26A2FF;
+  padding: 16rpx 0;
+  border-radius: 5rpx;
+}

+ 66 - 0
pages/statistics/grantAward/grantAward.axml

@@ -0,0 +1,66 @@
+<view>
+  <view class="{{popupCx}}">
+    <view class="header margin-bottom">
+      <view class="flex-box flex-v-ce tab" style="border-bottom:1px solid #f1f1f1">
+        <view class="flex-1" catchTap="selectDate">
+          <text class="{{showDate? 'activeView blue':''}}">{{selectDateVal}}</text>
+        </view>
+        <view class="flex-1" catchTap="selectStaff">
+          <text class="{{showStaff? 'activeView blue':''}}">{{staffVal}}</text>
+        </view>
+        <view class="flex-1">
+          <picker onChange="bingStatus" value="{{minuteIndex}}" range="{{minuteArray}}" range-key="name">
+            <text>{{minuteArray[minuteIndex].name}}</text>
+          </picker>
+        </view>
+        <view class="flex-1">
+          <picker onChange="bingIntegralType" value="{{typesIndex}}" range="{{types}}" range-key="name">
+            <text a:if="{{types[typesIndex].name=='全部'}}">积分类型</text>
+            <text a:else>{{types[typesIndex].name}}</text>
+          </picker>
+        </view>
+      </view>
+      <form onReset="onReset">
+        <view style="margin:16rpx 0;padding-bottom:16rpx">
+          <view class="search flex-box flex-v-ce">
+            <image mode="scaleToFill" src="../../../image/ss.png" />
+            <input class="flex-1" placeholder="请输入事件内容" onInput="bindKeyInput" />
+            <button a:if="{{isVal}}" class="delVal" formType="reset">×</button>
+          </view>
+        </view>
+      </form>
+    </view>
+    <view class="main scroll">
+      <scroll-view class="scroll" a:if="{{list.length>0}}" scroll-y="{{true}}" onScrollToLower="onScrollToLower">
+          <view class="flex-box li border-bottom" a:for="{{list}}" key="{{item.id}}">
+            <label style="width:0.8rem;padding-top:0.2rem" key="label-{{index}}" data-item="{{item}}">
+              <checkbox  onChange="onChange" data-index="{{index}}" data-item="{{item}}" checked="{{item.checked}}" name="{{item.id}}"></checkbox>
+            </label>
+            <view class="flex-1 flex-box"  catchTap="openDetail" data-item="{{item}}">
+              <img-box name="{{item.employee_name}}" key="{{item.id}}" imgUrl="{{item.employee_img_url}}" height="80rpx" width="80rpx"  fSize="24rpx"></img-box>
+              <view class="flex-1 main-right">
+                <view class="flex-box flex-v-ce">
+                  <view class="name flex-1">{{item.employee_name}}</view>
+                  <view class="red da" a:if="{{item.point>0}}">+{{item.point}}{{item.ptObj.name}}</view>
+                  <view class="green da" a:else>{{item.point}}{{item.ptObj.name}}</view>
+                </view>
+                <view class="context" a:if="{{item.remark}}">{{item.remark}}</view>
+                <view class="flex-box flex-v-ce">
+                  <view class="date flex-1">{{item.event_time}}</view>
+                </view>
+              </view>
+            </view>
+          </view>
+        <view class="noDatas" a:if="{{isData}}">没有更多咯</view>
+        <view style="height:2rem"></view>
+      </scroll-view>
+      <no-data a:if="{{list.length==0}}"></no-data>
+    </view>
+    <view class="bottom flex-box">
+      <view class="flex-1 defBtn" catchTap="selectAll">全选</view>
+      <view class="flex-3 blueBtn" catchTap="sumbit">发放奖票</view>
+    </view>
+  </view>
+  <select-staff defaultUser="{{employee_ids}}" isShow="{{showStaff}}" a:if="{{showStaff==true}}" onClose="onClose" onConfirm="onConfirmStaff"></select-staff>
+  <select-date defaultDate="{{defaultDate}}" isShow="{{showDate}}" a:if="{{showDate==true}}" onClose="onClose" onConfirm="onConfirmDate"></select-date>
+</view>

+ 221 - 0
pages/statistics/grantAward/grantAward.js

@@ -0,0 +1,221 @@
+
+var app = getApp()
+var that;
+var typeArr = [];
+Page({
+  data: {
+    date: app.globalData.month,
+    minuteIndex: 0,//条件选择
+    minuteArray: [
+      { id: 0, name: '全部' },
+      { id: 1, name: '已发放' },
+      { id: 2, name: '未放发' },
+    ],
+
+    showDate: false,//是否显示时间组件
+    selectDateVal: '本月',
+
+    showStaff: false,//显示员工选择
+    staffVal: '员工',
+
+    types: [
+      { id: 0, name: '我奖扣的' },
+      { id: 1, name: '全部事件' },
+    ],
+    typesIndex: '0',
+
+    showRuleTwo: false,
+
+    page: 1,
+    popupCx: '',
+    isAll:true,
+  },
+  onLoad(e) {
+    that = this;
+    dd.setNavigationBar({ title: "发放奖票" });
+  },
+  onShow() {
+    typeArr = [{ id: 0, name: '全部' }];
+    if (app.globalData.userData) {
+      if (that.data.page == 1) {
+        that.getData();
+      }
+    } else {
+      app.login(app.globalData.corpId, function (is) {
+          if (that.data.page == 1) {
+            that.getData();
+          }
+      }, function () { })
+    }
+  },
+  selectAll(e){
+    let list=this.data.list
+    list.map((item) => {
+      item.checked=this.data.isAll;
+    })
+    this.setData({
+      list:list,
+      isAll:!this.data.isAll
+    })
+  },
+  //提交
+  sumbit(){
+    console.log(this.data.list)
+  },
+  onChange(e) {
+    let id=e.target.dataset.item.id;
+    let list=this.data.list
+    list.map((item) => {
+      if(item.id==id){
+        item.checked=e.detail.value;
+      }
+    })
+    this.setData({
+      list:list
+    })
+  },
+  bingStatus(e){
+    this.setData({
+      minuteIndex: e.detail.value,
+      page: 1,
+    });
+  },
+  bingIntegralType(e) {
+    this.setData({
+      typesIndex: e.detail.value,
+      page: 1,
+    });
+    this.getData();
+  },
+  onReset() {
+    this.setData({
+      page: 1,
+      isVal: false,
+      keyword: ''
+    })
+    this.getData();
+  },
+  bindKeyInput(e) {
+    this.setData({
+      page: 1,
+      isVal: e.detail.value ? true : false,
+      keyword: e.detail.value ? e.detail.value : '',
+    })
+    this.getData();
+  },
+  getData(is) {
+    var data = {
+      page: that.data.page,
+      page_size: 20,
+      rule_id: that.data.rule_id,
+      pt_id: that.data.types.length > 0 ? that.data.types[that.data.typesIndex].id : '2',
+      employee_ids: that.data.employee_ids,
+      keyword:that.data.keyword,
+      dc_status: JSON.stringify([1]),
+      order_key:'update_time'
+    }
+    if (that.data.date_type == 2) {
+      data.start_day = that.data.dateObj[0];
+      data.end_day = that.data.dateObj[1];
+    } else {
+      data.month = that.data.dateObj || that.data.date;
+    }
+    app.$get('api/integral/statistics/integral', data).then((res) => {
+      var data = res.data.data.list;
+      data.map((item) => {
+        item.ptObj = app.getTypesItem(item.pt_id);
+        item.checked=false;
+      })
+      if (is) {
+        if (data.length == 0) {
+          this.setData({
+            isData: true
+          })
+          return;
+        }
+        var list = that.data.list;
+        this.setData({
+          list: list.concat(data)
+        })
+      } else {
+        this.setData({ list: [] });
+        this.setData({
+          list: data,
+          isData: false
+        })
+      }
+    })
+  },
+  //上啦加载
+  onScrollToLower() {
+    if (!that.data.isData) {
+      this.setData({ page: ++that.data.page })
+      this.getData(true);
+    }
+  },
+  //打开兴趣
+  openDetail(e) {
+    var item = e.target.dataset.item;
+    dd.navigateTo({
+      url: '../prizeBuckleDetail/prizeBuckleDetail?id=' + item.id
+    })
+  },
+  //显示选择时间组件
+  selectDate() {
+    this.setData({
+      popupCx: 'container__mask',
+      showDate: true
+    })
+  },
+  //显示选择员工
+  selectStaff() {
+    this.setData({
+      popupCx: 'container__mask',
+      showStaff: true
+    })
+  },
+  //选择时间
+  onConfirmDate(data) {
+    that.setData({
+      defaultDate: data,
+      dateObj: data.date,
+      date_type: data.type == 1 ? 3 : data.type,
+      page: 1,
+      selectDateVal: data.type == 1 ? (data.date == that.data.date ? '本月' : '月') : '日',
+    })
+    this.getData();
+  },
+  //关闭弹窗
+  onClose() {
+    this.setData({
+      showDate: false,
+      showStaff: false,
+      popupCx: '',
+    })
+  },
+  //选择员工
+  onConfirmStaff(data) {
+    if (!data) {
+      this.setData({ staffVal: '员工', employee_ids: '', page: 1 })
+      this.getData();
+      return false;
+    }
+    if (data.length > 0) {
+      if (data.length > 1) {
+        var str = "";
+        var arr = [];
+        data.forEach((item) => {
+          str += item.name + ','
+          arr.push(item.id);
+        })
+        var employee_ids = arr.join(',');
+        this.setData({ staffVal: str.substring(0, str.length - 1), employee_ids: employee_ids, page: 1 })
+      } else {
+        this.setData({ staffVal: data[0].name, employee_ids: [data[0].id], page: 1 })
+      }
+    } else {
+      this.setData({ staffVal: '员工', employee_ids: [], page: 1 })
+    }
+    this.getData();
+  },
+});

+ 8 - 0
pages/statistics/grantAward/grantAward.json

@@ -0,0 +1,8 @@
+{
+  "usingComponents": {
+    "img-box": "/Component/img-box/index",
+    "select-date": "/Component/selectDate/selectDate",
+    "select-staff": "/Component/selectStaff/selectStaff",
+    "no-data": "/Component/noData/noData"
+  }
+}

+ 8 - 1
pages/statistics/index/index.js

@@ -14,7 +14,7 @@ Page({
           { name: '申请积分', imgUrl: '../../../image/a_apply.png', url: '../../workbench/apply/apply', code: 'admin employee' },
           { name: '我申请的', imgUrl: '../../../image/apply_list.png', url: '../my_apply/my_apply?index=', code: 'admin employee' },
           { name: '发放奖票', imgUrl: '../../../image/add_ticket.png', url: '../grant/grant', code: 'creator admin ' },
-          { name: '我的奖票', imgUrl: '../../../image/my_ticket.png', url: '../myGrant/myGrant', code: 'admin employee' },
+          { name: '我的奖票', imgUrl: '../../../image/my_ticket.png', url: '../myGrant/myGrant', code: 'creator admin employee' },
         ]
       },
       {
@@ -28,6 +28,13 @@ Page({
           { name: '全部任务', imgUrl: '../../../image/apply_list.png', url: '../allTask/allTask', code: 'creator admin' },
         ]
       },
+      // {
+      //   code: '奖票', child: [
+      //     { name: '发放奖票', imgUrl: '../../../image/my_publish.png', url: '../grantAward/grantAward', code: 'creator admin' },
+      //     { name: '发放记录', imgUrl: '../../../image/caback6.png', url: '../awardJl/awardJl', code: 'creator admin ' },
+      //     { name: '我的奖票', imgUrl: '../../../image/task_hall.png', url: '../myGrant/myGrant', code: 'admin employee' },
+      //   ]
+      // },
       {
         code: '统计分析', child: [
           { name: '排行榜', imgUrl: '../../../image/integral_rank.png', url: '../userRamking/userRamking', code: 'creator admin ' },

+ 16 - 0
pages/statistics/integralEvent/integralEvent.acss

@@ -8,6 +8,22 @@
 .main-right{
   margin-left: 10rpx;
 }
+.sxImg{
+  width: 30rpx;
+  height: 30rpx;
+}
+.tab .a-view {
+  width: auto;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+.selectImg image {
+  width: 30rpx;
+  height: 30rpx;
+  position: relative;
+  top: 0.1rem;
+}
 .main-right .name{
   padding-top:12rpx;
   font-size: 36rpx;

+ 9 - 3
pages/statistics/integralEvent/integralEvent.axml

@@ -11,18 +11,23 @@
         <view class="flex-1" catchTap="selectRule">
           <text class="{{showRuleTwo? 'activeView blue':''}}">{{ruleVal}}</text>
         </view>
-        <view class="flex-1">
+        <view class="selectImg">
+          <view catchTap="selectSx" style="padding:20rpx 30rpx;">
+            <image mode="scaleToFill" class="sxImg" src="../../../image/sx.png"/>
+          </view>
+        </view>
+        <!-- <view class="flex-1">
           <picker onChange="bingIntegralType" value="{{typesIndex}}" range="{{types}}" range-key="name">
             <text a:if="{{types[typesIndex].name=='全部'}}">积分类型</text>
             <text a:else>{{types[typesIndex].name}}</text>
           </picker>
-        </view>
+        </view> -->
       </view>
       <form onReset="onReset">
         <view style="margin:16rpx 0;padding-bottom:16rpx">
           <view class="search flex-box flex-v-ce">
             <image mode="scaleToFill" src="../../../image/ss.png" />
-            <input class="flex-1" placeholder="请输入任务内容" onInput="bindKeyInput" />
+            <input class="flex-1" placeholder="请输入事件内容" onInput="bindKeyInput" />
             <button a:if="{{isVal}}" class="delVal" formType="reset">×</button>
           </view>
         </view>
@@ -53,4 +58,5 @@
   <select-staff defaultUser="{{employee_ids}}" isShow="{{showStaff}}" a:if="{{showStaff==true}}" onClose="onClose" onConfirm="onConfirmStaff"></select-staff>
   <select-date defaultDate="{{defaultDate}}" isShow="{{showDate}}" a:if="{{showDate==true}}" onClose="onClose" onConfirm="onConfirmDate"></select-date>
   <select-rule-two defaultSection="{{rule_id}}" isShow="{{showRuleTwo}}" a:if="{{showRuleTwo==true}}" onClose="onClose" onConfirm="onConfirmRule"></select-rule-two>
+  <review-select defaultSx="{{sxObj}}"  a:if="{{showZp==true}}" isShow="{{showZp}}" onClose="onClose" onConfirm="onConfirmSx"></review-select>
 </view>

+ 21 - 5
pages/statistics/integralEvent/integralEvent.js

@@ -27,6 +27,8 @@ Page({
     page: 1,
     popupCx: '',
     rule_item_id: '',//细则ID
+    showZp: false,//显示sx选择
+    sxObj:['1','0']
   },
   onLoad(e) {
     that = this;
@@ -99,6 +101,19 @@ Page({
     })
     this.getData();
   },
+
+
+  selectSx() {
+    this.setData({ showZp: true })
+  },
+  //选择筛选
+  onConfirmSx(data) {
+    this.setData({
+      page: 1,
+      sxObj:data
+    })
+    this.getData();
+  },
   bindKeyInput(e) {
     this.setData({
       page: 1,
@@ -111,12 +126,12 @@ Page({
     var data = {
       page: that.data.page,
       page_size: 20,
-      rule_id: that.data.rule_id,
-      pt_id: that.data.types.length > 0 ? that.data.types[that.data.typesIndex].id : '2',
+      rule_id: that.data.rule_id||0,
+      pt_id: this.data.sxObj[1],
       employee_ids: that.data.employee_ids,
       keyword:that.data.keyword,
-      dc_status: JSON.stringify([1]),
-      order_key:'update_time'
+      dc_status: JSON.stringify([this.data.sxObj[0]]),
+      // order_key:'update_time'
     }
     if (that.data.date_type == 2) {
       data.start_day = that.data.dateObj[0];
@@ -206,7 +221,8 @@ Page({
       showStaff: false,
       showRuleTwo: false,
       popupCx: '',
-      rule_item_id: ''
+      rule_item_id: '',
+      showZp: false,
     })
   },
   //选择积分分类

+ 2 - 1
pages/statistics/integralEvent/integralEvent.json

@@ -4,6 +4,7 @@
     "select-date": "/Component/selectDate/selectDate",
     "select-staff": "/Component/selectStaff/selectStaff",
     "select-rule-two": "/Component/selectRule_two/selectRule_two",
-    "no-data": "/Component/noData/noData"
+    "no-data": "/Component/noData/noData",
+    "review-select": "/Component/ReviewSelect/ReviewSelect"
   }
 }

+ 1 - 1
pages/statistics/integralEventTwo/integralEventTwo.acss

@@ -47,5 +47,5 @@
   height: 40rpx;
 }
 .scroll {
-   height: calc(100vh - 160rpx);
+   height: calc(100vh - 120rpx);
 }

+ 2 - 2
pages/statistics/integralEventTwo/integralEventTwo.axml

@@ -11,7 +11,7 @@
         </picker>
       </view>
     </view>
-    <view style="font-size: 0.24rem; padding: 0 0.2rem 0.1rem; color: #888;" a:if="{{str}}">当前权限:{{str}}</view>
+    <!-- <view style="font-size: 0.24rem; padding: 0 0.2rem 0.1rem; color: #888;" a:if="{{str}}">当前权限:{{str}}</view> -->
     <view class="main scroll">
       <scroll-view class="scroll" a:if="{{list.length>0}}" scroll-y="{{true}}" onScrollToLower="onScrollToLower">
         <view class="flex-box li border-bottom" a:for="{{list}}" catchTap="openDetail" data-item="{{item}}" key="{{item.id}}">
@@ -34,7 +34,7 @@
       <no-data a:if="{{list.length==0}}"></no-data>
     </view>
   </view>
-  <select-staff defaultUser="{{employee_ids}}" isShow="{{showStaff}}" a:if="{{showStaff==true}}" onClose="onClose" onConfirm="onConfirmStaff"></select-staff>
+  <select-staff defaultUser="{{employee_ids}}" isAllSelect="{{false}}" isShow="{{showStaff}}" a:if="{{showStaff==true}}" onClose="onClose" onConfirm="onConfirmStaff"></select-staff>
   <select-date defaultDate="{{defaultDate}}" isShow="{{showDate}}" a:if="{{showDate==true}}" onClose="onClose" onConfirm="onConfirmDate"></select-date>
   <select-rule-two defaultSection="{{rule_id}}" isShow="{{showRuleTwo}}" a:if="{{showRuleTwo==true}}" onClose="onClose" onConfirm="onConfirmRule"></select-rule-two>
 </view>

+ 43 - 3
pages/statistics/integralEventTwo/integralEventTwo.js

@@ -41,13 +41,47 @@ Page({
       that.getData();
     }
   },
+  onUnload() {
+    // 页面被关闭
+    app.globalData.socketApi.closewebsocket();
+  },
+  opneWebSocket(data, is) {
+    app.globalData.socketApi.sendData(data, (res) => {
+      if (res.code == 1&&res.type=='esi') {
+        console.log(res.result)
+        var data = res.result.list;
+        data.map((item) => {
+          item.ptObj = app.getTypesItem(item.pt_id);
+        })
+        if (is) {
+          if (data.length == 0) {
+            this.setData({
+              isData: true
+            })
+            return;
+          }
+          var list = that.data.list;
+          this.setData({
+            list: list.concat(data)
+          })
+        } else {
+          this.setData({ list: [] });
+          this.setData({
+            list: data,
+            isData: false
+          })
+        }
+      }
+    }, true);
+  },
   getData(is) {
     var data = {
+      type: "esi",
       page: that.data.page,
       page_size: 20,
       month: that.data.dateObj || that.data.date,
       recorder_id: that.data.recorder_id,
-      employee_ids: that.data.employee_ids,
+      // employee_id: that.data.employee_ids,
       pt_id:3,
       dc_status:JSON.stringify([1]),
       order_key:'update_time'
@@ -55,6 +89,12 @@ Page({
     if (that.data.typesIndex != 0) {
       data.source_type = that.data.types.length > 0 ? that.data.types[that.data.typesIndex].id : ''
     }
+    if(that.data.employee_ids){
+      data.employee_id=that.data.employee_ids;
+    }
+    this.opneWebSocket(data, is);
+    return false;
+
     app.$get('api/integral/statistics/integral', data).then((res) => {
       var data = res.data.data.list;
       data.map((item) => {
@@ -174,10 +214,10 @@ Page({
         var employee_ids = arr.join(',');
         this.setData({ staffVal: str.substring(0, str.length - 1), employee_ids: employee_ids, page: 1, })
       } else {
-        this.setData({ staffVal: data[0].name, employee_ids: [data[0].id], page: 1, })
+        this.setData({ staffVal: data[0].name, employee_ids: data[0].id.toString(), page: 1, })
       }
     } else {
-      this.setData({ staffVal: '员工', employee_ids: [], page: 1, })
+      this.setData({ staffVal: '员工', employee_ids: '', page: 1, })
     }
     this.getData();
   },

+ 1 - 1
pages/statistics/jfDetail/jfDetail.acss

@@ -75,7 +75,7 @@
   height: 40rpx;
 }
 .scroll {
-   height: calc(100vh - 280rpx);
+   height: calc(100vh - 196rpx);
 }
 .search {
     background-color: #f1f1f1;

+ 2 - 2
pages/statistics/jfDetail/jfDetail.axml

@@ -10,13 +10,13 @@
     </view>
     <view class="fontColorB" style="font-size:28rpx;padding:10rpx 28rpx;" a:if="{{type==2}}">总分:<text class="blue">{{userInfo.point}}</text> (包含基础分<text class="blue">{{base_point}}</text>,工龄分<text class="blue">{{service_point}}</text>)</view>
     <view class="fontColorB" style="font-size:28rpx;padding:10rpx 28rpx;" a:else>分值:<text class="blue">{{userInfo.point}}</text> (当前明细不包含基础分和工龄分)</view>
-    <view class="flex-box flex-v-ce tab" style="border-bottom:1px solid #f1f1f1">
+    <!-- <view class="flex-box flex-v-ce tab" style="border-bottom:1px solid #f1f1f1">
       <view class="flex-1">
         <picker onChange="bingIntegralType" value="{{typesIndex}}" range="{{types}}" range-key="name">
           <text>{{types[typesIndex].name}}</text>
         </picker>
       </view>
-    </view>
+    </view> -->
     <view class="main scroll">
       <scroll-view class="scroll" a:if="{{list.length>0}}" scroll-y="{{true}}" onScrollToLower="onScrollToLower">
         <view class="flex-box li border-bottom" a:for="{{list}}" catchTap="openDetail" data-item="{{item}}" key="{{item.id}}">

+ 204 - 0
pages/statistics/myGrant - 副本/myGrant.acss

@@ -0,0 +1,204 @@
+.top {
+  width: 100%;
+  height: 100rpx;
+  background-color: #26A2FF;
+  margin-bottom: 100rpx;
+  color: #fff;
+  text-align: center;
+}
+.li{
+  background: #fff;
+  margin-bottom: 0.2rem;
+  border-radius: 5px;
+}
+.context {
+  overflow: hidden;
+  text-overflow: ellipsis;
+  display: -webkit-box;
+  -webkit-line-clamp: 2;
+  -webkit-box-orient: vertical;
+  margin-bottom: 0.1rem;
+  height: 0.8rem;
+}
+.dates image {
+  width: 36rpx;
+  height: 36rpx;
+  margin-right: 10rpx;
+  position: relative;
+  top: 6rpx;
+}
+
+.dates {
+  width: 200rpx;
+  margin: 0 auto;
+  text-align: center;
+}
+
+.head {
+  position: absolute;
+  top: 30rpx;
+  left: 32rpx;
+  right: 32rpx;
+  border-radius: 20rpx;
+  background-color: #fff;
+  box-shadow: 0 0.04rem 0.12rem 0 rgba(0, 0, 0, .05);
+  height: 140rpx;
+  text-align: center;
+}
+.head .flex-1{
+  position: relative;
+}
+.activeIndex::after{
+  content: "";
+  position: absolute;
+  bottom: -0.1rem;
+  height: 4rpx;
+  width: 1rem;
+  background: #26A2FF;
+  left: 50%;
+  margin-left: -0.5rem;
+}
+.head .flex-1 view:nth-child(1) {
+  color: #26A2FF;
+  font-weight: 600;
+  margin-bottom: 10rpx;
+  font-size: 40rpx;
+}
+
+.head .flex-1 view:nth-child(2) {
+  color: #C0C4CC;
+  margin-bottom: 5rpx;
+  font-size: 28rpx;
+}
+
+.headed {
+  background-color: #fff;
+}
+
+.headed-box {
+  padding: 28rpx;
+  color: #303133;
+}
+
+.title {
+  color: #222;
+  position: relative;
+  font-size: 32rpx;
+  font-weight: 600;
+  padding-left: 20rpx;
+  margin: 24rpx 0;
+}
+.text::after {
+	position: absolute;
+	top: 50%;
+	right: -20rpx;
+	margin-top: -0.1rem;
+	border: 0.06rem solid;
+	border-color: transparent transparent #C0C4CC #C0C4CC;
+	-webkit-transform: rotate(-45deg);
+	transform: rotate(-45deg);
+	opacity: .8;
+	content: '';
+}
+.title::before {
+  position: absolute;
+  content: "";
+  height: 30rpx;
+  left: 0;
+  top: 3rpx;
+  width: 8rpx;
+  background-color: #26A2FF;
+  border-radius: 50rpx;
+}
+
+.f2-chart {
+  width: 100%;
+  height: 400rpx;
+}
+
+/* 底部 */
+
+.main {
+  padding:0 28rpx;
+}
+
+.list {
+  padding: 28rpx 0;
+  border-top: 1px solid #f1f1f1;
+  font-size: 32rpx;
+}
+
+.text {
+  margin-right: 10rpx;
+  color: #303133;
+}
+
+.main .gengduo image {
+  width: 24rpx;
+  height: 24rpx;
+  position: relative;
+  top: 4rpx;
+}
+
+.gengduo {
+  color: #303133;
+  font-size: 32rpx;
+}
+
+.num {
+  font-size: 40rpx;
+}
+
+.dates text::after {
+  position: absolute;
+  /* position: relative; */
+  top: 50%;
+  right: -20rpx;
+  margin-top: -0.1rem;
+  border: 0.06rem solid;
+  border-color: transparent transparent #fff #fff;
+  -webkit-transform: rotate(-45deg);
+  transform: rotate(-45deg);
+  opacity: .8;
+  content: '';
+}
+
+.dates .activeView::after {
+  margin-top: -0.02rem;
+  -webkit-transform: rotate(135deg);
+  transform: rotate(135deg);
+  border-color: transparent transparent #fff #fff;
+}
+
+.ticket-list__item {
+  margin-bottom: .24rem;
+  background: #fff;
+  border-radius: .2rem;
+  width: 100%;
+}
+
+.ticket_left {
+  padding: 0 .24rem;
+  margin: .24rem 0;
+  display: -webkit-box;
+  text-overflow: ellipsis;
+  overflow: hidden;
+  -webkit-line-clamp: 2;
+  -webkit-box-orient: vertical;
+  line-height: .6rem;
+}
+
+.ticket_right {
+  padding: .24rem;
+  font-size: .32rem;
+  text-align: center;
+  border-top-right-radius: .2rem;
+  border-bottom-right-radius: .2rem;
+  color: #fff;
+  background: #c6edff;
+  background: linear-gradient(-160deg, #26a2ff, #5cb6f9);
+}
+
+.scroll {
+  height: calc(100vh - 2.9rem);
+}

+ 40 - 0
pages/statistics/myGrant - 副本/myGrant.axml

@@ -0,0 +1,40 @@
+<view>
+  <view class="headed"><view class="top"></view></view>
+  <view class="head flex-box flex-center-center">
+    <view class="{{tabIndex==1?'activeIndex':''}} flex-1" data-index="1" catchTap="tabActive">
+      <view>{{month_total}}</view>
+      <view>{{dateStr}}月奖票</view>
+    </view>
+    <view class="{{tabIndex==2?'activeIndex':''}} flex-1" data-index="2" catchTap="tabActive">
+      <view>{{total}}</view>
+      <view>累计奖票</view>
+    </view>
+  </view>
+  <view class="main">
+    
+    <view class="title" style="padding-bottom:0rpx">
+      <text style="position: relative;"  class="{{showDate? 'activeView':''}} text" catchTap="openDate" a:if="{{tabIndex==1}}">{{date}}</text>
+      <text a:else>累计奖票</text>
+    </view>
+
+    <scroll-view class="scroll" a:if="{{list.length>0}}" scroll-y="{{true}}" onScrollToLower="onScrollToLower">
+      <view class="flex-box-ce li " a:for="{{list}}" catchTap="openDetail" data-item="{{item}}" key="{{item.id}}">
+        <view class="flex-box-v flex-center-center" style="width:140rpx;background:#C3E0FD;height:160rpx">
+          <image mode="scaleToFill" src="../../../image/pj.png" style="width:60rpx;height:60rpx;margin-bottom:0.1rem"/>
+          <text style="font-size:28rpx">奖票</text>
+        </view>
+        <view class="flex-1" style="padding:16rpx 20rpx">
+          <view class="context">
+           在本题中,读入一个无向图的邻接矩阵(即数组表示),建立无向图并按照以上描述中的算法遍历所有顶点,输出遍历
+           顶点的顺序。【输入形式】输入的第一行包含一个正整数n,表示图中共有n个顶点。其中n不超过50。以后的n行中每行有n个用空格隔
+          </view>
+          <view class="flex-box-ce fontColorC" style="font-size:28rpx">
+            <text class="flex-1">某某某</text>
+            <text class="">2024-08-04</text>
+          </view>
+        </view>
+     </view>
+    </scroll-view>
+     <no-data a:if="{{list.length==0}}" content="没有奖票" />
+  </view>
+</view>

+ 87 - 0
pages/statistics/myGrant - 副本/myGrant.js

@@ -0,0 +1,87 @@
+
+var app = getApp()
+var that;
+import moment from 'moment' // 时间库
+Page({
+  data: {
+    date: app.globalData.month,
+    list: [1,2,3,4,5,5,5,5,5,5],
+    page: 1,
+    month_total: 0,
+    total: 0,
+    tabIndex:1,
+    dateStr:moment().format('M'),
+  },
+  onLoad() {
+    that = this;
+    dd.setNavigationBar({ title: "我的奖票" });
+    this.getData();
+  },
+  tabActive(e){
+    var index = e.target.dataset.index;//获取itemS集合中对应的files
+    this.setData({
+      tabIndex:index
+    })
+  },
+  //选择时间
+  openDate(e) {
+    dd.datePicker({
+      format: 'yyyy-MM',
+      currentDate: that.data.date,
+      success: (res) => {
+        that.setData({
+          date: res.date,
+          dateStr:moment(res.date).format('M'),
+        })
+        if (res.date) {
+          that.getData();
+        }
+      },
+    });
+  },
+  //上啦加载
+  onScrollToLower() {
+    if (!that.data.isData) {
+      this.setData({ page: ++that.data.page })
+    }
+  },
+  getData(is) {
+    var data = {
+      page: this.data.page,
+      page_size: 20,
+      employee_id: app.globalData.userData.id,
+      month: this.data.date
+    }
+    app.$get('/api/integral/ticket', data).then((res) => {
+      var data = res.data.data.month_list;
+      var list = that.data.list;
+      this.setData({
+        month_total: res.data.data.month_total,
+        total: res.data.data.total
+      })
+      if (is) {
+        if (data.length < 20) {
+          this.setData({
+            list: list.concat(data),
+            isData: true
+          })
+        } else {
+          this.setData({
+            list: list.concat(data)
+          })
+        }
+      } else {
+        this.setData({
+          list: data,
+          isData: false
+        })
+      }
+    })
+  },
+  //打开更多
+  openMore() {
+    dd.navigateTo({
+      url: '../../statistics/integralEvent/integralEvent?month=' + this.data.date + '&type=BF'
+    })
+  },
+});

+ 6 - 0
pages/statistics/myGrant - 副本/myGrant.json

@@ -0,0 +1,6 @@
+{
+    "usingComponents": {
+        "f2": "@antv/my-f2",
+        "no-data":"/Component/noData/noData"
+    }
+}

+ 1 - 2
pages/statistics/myGrant/myGrant.js

@@ -1,4 +1,3 @@
-
 var app = getApp()
 var that;
 Page({
@@ -74,4 +73,4 @@ Page({
       url: '../../statistics/integralEvent/integralEvent?month=' + this.data.date + '&type=BF'
     })
   },
-});
+});

+ 14 - 2
pages/statistics/my_PrizeBuckle/my_PrizeBuckle.acss

@@ -9,6 +9,18 @@
 .selectItems{
     margin-top: 20rpx;
 }
+.staff-all{
+  background: rgba(245, 247, 250, 1);
+  padding: 10rpx 32rpx;
+}
+.rule-all-text{
+  font-size: 28rpx;
+  color: #999;
+  position: relative;
+  right: 10rpx;
+  bottom: 5rpx;
+  top: 0rpx;
+}
 .selectItems .selectImg{
     border-left: 1px solid #f1f1f1;
     padding: 0 20rpx;
@@ -78,5 +90,5 @@
   padding: 0 6rpx;
 }
 .scroll {
-  height:  calc(100vh - 225rpx);
-}
+  height:  calc(100vh - 220rpx);
+}

+ 96 - 53
pages/statistics/my_PrizeBuckle/my_PrizeBuckle.axml

@@ -1,5 +1,5 @@
 <view>
-  <view class="header margin-bottom">
+  <view class="header">
     <form onReset="onReset">
       <view class="search flex-box flex-v-ce">
         <image mode="scaleToFill" src="../../../image/ss.png"></image>
@@ -11,66 +11,109 @@
       <view data-index="1" class="{{activeIndex == 1? 'active':''}} flex-1" catchTap="activeItem">奖扣成功</view>
       <view data-index="2" class="{{activeIndex == 2? 'active':''}} flex-1" catchTap="activeItem">待审批</view>
       <view data-index="3" class="{{activeIndex == 3? 'active':''}} flex-1" catchTap="activeItem">被驳回</view>
+      <view data-index="4" class="{{activeIndex == 4? 'active':''}} flex-1" catchTap="activeItem">已复核</view>
     </view>
   </view>
-  <view class="orangeText" a:if="{{config.event_review_status==1&&config.event_entry_review==1}}">复核开启后,积分需管理员复核后才计入排名和统计</view>
-  <view class="main scroll">
-    <scroll-view class="scroll" style="{{(config.event_review_status==1&&config.event_entry_review==1)?'height: calc(100vh - 2.6rem)':''}}" 
-      a:if="{{activeIndex==1&&list.length>0}}" scroll-y="{{true}}" onScrollToLower="onScrollToLower">
-      <view class="flex-box li border-bottom" data-index="1" a:for="{{list}}" catchTap="openDetail" data-item="{{item}}" 
-        key="{{item.id}}">
-        <img-box name="{{item.employee_name}}" key="{{item.id}}" imgUrl="{{item.employee_img_url}}" height="80rpx" width="80rpx" 
-          fSize="24rpx"></img-box>
-        <view class="flex-1 main-right">
-          <view class="flex-box flex-v-ce">
-            <view class="name flex-1">{{item.employee_name}}</view>
-            <view class="red" a:if="{{item.point>0}}">+{{item.point}} {{item.pt_name}}</view>
-            <view class="green" a:else>{{item.point}} {{item.pt_name}}</view>
-          </view>
-          <view class="context" a:if="{{item.remark}}">{{item.remark}}</view>
-          <view class="flex-box flex-v-ce">
-            <view class="date flex-1">{{item.event_time}}</view>
-            <view class="redBox" a:if="{{item.point>0}}">奖分成功</view>
-            <view class="greenBox" a:else>扣分成功</view>
-          </view>
-        </view>
+  <view class="orangeText" style="height:0.4rem" a:if="{{isFig}}">
+    <text >复核开启后,积分需管理员复核后才计入排名和统计</text>
+  </view>
+  <view a:else style="height:0.2rem"></view>
+  <view class="main">
+    <block a:if="{{list.length>0}}">
+      <view class="flex-box flex-v-ce staff-all" a:if="{{activeIndex==4}}">
+        <view class="flex-1"></view>
+        <label class="flex-box-ce">
+          <text class="rule-all-text">只看不通过的</text>
+          <checkbox onChange="ruleActiveAll" checked="{{isAllChecked}}"></checkbox>
+        </label>
       </view>
-      <view class="noDatas" a:if="{{isData}}">没有更多咯</view>
-    </scroll-view>
-    <scroll-view class="scroll" a:if="{{activeIndex==2&&list.length>0}}" scroll-y="{{true}}" onScrollToLower="onScrollToLower">
-      <view class="flex-box li border-bottom" data-index="2" a:for="{{list}}" catchTap="openDetail" data-item="{{item}}">
-        <img-box name="{{item.employee_name}}" imgUrl="{{item.employee_img_url}}" height="70rpx" width="70rpx" fSize="24rpx"></img-box>
-        <view class="flex-1 main-right">
-          <view class="flex-box flex-v-ce">
-            <view class="name flex-1">{{item.employee_name}}</view>
-            <!--<view class="red" a:if="{{item.point>0}}">+{{item.point}}</view><view class="green" a:else>{{item.point}}</view> -->
+      <scroll-view class="scroll" a:if="{{activeIndex==1}}" style="{{isFig?'height: calc(100vh - 2.4rem)':''}}" scroll-y="{{true}}" onScrollToLower="onScrollToLower">
+        <view class="flex-box li border-bottom" data-index="1" a:for="{{list}}" catchTap="openDetail" data-item="{{item}}"  key="{{item.id}}">
+          <img-box name="{{item.employee_name}}" key="{{item.id}}" imgUrl="{{item.employee_img_url}}" height="80rpx" width="80rpx" 
+            fSize="24rpx"></img-box>
+          <view class="flex-1 main-right">
+            <view class="flex-box flex-v-ce">
+              <view class="name flex-1">{{item.employee_name}}</view>
+              <view class="red" a:if="{{item.point>0}}">+{{item.point}} {{item.pt_name}}</view>
+              <view class="green" a:else>{{item.point}} {{item.pt_name}}</view>
+            </view>
+            <view class="context" a:if="{{item.remark}}">{{item.remark}}</view>
+            <view class="flex-box flex-v-ce">
+              <view class="date flex-1">{{item.event_time}}</view>
+              <block a:if="{{activeIndex==1}}">
+                <view class="redBox" a:if="{{item.point>0}}">奖分成功</view>
+                <view class="greenBox" a:else>扣分成功</view>
+              </block>
+              <block a:else>
+                <!-- <view class="greenBox" a:if="{{item.dc_status==1}}">复核通过</view> -->
+                <view class="redBox" a:if="{{item.dc_status==2}}">复核不通过</view>
+              </block>
+            </view>
           </view>
-          <view class="context" a:if="{{item.remark}}">{{item.remark.customize}}</view>
-          <view class="flex-box flex-v-ce">
-            <view class="date flex-1">{{item.event_time}}</view>
-            <view class="yellowBox" a:if="{{item.status==0}}">待审批</view>
+        </view>
+        <view class="noDatas" a:if="{{isData}}">没有更多咯</view>
+      </scroll-view>
+      <scroll-view class="scroll" a:if="{{activeIndex==4}}" scroll-y="{{true}}" style="height:  calc(100vh - 2.8rem);{{isFig?'height: calc(100vh - 3rem)':''}}" onScrollToLower="onScrollToLower">
+        <view class="flex-box li border-bottom" data-index="3" a:for="{{list}}" catchTap="openDetail" data-item="{{item}}"  key="{{item.id}}">
+          <img-box name="{{item.employee_name}}" key="{{item.id}}" imgUrl="{{item.employee_img_url}}" height="80rpx" width="80rpx" 
+            fSize="24rpx"></img-box>
+          <view class="flex-1 main-right">
+            <view class="flex-box flex-v-ce">
+              <view class="name flex-1">{{item.employee_name}}</view>
+              <view class="red" a:if="{{item.point>0}}">+{{item.point}} {{item.pt_name}}</view>
+              <view class="green" a:else>{{item.point}} {{item.pt_name}}</view>
+            </view>
+            <view class="context" a:if="{{item.remark}}">{{item.remark}}</view>
+            <view class="flex-box flex-v-ce">
+              <view class="date flex-1">{{item.event_time}}</view>
+              <block a:if="{{activeIndex==1}}">
+                <view class="redBox" a:if="{{item.point>0}}">奖分成功</view>
+                <view class="greenBox" a:else>扣分成功</view>
+              </block>
+              <block a:else>
+                <!-- <view class="greenBox" a:if="{{item.dc_status==1}}">复核通过</view> -->
+                <view class="redBox" a:if="{{item.dc_status==2}}">复核不通过</view>
+              </block>
+            </view>
           </view>
         </view>
-      </view>
-      <view class="noDatas" a:if="{{isData}}">没有更多咯</view>
-    </scroll-view>
-    <scroll-view class="scroll" a:if="{{activeIndex==3&&list.length>0}}" scroll-y="{{true}}" onScrollToLower="onScrollToLower">
-      <view class="flex-box li border-bottom" data-index="2" a:for="{{list}}" catchTap="openDetail" data-item="{{item}}">
-        <img-box name="{{item.employee_name}}" imgUrl="{{item.employee_img_url}}" height="70rpx" width="70rpx" fSize="24rpx"></img-box>
-        <view class="flex-1 main-right">
-          <view class="flex-box flex-v-ce">
-            <view class="name flex-1">{{item.employee_name}}</view>
-            <!--<view class="red" a:if="{{item.point>0}}">+{{item.point}}</view><view class="green" a:else>{{item.point}}</view> -->
+        <view class="noDatas" a:if="{{isData}}">没有更多咯</view>
+      </scroll-view>
+      <scroll-view class="scroll" a:if="{{activeIndex==2}}" style="{{isFig?'height: calc(100vh - 2.4rem)':''}}" scroll-y="{{true}}" onScrollToLower="onScrollToLower">
+        <view class="flex-box li border-bottom" data-index="2" a:for="{{list}}" catchTap="openDetail" data-item="{{item}}">
+          <img-box name="{{item.employee_name}}" imgUrl="{{item.employee_img_url}}" height="70rpx" width="70rpx" fSize="24rpx"></img-box>
+          <view class="flex-1 main-right">
+            <view class="flex-box flex-v-ce">
+              <view class="name flex-1">{{item.employee_name}}</view>
+              <!--<view class="red" a:if="{{item.point>0}}">+{{item.point}}</view><view class="green" a:else>{{item.point}}</view> -->
+            </view>
+            <view class="context" a:if="{{item.remark}}">{{item.remark.customize}}</view>
+            <view class="flex-box flex-v-ce">
+              <view class="date flex-1">{{item.event_time}}</view>
+              <view class="yellowBox" a:if="{{item.status==0}}">待审批</view>
+            </view>
           </view>
-          <view class="context" a:if="{{item.remark}}">{{item.remark.customize}}</view>
-          <view class="flex-box flex-v-ce">
-            <view class="date flex-1">{{item.event_time}}</view>
-            <view class="redBox" a:if="{{item.status==2}}">被驳回</view>
+        </view>
+        <view class="noDatas" a:if="{{isData}}">没有更多咯</view>
+      </scroll-view>
+      <scroll-view class="scroll" a:if="{{activeIndex==3}}" style="{{isFig?'height: calc(100vh - 2.4rem)':''}}" scroll-y="{{true}}" onScrollToLower="onScrollToLower">
+        <view class="flex-box li border-bottom" data-index="2" a:for="{{list}}" catchTap="openDetail" data-item="{{item}}">
+          <img-box name="{{item.employee_name}}" imgUrl="{{item.employee_img_url}}" height="70rpx" width="70rpx" fSize="24rpx"></img-box>
+          <view class="flex-1 main-right">
+            <view class="flex-box flex-v-ce">
+              <view class="name flex-1">{{item.employee_name}}</view>
+              <!--<view class="red" a:if="{{item.point>0}}">+{{item.point}}</view><view class="green" a:else>{{item.point}}</view> -->
+            </view>
+            <view class="context" a:if="{{item.remark}}">{{item.remark.customize}}</view>
+            <view class="flex-box flex-v-ce">
+              <view class="date flex-1">{{item.event_time}}</view>
+              <view class="redBox" a:if="{{item.status==2}}">被驳回</view>
+            </view>
           </view>
         </view>
-      </view>
-      <view class="noDatas" a:if="{{isData}}">没有更多咯</view>
-    </scroll-view>
-    <no-data a:if="{{list.length==0}}"></no-data>
+        <view class="noDatas" a:if="{{isData}}">没有更多咯</view>
+      </scroll-view>
+    </block>
+    <no-data a:else></no-data>
   </view>
 </view>

+ 25 - 9
pages/statistics/my_PrizeBuckle/my_PrizeBuckle.js

@@ -6,7 +6,8 @@ Page({
     date: app.globalData.month,
     activeIndex: 1,
     page: 1,
-    config: {},
+    isFig: false,
+    isAllChecked:false,
   },
   onLoad(e) {
     if (e.index) {
@@ -14,8 +15,9 @@ Page({
         activeIndex: e.index,
       })
     }
+    let config=app.globalData.config;
     this.setData({
-      config: app.globalData.config
+      isFig: config.event_review_status==1&&config.event_apply_review==1
     })
     that = this;
     dd.setNavigationBar({ title: "我奖扣的" });
@@ -41,6 +43,10 @@ Page({
       }, function () { })
     }
   },
+  ruleActiveAll(e){
+    this.setData({page: 1, list: [],isAllChecked:e.detail.value })
+    this.getData(that.data.activeIndex);
+  },
   onReset() {
     this.setData({
       keyword: '',
@@ -58,7 +64,7 @@ Page({
     this.getData(that.data.activeIndex);
   },
   getData(index, is) {
-    var urlS = ['api/integral/statistics/integral', 'api/integral/review/entry/list', 'api/integral/review/entry/list'];
+    var urlS = ['api/integral/statistics/integral', 'api/integral/review/entry/list', 'api/integral/review/entry/list','api/integral/statistics/integral'];
     var data;
     if (index == 1) {
       data = {
@@ -67,7 +73,7 @@ Page({
         recorder_id: app.globalData.userData.id,
         source_type: 1,
         keyword: that.data.keyword,
-        order_key:'update_time'
+        // order_key:'update_time'
       }
     } else if (index == 2) {
       data = {
@@ -77,7 +83,7 @@ Page({
         pt_id: 0,
         keyword: that.data.keyword
       }
-    } else {
+    } else if (index == 3){
       data = {
         page: that.data.page,
         page_size: 20,
@@ -85,18 +91,24 @@ Page({
         pt_id: 0,
         keyword: that.data.keyword
       }
+    }else{
+      data = {
+        page: that.data.page,
+        page_size: 20,
+        recorder_id: app.globalData.userData.id,
+        source_type: 1,
+        keyword: that.data.keyword,
+        dc_status:that.data.isAllChecked? '[2]':'[1,2]',
+      }
     }
     app.$get(urlS[index - 1], data).then((res) => {
       var data = res.data.data.list;
       var list = that.data.list;
-
       data.forEach(element => {
         if (element.pt_id) {
           element.pt_name = app.getTypesItem(element.pt_id).name
         }
       });
-
-
       if (is) {
         if (data.length < 20) {
           this.setData({
@@ -128,10 +140,14 @@ Page({
       dd.navigateTo({
         url: '../prizeBuckleDetail/prizeBuckleDetail?id=' + id
       })
-    } else {
+    } else if(index== '2') {
       dd.navigateTo({
         url: '../../workbench/approveDetail/approveDetail?id=' + id + '&is=' + true
       })
+    }else{
+      dd.navigateTo({
+        url: '../../workbench/reviewDetail/reviewDetail?id=' + id +'&is=' + true
+      })
     }
   },
   //上啦加载

+ 13 - 1
pages/statistics/my_apply/my_apply.acss

@@ -10,6 +10,18 @@
   height: 30rpx;
   margin-left: 10rpx;
 }
+.staff-all{
+  background: rgba(245, 247, 250, 1);
+  padding: 10rpx 32rpx;
+}
+.rule-all-text{
+  font-size: 28rpx;
+  color: #999;
+  position: relative;
+  right: 10rpx;
+  bottom: 5rpx;
+  top: 0rpx;
+}
 .header{
   background: #fff;
   padding: 28rpx;
@@ -83,6 +95,6 @@
   padding: 0 6rpx;
 }
 .scroll {
-  height:  calc(100vh - 225rpx);
+  height:  calc(100vh - 220rpx);
 }
 

+ 15 - 4
pages/statistics/my_apply/my_apply.axml

@@ -1,5 +1,5 @@
 <view>
-  <view class="header margin-bottom">
+  <view class="header">
   <form onReset="onReset">
     <view class="search flex-box flex-v-ce">
       <image mode="scaleToFill" src="../../../image/ss.png"></image>
@@ -14,9 +14,19 @@
       <view data-index="1" class="{{activeIndex == 1? 'active':''}} flex-1" catchTap="activeItem">已复核</view>
     </view>
   </view>
-  <view class="orangeText" a:if="{{config.event_review_status==1&&config.event_apply_review==1}}">复核开启后,积分需管理员复核后才计入排名和统计</view>
-  <view class="main scroll">
-    <scroll-view class="scroll" style="{{(config.event_review_status==1&&config.event_apply_review==1)?'height: calc(100vh - 2.68rem)':''}}" a:if="{{list.length>0}}" scroll-y="{{true}}" onScrollToLower="onScrollToLower">
+  <view class="orangeText" style="height:0.4rem" a:if="{{isFig}}">
+    <text >复核开启后,积分需管理员复核后才计入排名和统计</text>
+  </view>
+  <view a:else style="height:0.2rem"></view>
+  <view class="main">
+    <view class="flex-box flex-v-ce staff-all" a:if="{{activeIndex==1}}">
+      <view class="flex-1"></view>
+      <label class="flex-box-ce">
+        <text class="rule-all-text">只看不通过的</text>
+        <checkbox onChange="ruleActiveAll" checked="{{isAllChecked}}"></checkbox>
+      </label>
+    </view>
+    <scroll-view class="scroll" style="{{isFig?'height: calc(100vh - 2.4rem)':''}}{{activeIndex == 1&&isFig?'height: calc(100vh - 3.1rem)':'height: calc(100vh - 2.86rem)'}}" a:if="{{list.length>0}}" scroll-y="{{true}}" onScrollToLower="onScrollToLower">
       <view class="flex-box li border-bottom" catchTap="openDetail" a:for="{{list}}" data-item="{{item}}" key="{{item.id}}">
         <view class="flex-1 main-right">
           <view class="flex-box">
@@ -35,6 +45,7 @@
             <view class="yellowBox" a:if="{{item.status == 0}}">待审批</view>
             <view class="greenBox" a:if="{{item.status == 1}}">申请成功</view>
             <view class="redBox" a:if="{{item.status == 2}}">被驳回</view>
+            <view class="redBox" a:if="{{item.dc_status == 2}}">不通过</view>
           </view>
         </view>
       </view>

+ 20 - 5
pages/statistics/my_apply/my_apply.js

@@ -7,7 +7,8 @@ Page({
     activeIndex: 3,
     $moment:'',
     page: 1,
-    config: {},
+    isFig: false,
+    isAllChecked:false,
   },
   onLoad(e) {
     if (e.index) {
@@ -15,8 +16,9 @@ Page({
         activeIndex: e.index,
       })
     }
+    let config=app.globalData.config;
     this.setData({
-      config: app.globalData.config,
+      config:  config.event_review_status==1&&config.event_apply_review==1,
       $moment:moment
     })
     that = this;
@@ -27,6 +29,10 @@ Page({
       that.getData();
     }
   },
+  ruleActiveAll(e){
+    this.setData({page: 1, list: [],isAllChecked:e.detail.value })
+    this.getData(that.data.activeIndex);
+  },
   onReset() {
     this.setData({
       keyword: '',
@@ -56,6 +62,7 @@ Page({
     if (activeIndex == 1) {
       data.type = "all"
       url='api/integral/statistics/event';
+      data.dc_status=that.data.isAllChecked? '2':'1,2';
       delete data.pt_id
     } else if (activeIndex == 2) {
       data.type = "complete"
@@ -104,9 +111,17 @@ Page({
   },
   openDetail(e) {
     var id = e.target.dataset.item.id;
-    dd.navigateTo({
-      url: '../../workbench/approveDetail/approveDetail?id=' + id + '&is=' + true
-    })
+    var activeIndex = that.data.activeIndex;
+    // console.log(activeIndex)
+    if (activeIndex == 1) {
+      dd.navigateTo({
+        url: '../../workbench/reviewDetail/reviewDetail?id=' + id +'&is=' + true
+      })
+    }else{
+      dd.navigateTo({
+        url: '../../workbench/approveDetail/approveDetail?id=' + id + '&is=' + true
+      })
+    }
   },
   //上啦加载
   onScrollToLower() {

+ 1 - 1
pages/statistics/my_sp/my_sp.js

@@ -24,7 +24,7 @@ Page({
     ],
 
     popupCx: '',
-     config: {},  
+    config: {},  
   },
   onLoad(e) {
     that = this;

+ 4 - 3
pages/statistics/offerAreward/offerAreward.axml

@@ -2,7 +2,7 @@
   <view class="{{popupCx}}">
     <view class="inputs">
       <view class="li">
-        <textarea class="textarea" maxlength="20" value="{{items.task_name}}" onInput="bindTextAreaBlur" placeholder="请输入任务内容" data-index="{{index}}"></textarea>
+        <textarea class="textarea" maxlength="100" value="{{items.task_name}}" onInput="bindTextAreaBlur" placeholder="请输入任务内容" data-index="{{index}}"></textarea>
         <image mode="scaleToFill" src="../../../image/addImg.png" class="addImg" catchTap="openImg"/>
       </view>
       <view style="background:#fff;padding:0 28rpx;" a:if="{{items.file_list[0]}}" class="flex-box flex-v-ce">
@@ -55,6 +55,7 @@
             </view>
           </view>
           <block a:if="{{selectRule}}">
+            <view style="color: #333; margin-bottom: 5px; margin-top: 10px;text-align:left">{{selectRule.remark}}</view>
             <view class="fontColorD input_text" a:if="{{selectRule.range_type==1&&selectRule.min_point==selectRule.max_point}}">固定:{{selectRule.min_point}} {{selectRule.pt_Obj[0].name}}</view>
             <view class="fontColorD input_text" a:else> 范围(可修改):{{selectRule.min_point}}至{{selectRule.max_point}}
               <text>{{selectRule.pt_Obj[0].name}}</text></view>
@@ -63,7 +64,7 @@
       </view>
       <view class="flex-box li margin-bottom" style="padding:15rpx 28rpx;margin-top:24rpx" a:else>
         <view class="label isBt" style="position: relative;top:10rpx;">任务积分</view>
-        <text class="red" style="position: relative;top:10rpx;">+</text>
+        <text class="red" style="position: relative;top:10rpx;"></text>
         <view class="flex-1">
           <input value="{{items.base_point2}}" placeholder="0" type="number" onInput="bindKeyInput2" class="flex-1"/>
         </view>
@@ -94,7 +95,7 @@
         <image mode="scaleToFill" src="../../../image/right.png" class="rightImg"/>
       </view>
       <view class="li">
-        <textarea maxlength="300" value="{{items.task_remark}}" onInput="bindTextAreaBlur2" placeholder="请输入任务描述" data-index="{{index}}"></textarea>
+        <textarea maxlength="300" value="{{items.task_remark}}" onInput="bindTextAreaBlur2" placeholder="请输入任务备注" data-index="{{index}}"></textarea>
       </view>
       <view class="flex-box li" style="padding:15rpx 28rpx;">
         <view class="label2" style="position: relative;top:10rpx;">提前奖分(天)</view>

+ 5 - 8
pages/statistics/offerAreward_set/offerAreward_set.axml

@@ -1,9 +1,8 @@
 <view>
   <view class="{{popupCx}}">
     <view class="inputs">
-
       <view class="li">
-        <textarea class="textarea" maxlength="20" value="{{items.task_name}}" onInput="bindTextAreaBlur" placeholder="请输入任务内容" data-index="{{index}}"></textarea>
+        <textarea class="textarea" maxlength="100" value="{{items.task_name}}" onInput="bindTextAreaBlur" placeholder="请输入任务内容" data-index="{{index}}"></textarea>
         <image mode="scaleToFill" src="../../../image/addImg.png" class="addImg" catchTap="openImg"/>
       </view>
       <view style="background:#fff;padding:0 28rpx;" a:if="{{items.file_list[0]}}" class="flex-box flex-v-ce">
@@ -37,7 +36,6 @@
         <view class="flex-1">{{items.rule_name}}</view>
         <image mode="scaleToFill" src="../../../image/right.png" class="rightImg"/>
       </view>
-
       <view class="flex-box li margin-bottom" style="padding:15rpx 28rpx;margin-top:24rpx" a:if="{{items.checked}}">
         <view class="label isBt" style="position: relative;top:8rpx;">任务积分</view>
         <text class="red" style="position: relative;top:8rpx;" a:if="{{isArrindex==true}}">+</text>
@@ -55,6 +53,7 @@
             </view>
           </view>
           <block a:if="{{selectRule}}">
+            <view style="color: #333; margin-bottom: 5px; margin-top: 10px;text-align:left">{{selectRule.remark}}</view>
             <view class="fontColorD input_text" a:if="{{selectRule.range_type==1&&selectRule.min_point==selectRule.max_point}}">固定:{{selectRule.min_point}} {{items.pt_name}}</view>
             <view class="fontColorD input_text" a:else> 范围(可修改):{{selectRule.min_point}}至{{selectRule.max_point}}
               <text>{{items.pt_name}}</text>
@@ -62,16 +61,14 @@
           </block>
         </view>
       </view>
-
       <view class="flex-box li margin-bottom" style="padding:15rpx 28rpx;margin-top:24rpx" a:else>
         <view class="label isBt" style="position: relative;top:10rpx;">任务积分</view>
-        <text class="red" style="position: relative;top:10rpx;">+</text>
+        <text class="red" style="position: relative;top:10rpx;"></text>
         <view class="flex-1">
           <input value="{{items.base_point2}}" placeholder="0" type="number" onInput="bindKeyInput2" class="flex-1"/>
         </view>
       </view>
-
-
+     
       <view class="flex-box flex-v-ce li" data-num="2" data-item="{{{id:items.reviewer_id,name:items.revieweName}}}" catchTap="openSelect">
         <view class="label isBt">审批人</view>
         <view class="flex-1">{{items.revieweName}}</view>
@@ -83,7 +80,7 @@
         <image mode="scaleToFill" src="../../../image/right.png" class="rightImg"/>
       </view>
       <view class="li">
-        <textarea maxlength="100" value="{{items.task_remark}}" onInput="bindTextAreaBlur2" placeholder="请输入任务描述" data-index="{{index}}"></textarea>
+        <textarea maxlength="100" value="{{items.task_remark}}" onInput="bindTextAreaBlur2" placeholder="请输入任务备注" data-index="{{index}}"></textarea>
       </view>
       <view class="flex-box li" style="padding:15rpx 28rpx;">
         <view class="label2" style="position: relative;top:10rpx;">提前奖分(天)</view>

+ 1 - 1
pages/statistics/openPerform/openPerform.axml

@@ -2,7 +2,7 @@
   <view style="height:20rpx"></view>
   <view class="main">
     <view class="itme-li">
-      <textarea maxlength="100" value="{{items.remark}}" onInput="bindTextAreaBlur" placeholder="请输入备注(选填)" data-index="{{index}}"></textarea>
+      <textarea maxlength="200" value="{{items.remark}}" onInput="bindTextAreaBlur" placeholder="请输入备注(选填)" data-index="{{index}}"></textarea>
       <image mode="scaleToFill" src="../../../image/addImg.png" data-index="{{index}}" class="addImg" catchTap="openImg"/>
     </view>
     <view style="background:#fff;padding:0 28rpx;" a:if="{{items.files[0]}}" class="flex-box flex-v-ce">

+ 1 - 1
pages/statistics/prizeBuckleDetail/prizeBuckleDetail.axml

@@ -11,7 +11,7 @@
     </view>
     <view class="header-main">
       <view class="flex-box" a:if="{{dataDetail.remark.customize!=''||dataDetail.remark.rule!=''}}">
-        <view class="laber">任务描述</view>
+        <view class="laber">事件内容</view>
         <view class="flex-1">{{dataDetail.remark.customize || dataDetail.remark.rule}}</view>
       </view>
       <view class="flex-box" a:if="{{dataDetail.files.length>0}}">

+ 1 - 1
pages/statistics/taskSList/taskSList.axml

@@ -16,7 +16,7 @@
                 <text class="red" a:if="{{parameter.index=='1'&&item.sub}}">逾期{{item.sub}}</text>
                 <text class="red" a:if="{{parameter.index=='4'&&item.sub}}">已等待{{item.sub}}</text>
               </text>
-              <button type="primary" class="defBtn" catchTap="activeA" data-item="{{item}}" a:if="{{parameter.index=='1'||parameter.index=='4'}}">催办</button>
+              <button type="primary" class="defBtn" catchTap="activeA" data-item="{{item}}" a:if="{{(parameter.index=='1'||parameter.index=='4')&&isShowBtn}}">催办</button>
             </view>
           </view>
         </view>

+ 8 - 1
pages/statistics/taskSList/taskSList.js

@@ -6,12 +6,19 @@ Page({
     list: [],
     parameter:{},
     isData:true,
+    isShowBtn:true,
   },
   onLoad(e) {
     that = this;
     this.setData({
       parameter: JSON.parse(e.data),
     })
+    if(this.data.parameter.target[0]==app.globalData.userData.id){
+      this.setData({
+        isShowBtn: false,
+      })
+    }
+    console.log(this.data.parameter.target[0],app.globalData.userData.id,this.data.isShowBtn)
     if(this.data.parameter.index=='1'){
        dd.setNavigationBar({ title: "逾期任务" });
     }else if(this.data.parameter.index=='2'){
@@ -117,7 +124,7 @@ Page({
         item.pt_name=item.pt_id==3? 'B分':'A分'
         item.sub= that.formatSeconds(item.sub);
       })
-      console.log(result)
+      // console.log(result)
       var list = that.data.list || [];
 
       that.setData({

+ 1 - 1
pages/statistics/workDetail/workDetail.js

@@ -9,7 +9,7 @@ Page({
     userId: '',
     process: [],
     array: ['编辑任务', '删除任务'],
-    isPublisher: true,//是不是发布者
+    isPublisher: true,//是不是发布者 
     corpId: '',
     isNot:false,
     keepTheScore:false,//是否展示记分

+ 2 - 1
pages/workbench/apply/apply.axml

@@ -41,6 +41,7 @@
           </view>
         </view>
         <view class="li">
+          <view class="flex-box-end"><view catchTap="deleteRemark" data-index="{{index}}" class="red" style="font-size:0.3rem">清空</view></view>
           <textarea value="{{item.remark}}" maxlength="300" onInput="bindTextAreaBlur" placeholder="申请内容" data-index="{{index}}"></textarea>
           <image mode="scaleToFill" src="../../../image/addImg.png" data-index="{{index}}" class="addImg" catchTap="openImg"/>
         </view>
@@ -90,7 +91,7 @@
             <view a:for="{{results}}" class="flex-box-ce results">
               <view style="width:60rpx;padding:0;text-align:center">{{results.length-index}}</view>
               <view class="flex-1">{{item.target}}</view>
-              <view class="flex-2" style="padding: 0.1rem 0.1rem;">{{item.task.msg.remark}}</view>
+              <view class="flex-2" style="padding: 0.1rem 0.1rem;">{{item.remark}}</view>
               <!-- <view class="flex-1">
                 {{ item.point>0? '+'+item.point:item.point }}
                 <text>{{ item.task.msg.pt_id==3? 'B分':'A分' }}</text>

+ 9 - 1
pages/workbench/apply/apply.js

@@ -103,6 +103,14 @@ Page({
       })
     }
   },
+  // 清空内容
+  deleteRemark(e) {
+    var index2 = e.target.dataset.index;
+    var remark = `items[${index2}].remark`;//
+    that.setData({
+      [remark]: ''
+    });
+  },
   //获取系统配置
   cheakAx() {
     app.$get("/api/integral/site/config").then((res) => {
@@ -488,7 +496,7 @@ Page({
         clearTimeout(setTime);
         app.globalData.socketApi.closewebsocket();
       }, 15000)
-      app.globalData.socketApi.sendData(wsData[this.data.resultIndex], this.onmessageWS);
+      app.globalData.socketApi.sendData(wsData[this.data.resultIndex], this.onmessageWS,true);
     } else {
       // console.log(this.data.results)
     }

+ 2 - 2
pages/workbench/approval_batch/approval_batch.js

@@ -140,7 +140,7 @@ Page({
              },
         });
       }, 15000)
-      app.globalData.socketApi.sendData(wsData[this.data.resultIndex], this.onmessageWS);
+      app.globalData.socketApi.sendData(wsData[this.data.resultIndex], this.onmessageWS,true);
     } else {
       // console.log(this.data.results)
     }
@@ -150,7 +150,7 @@ Page({
     if (e.type == 'review') {
        clearTimeout(setTime);
       let data = e.result;
-      let employee = that.returnResult(e.result.task.msg.review_id)[0]
+      let employee = that.returnResult(e.result.source_msg.review_id)[0]
       data.target = employee.employee_name;
       data.remark = employee.remark;
       data.point = employee.point;

+ 7 - 7
pages/workbench/approve/approve.axml

@@ -40,7 +40,7 @@
             <view class="flex-1">
               <view class="flex-box flex-v-ce">
                 <view a:if="{{(item.selectRule.range_type==1&&item.selectRule.min_point==item.selectRule.max_point)||item.pid>0}}" style="padding-left:10rpx; height:60rpx;line-height:60rpx;" class="flex-1">{{item.point}}</view>
-                <input a:else value="{{item.point}}"  placeholder="0" type="number" onInput="bindKeyInput"  class="flex-1"/>
+                <input a:else value="{{item.point}}" maxlength="9"  placeholder="0" type="number" onInput="bindKeyInput"  class="flex-1"/>
                 <view class="picker-box"  catchTap="bindPickerChange" a:if="{{item.selectRule.range_type!=1&&item.pid==0}}">
                   <view class="{{item.isArrindex==true ? 'picker-right':'picker-left'}} yuan"></view>
                   <view class="flex-box flex-v-ce" >
@@ -85,14 +85,14 @@
           </view>
           <view class="flex-box li margin-bottom" style="padding:15rpx 28rpx;">
             <view class="label isBt" style="position: relative;top:8rpx;">积分</view>
-            <text class="red" style="position: relative;top:8rpx;" a:if="{{item.isArrindex==true}}">+</text>
+            <text class="red" style="position: relative;top:8rpx;" a:if="{{item.isArrindex2==true}}">+</text>
             <text class="green" a:else style="position: relative;top:8rpx;">-</text>
             <view class="flex-1">
               <view class="flex-box flex-v-ce">
                 <view a:if="{{(item.selectRule.range_type==1&&item.selectRule.min_point==item.selectRule.max_point)||item.pid>0}}" style="padding-left:10rpx; height:60rpx;line-height:60rpx;" class="flex-1">{{item.point}}</view>
-                <input a:else value="{{item.point}}"  placeholder="0" type="number" onInput="bindKeyInput"  class="flex-1"/>
-                <view class="picker-box"  catchTap="bindPickerChange" a:if="{{item.selectRule.range_type!=1&&item.pid==0}}">
-                  <view class="{{item.isArrindex==true ? 'picker-right':'picker-left'}} yuan"></view>
+                <input a:else value="{{item.point2}}" maxlength="9" placeholder="0" type="number" onInput="bindKeyInput2"  class="flex-1"/>
+                <view class="picker-box"  catchTap="bindPickerChange2" a:if="{{item.selectRule.range_type!=1&&item.pid==0}}">
+                  <view class="{{item.isArrindex2==true ? 'picker-right':'picker-left'}} yuan"></view>
                   <view class="flex-box flex-v-ce">
                     <text class="red flex-1">奖</text>
                     <text class="green flex-1">扣</text>
@@ -151,7 +151,7 @@
             <view class="flex-1">
               <view class="flex-box flex-v-ce">
                 <view a:if="{{item.selectRule.range_type==1&&item.selectRule.min_point==item.selectRule.max_point}}" style="padding-left:10rpx; height:60rpx;line-height:60rpx;" class="flex-1">{{item.point}}</view>
-                <input a:else value="{{item.point}}"  placeholder="0" type="number" onInput="bindKeyInput" class="flex-1"/>
+                <input a:else value="{{item.point}}" maxlength="9" placeholder="0" type="number" onInput="bindKeyInput" class="flex-1"/>
                 <view class="picker-box" catchTap="bindPickerChange" a:if="{{item.selectRule.range_type!=1}}">
                   <view class="{{item.isArrindex==true ? 'picker-right':'picker-left'}} yuan"></view>
                   <view class="flex-box flex-v-ce" >
@@ -173,7 +173,7 @@
             <text class="green" a:else style="position: relative;top:8rpx;">-</text>
             <view class="flex-1">
               <view class="flex-box flex-v-ce">
-                <input value="{{item.point2}}"  placeholder="0" type="number" onInput="bindKeyInput2" class="flex-1"/>
+                <input value="{{item.point2}}" maxlength="9"  placeholder="0" type="number" onInput="bindKeyInput2" class="flex-1"/>
                 <view class="picker-box"  catchTap="bindPickerChange2">
                   <view class="{{item.isArrindex2==true? 'picker-right':'picker-left'}} yuan"></view>
                   <view class="flex-box flex-v-ce" >

+ 1 - 2
pages/workbench/approve/approve.js

@@ -79,7 +79,7 @@ Page({
   formSubmit() {
     var item = that.data.item;
     var data, point;
-    var num = item.checked ? item.point : item.point2
+    var num = item.checked ? item.point : item.point2;
     // console.log(item)
     if (item.checked) {
       if (!item.rule_id) {
@@ -234,7 +234,6 @@ Page({
           getPoint = data.point;
         }
       }
-      console.log(getPoint);
       var isData, selectRule;
       var checked = false;
       if (data.rule_id && data.item_id) {

+ 1 - 1
pages/workbench/index/index.acss

@@ -321,7 +321,7 @@
 }
 
 .numPoint {
-  width: 100rpx;
+  width: 140rpx;
   margin: 0 auto
 }
 

+ 9 - 5
pages/workbench/index/index.axml

@@ -85,12 +85,12 @@
       <view class="flex-1">
         <view>{{userData.task.reward.point}}</view>
         <view class="fontColorB" style="font-size:28rpx">奖分</view>
-        <view class="font-flex-word numPoint">目标{{userData.task.reward.target_point}}</view>
+        <view class="font-flex-word numPoint">目标{{userData.task.reward.target}}</view>
       </view>
       <view class="flex-1">
         <view>{{userData.task.deduction.point}}</view>
         <view class="fontColorB" style="font-size:28rpx">扣分</view>
-        <view class="font-flex-word numPoint">目标{{userData.task.deduction.target_point}}</view>
+        <view class="font-flex-word numPoint">目标{{userData.task.deduction.target}}</view>
       </view>
       <view class="flex-1">
         <view>{{userData.ratio.ratio}}</view>
@@ -100,12 +100,16 @@
       <view class="flex-1">
         <view>{{userData.task.exec.count}}</view>
         <view class="fontColorB" style="font-size:28rpx">奖扣人次</view>
-        <view class="font-flex-word numPoint">目标{{userData.task.exec.target_count}}</view>
+        <view class="font-flex-word numPoint">目标{{userData.task.exec.target}}</view>
       </view>
     </view>
+    <view a:if="{{pieTotal>0}}" class="rankingLists" onTap="openView" style="border-top:1px solid #f1f1f1" data-index="11">
+      <text>查看所有管理者奖扣</text>
+      <image mode="scaleToFill" src="../../../image/right.png" class="img-right2"></image>
+    </view>
   </view>
   <!-- 管理者奖扣 -->
-  <view a:if="{{isAdministrator}}" class="bottom margin-bottom">
+  <!-- <view a:if="{{isAdministrator}}" class="bottom margin-bottom">
     <view class="flex-box flex-v-ce bottom-title">
       <view class="flex-1">管理者奖扣</view>
       <view class="chart-legend__wrap">
@@ -121,7 +125,7 @@
       <text>查看所有管理者奖扣</text>
       <image mode="scaleToFill" src="../../../image/right.png" class="img-right2"></image>
     </view>
-  </view>
+  </view> -->
   <view class="bottom margin-bottom">
     <view class="bottom-title">近30天B分趋势</view>
     <view class="f2-chart">

+ 48 - 17
pages/workbench/index/index.js

@@ -24,6 +24,7 @@ Page({
     menuList: [
       { name: '审批', imgUrl: '../../../image/sp.png', url: '../my_approve/my_approve', code: 'creator admin' },
       { name: '任务', imgUrl: '../../../image/a7.png', url: '../../statistics/my_task/my_task', code: 'admin employee' },
+      { name: '复核', imgUrl: '../../../image/fuhe.png', url: '../review/review', code: 'creator admin' },
       { name: '奖扣B分', imgUrl: '../../../image/point_entry.png', url: '../jk_B/jk_B?type=B', code: 'creator admin' },
       { name: '指派任务', imgUrl: '../../../image/my_publish.png', url: '../../statistics/assaign/assaign', code: 'creator admin' },
       { name: '申请积分', imgUrl: '../../../image/a_apply.png', url: '../apply/apply', code: 'admin employee' },
@@ -31,7 +32,6 @@ Page({
       { name: '领任务', imgUrl: '../../../image/task_hall.png', url: '../../statistics/getTask/getTask', code: 'admin employee' },
       { name: '发布悬赏', imgUrl: '../../../image/caback6.png', url: '../../statistics/offerAreward/offerAreward', code: 'creator admin' },
       { name: '发放奖票', imgUrl: '../../../image/add_ticket.png', url: '../../statistics/grant/grant', code: 'creator admin' },
-      // { name: '福利兑换', imgUrl: '../../../image/fl.png', url: '../../exchange/exchange/exchange', code: 'creator admin employee' },
       { name: '全部', imgUrl: '../../../image/all2.png', url: 'all', code: 'creator admin employee' },
     ],
     isUpdate: false,
@@ -58,6 +58,7 @@ Page({
       that.getUserData();
       that.getGg();
       that.getNotice();
+      that.opneWebSocket();
       let isShowYy=false;
       app.globalData.userData.employee_detail.role_list.forEach(item=>{
         if(item.name=='admin'||item.name=='creator'|| item.name == 'point_manager'){
@@ -99,6 +100,7 @@ Page({
           that.getUserData();
           that.getGg();
           that.getNotice();
+          that.opneWebSocket();
           if(!getCache('init_rule_check')){
             app.globalData.userData.init_rule_check? '':that.setData({ isGz: true})
           }
@@ -156,6 +158,26 @@ Page({
         }
       })
   },
+  opneWebSocket() {
+    let data={type:"es_info",recorder_id:app.globalData.userData.id,month:app.globalData.month};
+    app.globalData.socketApi.sendData(data, (res) => {
+      if (res.code == 1&&res.type=='es_info') {
+          let data = res.result;
+          var task = data.task;
+          var ratio = task.ratio.enable== 0 ? '-' : `${task.ratio.reward_ratio}:1`
+          var target_ratio = task.ratio.target <= 0 ? '0:0' : `${task.ratio.target}:1`
+          data.ratio = {
+            ratio: ratio,
+            target_ratio: target_ratio
+          }
+          that.getLsit();
+          that.setData({
+            userData: data
+          })
+          app.globalData.socketApi.closewebsocket();
+      }
+    }, true);
+  },
   openWs(){
     if(!that.data.islog){
       return false;
@@ -165,6 +187,7 @@ Page({
     })
     app.globalData.socketApi.sendData({type:'init_rule'}, function(e){
         that.setData({islog:true})
+        setCache('init_rule_check',true)
         if (e.type == 'init_rule') {
           if(e.code==1&&e.result.done){
             that.setData({ isGz:false})
@@ -262,8 +285,16 @@ Page({
   setMenuList(str) {
     var arr = [];
     that.data.menuList.forEach(item => {
-      if (item.code.indexOf(str) >= 0) {
-        arr.push(item)
+      if(item.name=='复核'){
+        app.globalData.userData.employee_detail.role_list.forEach(e=>{
+          if(e.name=='admin'||e.name=='creator'|| e.name == 'point_manager'){
+            arr.push(item)
+          }
+        })
+      }else{
+        if (item.code.indexOf(str) >= 0) {
+          arr.push(item)
+        }
       }
     })
     that.setData({
@@ -458,7 +489,7 @@ Page({
       month: app.globalData.month,
       page: 1,
       page_size: 5,
-	  order_key:'update_time',
+	    order_key:'update_time',
       employee_ids: app.globalData.isCreator ? '' : app.globalData.userData.id
     })
     var http3 = app.$get2("api/integral/review/list", { type: 'waiting', source_type: 0, page: 1, pt_id: 0 })
@@ -470,18 +501,18 @@ Page({
 
     Promise.all([http1, http2, http3, ranking, task, work, headDayBs,config]).then(function (values) {
       if (values[0]) {
-        let data = values[0].data.data;
-        var task = data.task;
-        var ratio = task.reward.point === 0 || task.deduction.point === 0 ? '-' : `${task.ratio.ratio}:1`
-        var target_ratio = task.ratio.target_ratio <= 0 ? '0:0' : `${task.ratio.target_ratio}:1`
-        data.ratio = {
-          ratio: ratio,
-          target_ratio: target_ratio
-        }
-        that.getLsit();
-        that.setData({
-          userData: data
-        })
+        // let data = values[0].data.data;
+        // var task = data.task;
+        // var ratio = task.reward.point === 0 || task.deduction.point === 0 ? '-' : `${task.ratio.ratio}:1`
+        // var target_ratio = task.ratio.target_ratio <= 0 ? '0:0' : `${task.ratio.target_ratio}:1`
+        // data.ratio = {
+        //   ratio: ratio,
+        //   target_ratio: target_ratio
+        // }
+        // that.getLsit();
+        // that.setData({
+        //   userData: data
+        // })
       }
       if (values[1]) {
         let data = values[1].data.data.list;
@@ -528,7 +559,7 @@ Page({
               }]
               employees.push(...obj)
             })
-            chart3.changeData(employees);
+            // chart3.changeData(employees);
           }
         }
       }

+ 10 - 10
pages/workbench/jk_B/jk_B.axml

@@ -42,7 +42,7 @@
             <view class="flex-box flex-v-ce">
               <view a:if="{{item.selectRule.range_type==1&&item.selectRule.min_point==item.selectRule.max_point}}" style="padding-left:10rpx; height:60rpx;line-height:60rpx;" 
                 class="flex-1">{{item.point}}</view>
-              <input a:else value="{{item.point}}" name="{{index}}" placeholder="0" type="number" onInput="bindKeyInput" 
+              <input a:else maxlength="9" value="{{item.point}}" name="{{index}}" placeholder="0" type="number" onInput="bindKeyInput" 
                 data-index="{{index}}" class="flex-1" />
               <view class="picker-box" data-index="{{index}}" catchTap="bindPickerChange" a:if="{{item.selectRule.range_type!=1}}">
                 <view class="{{item.isArrindex==true? 'picker-right':'picker-left'}} yuan"></view>
@@ -52,11 +52,11 @@
                 </view>
               </view>
             </view>
-            <block a:if="{{item.selectRule}}">
+            <view a:if="{{item.selectRule}}" style="padding:10rpx">
+              <view style="color: #333; margin-bottom: 5px; margin-top: 10px;text-align:left">{{item.item_name}}</view>
               <view class="fontColorD input_text" a:if="{{item.selectRule.range_type==1&&item.selectRule.min_point==item.selectRule.max_point}}">固定:{{item.selectRule.min_point}} {{item.selectRule.pt_Obj[0].name}}</view>
-              <view class="fontColorD input_text" a:else> 范围(可修改):{{item.selectRule.min_point}}至{{item.selectRule.max_point}}
-                <text>{{item.selectRule.pt_Obj[0].name}}</text></view>
-            </block>
+              <view class="fontColorD input_text" a:else> 范围(可修改):{{item.selectRule.min_point}}至{{item.selectRule.max_point}}<text> {{item.selectRule.pt_Obj[0].name}}</text></view>
+            </view>
           </view>
         </view>
         
@@ -66,9 +66,8 @@
           <text class="green" a:else style="position: relative;top:8rpx;">-</text>
           <view class="flex-1">
             <view class="flex-box flex-v-ce">
-              <input value="{{item.point2}}" name="{{index}}" placeholder="0" type="number" onInput="bindKeyInput2" data-index="{{index}}" 
-                class="flex-1" />
-              <view class="picker-box" data-index="{{index}}" catchTap="bindPickerChange2">
+                <input value="{{item.point2}}" maxlength="9" name="{{index}}" placeholder="0" type="number" onInput="bindKeyInput2" data-index="{{index}}"  class="flex-1" />
+                <view class="picker-box" data-index="{{index}}" catchTap="bindPickerChange2">
                 <view class="{{item.isArrindex2==true? 'picker-right':'picker-left'}} yuan"></view>
                 <view class="flex-box flex-v-ce">
                   <text class="red flex-1">奖</text>
@@ -91,6 +90,7 @@
           <image mode="scaleToFill" src="../../../image/right.png" class="rightImg" />
         </view>
         <view class="li">
+          <view class="flex-box-end"><view catchTap="deleteRemark" data-index="{{index}}" class="red" style="font-size:0.3rem">清空</view></view>
           <textarea maxlength="300" value="{{item.remark}}" onInput="bindTextAreaBlur" placeholder="请输入事件内容" data-index="{{index}}"></textarea>
           <image mode="scaleToFill" src="../../../image/addImg.png" data-index="{{index}}" class="addImg" catchTap="openImg" />
         </view>
@@ -135,10 +135,10 @@
             <view a:for="{{results}}" class="flex-box-ce results">
               <view style="width:60rpx;padding:0;text-align:center">{{results.length-index}}</view>
               <view class="flex-1">{{item.target}}</view>
-              <view class="flex-2" style="padding: 0.1rem 0.1rem;">{{item.task.msg.remark}}</view>
+              <view class="flex-2" style="padding: 0.1rem 0.1rem;">{{item.source_msg.remark}}</view>
               <view class="flex-1">
                 {{ item.point>0? '+'+item.point:item.point }}
-                <text>{{ item.task.msg.pt_id==3? 'B分':'A分' }}</text>
+                <text>{{ item.source_msg.pt_id==3? 'B分':'A分' }}</text>
               </view>
               <view class="green flex-2" a:if="{{item.status==1}}">
                 <text a:if="{{item.msg=='奖扣成功'}}" class="green">{{ item.msg }}</text>

+ 9 - 1
pages/workbench/jk_B/jk_B.js

@@ -185,6 +185,14 @@ Page({
     });
 
   },
+  // 清空内容
+  deleteRemark(e) {
+    var index2 = e.target.dataset.index;
+    var remark = `items[${index2}].remark`;//
+    that.setData({
+      [remark]: ''
+    });
+  },
   //图片选择
   openImg(e) {
     var index2 = e.target.dataset.index;
@@ -529,7 +537,7 @@ Page({
         clearTimeout(setTime);
         app.globalData.socketApi.closewebsocket();
       }, 15000)
-      app.globalData.socketApi.sendData(wsData[this.data.resultIndex], this.onmessageWS);
+      app.globalData.socketApi.sendData(wsData[this.data.resultIndex],this.onmessageWS,true);
     } else {
       // console.log(this.data.results)
     }

+ 2 - 2
pages/workbench/my_approve/my_approve.axml

@@ -30,8 +30,8 @@
             <view class="name" a:if="{{item.source_type == 1}}">{{item.employee_name}}的积分任务</view>
             <view class="name" a:if="{{item.source_type == 3}}">{{item.employee_name}}的积分奖扣</view>
             <view class="name" a:if="{{item.source_type == 4}}">{{item.employee_name}}的绩效工作</view>
-            <view class="context" style="height:40rpx" a:if="{{item.remark.customize}}">{{item.remark.customize}}</view>
-            <view class="context" style="height:40rpx" a:else>{{item.remark.rule}}</view>
+            <view class="context"  a:if="{{item.remark.customize}}">{{item.remark.customize}}</view>
+            <view class="context"  a:else>{{item.remark.rule}}</view>
             <view class="flex-box flex-v-ce">
               <view class="date flex-1">{{item.event_time}}</view>
               <view class="flex-box flex-v-ce">

+ 3 - 3
pages/workbench/prize_buckle/prize_buckle.axml

@@ -18,12 +18,12 @@
         <view class="flex-1">
           <view class="num">{{userData.task.reward.point}}</view>
           <view class="jiangfen">奖分</view>
-          <view class="target">目标{{userData.task.reward.target_point}}</view>
+          <view class="target">目标{{userData.task.reward.target}}</view>
         </view>
         <view class="flex-1">
           <view class="num">{{userData.task.deduction.point}}</view>
           <view class="jiangfen">扣分</view>
-          <view class="target">目标{{userData.task.deduction.target_point}}</view>
+          <view class="target">目标{{userData.task.deduction.target}}</view>
         </view>
         <view class="flex-1">
           <view class="num">{{userData.ratio.ratio}}</view>
@@ -33,7 +33,7 @@
         <view class="flex-1">
           <view class="num">{{userData.task.exec.count}}</view>
           <view class="jiangfen">奖扣人次</view>
-          <view class="target">目标{{userData.task.exec.target_count}}</view>
+          <view class="target">目标{{userData.task.exec.target}}</view>
         </view>
       </view>
     </view>

+ 46 - 3
pages/workbench/prize_buckle/prize_buckle.js

@@ -21,13 +21,14 @@ Page({
         employee_id: e.id
       })
     }
+    console.log(e)
   },
   onShow() {
     if (app.globalData.userData) {
       that.setData({
         showtu: true
       })
-      that.getUserData();
+      // that.getUserData();
     } else {
       app.login(app.globalData.corpId, function (is) {
         if (is) {
@@ -96,7 +97,7 @@ Page({
     });
     chart2.line().position('time*value').color('type', ['#F56C6C', '#67C23A']);
     chart2.render();
-    that.getIncidentLsit();
+    that.getUserData();
     return chart2;
   },
 
@@ -135,7 +136,7 @@ Page({
             isDb: false
           })
           that.getUserData();
-          that.getIncidentLsit();
+          // that.getIncidentLsit();
         }
       },
       complete: (res) => {
@@ -145,8 +146,50 @@ Page({
       }
     });
   },
+  opneWebSocket() {
+    let data={type:"es_info",recorder_id:that.data.employee_id||app.globalData.userData.id,month: that.data.date};
+    app.globalData.socketApi.sendData(data, (res) => {
+      if (res.code == 1&&res.type=='es_info') {
+          let data = res.result;
+          var task = data.task;
+          var ratio = task.ratio.enable== 0 ? '-' : `${task.ratio.reward_ratio}:1`
+          var target_ratio = task.ratio.target <= 0 ? '0:0' : `${task.ratio.target}:1`
+          dd.setNavigationBar({ title: data.name });
+          data.ratio = {
+            ratio: ratio,
+            target_ratio: target_ratio
+          }
+          that.setData({
+            userData: data
+          })
+          const { chart } = res.result;
+          const { reward, deduct } = chart;
+          var rewardArr = reward.map((item) => {
+            return { time: item.date, value: item.point, type: '奖分' };
+          })
+          var deductArr = deduct.map((item) => {
+            return { time: item.date, value: item.point, type: '扣分' };
+          })
+          var rewardArrCount = reward.map((item) => {
+            return { time: item.date, value: item.count, type: '奖分人次' };
+          })
+          var deductArrCount = deduct.map((item) => {
+            return { time: item.date, value: item.count, type: '扣分人次' };
+          })
+          var charData = rewardArr.concat(deductArr);
+          var charData2 = rewardArrCount.concat(deductArrCount);
+          chart1.changeData(charData);
+          chart2.changeData(charData2);
+
+
+          app.globalData.socketApi.closewebsocket();
+      }
+    }, true);
+  },
   //获取个人统计
   getUserData() {
+    this.opneWebSocket();
+    return false
     app.$get("api/integral/statistics", { employee_id: that.data.employee_id, month: that.data.date }).then((res) => {
       var data = res.data.data;
       var task = data.task;

+ 180 - 0
pages/workbench/review/review.acss

@@ -0,0 +1,180 @@
+.results{
+  text-align: center;
+  font-size: 24rpx;
+  position: relative;
+}	
+.results view{
+  padding:10rpx 0rpx;
+}
+.resultsBox{
+  margin-top:20rpx;
+  border:1px solid #f1f1f1;
+  max-height:600rpx;
+  overflow-y:auto
+}
+.results:nth-child(odd){
+  background-color: #f1f1f1;
+}
+.sxImg{
+  width: 30rpx;
+  height: 30rpx;
+}
+.search {
+  background-color: #f1f1f1;
+  border-radius: 10rpx;
+  margin-right: 10px;
+  padding: 6rpx 10rpx;
+  width: 100%;
+}
+.search input {
+  background-color: #f1f1f1;
+}
+.footer{
+  position: fixed;
+  bottom: 0;
+  right: 0;
+  left: 0;
+  z-index: 999;
+  border-top: 1px solid #f1f1f1;
+  text-align: center;
+  background-color: #fff;
+}
+.footer view{
+  padding: 24rpx 0;
+  font-size: 32rpx;
+}
+
+.search image {
+  width: 30rpx;
+  height: 30rpx;
+  margin-left: 10rpx;
+}
+
+.header {
+  background: #fff;
+  /* padding: 28rpx; */
+  padding-bottom: 0rpx;
+  position: sticky;
+  top: 0;
+}
+
+.selectItems {
+  /* margin-top: 20rpx; */
+}
+
+.selectItems .selectImg {
+  border-left: 1px solid #f1f1f1;
+  /* padding: 0 20rpx; */
+}
+
+.selectImg image {
+  width: 30rpx;
+  height: 30rpx;
+  position: relative;
+    top: 0.1rem;
+}
+
+.selectItems .flex-1 {
+  padding: 24rpx 0;
+  text-align: center;
+  position: relative;
+}
+
+.selectItems .active::before {
+  position: absolute;
+  content: " ";
+  height: 4rpx;
+  width: 120rpx;
+  background: #26A2FF;
+  bottom: 0rpx;
+}
+.li {
+  padding: 24rpx 28rpx;
+  padding-bottom: 0rpx;
+}
+.main{
+  background: #fff;
+}
+.main-right {
+  margin-left: 10rpx;
+}
+
+.main-right .name {
+  padding-top: 12rpx;
+  font-size: 36rpx;
+}
+
+.main-right .context {
+  overflow: hidden;
+  text-overflow: ellipsis;
+  display: -webkit-box;
+  -webkit-line-clamp: 2;
+  font-size: 32rpx;
+  -webkit-box-orient: vertical;
+  padding-top: 10rpx;
+  margin-bottom: 20rpx;
+  height: 80rpx;
+}
+
+.main-right .date {
+  font-size: 32rpx;
+  color: #909399;
+}
+
+.main-right .text {
+  color: #26A2FF;
+  padding-right: 32rpx;
+}
+
+.index {
+  border-radius: 6rpx;
+  background: #67C23A;
+  color: #fff;
+  font-size: 20rpx;
+  padding: 0 6rpx;
+}
+.rule-all-text{
+  font-size: 28rpx;
+  color: #999;
+  position: relative;
+  /* right: 10rpx; */
+  bottom: 5rpx;
+  top: 0rpx;
+}
+.staff-all{
+  /* background: rgba(245, 247, 250, 1); */
+  padding: 16rpx 28rpx;
+}
+.scroll {
+  height:  calc(100vh - 230rpx);
+}
+
+.windows-box{
+  background: #fff;
+  margin: 0 32rpx;
+  margin-top: 30%;
+  border-radius: 20rpx; 
+}
+.windows-title{
+  text-align: center;
+  padding: 28rpx 0;
+  border-bottom: 1px solid #f1f1f1;
+}
+.windows-btn{
+   border-top: 1px solid #f1f1f1;
+}
+.windows-btn view:nth-child(1){
+  text-align: center;
+  padding: 28rpx 0;
+  border-right: 1px solid #f1f1f1;
+}
+.windows-btn button{
+  text-align: center;
+  color: #26A2FF;
+  background: #fff;
+  border: none;
+}
+.windows-content textarea{
+  height: 150rpx;
+  padding: 28rpx;
+}

+ 144 - 0
pages/workbench/review/review.axml

@@ -0,0 +1,144 @@
+<view>
+  <view class="header margin-bottom">
+    <!-- <view class="flex-box flex-v-ce selectItems border-bottom">
+      <view data-index="1" class="{{activeIndex == 1? 'active':''}} flex-1" catchTap="activeItem">待复核</view>
+      <view data-index="2" class="{{activeIndex == 2? 'active':''}} flex-1" catchTap="activeItem">已复核</view>
+      <view class="selectImg"  a:if="{{activeIndex == 2}}">
+        <picker class="picker" onChange="bindObjPickerChange" value="{{arrIndex}}" range="{{objectArray}}" range-key="name">
+          <view style="padding:20rpx 30rpx;">
+              <image mode="scaleToFill" src="../../../image/sx.png"/>
+          </view>
+        </picker>
+      </view>
+    </view> -->
+    <view class="flex-box flex-v-ce tab border-bottom">
+      <view class="flex-1">
+        <picker onChange="activeItem" value="{{minuteIndex}}" range="{{minuteArray}}" range-key="name">
+          <text>{{minuteArray[minuteIndex].name}}</text>
+        </picker>
+      </view>
+      <view class="flex-1" catchTap="selectStaff">
+        <text class="{{showStaff? 'activeView blue':''}}">{{staffVal}}</text>
+      </view>
+      <view class="flex-1" a:if="{{minuteIndex==1}}">
+        <picker class="picker" onChange="bindObjPickerChange" value="{{arrIndex}}" range="{{objectArray}}" range-key="name">
+            <text>{{objectArray[arrIndex].name}}</text>
+        </picker>
+      </view>
+
+    </view>
+
+    <form onReset="onReset" class="flex-box-ce" style="padding:16rpx 28rpx;">
+      <view class="search flex-box flex-v-ce">
+        <image mode="scaleToFill" src="../../../image/ss.png"/>
+        <input placeholder="输入关键字查找" onInput="bindKeyInput" onConfirm="bindKeyInput" class="flex-1"/>
+        <button a:if="{{isVal}}" class="delVal" formType="reset">×</button>
+      </view>
+      <button style="width: 100px;" a:if="{{minuteIndex == 0}}" size="mini" type="primary" catchTap="openPl">批量复核</button>
+    </form>
+    <!-- <view class="staff-all" a:if="{{isPl}}">
+      <label class="flex-box-ce">
+        <checkbox onChange="ruleActiveAll" disabled="{{item.disabled}}" checked="{{isAllChecked}}"></checkbox>
+        <text class="rule-all-text">全选</text>
+      </label>
+    </view> -->
+  </view>
+    
+    
+    
+  <view class="main scroll">
+    <no-bata a:if="{{dataList.length==0}}"></no-bata>
+    <scroll-view class="scroll" scroll-y="{{true}}" a:if="{{dataList.length>0}}" onScrollToLower="onScrollToLower">
+      <view class="flex-box li border-bottom" a:for="{{dataList}}" data-item="{{item}}" catchTap="openDetail">
+        <view style="padding-right:28rpx;padding-top:20rpx;" a:if="{{isPl}}">
+          <checkbox checked="{{item.checked}}" name="{{item.id}}"></checkbox>
+        </view>
+        <view class="flex-box flex-1">
+          <img-box name="{{item.employee_name}}" id="{{item.employee_id}}" height="80rpx" width="80rpx" fSize="24rpx"></img-box>
+          <view class="flex-1 main-right">
+            <view class="name flex-box-ce">
+              <text class="flex-1">{{item.employee_name}}</text>
+              <block a:if="{{minuteIndex == 1}}">
+                <text class="greenBox" style="font-size:0.28rem" a:if="{{item.dc_status == 1}}">通过</text>
+                <text class="redBox" style="font-size:0.28rem" a:if="{{item.dc_status == 2}}">不通过</text>
+              </block>
+            </view>
+            <view class="context" style="height:80rpx">{{item.remark}}</view>
+            <view class="flex-box flex-v-ce" style="padding-bottom:20rpx">
+              <view class="date flex-1">{{item.event_time}}</view>
+              <view class="flex-box flex-v-ce" a:if="{{minuteIndex == 0&&!isPl}}">
+                <text catchTap="openBh" data-index="1" data-item="{{item}}" class="text">通过</text>
+                <text catchTap="openBh" data-index="2" data-item="{{item}}" class="red">不通过</text>
+              </view>
+            </view>
+          </view>
+        </view>
+      </view>
+      <view class="noDatas" a:if="{{isData}}">没有更多咯</view>
+      <view style="height:60px">
+        
+      </view>
+    </scroll-view>
+  </view>
+  <view class="flex-box-ce footer " style="padding-bottom:0.3rem" a:if="{{isPl}}">
+    <view class="flex-1" catchTap="selectAll">全选</view>
+    <!-- <view class="flex-1 red" catchTap="openBh" style="border-left:1px solid #f1f1f1;border-right:1px solid #f1f1f1;">批量驳回</view> -->
+    <view class="flex-2 blue" style="border-left:1px solid #f1f1f1" catchTap="openTg">批量通过</view>
+  </view>
+
+  <!-- 弹出框 -->
+  <view class="windows" a:if="{{isBh}}">
+    <view class="windows-box">
+      <view class="windows-title">确认不通过</view>
+      <view class="windows-content">
+        <textarea value="{{textArea}}" onInput="bindTextAreaBlur" maxlength="50" placeholder="请输入不通过原因"/>
+      </view>
+      <view class="windows-btn flex-box flex-v-ce">
+        <view class="flex-1" catchTap="closeBh">取消</view>
+        <button type="default" loading="{{disabled}}" class="flex-1" disabled="{{disabled}}" catchTap="confirmBh">确定</button>
+      </view>
+    </view>
+  </view>
+
+  <!-- 结果弹窗 -->
+  <view class="windows" a:if="{{isResult}}">
+    <view class="windows-box" style="margin-top:15%">
+      <view class="windows-title">复核结果</view>
+      <block a:if="{{!isShowError}}">
+        <view class="windows-content" style="padding:20rpx;">
+          <progress percent="{{percentage}}" show-info stroke-width="10" />
+          <view class="resultsBox">
+            <view class="flex-box-ce results">
+              <view style="width:60rpx;padding:0;text-align:center"></view>
+              <view class="flex-1">奖扣对象</view>
+              <view class="flex-2">事件内容</view>
+              <view class="flex-1">积分</view>
+              <view class="flex-2">处理结果</view>
+            </view>
+            <view a:for="{{results}}" class="flex-box-ce results">
+              <view style="width:60rpx;padding:0;text-align:center">{{results.length-index}}</view>
+              <view class="flex-1">{{item.name}}</view>
+              <view class="flex-2" style="padding: 0.1rem 0.1rem;">{{item.remark}}</view>
+              <view class="flex-1">
+                {{ item.point>0? '+'+item.point:item.point }}
+                <text>{{ item.pt_id==3? 'B分':'A分' }}</text>
+              </view>
+              <view class="green flex-2" a:if="{{item.msg=='提交成功'}}">{{item.msg}}</view>
+              <view class="red flex-2" a:else>{{item.msg}}</view>
+            </view>
+          </view>
+        </view>
+        <view class="windows-btn flex-box flex-v-ce" a:if="{{results.length==resultList.length}}">
+          <button type="default" class="flex-1" catchTap="closeTc">确定</button>
+        </view>
+      </block>
+      <view a:else class="windows-content" style="padding:20rpx;">
+        <view style="text-align: center;margin-bottom:20rpx" class="red">服务器繁忙,请稍后再试</view>
+        <view class="windows-btn flex-box flex-v-ce">
+          <button type="default" class="flex-1" catchTap="closeTc">确定</button>
+        </view>
+      </view>
+    </view>
+  </view>
+  <select-staff defaultUser="{{employee_ids}}" isAllSelect="{{false}}" isShow="{{showStaff}}" a:if="{{showStaff==true}}" onClose="onClose" onConfirm="onConfirmStaff"></select-staff>
+  </view>

+ 420 - 0
pages/workbench/review/review.js

@@ -0,0 +1,420 @@
+
+var app = getApp()
+var that;
+var socket = null;
+var setTime;
+Page({
+  data: {
+    date: app.globalData.month,
+    activeIndex: 1,
+    keyword: '',
+    page: 1,
+    isBh: false,//是否显示驳回弹窗
+    textArea: "",
+    disabled: false,
+    isPl:false,
+
+    objectArray: [{id:'[1,2]',name: '全部'},{ id: '[1]',name: '通过'},{id: '[2]', name: '不通过'}],
+    arrIndex: 0,
+
+    isAll: true,
+    minuteIndex: 0,//条件选择
+    minuteArray: [
+      { id: 1, name: '待复核' },
+      { id: 2, name: '已复核' },
+    ],
+
+    // 长连接结果
+    results: [], //提交的返回结果集合
+    isResult: false,
+    percentage: 0,
+    resultList: [],//要发送数据的集合
+    resultIndex: 0,
+    isShowError: false,
+
+    popupCx: '',
+    config: {}, 
+    showStaff: false,//显示员工选择
+    staffVal: '人员',
+  },
+  onLoad() {
+    that = this;
+    dd.setNavigationBar({ title: "复核" });
+  },
+  onShow() {
+    if (app.globalData.userData) {
+      that.refreshData();
+    } else {
+      app.login(app.globalData.corpId, function (is) {
+        if (is) {
+          that.refreshData();
+        } else {
+          dd.reLaunch({
+            url: '../../noJurisdiction/noJurisdiction'
+          })
+        }
+      },function(){})
+    }
+  },
+  //选择员工
+  onConfirmStaff(data) {
+    if (!data) {
+      this.setData({ staffVal: '人员', employee_ids: '', page: 1 })
+      this.getData();
+      return false;
+    }
+    if (data.length > 0) {
+      if (data.length > 1) {
+        var str = "";
+        var arr = [];
+        data.forEach((item) => {
+          str += item.name + ','
+          arr.push(item.id);
+        })
+        var employee_ids = arr.join(',');
+        this.setData({ staffVal: str.substring(0, str.length - 1), employee_ids: employee_ids, page: 1 })
+      } else {
+        this.setData({ staffVal: data[0].name, employee_ids: [data[0].id], page: 1 })
+      }
+    } else {
+      this.setData({ staffVal: '人员', employee_ids: [], page: 1 })
+    }
+    this.getData();
+  },
+  //显示选择员工
+  selectStaff() {
+    this.setData({
+      popupCx: 'container__mask',
+      showStaff: true
+    })
+  },
+  //关闭弹窗
+  onClose() {
+    this.setData({
+      showStaff: false,
+      popupCx: ''
+    })
+  },
+  openPl(){
+    this.setData({
+      isPl: !that.data.isPl
+    })
+  },
+    // 通过
+  openTg() {
+      let that = this;
+      let selectIds = [];
+      this.data.dataList.forEach(item => {
+        if(item.checked){
+          selectIds.push({
+            type:'event_check',
+            action:'agree',
+            event_id:item.id,
+            point:item.point,
+            remark:item.remark,
+            name:item.employee_name,
+            pt_id:item.pt_id
+          });
+        }
+      })
+      if (selectIds.length == 0) {
+        app.globalData.showToast("请先选择复核单");
+        return false
+      }
+      dd.confirm({
+        title: '批量通过',
+        content: `已选中${selectIds.length}条复核单,确认全部通过?`,
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        success: (result) => {
+          if (result.confirm) {
+            that.webSocket(selectIds,true);
+          }
+        },
+      });
+  },
+  selectAll() {
+    let dataList = this.data.dataList.map(item => {
+      item.checked = this.data.isAll;
+      return item;
+    })
+    this.setData({
+      dataList: dataList,
+      isAll:!this.data.isAll,
+    })
+  },
+    //选择规则分类
+  bindKeyInput(e) {
+      this.setData({
+        keyword: e.detail.value,
+        page: 1,
+        isVal: e.detail.value ? true : false,
+      });
+      this.getData();
+ },
+  bindObjPickerChange(e) {
+    this.setData({
+      arrIndex: e.detail.value,
+      page: 1,
+      isPl:false,
+    })
+    this.getData();
+
+  },
+  //当在详情返回时刷新列表,但你请求接口
+  refreshData(id) {
+    if (this.data.page == 1) {
+      dd.hideLoading();
+      that.getData();
+    } else {
+      if (id) {//当page不为一并下一页返回上一页不执行onshow()
+        var arr = this.data.dataList;
+        arr.forEach((element, index) => {
+          if (element.id == id) {
+            arr.splice(index, 1);
+          }
+        });
+        this.setData({
+          dataList: arr
+        })
+      }
+    }
+  },
+  
+  bindTextAreaBlur(e) {
+    this.setData({
+      textArea: e.detail.value
+    });
+  },
+  confirmBh() {
+    if (that.data.textArea == '') {
+      app.globalData.showToast("请输入不通过原因");
+      return;
+    }
+    let noData={
+      type:'event_check',
+      action:'disagree',
+      event_id:that.data.bhItem.id,
+      comment:that.data.textArea,
+    }
+    this.setData({ disabled: true });
+    this.webSocket(noData)
+  },
+  closeBh() {
+    this.setData({ isBh: false, textArea: '' })
+  },
+  openBh(e) {
+    var item = e.target.dataset.item;
+    var index = e.target.dataset.index;
+    if(index=='1'){
+      let data={
+				type:'event_check',
+				action:'agree',
+				event_id:item.id,
+				point:item.point
+			}
+      this.webSocket(data)
+    }else{
+      this.setData({
+        isBh: true,
+        bhItem: item
+      })
+    }
+  },
+  webSocket(data,is) {
+    let resultList=is? data:[data];
+    this.setData({
+      resultList:resultList,
+      resultIndex: 0,
+      percentage: 0,
+      results: [],
+      isResult:resultList.length!=1,
+    })
+    this.opneWebSocket()
+  },
+  opneWebSocket() {
+    let wsData = this.data.resultList;
+    if (wsData[this.data.resultIndex]) {
+      setTime = setTimeout(() => {
+        dd.alert({
+            title: '温馨提示',
+            content: '网络异常,请检查网络',
+            buttonText: '我知道了',
+            success: () => {
+              clearTimeout(setTime);
+              app.globalData.socketApi.closewebsocket();
+              that.closeTc();
+            },
+        });
+      }, 15000)
+      app.globalData.socketApi.sendData(wsData[this.data.resultIndex],this.onmessageWS,true);
+    }
+  },
+  onmessageWS(e) {
+    // 因为作用域问题,这个函数不能使用this
+    if (e.type == 'event_check') {
+       clearTimeout(setTime);
+       if(that.data.resultList.length==1){ //单条
+        if(e.code==1){
+          app.globalData.showToast("提交成功");
+          that.setData({ 
+            disabled: false, 
+            isBh: false,
+            textArea: '',
+          });
+          that.refreshData(e.result.task.msg.event_id);
+          return false;
+        }else{
+          that.setData({ 
+            disabled: false, 
+          });
+          app.globalData.showToast(e.msg)
+          return false;
+        }
+      }
+      let user;
+      if(e.code==1){
+        user={
+          name:e.result.task.msg.name,
+          point:e.result.task.msg.point,
+          remark:e.result.task.msg.remark,
+          pt_id:e.result.task.msg.pt_id,
+          msg:'提交成功'
+        }
+      }else{
+        user={
+          name:e.result.task.msg.name,
+          point:e.result.task.msg.point,
+          remark:e.result.task.msg.remark,
+          pt_id:e.result.task.msg.pt_id,
+          msg:e.msg
+        }
+      }
+      let results=that.data.results
+      results.push(user);
+      that.setData({
+        results: results,
+        resultIndex: that.data.resultIndex + 1
+      })
+      that.opneWebSocket();
+      // 进度条
+      let lng = that.data.resultList.length;
+      that.setData({
+        percentage: that.data.percentage + Math.floor(100 / lng),
+      })
+      if (lng == that.data.results.length) {
+        that.setData({
+          percentage: 100,
+        })
+      }
+    }
+
+    if (e.type == 'error') {
+      clearTimeout(setTime);
+      that.setData({
+        isShowError: true,
+      })
+    }
+  },
+  closeTc() {
+    this.setData({
+      results: [], //提交的返回结果集合
+      isResult: false,
+      percentage: 0,
+      resultList: [],//要发送数据的集合
+      resultIndex: 0,
+      isBh: false,//是否显示驳回弹窗
+      isShowError: false,
+      textArea: '',
+      page: 1,
+    })
+    app.globalData.socketApi.closewebsocket();
+    this.getData();
+  },
+
+  activeItem(e) {
+    this.setData({
+      minuteIndex: e.detail.value,
+      page: 1,
+      dataList: [],
+      isPl:false,
+    })
+    this.getData();
+  },
+
+  onReset() {
+    this.setData({
+      keyword: '',
+      isVal: false,
+      page: 1,
+    })
+    this.getData();
+  },
+  openDetail(e) {
+    var item = e.target.dataset.item;
+    if(this.data.isPl){
+      let dataList = this.data.dataList.map(e => {
+        if(item.id==e.id){
+          e.checked = !e.checked;
+        }
+        return e;
+      })
+      this.setData({
+        dataList: dataList,
+      })
+      return false
+    }
+    dd.navigateTo({
+      url: '../reviewDetail/reviewDetail?id=' + item.id
+    })
+  },
+  getData(type) {
+    let dc_status=that.data.minuteIndex==0? "[0]":'[1,2]';
+
+    if(that.data.minuteIndex=="1"){
+      if(that.data.arrIndex==0){
+        dc_status='[1,2]'
+      }else if(that.data.arrIndex==1){
+        dc_status='[1]'
+      }else{
+        dc_status='[2]'
+      }
+    }
+
+    let data={
+      dc_status:dc_status,
+      page: that.data.page,
+      order_key:that.data.minuteIndex=='0'? 'create_time':'update_time',
+      page_size: 20,
+      keyword: that.data.keyword,
+      employee_ids:this.data.employee_ids
+   }
+    app.$get("api/integral/statistics/integral",data).then((res) => {
+      var list = res.data.data.list || [];
+      list.forEach(element => {
+          element.checked = false
+      });
+      if(that.data.page==1){
+        this.setData({
+          dataList:[]
+        })
+      }
+      var dataList = that.data.dataList || [];
+      if (type == '2') {
+        this.setData({
+          dataList: dataList.concat(list),
+          isData: list.length < 20
+        })
+      } else {
+        this.setData({ dataList: list, isData: false })
+      }
+    })
+  },
+  //上啦加载
+  onScrollToLower() {
+    if (!that.data.isData) {
+      this.setData({ page: ++that.data.page })
+      this.getData("2");
+    }
+  },
+});

+ 7 - 0
pages/workbench/review/review.json

@@ -0,0 +1,7 @@
+{
+  "usingComponents": {
+    "select-staff": "/Component/selectStaff/selectStaff",
+    "img-box": "/Component/img-box/index",
+    "no-bata": "/Component/noData/noData"
+  }
+}

+ 150 - 0
pages/workbench/reviewDetail/reviewDetail.acss

@@ -0,0 +1,150 @@
+.header-top{
+  background: #fff;
+  padding:20rpx 32rpx;
+}
+.header-top-right{
+  margin-left: 10rpx;
+}
+.state{
+  color: #E6A23C;
+  margin-left: 10rpx;
+}
+.header-main{
+  background: #fff;
+  padding:16rpx 32rpx;
+}
+.header-main .laber{
+  color: #909399;
+  width: 180rpx;
+}
+.header-main .flex-box{
+ padding: 5rpx 0;
+}
+.mian-title{
+  padding:16rpx 32rpx;
+  background: #fff;
+  font-size: 36rpx;
+  color: #222;
+  font-weight: 600;
+}
+.mian-title text{
+  color: #909399;
+  font-weight: 500;
+  position: relative;
+  top: -3rpx;
+  padding-left: 20rpx;
+  font-size: 32rpx;
+}
+.main-bottom{
+  padding:16rpx 32rpx;
+  background: #fff;
+}
+.main-bottom-right{
+  margin-left: 10rpx;
+}
+.names{
+  padding-top: 14rpx;
+}
+.date{
+  font-size: 22rpx;
+  color: #909399;
+  padding: 4rpx 0;
+}
+.context{
+  font-size: 24rpx;
+}
+.imgBox{
+  position: absolute;
+  width: 1rpx;
+  border-left: 1px dashed#979797;
+  top: 80rpx;
+  left: 40rpx;
+  bottom: 0; 
+}
+.bottom{
+  background: #fff;
+  position: fixed;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  z-index: 2;
+  text-align: center;
+  padding: 10rpx;
+  padding-bottom: 30rpx;
+  border-top: 1px solid #f1f1f1;
+
+}
+.bottom text{
+  display: block;
+  padding: 16rpx 0;;
+  text-align: left;
+}
+.bottom  .defBtn{
+  color: #F56C6C;
+  border: 1px solid #F56C6C;
+  padding: 16rpx 0;
+  border-radius: 5rpx;
+  margin-right: 16px;
+  background: #fff;
+}
+.bottom .blueBtn{
+  color: #fff;
+  background: #26A2FF;
+  padding: 16rpx 0;
+  border-radius: 5rpx;
+}
+.img2{
+  width: 40rpx;
+  height: 40rpx;
+  position: relative;
+  top: 10rpx;
+}
+.num text{
+  margin-left: 10rpx;
+}
+.name{
+  margin: 16rpx 0;
+  font-weight: 600;
+}
+.imgs{
+  width: 120rpx;
+  height: 120rpx;
+  margin-right: 10rpx;
+  margin-bottom: 10rpx;
+}
+.log{
+  padding:32rpx;
+  color: #26A2FF;
+  text-align: center;
+  background: #fff;
+}
+
+.windows-box{
+  background: #fff;
+  margin: 0 32rpx;
+  margin-top: 30%;
+  border-radius: 20rpx; 
+}
+.windows-title{
+  text-align: center;
+  padding: 28rpx 0;
+  border-bottom: 1px solid #f1f1f1;
+}
+.windows-btn{
+   border-top: 1px solid #f1f1f1;
+}
+.windows-btn view:nth-child(1){
+  text-align: center;
+  padding: 28rpx 0;
+  border-right: 1px solid #f1f1f1;
+}
+.windows-btn button{
+  text-align: center;
+  color: #26A2FF;
+  background: #fff;
+  border: none;
+}
+.windows-content textarea{
+  height: 150rpx;
+  padding: 28rpx;
+}

+ 126 - 0
pages/workbench/reviewDetail/reviewDetail.axml

@@ -0,0 +1,126 @@
+<view>
+  <view class="header margin-bottom">
+    <view class="header-top flex-box-v flex-center-center border-bottom">
+      <img-box a:if="{{dataDetail.employee_name}}" name="{{dataDetail.employee_name}}" imgUrl="{{dataDetail.img_url}}" height="90rpx" 
+        width="90rpx" fSize="24rpx"></img-box>
+      <view class="name">{{dataDetail.employee_name}}</view>
+      <view class="num red" a:if="{{dataDetail.point>0}}">+{{dataDetail.point}}
+        <text>{{dataDetail.typeName}}</text></view>
+      <view class="num green" a:else>{{dataDetail.point}}
+        <text>{{dataDetail.typeName}}</text></view>
+    </view>
+    <view class="header-main">
+      <view class="flex-box" a:if="{{dataDetail.remark.customize!=''||dataDetail.remark.rule!=''}}">
+        <view class="laber">事件内容</view>
+        <view class="flex-1">{{dataDetail.remark.customize || dataDetail.remark.rule}}</view>
+      </view>
+      <view class="flex-box" a:if="{{dataDetail.files.length>0}}">
+        <view class="laber">图片</view>
+        <view class="flex-1 flex-box flex-d-wrap">
+          <block a:for="{{dataDetail.files}}" a:for-item="imgs" a:for-index="idx">
+            <image class="imgs" catchTap="showImg" mode="scaleToFill" src="{{imgs}}" data-index="{{idx}}" data-item="{{dataDetail.files}}" />
+          </block>
+        </view>
+      </view>
+      <view class="flex-box flex-v-ce" a:if="{{dataDetail.rule_list}}">
+        <view class="laber">规则分类</view>
+        <view class="flex-1">{{dataDetail.rule_list }}</view>
+      </view>
+      <view class="flex-box flex-v-ce" a:if="{{dataDetail.source_type_mark}}">
+        <view class="laber">来源类型</view>
+        <view class="flex-1">{{dataDetail.source_type_mark }}</view>
+      </view>
+      <view class="flex-box flex-v-ce" a:if="{{dataDetail.date}}">
+        <view class="laber">事件时间</view>
+        <view class="flex-1">{{dataDetail.date }}</view>
+      </view>
+      <view class="flex-box flex-v-ce" a:if="{{dataDetail.recorder_name}}">
+        <view class="laber">记录人</view>
+        <view class="flex-1">{{dataDetail.recorder_name}}</view>
+      </view>
+      <view class="flex-box flex-v-ce" a:if="{{dataDetail.complete_task.time}}">
+        <view class="laber">完成时间</view>
+        <view class="flex-1">{{dataDetail.complete_task.time }}</view>
+      </view>
+      <view class="flex-box flex-v-ce" a:if="{{dataDetail.complete_task.remark}}">
+        <view class="laber">完成备注</view>
+        <view class="flex-1">{{dataDetail.complete_task.remark}}</view>
+      </view>
+      <view class="flex-box" a:if="{{dataDetail.complete_task.files.length>0}}">
+        <view class="laber"></view>
+        <view class="flex-1 flex-box flex-d-wrap">
+          <block a:for="{{dataDetail.complete_task.files}}" a:for-item="imgs" a:for-index="idx">
+            <image class="imgs" catchTap="showImg" mode="scaleToFill" src="{{imgs}}" data-index="{{idx}}" data-item="{{dataDetail.complete_task.files}}" />
+          </block>
+        </view>
+      </view>
+    </view>
+  </view>
+  <view class="main margin-bottom">
+    <block a:if="{{dataDetail.source_type!=10}}">
+      <view class="mian-title border-bottom" a:if="{{dataDetail.rule_item_id}}">规则依据
+        <text>此事件打分参考以下积分规则</text>
+      </view>
+      <view class="header-main" a:if="{{dataDetail.rule_item_id}}">
+        <view class="flex-box flex-v-ce" a:if="{{dataDetail.rule_list}}">
+          <view class="laber">规则分类</view>
+          <view class="flex-1">{{dataDetail.rule_list }}</view>
+        </view>
+        <view class="flex-box" a:if="{{dataDetail.remark&&dataDetail.remark.rule}}">
+          <view class="laber">积分规则</view>
+          <view class="flex-1">{{dataDetail.remark.rule}}</view>
+        </view>
+        <view class="flex-box flex-v-ce" a:if="{{dataDetail.rule_item}}">
+          <view class="laber">规则积分</view>
+          <view class="flex-1">
+            <text a:if="{{dataDetail.rule_item.range_type == 1}}">{{ dataDetail.rule_item.min_point }}</text>
+            <text a:if="{{dataDetail.rule_item.range_type == 2}}">{{ dataDetail.rule_item.min_point }} ~ {{ dataDetail.rule_item.max_point }}</text>
+            <text>{{dataDetail.typeName}}</text>
+          </view>
+        </view>
+      </view>
+    </block>
+    <block a:else>
+      <view a:if="{{see_log==1}}" class="log" catchTap="openLog">查看日志详情内容
+        <text style="font-size: 36rpx;padding-left:10rpx;">»</text>
+      </view>
+    </block>
+  </view>
+  <view class="bottom flex-box" a:if="{{dataDetail.dc_status==0}}">
+    <view class="flex-1 defBtn" catchTap="openBh" data-index="2">不通过</view>
+    <view class="flex-3 blueBtn" catchTap="openBh" data-index="1">通过</view>
+  </view>
+  <view class="pop-up" a:if="{{array.length>0&&is}}">
+    <picker onChange="bindPickerChange" value="{{index}}" range="{{array}}">
+      <view style="width:1rem;height:1rem;line-height:1rem">
+        <image class="img2" mode="scaleToFill" src="../../../image/Bj.png" />
+      </view>
+    </picker>
+  </view>
+
+  <!-- 调用过程组件 -->
+  <view class="margin-bottom">
+    <process process="{{dataDetail.process}}" a:if="{{dataDetail.process.length>0}}" />
+  </view>
+  <view  a:if="{{dataDetail.dc_remark.flow}}">
+    <review process="{{dataDetail.dc_remark.flow}}" status="{{dataDetail.dc_status}}" />
+  </view>
+
+  
+  <view style="height:2rem"></view>
+
+  <view class="windows" a:if="{{isBh}}">
+    <view class="windows-box">
+      <view class="windows-title">确认不通过</view>
+      <view class="windows-content">
+        <textarea value="{{textArea}}" onInput="bindTextAreaBlur" maxlength="50" placeholder="请输入不通过原因"/>
+      </view>
+      <view class="windows-btn flex-box flex-v-ce">
+        <view class="flex-1" catchTap="closeBh">取消</view>
+        <button type="default" loading="{{disabled}}" class="flex-1" disabled="{{disabled}}" catchTap="confirmBh">确定</button>
+      </view>
+    </view>
+  </view>
+
+
+</view>

+ 216 - 0
pages/workbench/reviewDetail/reviewDetail.js

@@ -0,0 +1,216 @@
+
+var app = getApp()
+var that;
+var socket = null;
+var setTime;
+Page({
+  data: {
+    date: app.globalData.month,
+    review_id: '',
+    userId: '',
+    see_log: 1,
+    array:[],
+    isPublisher: true,//是不是发布者 
+
+    isBh: false,//是否显示驳回弹窗
+    textArea: "",
+    disabled: false,
+    event_review_point:1,
+    is:true,
+  },
+  onLoad(e) {
+    that = this;
+    dd.setNavigationBar({ title: "事件详情" });
+    that.setData({
+      userId: app.globalData.userData.id,
+      event_review_point:app.globalData.config.event_review_point
+    })
+    if (e.id) {
+      that.setData({
+        review_id: e.id
+      })
+    }
+    if (e.is) {
+      that.setData({
+        is: false
+      })
+    }
+  },
+  onShow() {
+    if (app.globalData.userData) {
+        dd.hideLoading();
+        that.getDetail();
+        that.cheakAx();
+    } else {
+      app.login(app.globalData.corpId, function (is) {
+        if (is) {
+          dd.hideLoading();
+          that.getDetail();
+          that.cheakAx();
+        } else {
+          dd.reLaunch({
+            url: '../../noJurisdiction/noJurisdiction'
+          })
+        }
+      }, function () { })
+    }
+  },
+  bindTextAreaBlur(e) {
+    this.setData({
+      textArea: e.detail.value
+    });
+  },
+  bindPickerChange(e) {
+    var page = getCurrentPages()[getCurrentPages().length - 2]//上一个页面的数据
+    if (this.data.array[e.detail.value] == '删除事件') {
+      dd.confirm({
+        title: '删除事件',
+        content: '删除事件的同时也会撤销积分,确定删除吗?',
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        success: (result) => {
+          if (result.confirm) {
+            app.$post('/api/integral/statistics/integral/destroy', { event_id: that.data.review_id }).then(res => {
+              app.globalData.showToast(res.data.msg);
+              if (page&& page.refreshData) {
+                page.refreshData(that.data.review_id);
+              }
+              setTimeout(() => {
+                dd.navigateBack({ delta: 1 })
+              }, 1000);
+            });     
+          }
+        },
+      });
+    } else if (this.data.array[e.detail.value] == '调整分数') {//编辑任务
+      dd.navigateTo({
+        url: '../tZpoint/tZpoint?id=' + this.data.review_id +'&point='+this.data.dataDetail.point
+      })
+    }
+  },
+  confirmBh() {
+    if (that.data.textArea == '') {
+      app.globalData.showToast("请输入不通过原因");
+      return;
+    }
+    let noData={
+      type:'event_check',
+      action:'disagree',
+      event_id:that.data.review_id,
+      comment:that.data.textArea,
+    }
+    this.setData({ disabled: true });
+    this.opneWebSocket(noData)
+  },
+  openBh(e) {
+    var item = this.data.dataDetail;
+    var index = e.target.dataset.index;
+    if(index=='1'){
+      let data={
+				type:'event_check',
+				action:'agree',
+				event_id:item.event_id,
+				point:item.point
+			}
+      this.opneWebSocket(data)
+    }else{
+      this.setData({
+        isBh: true,
+      })
+    }
+  },
+  opneWebSocket(data) {
+    setTime = setTimeout(() => {
+        dd.alert({
+            title: '温馨提示',
+            content: '网络异常,请检查网络',
+            buttonText: '我知道了',
+            success: () => {
+              clearTimeout(setTime);
+              app.globalData.socketApi.closewebsocket();
+              that.setData({ 
+                disabled: false, 
+                isBh: false,
+                textArea: '',
+              });
+            },
+        });
+      }, 15000)
+    app.globalData.socketApi.sendData(data,this.onmessageWS,true);
+  },
+  onmessageWS(e) {
+    // 因为作用域问题,这个函数不能使用this
+    if (e.type == 'event_check') {
+       clearTimeout(setTime);
+        if(e.code==1){
+          app.globalData.showToast("提交成功");
+          that.setData({ 
+            disabled: false, 
+            isBh: false,
+            textArea: '',
+          });
+          that.getDetail();
+          app.globalData.socketApi.closewebsocket();
+          return false;
+        }else{
+          app.globalData.showToast(e.msg)
+          app.globalData.socketApi.closewebsocket();
+          return false;
+        }
+    }
+    if (e.type == 'error') {
+      clearTimeout(setTime);
+      that.setData({
+        isShowError: true,
+      })
+    }
+  },
+
+  cheakAx() {
+    app.$get("api/integral/site/config", {}).then((res) => {
+      var data = res.data.data;
+      this.setData({ see_log: data.see_log ? data.see_log : 0 })
+    })
+  },
+
+  // 查看日志详情
+  openLog() {
+    dd.navigateTo({
+      url: '../logDetail/logDetail?id=' + this.data.review_id
+    })
+  },
+  showImg(e) {
+    var index = e.target.dataset.index;
+    var item = e.target.dataset.item
+    dd.previewImage({
+      current: index,
+      urls: item
+    });
+  },
+  activeItem(e) {
+    var index = e.target.dataset.index;
+    this.setData({ activeIndex: index })
+  },
+  closeBh() {
+    this.setData({ isBh: false, textArea: '' })
+  },
+  getDetail() {
+    app.$get("api/integral/statistics/integral/info", { event_id:  that.data.review_id }).then((res) => {
+      var data = res.data.data;
+      app.globalData.types.forEach(item => {
+        if (item.id == data.pt_id) {
+          data.typeName = item.name
+        }
+      });
+      var actions = []
+      // 这里比较复杂,因为团队绩效的工作详情跟我的发布的工作详情都调用这个页面
+      if (data.dc_status == 0&&that.data.event_review_point==1) {
+        actions.push('调整分数')
+        actions.push('删除事件')
+      } else {
+        actions.push('删除事件')
+      }
+      this.setData({ dataDetail: data,array: actions })
+    })
+  },
+});

+ 7 - 0
pages/workbench/reviewDetail/reviewDetail.json

@@ -0,0 +1,7 @@
+{
+  "usingComponents": {
+    "img-box": "/Component/img-box/index",
+    "process": "/Component/process/process",
+    "review": "/Component/Review/Review"
+  }
+}

+ 53 - 1
pages/workbench/statistics_B/statistics_B.acss

@@ -13,6 +13,20 @@
   position: relative;
   top: 6rpx;
 }
+.text2 {
+  border-radius: 50%;
+  border: 1px solid #909399;
+  color: #909399;
+  width: 26rpx;
+  height: 26rpx;
+  font-size: 22rpx;
+  text-align: center;
+  display: inline-block;
+  margin-left: 10rpx;
+  position: relative;
+  line-height: 26rpx;
+  box-sizing: border-box;
+}
 .dates{
   width: 200rpx;
   margin: 0 auto;
@@ -112,4 +126,42 @@
 		-webkit-transform: rotate(135deg);
 		transform: rotate(135deg);
 		border-color: transparent transparent #fff #fff;
-	}
+}
+.windows-box {
+  background: #fff;
+  border-radius: 20rpx;
+  position: absolute;
+  left: 10%;
+  right: 10%;
+  top: 40%;
+  margin-top: -25%;
+}
+
+.windows-title {
+  padding: 32rpx;
+  color: #999;
+  font-size: 24rpx;
+}
+
+.windows-btn {
+  /* border-top: 1px solid #f1f1f1; */
+}
+
+.windows-btn view:nth-child(1) {
+  text-align: right;
+  padding: 32rpx;
+  color: #26A2FF;
+}
+
+.windows-content {
+  height: 1rem;
+  padding: 0 28rpx;
+  font-size: 32rpx;
+}
+.windows-content2 {
+  height: auto;
+  max-height: 4rem;
+  overflow-y: auto;
+  padding:28rpx;
+  font-size: 32rpx;
+}

+ 12 - 1
pages/workbench/statistics_B/statistics_B.axml

@@ -28,7 +28,9 @@
     </view>
   </view>
   <view class="main margin-bottom">
-     <view class="title">B分构成</view>
+     <view class="title">B分构成
+      <text class="text2" catchTap="showText">?</text>
+    </view>
      <view class="f2-chart" a:if="{{pieData.length>0}}" style="height:800rpx">
         <f2 onInit="onInitChart2"></f2>
     </view>
@@ -69,4 +71,13 @@
            <no-data a:if="{{data_bad.length==0}}" content="无数据" />
       </view>
   </view>
+  <view a:if="{{isBh}}" class="windows" >
+    <view class="windows-box">
+      <view class="windows-title">温馨提示</view>
+      <view class="windows-content">饼图仅统计个人B分占比较多的前8种规则分类</view>
+      <view class="windows-btn flex-box flex-v-ce">
+        <view class="flex-1" catchTap="showText">我知道了</view>
+      </view>
+    </view>
+  </view>
 </view>

+ 4 - 1
pages/workbench/statistics_B/statistics_B.js

@@ -12,7 +12,7 @@ Page({
     pieData: [1],//饼型图数据
     isShowTb:true,
     employee_id:app.globalData.userData.id||0,
-
+    isBh:false
   },
   onLoad(e) {
     if(e.employee_id){
@@ -30,6 +30,9 @@ Page({
       url: '../../statistics/integralEvent/integralEvent?month=' + this.data.date + '&type=BF'
     })
   },
+  showText() {
+    this.setData({ isBh: !this.data.isBh })
+  },
   //则线图
   onInitChart(F2, config) {
     chart1 = new F2.Chart(config);

+ 65 - 0
pages/workbench/tZpoint/tZpoint.acss

@@ -0,0 +1,65 @@
+.header{
+  background-color: #26A2FF;
+  color: #fff;
+  text-align: center;
+  padding: 40rpx 0;
+}
+.item{
+    padding: 0.24rem 0.32rem;
+    font-size: 32rpx;
+    background-color: #fff;
+    border-bottom: 1px solid #f1f1f1;
+    position: relative;
+}
+.label{
+  width: 160rpx;
+  /* text-align: right; */
+}
+.page-section-btns{
+  position: relative;
+  padding: 0 0.32rem;
+  margin-top: 2rem;
+}
+.nameBox{
+  position: absolute;
+  left: 210rpx;
+  top: 0.3rem;
+  right: 0.32rem;
+}
+.fa{
+  background-color: #f0a020;
+  color: #fff;
+  right: 0;
+  padding: 0.1rem 0.2rem;
+  border-bottom-left-radius: 50rpx;
+  border-top-left-radius:50rpx;
+  position: absolute;
+  font-size: 28rpx;
+  top: -180rpx;
+}
+.picker-box{
+  width: 110rpx;
+  border-radius: 50rpx;
+  background-color: #f1f1f1;
+  position: relative;
+  height: 60rpx;
+}
+.picker-box text{
+ text-align: center;
+ line-height: 60rpx;
+ font-size: 24rpx;
+}
+.yuan{
+  width: 50rpx;
+  height: 50rpx;
+  background: #26A2FF;
+  border-radius: 100rpx;
+  position: absolute;
+  top: 5rpx;
+}
+.picker-left{
+  left: 5rpx;
+}
+.picker-right{
+  right: 5rpx;
+}

+ 31 - 0
pages/workbench/tZpoint/tZpoint.axml

@@ -0,0 +1,31 @@
+<view>
+  <!-- <view class="header">
+    <view style="margin-bottom:5rpx">调整分数</view>
+  </view> -->
+  <view class="main">
+    <form>
+      <view class="formBox">
+        <view class="flex-box-ce item">
+          <view class="label">分数</view>
+          <text class="red" style="position: relative;top:4rpx;" a:if="{{isAdd==true}}">+</text>
+          <text class="green" a:else>-</text>
+          <input value="{{point}}" class="flex-1" maxlength="10" type="number"  placeholder="请输入分数" onInput="bindKeyInput" />
+          <view class="picker-box" catchTap="bindPickerChange">
+            <view class="{{isAdd==true? 'picker-right':'picker-left'}} yuan"></view>
+            <view class="flex-box flex-v-ce">
+              <text class="red flex-1">奖</text>
+              <text class="green flex-1">扣</text>
+            </view>
+          </view>
+        </view>
+        <view class="item">
+          <textarea value="{{textArea}}" onInput="bindKeyInput2" maxlength="50" placeholder="请输入调整原因"/>
+        </view>
+      </view>
+      <view class="page-section-btns">
+        <!-- <view class="fa">预约赠送积分制考核方案</view> -->
+        <button type="primary" loading="{{disabled}}" catchTap="submit" disabled="{{disabled}}">确定并通过</button>
+      </view>
+    </form>
+  </view>
+</view>

+ 122 - 0
pages/workbench/tZpoint/tZpoint.js

@@ -0,0 +1,122 @@
+import { match } from "assert";
+
+var app = getApp();
+var that;
+var setTime;
+Page({
+  data: {
+    textArea: '',
+    point:0,
+    review_id:0,
+    isAdd:true,
+  },
+  onLoad(e) {
+    that = this;
+    dd.setNavigationBar({ title: "调整分数" });
+    if (e.id) {
+      let isAdd=true;
+      let point=e.point;
+      console.log(point)
+      if(e.point<0){
+        isAdd=false;
+        point=Math.abs(point)
+      }
+      that.setData({
+        review_id: e.id,
+        point:point,
+        isAdd:isAdd
+      })
+    }
+  },
+  bindKeyInput(e) {
+    this.setData({
+      point: e.detail.value,
+    });
+  },
+  bindKeyInput2(e) {
+    this.setData({
+      textArea: e.detail.value,
+    });
+  },
+  //选择奖还是扣(细则)
+  bindPickerChange(e) {
+    this.setData({
+      isAdd:!this.data.isAdd,
+    });
+  },
+  submit() {
+    if (!this.data.point) {
+      app.globalData.showToast('请输入分数');
+      return false;
+    }
+    if (this.data.point<0||this.data.point=='0'||this.data.point===0) {
+      app.globalData.showToast('分数不能小于等于0');
+      return false;
+    }
+    if (!this.data.textArea) {
+      app.globalData.showToast('请输调整原因');
+      return false;
+    }
+    // let str = /^1[345789]\d{9}$/
+    // if (!str.test(this.data.mobile)) {
+    //   app.globalData.showToast('手机号码格式不正确')
+    //   return false
+    // }
+    let data={
+      type:'event_check',
+      action:'agree',
+      event_id:this.data.review_id,
+      comment:this.data.textArea,
+      point:this.data.isAdd? this.data.point:this.data.point-(this.data.point*2),
+    }
+    // console.log(data)
+    // return 
+    that.setData({ disabled: true });
+    this.opneWebSocket(data)
+  },
+  opneWebSocket(data) {
+    setTime = setTimeout(() => {
+        dd.alert({
+            title: '温馨提示',
+            content: '网络异常,请检查网络',
+            buttonText: '我知道了',
+            success: () => {
+              clearTimeout(setTime);
+              app.globalData.socketApi.closewebsocket();
+              that.setData({ 
+                disabled: false, 
+                isBh: false,
+                textArea: '',
+              });
+            },
+        });
+      }, 15000)
+    app.globalData.socketApi.sendData(data, this.onmessageWS);
+  },
+  onmessageWS(e) {
+    // 因为作用域问题,这个函数不能使用this
+    if (e.type == 'event_check') {
+       clearTimeout(setTime);
+        if(e.code==1){
+          app.globalData.showToast("提交成功");
+          that.setData({ 
+            disabled: false, 
+            textArea: '',
+          });
+          app.globalData.socketApi.closewebsocket();
+          setTimeout(() => {
+            dd.navigateBack({ delta: 1 })
+          }, 1000);
+        }else{
+          app.globalData.showToast(e.msg)
+          app.globalData.socketApi.closewebsocket();
+        }
+    }
+    if (e.type == 'error') {
+      clearTimeout(setTime);
+      that.setData({
+        isShowError: true,
+      })
+    }
+  },
+});

+ 3 - 0
pages/workbench/tZpoint/tZpoint.json

@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}

+ 7 - 4
utils/websocket.js

@@ -15,7 +15,7 @@ let closewebsocket = () => {
   dd.offSocketClose();
 }
 
-let initWebSocket = (callback) => {
+let initWebSocket = (callback,is) => {
   //初始化 websocket
   
   dd.onSocketClose((res) => {
@@ -52,8 +52,11 @@ let initWebSocket = (callback) => {
     // opneWebSocket();
   });
   // 创建
+
+  let url=is? 'wss://' + dd.globalData.webScoketUrl + '/ws2/':'wss://' + dd.globalData.webScoketUrl + '/ws/'
+  // url='wss://app55493.eapps.dingtalkcloud.com/ws2/'
   dd.connectSocket({
-    url: 'wss://' + dd.globalData.webScoketUrl + '/ws/'
+    url:url
   });
 }
 // 发送消息
@@ -65,14 +68,14 @@ let sendSocketMessage = (message) => {
 };
 
 // 发送数据
-let sendData = (data, callback) => {
+let sendData = (data, callback,is) => {
   weboscket_callback = callback
   if (ws) {//周统计不需要验证
     sendSocketMessage(data);
   } else {
     initWebSocket(() => {
       sendData(data, callback);
-    });
+    },is);
   }
 }
 

Някои файлове не бяха показани, защото твърде много файлове са промени