哥哥玩剑魂呢 3 years ago
parent
commit
2eacd36cda

+ 2 - 1
config/dev.env.js

@@ -5,7 +5,8 @@ const prodEnv = require('./prod.env')
 module.exports = merge(prodEnv, {
   NODE_ENV: '"development"',
   // BASE_API: '"http://test.qywx.g107.net"', // wechatgdy.vaiwan.com
-  BASE_API: '"http://qywx.1024win.cn"',
+  // BASE_API: '"http://qywx.1024win.cn"',
+  BASE_API: '"http://test.qywx.g107.net"',
   
  
   // BASE_API: '"https://oa.g107.com"',

+ 2 - 1
config/prod.env.js

@@ -2,7 +2,8 @@
 module.exports = {
   NODE_ENV: '"production"',
   // BASE_API: '"https://oa.g107.com"',
-  BASE_API: '"http://qywx.1024win.cn"',
+  // BASE_API: '"http://qywx.1024win.cn"',
+  BASE_API: '"http://test.qywx.g107.net"',
   BASE_API_KQ: '"https://ad.g107.com"',
   APP_NAME: '"功道云-绩效版"',
   APP_VER: '"7.0"',

+ 46 - 46
src/App.vue

@@ -680,7 +680,7 @@ export default {
   created () {
     let self = this
     // self.get_ver()
-    self.refreshToken()
+    // self.refreshToken()
     self.create_web_view(false)
     self.$router.beforeEach((to, from, next) => {
       let view_id = ''
@@ -780,51 +780,51 @@ export default {
       sessionStorage.setItem('routers', routersArr.join(','))
     })
 
-    if (window.plus) {
-      if (plus.webview.currentWebview().id == plus.runtime.appid) {
-        // Webview窗口的标识
-        plus.webview.currentWebview().onloaded = function () {
-          // Webview窗口页面加载完成事件
-          plus.push.addEventListener('click', function (msg) {
-            // Push模块管理推送消息功能,可以实现在线、离线的消息推送,通过plus.push可获取推送消息管理对象。
-            if (!localStorage.getItem(msg.payload.sn)) {
-              localStorage.setItem(msg.payload.sn, msg.payload)
-              try {
-                let app = { url: msg.payload.mini_program.index, download_url: msg.payload.mini_program.path }
-                let url = app.url + self.create_params(msg.payload.mini_program.params)
-                if (app.download_url.indexOf('.zip') >= 0) {
-                  self.get_app_and_open(app.download_url, url)
-                  return false
-                } else {
-                  // 公司对得上直接处理,对不上要提醒切换
-                  if (self.$store.getters.user_info.site_id == msg.payload.site_id) {
-                    var plusUrl = plus.webview.currentWebview().getURL()
-                    plusUrl = plusUrl.split('#')[0] + '#' + url
-                    var w = plus.webview.create(plusUrl, msg.payload.msg_id)
-                    setTimeout(function () {
-                      w.show('pop-in', 300)
-                    }, 100)
-                  } else {
-                    // self.login2(msg.payload.site_id, function () {
-                    //   var plusUrl = plus.webview.currentWebview().getURL()
-                    //   plusUrl = plusUrl.split('#')[0] + '#' + url
-                    //   var w = plus.webview.create(plusUrl, msg.payload.msg_id)
-                    //   setTimeout(function () {
-                    //     w.show('pop-in', 300)
-                    //   }, 100)
-                    // })
-                  }
-                }
-              } catch (e) {
-                alert(e.message)
-              }
-            }
-          },
-          false
-          )
-        }
-      }
-    }
+    // if (window.plus) {
+    //   if (plus.webview.currentWebview().id == plus.runtime.appid) {
+    //     // Webview窗口的标识
+    //     plus.webview.currentWebview().onloaded = function () {
+    //       // Webview窗口页面加载完成事件
+    //       plus.push.addEventListener('click', function (msg) {
+    //         // Push模块管理推送消息功能,可以实现在线、离线的消息推送,通过plus.push可获取推送消息管理对象。
+    //         if (!localStorage.getItem(msg.payload.sn)) {
+    //           localStorage.setItem(msg.payload.sn, msg.payload)
+    //           try {
+    //             let app = { url: msg.payload.mini_program.index, download_url: msg.payload.mini_program.path }
+    //             let url = app.url + self.create_params(msg.payload.mini_program.params)
+    //             if (app.download_url.indexOf('.zip') >= 0) {
+    //               self.get_app_and_open(app.download_url, url)
+    //               return false
+    //             } else {
+    //               // 公司对得上直接处理,对不上要提醒切换
+    //               if (self.$store.getters.user_info.site_id == msg.payload.site_id) {
+    //                 var plusUrl = plus.webview.currentWebview().getURL()
+    //                 plusUrl = plusUrl.split('#')[0] + '#' + url
+    //                 var w = plus.webview.create(plusUrl, msg.payload.msg_id)
+    //                 setTimeout(function () {
+    //                   w.show('pop-in', 300)
+    //                 }, 100)
+    //               } else {
+    //                 // self.login2(msg.payload.site_id, function () {
+    //                 //   var plusUrl = plus.webview.currentWebview().getURL()
+    //                 //   plusUrl = plusUrl.split('#')[0] + '#' + url
+    //                 //   var w = plus.webview.create(plusUrl, msg.payload.msg_id)
+    //                 //   setTimeout(function () {
+    //                 //     w.show('pop-in', 300)
+    //                 //   }, 100)
+    //                 // })
+    //               }
+    //             }
+    //           } catch (e) {
+    //             alert(e.message)
+    //           }
+    //         }
+    //       },
+    //       false
+    //       )
+    //     }
+    //   }
+    // }
   }
 }
 </script>

+ 3 - 0
src/components/body/message_list.vue

@@ -153,6 +153,9 @@ export default {
       })
     },
     readMsg (item, title) {
+      console.log('11111111111')
+      console.log(item)
+      console.log(title)
       this.$router.push({ name: 'message_detail', query: { cate: item, title: title }})
     },
     chat_msg_session_list (done) {

+ 4 - 3
src/components/body/statistics.vue

@@ -40,7 +40,8 @@
             </div>
             <div class="flex-box integral_right">
               <div :class="rankingIndex == 1 ? 'active' : ''" @click="rankingIndex = 1">A&B</div>
-              <div :class="rankingIndex == 2 ? 'active' : ''" @click="rankingIndex = 2">绩效</div>
+              <!-- 暂时隐藏绩效 -->
+              <!-- <div :class="rankingIndex == 2 ? 'active' : ''" @click="rankingIndex = 2">绩效</div> -->
             </div>
           </div>
         </div>
@@ -89,13 +90,13 @@
         </template>
       </div>
       <!-- 团队绩效 -->
-      <div class="flex-box flex-v-ce team_performance" @click="openUrl(4)" v-if="getRole_two">
+      <!-- <div class="flex-box flex-v-ce team_performance" @click="openUrl(4)" v-if="getRole_two">
         <div class="flex-1">
           <div>本月团队绩效情况</div>
           <div class="color_ccc">查看详情</div>
         </div>
         <i class="van-icon van-icon-arrow van-cell__right-icon"></i>
-      </div>
+      </div> -->
       <div style="height: 1rem;"></div>
     </scroller>
   </div>

+ 2 - 0
src/components/body/user_center.vue

@@ -142,6 +142,8 @@ export default {
       this.show = false
     },
     openfx () {
+      this.$toast('请点击右上角分享')
+      return
       let pictures = '_www/static/images/logo.png'
       if (window.plus && window.plus.os.name == 'Android') {
         pictures = window.plus.io.convertLocalFileSystemURL(pictures)

+ 210 - 197
src/components/integral/approval_detail.vue

@@ -1,51 +1,45 @@
 <template>
   <div>
     <van-nav-bar :title="title" left-text="返回" @click-left="$route_back" left-arrow></van-nav-bar>
-    <div class="body_com has_header" :class="{ can_complete : detail_info.can_complete == 1,can_complete_isIos:can_complete_isIos }">
+    <div class="body_com has_header" :class="{ can_complete: detail_info.can_complete == 1, can_complete_isIos: can_complete_isIos }">
       <scroller style="height: 100vh;">
         <!-- 审批内容 -->
         <!-- detail_info.process.length > 0 &&  -->
         <van-cell-group>
-          <van-cell :title="detail_info.employee_info.name" v-if="detail_info.process !== null && detail_info.status==0">
+          <van-cell :title="detail_info.employee_info.name" v-if="detail_info.process !== null && detail_info.status == 0">
             <template slot="icon">
-              <userImage :user_name="detail_info.employee_info.name" :img_url="detail_info.employee_info.img_url" width="0.9rem" height="0.9rem" style="margin-right: .1rem"></userImage>
+              <userImage
+                :user_name="detail_info.employee_info.name"
+                :img_url="detail_info.employee_info.img_url"
+                width="0.9rem"
+                height="0.9rem"
+                style="margin-right: .1rem"
+              ></userImage>
             </template>
             <template slot="title">
               <Wxopendata type="userName" :openid="detail_info.employee_info.name"></Wxopendata>
             </template>
             <template slot="label">
-              <span v-show="detail_info.review_status == 0" :class="{ color_yellow: detail_info.review_status == 0 }">{{ detail_info.status_mark }}</span>
-              <span v-show="detail_info.review_status == 1" :class="{ color_red: detail_info.review_status == 1 }">{{ detail_info.status_mark }}</span>
-              <span v-show="detail_info.review_status == 2" :class="{ color_green: detail_info.review_status == 2 }">{{ detail_info.status_mark }}</span>
+              <span v-show="detail_info.review_status == 0" :class="{ color_orange: detail_info.review_status == 0 }">{{ detail_info.review_status_mark }}</span>
+              <span v-show="detail_info.review_status == 1" :class="{ color_red: detail_info.review_status == 1 }">{{ detail_info.review_status_mark }}</span>
+              <span v-show="detail_info.review_status == 2" :class="{ color_green: detail_info.review_status == 2 }">{{ detail_info.review_status_mark }}</span>
             </template>
-            <!--
-            <template slot="right-icon">
-              <span v-if="detail_info.review_point > 0 && detail_info.review_status == 1" class="color_red">
-                <span>+</span>
-                {{ detail_info.review_point }}
-              </span>
-              <span v-else-if="detail_info.review_point < 0 && detail_info.review_status == 1" class="color_green">{{ detail_info.review_point }}</span>
-            </template>
-            -->
           </van-cell>
         </van-cell-group>
         <!-- 当审批状态不为待审批时 -->
-         <div class="flex-box-v flex-center-center event-info__header" v-if="detail_info.status != 0 && detail_info.process !== null " style="padding:0.32rem;background-color:#fff;">
-
-            <userImage class="about-me__avatar" :user_name="detail_info.employee_info.name" :img_url="detail_info.employee_info.img_url" width="1.12rem" height="1.12rem"></userImage>
-            <span class="event-employee__name"><Wxopendata type="userName" :openid="detail_info.employee_info.name"></Wxopendata></span>
-
-            <template v-if="detail_info.status == 1">
-              <span class="event-info__value" v-if="detail_info.review_point >= 0">+{{ detail_info.review_point}} {{types_list[detail_info.pt_id]}}</span>
-              <span class="event-info__value green" v-else>{{ detail_info.review_point}}{{types_list[detail_info.pt_id]}}</span>
-            </template>
-            <span class="event-info__status">{{detail_info.status_mark}}</span>
-         </div>
+        <div class="flex-box-v flex-center-center event-info__header" v-if="detail_info.status != 0 && detail_info.process !== null" style="padding:0.32rem;background-color:#fff;">
+          <userImage class="about-me__avatar" :user_name="detail_info.employee_info.name" :img_url="detail_info.employee_info.img_url" width="1.12rem" height="1.12rem"></userImage>
+          <span class="event-employee__name"><Wxopendata type="userName" :openid="detail_info.employee_info.name"></Wxopendata></span>
+          <template v-if="detail_info.status == 1">
+            <span class="event-info__value" v-if="detail_info.review_point >= 0">+{{ detail_info.review_point }} {{ types_list[detail_info.pt_id] }}</span>
+            <span class="event-info__value color_green" v-else>{{ detail_info.review_point }}{{ types_list[detail_info.pt_id] }}</span>
+          </template>
+          <span class="event-info__status">{{ detail_info.review_status_mark }}</span>
+        </div>
         <!-- END -->
         <div class="detail_box">
           <div v-for="(item, index) in detail_info.detail" :key="index" class="detail_line">
             <template v-if="item.value">
-              
               <div class="flex-box" v-if="item.key == '奖扣目标' || item.key == '申请人' || item.key == '收益人'">
                 <span v-if="item.type == 'text'" class="detail_label">{{ item.key }}</span>
                 <span v-if="item.type == 'text'" class="detail_value"><Wxopendata type="userName" :openid="item.value"></Wxopendata></span>
@@ -54,10 +48,15 @@
                 <span v-if="item.type == 'text'" class="detail_label">{{ item.key }}</span>
                 <span v-if="item.type == 'text'" class="detail_value">{{ item.value }}</span>
               </div>
-
               <span v-if="item.type == 'image'" class="detail_label">{{ item.key }}</span>
               <span v-if="item.type == 'image'" class="detail_value">
-                <img :key="index" v-for="(items, index) in item.value" :src="items" style="width: 50px;height: 50px; margin-right: 0.2rem; vertical-align: text-top"  @click="opremImage(item.value)"/>
+                <img
+                  :key="index"
+                  v-for="(items, index) in item.value"
+                  :src="items"
+                  style="width: 50px;height: 50px; margin-right: 0.2rem; vertical-align: text-top"
+                  @click="opremImage(item.value)"
+                />
               </span>
             </template>
           </div>
@@ -72,28 +71,39 @@
             <div class="detail_label">规则分类</div>
             <div class="detail_value">{{ detail_info.rule_name }}</div>
           </div>
-          <div class="event-rule__item" v-if="detail_info.item_name &&  detail_info.item_id>0">
+          <div class="event-rule__item" v-if="detail_info.item_name && detail_info.item_id > 0">
             <div class="detail_label">积分规则</div>
             <div class="detail_value">{{ detail_info.item_name }}</div>
           </div>
-          <div class="event-rule__item" v-if="detail_info.item_id>0">
+          <div class="event-rule__item" v-if="detail_info.item_id > 0">
             <div class="detail_label">规则积分</div>
             <div class="detail_value">
-              <span v-if="detail_info.item_range_type == 1"><span v-if="detail_info.item_prize_type == 1">+</span> {{ detail_info.item_min_point }}</span>
-              <span v-if="detail_info.item_range_type == 2"><span v-if="detail_info.item_prize_type == 1">+</span>{{ detail_info.item_min_point }} ~ {{ detail_info.item_max_point }}</span>
+              <span v-if="detail_info.item_range_type == 1">
+                <span v-if="detail_info.item_prize_type == 1">+</span>
+                {{ detail_info.item_min_point }}
+              </span>
+              <span v-if="detail_info.item_range_type == 2">
+                <span v-if="detail_info.item_prize_type == 1">+</span>
+                {{ detail_info.item_min_point }} ~ {{ detail_info.item_max_point }}
+              </span>
               {{ types_list[detail_info.pt_id] }}
             </div>
           </div>
         </div>
 
         <!-- END -->
-        <approval_process :data.sync="detail_info.process"></approval_process>
+        <approvalProcess :data.sync="detail_info.process"></approvalProcess>
         <div style="height: 1.5rem;"></div>
       </scroller>
-      <!-- 申请者 ||  -->
+      <!-- 审批者 ||  -->
       <footer class="flex-box flex-v-ce footer" v-if="detail_info.can_refuse == '1'">
         <div class="flex-2">撤回后需重新审批</div>
-        <van-button type="info" @click="revoke()" class="flex-1">撤销</van-button>
+        <van-button type="info" @click="revoke(1)" class="flex-1">撤回</van-button>
+      </footer>
+      <!-- 申请者 ||  -->
+      <footer class="flex-box flex-v-ce footer" v-if="detail_info.applyor_id==$userInfo().id&&detail_info.can_refuse == '1'&&(detail_info.source_type==2||detail_info.source_type==3)">
+        <div class="flex-2">撤销后数据将不可恢复</div>
+        <van-button type="info" @click="revoke(2)" class="flex-1">撤销</van-button>
       </footer>
 
       <!-- 驳回弹窗 -->
@@ -106,11 +116,13 @@
     </div>
 
     <van-row justify="center" type="flex" v-if="detail_info.can_complete == 1" class="btn-box">
-      <van-col :span="detail_info.source_type != 4?8:0">
-        <div style="padding:0.16rem;"><van-button block type="info" plain :disabled="detail_info.source_type == '4'" v-if="detail_info.source_type != 4" @click="refuse">驳回</van-button></div>
+      <van-col :span="detail_info.source_type != 4 ? 8 : 0">
+        <div style="padding:0.16rem;">
+          <van-button block type="info" plain :disabled="detail_info.source_type == '4'" v-if="detail_info.source_type != 4" @click="refuse">驳回</van-button>
+        </div>
       </van-col>
       <!--  v-if="detail_info.status" -->
-      <van-col :span="detail_info.source_type != 4?16:24">
+      <van-col :span="detail_info.source_type != 4 ? 16 : 24">
         <div style="padding:0.16rem; padding-left:0;">
           <van-button block type="info" v-if="detail_info.source_type == '1'" @click="$router.push({ name: 'integral_approval_integral', query: { review_id: detail_info.id } })">
             通过
@@ -139,21 +151,26 @@
 <script>
 import request from '@/utils/request'
 import Vue from 'vue'
-import approval_process from '@/components/integral/approval_process'
+import approvalProcess from '@/components/integral/approval_process'
 import userImage from '@/components/common/user_image'
 import { Dialog, Panel, Step, Steps, Overlay, ImagePreview } from 'vant'
-Vue.use(Dialog).use(Panel).use(Step).use(Steps).use(Overlay).use(ImagePreview)
+Vue.use(Dialog)
+  .use(Panel)
+  .use(Step)
+  .use(Steps)
+  .use(Overlay)
+  .use(ImagePreview)
 export default {
   // 数据
-  components: { approval_process, userImage },
+  components: { approvalProcess, userImage },
   data () {
     return {
       imageSrc: [],
       show: false,
       title: '审批详情',
       detail_info: {
-        employee_info: {name: '', img_url: ''},
-        process: [{name: '未知'}]
+        employee_info: { name: '', img_url: '' },
+        process: [{ name: '未知' }]
       },
       review_id: this.$route.query.review_id,
       action: '',
@@ -169,7 +186,6 @@ export default {
         id: ''
       },
       bar_height: '',
-      user_info: this.$store.getters.user_info,
       show_one: false,
       adopt_one: false,
       show_two: false,
@@ -188,12 +204,9 @@ export default {
   // 方法
   methods: {
     get_point_types () {
-      let self = this
-      var types = this.$store.getters.point_types
-      if (types) {
-        for (let i in types) {
-          self.types_list[types[i].id] = types[i].name
-        }
+      var types = this.$getTypes
+      for (let i in types) {
+        this.types_list[types[i].id] = types[i].name
       }
     },
     opremImage (item) {
@@ -228,24 +241,26 @@ export default {
     sub (data) {
       let self = this
       self.showLoading()
-      request('post', '/api/integral/review', data).then(res => {
-        if (res.data.code == 1) {
-          if (self.action == 'complete') {
-            self.show_complete = false
-          } else if (self.action == 'refuse') {
+      request('post', '/api/integral/review', data)
+        .then(res => {
+          if (res.data.code == 1) {
+            if (self.action == 'complete') {
+              self.show_complete = false
+            } else if (self.action == 'refuse') {
+              self.show_refuse = false
+            }
+            self.$toast.clear()
+            self.$toast(res.data.msg)
+            self.get_info()
+          } else {
             self.show_refuse = false
+            self.$toast.clear()
+            self.$toast(res.data.msg)
           }
+        })
+        .catch(e => {
           self.$toast.clear()
-          self.$toast(res.data.msg)
-          self.get_info()
-        } else {
-          self.show_refuse = false
-          self.$toast.clear()
-          self.$toast(res.data.msg)
-        }
-      }).catch(e => {
-        self.$toast.clear()
-      })
+        })
     },
 
     // 通过
@@ -312,26 +327,28 @@ export default {
       this.show_approver = false
     },
     // 撤销申请
-    revoke () {
+    revoke (type) {
+      let str = type == 1 ? '撤回' : '撤销'
       let self = this
       Dialog.confirm({
         title: '提示',
-        message: '您确定要撤销此项吗?'
+        message: '您确定要' + str + '此项吗?'
       })
         .then(() => {
           self.showLoading()
-          request('DELETE', '/api/integral/review', { review_id: self.review_id }).then(res => {
-            if (res.data.code == 1) {
-              self.$keep_alive_update('update_approval_list', { review_id: self.review_id })
-              self.$toast.clear()
-              setTimeout(() => {
-                this.$route_back()
-              }, 200)
-            } else {
-              self.$toast.clear()
-              self.$toast(res.data.msg)
-            }
-          })
+          request('DELETE', '/api/integral/review', { review_id: self.review_id })
+            .then(res => {
+              if (res.data.code == 1) {
+                self.$keep_alive_update('update_approval_list', { review_id: self.review_id })
+                self.$toast.clear()
+                setTimeout(() => {
+                  this.$route_back()
+                }, 200)
+              } else {
+                self.$toast.clear()
+                self.$toast(res.data.msg)
+              }
+            })
             .catch(e => {
               self.$toast.clear()
             })
@@ -369,24 +386,24 @@ export default {
 }
 </script>
 <style scoped lang="less">
-  .footer{
-    position: fixed;
-    bottom: 0;
-    left: 0;
-    right: 0;
-    background: #fff;
-    padding: 0.16rem 0.3rem;
-    border-top: 1px solid #f1f1f1;
-  }
-  .footer .flex-2{
-    font-size: 0.28rem;
-    color: #909399;
-  }
-  .event-info__status{
-    font-size: 0.32rem;
-    color: #303133;
-    margin-top: 0.2rem;
-  }
+.footer {
+  position: fixed;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  background: #fff;
+  padding: 0.16rem 0.3rem;
+  border-top: 1px solid #f1f1f1;
+}
+.footer .flex-2 {
+  font-size: 0.28rem;
+  color: #909399;
+}
+.event-info__status {
+  font-size: 0.32rem;
+  color: #303133;
+  margin-top: 0.2rem;
+}
 & .event-info__header {
   padding: 0.32rem;
   background: #fff;
@@ -406,26 +423,23 @@ export default {
 }
 & .event-info__value {
   font-size: 0.36rem;
-  color: #F56C6C;
+  color: #f56c6c;
   text-align: right;
   font-weight: 600;
-  &.green {
-    color: #4bd964;
-  }
 }
 .event-employee__name {
-   font-weight: 600;
-   margin: 0.2rem 0;
- }
+  font-weight: 600;
+  margin: 0.2rem 0;
+}
 .body_com {
   height: calc(100% - 0.92rem);
   position: relative;
 }
-.can_complete{
+.can_complete {
   height: calc(100% - 2.12rem);
   position: relative;
 }
-.can_complete_isIos{
+.can_complete_isIos {
   height: calc(100% - 2.52rem);
 }
 .detail_box {
@@ -464,108 +478,107 @@ export default {
   background-color: #fff;
   margin-bottom: 0.2rem;
 }
- & .event-process__wrap,
-  .event-rule__wrap {
-    margin-top: 0.24rem;
-    padding: 0 0.36rem;
-    background: #fff;
-    & .event-process__header,
-    .event-rule__header {
-      position: relative;
-      // display: flex;
-      padding: 0.24rem 0;
-      color: #303133;
-      flex-direction: column;
-      &:after {
-        position: absolute;
-        box-sizing: border-box;
-        content: ' ';
-        pointer-events: none;
-        right: 0;
-        bottom: 0;
-        left: 0;
-        border-bottom: 1px solid #ebedf0;
-        -webkit-transform: scaleY(0.5);
-        transform: scaleY(0.5);
-      }
-
-      & .event-process__title,
-      .event-rule__title {
-        font-weight: 600;
-      }
-
-      & .event-process__sub-title {
-        font-size: 0.28rem;
-        color: #909399;
-      }
-    }
-    & .event-process__icon {
-      display: flex;
-      width: 0.72rem;
-      height: 0.72rem;
-      font-size: 0.28rem;
-      color: #fff;
-      background: #26a2ff;
-      align-items: center;
-      justify-content: center;
-      border-radius: 100%;
-    }
-    & .event-process__item {
-      position: relative;
-      display: flex;
-      height: 1.28rem;
-      flex-direction: row;
-      align-items: center;
-    }
-
-    & .process-item__content {
-      display: flex;
-      flex: 1;
-      padding-left: 0.2rem;
-      flex-direction: column;
-
-      & .process-item__time {
-        padding-top: 0.06rem;
-        font-size: 0.24rem;
-        color: #909399;
-      }
+& .event-process__wrap,
+.event-rule__wrap {
+  margin-top: 0.24rem;
+  padding: 0 0.36rem;
+  background: #fff;
+  & .event-process__header,
+  .event-rule__header {
+    position: relative;
+    // display: flex;
+    padding: 0.24rem 0;
+    color: #303133;
+    flex-direction: column;
+    &:after {
+      position: absolute;
+      box-sizing: border-box;
+      content: ' ';
+      pointer-events: none;
+      right: 0;
+      bottom: 0;
+      left: 0;
+      border-bottom: 1px solid #ebedf0;
+      -webkit-transform: scaleY(0.5);
+      transform: scaleY(0.5);
     }
 
-    & .process-item__point {
-      display: flex;
-      font-size: 0.36rem;
-      font-weight: 500;
-      align-items: center;
+    & .event-process__title,
+    .event-rule__title {
+      font-weight: 600;
     }
 
-    & .event-process__line {
-      position: absolute;
-      top: 1.04rem;
-      left: 0.35rem;
-      width: 0.02rem;
-      height: 0.48rem;
-      background-color: #ff0000;
-      background: repeating-linear-gradient(0, #979797 0, #979797 11%, transparent 0, transparent 21%);
+    & .event-process__sub-title {
+      font-size: 0.28rem;
+      color: #909399;
     }
   }
-
-  .event-rule__item {
+  & .event-process__icon {
     display: flex;
-    padding-bottom: 0.16rem;
+    width: 0.72rem;
+    height: 0.72rem;
+    font-size: 0.28rem;
+    color: #fff;
+    background: #26a2ff;
+    align-items: center;
+    justify-content: center;
+    border-radius: 100%;
+  }
+  & .event-process__item {
+    position: relative;
+    display: flex;
+    height: 1.28rem;
     flex-direction: row;
+    align-items: center;
+  }
 
-    & .rule-item__label {
-      display: flex;
-      width: 1.45rem;
+  & .process-item__content {
+    display: flex;
+    flex: 1;
+    padding-left: 0.2rem;
+    flex-direction: column;
+
+    & .process-item__time {
+      padding-top: 0.06rem;
+      font-size: 0.24rem;
       color: #909399;
     }
+  }
 
-    & .rule-item__value {
-      display: flex;
-      flex: 1;
-      color: #303133;
-      flex-wrap: wrap;
-    }
+  & .process-item__point {
+    display: flex;
+    font-size: 0.36rem;
+    font-weight: 500;
+    align-items: center;
   }
 
+  & .event-process__line {
+    position: absolute;
+    top: 1.04rem;
+    left: 0.35rem;
+    width: 0.02rem;
+    height: 0.48rem;
+    background-color: #ff0000;
+    background: repeating-linear-gradient(0, #979797 0, #979797 11%, transparent 0, transparent 21%);
+  }
+}
+
+.event-rule__item {
+  display: flex;
+  padding-bottom: 0.16rem;
+  flex-direction: row;
+
+  & .rule-item__label {
+    display: flex;
+    width: 1.45rem;
+    color: #909399;
+  }
+
+  & .rule-item__value {
+    display: flex;
+    flex: 1;
+    color: #303133;
+    flex-wrap: wrap;
+  }
+}
 </style>

+ 571 - 0
src/components/integral/approval_detail_BF.vue

@@ -0,0 +1,571 @@
+<template>
+  <div>
+    <van-nav-bar :title="title" left-text="返回" @click-left="$route_back" left-arrow></van-nav-bar>
+    <div class="body_com has_header" :class="{ can_complete : detail_info.can_complete == 1,can_complete_isIos:can_complete_isIos }">
+      <scroller style="height: 100vh;">
+        <!-- 审批内容 -->
+        <!-- detail_info.process.length > 0 &&  -->
+        <van-cell-group>
+          <van-cell :title="detail_info.employee_info.name" v-if="detail_info.process !== null && detail_info.status==0">
+            <template slot="icon">
+              <userImage :user_name="detail_info.employee_info.name" :img_url="detail_info.employee_info.img_url" width="0.9rem" height="0.9rem" style="margin-right: .1rem"></userImage>
+            </template>
+            <template slot="title">
+              <Wxopendata type="userName" :openid="detail_info.employee_info.name"></Wxopendata>
+            </template>
+            <template slot="label">
+              <span v-show="detail_info.review_status == 0" :class="{ color_yellow: detail_info.review_status == 0 }">{{ detail_info.status_mark }}</span>
+              <span v-show="detail_info.review_status == 1" :class="{ color_red: detail_info.review_status == 1 }">{{ detail_info.status_mark }}</span>
+              <span v-show="detail_info.review_status == 2" :class="{ color_green: detail_info.review_status == 2 }">{{ detail_info.status_mark }}</span>
+            </template>
+            <!--
+            <template slot="right-icon">
+              <span v-if="detail_info.review_point > 0 && detail_info.review_status == 1" class="color_red">
+                <span>+</span>
+                {{ detail_info.review_point }}
+              </span>
+              <span v-else-if="detail_info.review_point < 0 && detail_info.review_status == 1" class="color_green">{{ detail_info.review_point }}</span>
+            </template>
+            -->
+          </van-cell>
+        </van-cell-group>
+        <!-- 当审批状态不为待审批时 -->
+         <div class="flex-box-v flex-center-center event-info__header" v-if="detail_info.status != 0 && detail_info.process !== null " style="padding:0.32rem;background-color:#fff;">
+
+            <userImage class="about-me__avatar" :user_name="detail_info.employee_info.name" :img_url="detail_info.employee_info.img_url" width="1.12rem" height="1.12rem"></userImage>
+            <span class="event-employee__name"><Wxopendata type="userName" :openid="detail_info.employee_info.name"></Wxopendata></span>
+
+            <template v-if="detail_info.status == 1">
+              <span class="event-info__value" v-if="detail_info.review_point >= 0">+{{ detail_info.review_point}} {{types_list[detail_info.pt_id]}}</span>
+              <span class="event-info__value green" v-else>{{ detail_info.review_point}}{{types_list[detail_info.pt_id]}}</span>
+            </template>
+            <span class="event-info__status">{{detail_info.status_mark}}</span>
+         </div>
+        <!-- END -->
+        <div class="detail_box">
+          <div v-for="(item, index) in detail_info.detail" :key="index" class="detail_line">
+            <template v-if="item.value">
+              
+              <div class="flex-box" v-if="item.key == '奖扣目标' || item.key == '申请人' || item.key == '收益人'">
+                <span v-if="item.type == 'text'" class="detail_label">{{ item.key }}</span>
+                <span v-if="item.type == 'text'" class="detail_value"><Wxopendata type="userName" :openid="item.value"></Wxopendata></span>
+              </div>
+              <div class="flex-box" v-else>
+                <span v-if="item.type == 'text'" class="detail_label">{{ item.key }}</span>
+                <span v-if="item.type == 'text'" class="detail_value">{{ item.value }}</span>
+              </div>
+
+              <span v-if="item.type == 'image'" class="detail_label">{{ item.key }}</span>
+              <span v-if="item.type == 'image'" class="detail_value">
+                <img :key="index" v-for="(items, index) in item.value" :src="items" style="width: 50px;height: 50px; margin-right: 0.2rem; vertical-align: text-top"  @click="opremImage(item.value)"/>
+              </span>
+            </template>
+          </div>
+        </div>
+        <!-- 规则依据模块 -->
+        <div class="event-rule__wrap">
+          <div class="event-rule__header" style="margin-bottom:0.24rem;" v-show="detail_info.rule_id || detail_info.item_id">
+            <span class="event-rule__title">规则依据</span>
+            <span class="event-process__sub-title">此事件打分参考以下积分规则</span>
+          </div>
+          <div class="event-rule__item" v-if="detail_info.rule_id">
+            <div class="detail_label">规则分类</div>
+            <div class="detail_value">{{ detail_info.rule_name }}</div>
+          </div>
+          <div class="event-rule__item" v-if="detail_info.item_name &&  detail_info.item_id>0">
+            <div class="detail_label">积分规则</div>
+            <div class="detail_value">{{ detail_info.item_name }}</div>
+          </div>
+          <div class="event-rule__item" v-if="detail_info.item_id>0">
+            <div class="detail_label">规则积分</div>
+            <div class="detail_value">
+              <span v-if="detail_info.item_range_type == 1"><span v-if="detail_info.item_prize_type == 1">+</span> {{ detail_info.item_min_point }}</span>
+              <span v-if="detail_info.item_range_type == 2"><span v-if="detail_info.item_prize_type == 1">+</span>{{ detail_info.item_min_point }} ~ {{ detail_info.item_max_point }}</span>
+              {{ types_list[detail_info.pt_id] }}
+            </div>
+          </div>
+        </div>
+
+        <!-- END -->
+        <approval_process :data.sync="detail_info.process"></approval_process>
+        <div style="height: 1.5rem;"></div>
+      </scroller>
+      <!-- 申请者 ||  -->
+      <footer class="flex-box flex-v-ce footer" v-if="detail_info.can_refuse == '1'">
+        <div class="flex-2">撤回后需重新审批</div>
+        <van-button type="info" @click="revoke()" class="flex-1">撤回审批</van-button>
+      </footer>
+
+      <!-- 驳回弹窗 -->
+      <van-popup v-model="show_refuse" position="right" :style="{ height: '100%', width: '100%', 'background-color': 'rgb(245, 245, 245)' }">
+        <div :style="'padding-top:' + bar_height + 'px;background-color: #238dfa;'"></div>
+        <van-nav-bar title="确认驳回" left-text="返回" @click-left="show_refuse = false" left-arrow></van-nav-bar>
+        <van-cell-group><van-field v-model="refuse_msg" rows="5" autosize type="textarea" maxlength="50" placeholder="请输入审批意见" show-word-limit /></van-cell-group>
+        <div style="padding:0.32rem;"><van-button block type="info" @click="confirm_refuse">确认驳回</van-button></div>
+      </van-popup>
+    </div>
+
+    <van-row justify="center" type="flex" v-if="detail_info.can_complete == 1" class="btn-box">
+      <van-col :span="detail_info.source_type != 4?8:0">
+        <div style="padding:0.16rem;"><van-button block type="info" plain :disabled="detail_info.source_type == '4'" v-if="detail_info.source_type != 4" @click="refuse">驳回</van-button></div>
+      </van-col>
+      <!--  v-if="detail_info.status" -->
+      <van-col :span="detail_info.source_type != 4?16:24">
+        <div style="padding:0.16rem; padding-left:0;">
+          <van-button block type="info" v-if="detail_info.source_type == '1'" @click="$router.push({ name: 'integral_approval_integral', query: { review_id: detail_info.id } })">
+            通过
+          </van-button>
+          <van-button block type="info" v-if="detail_info.source_type == '2'" @click="$router.push({ name: 'integral_approval_integral', query: { review_id: detail_info.id } })">
+            通过
+          </van-button>
+          <van-button block type="info" v-if="detail_info.source_type == '3'" @click="$router.push({ name: 'integral_approval_integral', query: { review_id: detail_info.id } })">
+            通过
+          </van-button>
+          <van-button
+            block
+            type="info"
+            v-if="detail_info.source_type == '4'"
+            @click="$router.push({ name: 'integral_approval_performance', query: { review_id: detail_info.id } })"
+          >
+            通过
+          </van-button>
+        </div>
+      </van-col>
+    </van-row>
+
+    <van-image-preview v-model="show" :images="imageSrc"></van-image-preview>
+  </div>
+</template>
+<script>
+import request from '@/utils/request'
+import Vue from 'vue'
+import approval_process from '@/components/integral/approval_process'
+import userImage from '@/components/common/user_image'
+import { Dialog, Panel, Step, Steps, Overlay, ImagePreview } from 'vant'
+Vue.use(Dialog).use(Panel).use(Step).use(Steps).use(Overlay).use(ImagePreview)
+export default {
+  // 数据
+  components: { approval_process, userImage },
+  data () {
+    return {
+      imageSrc: [],
+      show: false,
+      title: '审批详情',
+      detail_info: {
+        employee_info: {name: '', img_url: ''},
+        process: [{name: '未知'}]
+      },
+      review_id: this.$route.query.review_id,
+      action: '',
+      show_refuse: false,
+      refuse_msg: '',
+      show_complete: false,
+      complete_msg: '',
+      show_approver: false,
+      approver_selected: { employee: [], dept: [] },
+      reviewer: {
+        name: '',
+        url: '',
+        id: ''
+      },
+      bar_height: '',
+      user_info: this.$store.getters.user_info,
+      show_one: false,
+      adopt_one: false,
+      show_two: false,
+      adopt_two: false,
+      types_list: {},
+      can_complete_isIos: false
+    }
+  },
+  watch: {
+    adopt_one (val) {
+      if (val) {
+        this.get_info()
+      }
+    }
+  },
+  // 方法
+  methods: {
+    get_point_types () {
+      let self = this
+      var types = this.$store.getters.point_types
+      if (types) {
+        for (let i in types) {
+          self.types_list[types[i].id] = types[i].name
+        }
+      }
+    },
+    opremImage (item) {
+      this.show = true
+      this.imageSrc = item
+    },
+    // 加载
+    showLoading () {
+      this.$toast.loading({
+        loadingType: 'spinner',
+        message: '正在处理'
+      })
+    },
+    // 请求数据
+    get_info () {
+      let self = this
+      self.showLoading()
+      let review_id = self.$route.query.review_id
+      request('get', '/api/integral/review', { review_id: review_id }).then(res => {
+        self.$toast.clear()
+        if (res.data.code === 1) {
+          self.detail_info = res.data.data
+        } else {
+          self.$toast(res.data.msg)
+          self.$keep_alive_update('cancel_msg', { cancel_text: res.data.msg, id: localStorage.getItem('read_msg') })
+          setTimeout(() => {
+            self.$route_back()
+          }, 2000)
+        }
+      })
+    },
+    sub (data) {
+      let self = this
+      self.showLoading()
+      request('post', '/api/integral/review', data).then(res => {
+        if (res.data.code == 1) {
+          if (self.action == 'complete') {
+            self.show_complete = false
+          } else if (self.action == 'refuse') {
+            self.show_refuse = false
+          }
+          self.$toast.clear()
+          self.$toast(res.data.msg)
+          self.get_info()
+        } else {
+          self.show_refuse = false
+          self.$toast.clear()
+          self.$toast(res.data.msg)
+        }
+      }).catch(e => {
+        self.$toast.clear()
+      })
+    },
+
+    // 通过
+    complete () {
+      let self = this
+      self.action = 'complete'
+      self.show_complete = true
+    },
+    confirm_complete () {
+      let self = this
+      let data = {
+        review_id: self.review_id,
+        action: self.action,
+        rule_id: self.detail_info.rule_id,
+        item_id: self.detail_info.item_id,
+        point: self.detail_info.point,
+        reviewer_id: self.reviewer.id,
+        remark: self.complete_msg,
+        ticket_count: '0'
+      }
+      if (!data.reviewer_id) {
+        // 判断
+        self.$notify({ type: 'danger', message: '您没有权限审批此条申请,请指定下一个审批人' })
+      } else {
+        self.$keep_alive_update('update_approval_list', data)
+        self.sub(data)
+      }
+    },
+    // 驳回
+    refuse () {
+      let self = this
+      self.show_refuse = true
+    },
+
+    confirm_refuse () {
+      let self = this
+      self.action = 'refuse'
+      let data = {
+        review_id: self.review_id,
+        action: self.action,
+        rule_id: self.detail_info.rule_id,
+        remark: self.refuse_msg,
+        ticket_count: '0'
+      }
+      if (!self.refuse_msg) {
+        self.$notify({ type: 'danger', message: '审批意见不能为空' })
+      } else {
+        self.$keep_alive_update('update_approval_list', data)
+        self.sub(data)
+      }
+    },
+
+    // 选择审批人确认
+    approver_confirm (data) {
+      let self = this
+      if (data.employee) {
+        self.reviewer = data.employee[0]
+        self.approver_selected = data
+      }
+      self.show_approver = false
+    },
+    // 关闭选择审批人
+    approver_cancel () {
+      this.show_approver = false
+    },
+    // 撤销申请
+    revoke () {
+      let self = this
+      Dialog.confirm({
+        title: '提示',
+        message: '您确定要撤回此项吗?'
+      })
+        .then(() => {
+          self.showLoading()
+          request('DELETE', '/api/integral/review', { review_id: self.review_id }).then(res => {
+            if (res.data.code == 1) {
+              self.$keep_alive_update('update_approval_list', { review_id: self.review_id })
+              self.$toast.clear()
+              setTimeout(() => {
+                this.$route_back()
+              }, 200)
+            } else {
+              self.$toast.clear()
+              self.$toast(res.data.msg)
+            }
+          })
+            .catch(e => {
+              self.$toast.clear()
+            })
+        })
+        .catch(() => {
+          // on cancel
+        })
+    }
+  },
+  // 生命周期 --- 创建完成
+  created () {
+    let self = this
+    this.get_point_types()
+    if (window.plus) {
+      this.can_complete_isIos = window.plus.storage.getItem('iPhone')
+      self.bar_height = window.plus.navigator.getStatusbarHeight()
+    }
+    self.get_info()
+    if (this.$route.query.title) {
+      this.title = this.$route.query.title
+    }
+  },
+  keep_alive_update: {
+    // 运用缓存更新方法来完成返回后的更新
+    update_approval_detail: function (vm, data) {
+      vm.get_info()
+    },
+    update_integral_approval_performance: function (vm, data) {
+      vm.get_info()
+    },
+    withdraw_apply: function (vm, data) {
+      vm.get_info()
+    }
+  }
+}
+</script>
+<style scoped lang="less">
+  .footer{
+    position: fixed;
+    bottom: 0;
+    left: 0;
+    right: 0;
+    background: #fff;
+    padding: 0.16rem 0.3rem;
+    border-top: 1px solid #f1f1f1;
+  }
+  .footer .flex-2{
+    font-size: 0.28rem;
+    color: #909399;
+  }
+  .event-info__status{
+    font-size: 0.32rem;
+    color: #303133;
+    margin-top: 0.2rem;
+  }
+& .event-info__header {
+  padding: 0.32rem;
+  background: #fff;
+  position: relative;
+  &:after {
+    position: absolute;
+    box-sizing: border-box;
+    content: ' ';
+    pointer-events: none;
+    right: 0.32rem;
+    bottom: 0;
+    left: 0.32rem;
+    border-bottom: 1px solid #ebedf0;
+    -webkit-transform: scaleY(0.5);
+    transform: scaleY(0.5);
+  }
+}
+& .event-info__value {
+  font-size: 0.36rem;
+  color: #F56C6C;
+  text-align: right;
+  font-weight: 600;
+  &.green {
+    color: #4bd964;
+  }
+}
+.event-employee__name {
+   font-weight: 600;
+   margin: 0.2rem 0;
+ }
+.body_com {
+  height: calc(100% - 0.92rem);
+  position: relative;
+}
+.can_complete{
+  height: calc(100% - 2.12rem);
+  position: relative;
+}
+.can_complete_isIos{
+  height: calc(100% - 2.52rem);
+}
+.detail_box {
+  padding: 0.32rem;
+  font-size: 0.32rem;
+}
+.detail_line {
+  line-height: 1.75;
+}
+.detail_label {
+  color: #969799;
+  display: inline-block;
+  width: 1.5rem;
+  font-size: 0.32rem;
+}
+/deep/ .van-step--vertical:not(:last-child):after {
+  border: none;
+}
+/deep/ .van-step--vertical .van-cell {
+  padding: 0;
+}
+.steps_time {
+  color: #999;
+  font-size: 0.28rem;
+}
+.detail_value {
+  color: #323233;
+  font-size: 0.32rem;
+  width: calc(100% - 1.5rem);
+}
+/deep/ .btn-box {
+  background-color: #fff;
+  padding-bottom: 0.4rem;
+}
+.detail_box {
+  background-color: #fff;
+  margin-bottom: 0.2rem;
+}
+ & .event-process__wrap,
+  .event-rule__wrap {
+    margin-top: 0.24rem;
+    padding: 0 0.36rem;
+    background: #fff;
+    & .event-process__header,
+    .event-rule__header {
+      position: relative;
+      // display: flex;
+      padding: 0.24rem 0;
+      color: #303133;
+      flex-direction: column;
+      &:after {
+        position: absolute;
+        box-sizing: border-box;
+        content: ' ';
+        pointer-events: none;
+        right: 0;
+        bottom: 0;
+        left: 0;
+        border-bottom: 1px solid #ebedf0;
+        -webkit-transform: scaleY(0.5);
+        transform: scaleY(0.5);
+      }
+
+      & .event-process__title,
+      .event-rule__title {
+        font-weight: 600;
+      }
+
+      & .event-process__sub-title {
+        font-size: 0.28rem;
+        color: #909399;
+      }
+    }
+    & .event-process__icon {
+      display: flex;
+      width: 0.72rem;
+      height: 0.72rem;
+      font-size: 0.28rem;
+      color: #fff;
+      background: #26a2ff;
+      align-items: center;
+      justify-content: center;
+      border-radius: 100%;
+    }
+    & .event-process__item {
+      position: relative;
+      display: flex;
+      height: 1.28rem;
+      flex-direction: row;
+      align-items: center;
+    }
+
+    & .process-item__content {
+      display: flex;
+      flex: 1;
+      padding-left: 0.2rem;
+      flex-direction: column;
+
+      & .process-item__time {
+        padding-top: 0.06rem;
+        font-size: 0.24rem;
+        color: #909399;
+      }
+    }
+
+    & .process-item__point {
+      display: flex;
+      font-size: 0.36rem;
+      font-weight: 500;
+      align-items: center;
+    }
+
+    & .event-process__line {
+      position: absolute;
+      top: 1.04rem;
+      left: 0.35rem;
+      width: 0.02rem;
+      height: 0.48rem;
+      background-color: #ff0000;
+      background: repeating-linear-gradient(0, #979797 0, #979797 11%, transparent 0, transparent 21%);
+    }
+  }
+
+  .event-rule__item {
+    display: flex;
+    padding-bottom: 0.16rem;
+    flex-direction: row;
+
+    & .rule-item__label {
+      display: flex;
+      width: 1.45rem;
+      color: #909399;
+    }
+
+    & .rule-item__value {
+      display: flex;
+      flex: 1;
+      color: #303133;
+      flex-wrap: wrap;
+    }
+  }
+
+</style>

+ 3 - 0
src/components/integral/callback_new.vue

@@ -23,6 +23,9 @@
       <scroller>
         <van-cell-group>
           <van-cell v-for="(item,index) in list" :key="index" :title="item.target" :label="item.msg || item.rule_item" >
+            <template slot="title">
+              <Wxopendata type="userName" :openid="item.target"></Wxopendata>
+            </template>
             <template #value>
               <span v-if="item.point != 0" :class="item.point>0?'color_blue':'color_red'">{{item.point}}</span>
             </template>

+ 2 - 1
src/components/integral/integral_application.vue

@@ -128,7 +128,8 @@ export default {
               this.$router.push({path: '/callback_new'})
             } else {
               let index = res.data.data.list.findIndex(item => item.status == 0)
-              self.$notify({ type: 'danger', message: '第' + (index + 1) + '条审批者超出管理范围'})
+              // self.$notify({ type: 'danger', message: '第' + (index + 1) + '条审批者超出管理范围'})
+              self.$notify({ type: 'danger', message: res.data.data.list[0].msg})
             }
           } else {
             self.$notify({ type: 'danger', message: res.data.msg})

+ 6 - 2
src/components/integral/integral_entry_n.vue

@@ -115,7 +115,8 @@
       </scroller>
     </div>
     <van-popup v-model="showRes" style=" width: 100vw; height: 100vh;">
-      <div style="height: 20px;background-color: #26A2FF;"></div>
+      <!-- <div style="height: 20px;background-color: #26A2FF;"></div> -->
+      <div style="background-color: #26A2FF;"></div>
       <van-nav-bar title="返回结果" left-text="返回" @click-left="back()" left-arrow></van-nav-bar>
       <div class="rentrun">
         <div class="successful_alert">
@@ -140,7 +141,10 @@
         <div class="body_com result has_header">
           <scroller>
             <van-cell-group>
-              <van-cell v-for="(item,index) in list" :key="index" :title="item.target" :label="item.msg || item.rule_item" >
+              <van-cell v-for="(item,index) in list" :key="index" :label="item.msg || item.rule_item" >
+                <template slot="title">
+                  <Wxopendata type="userName" :openid="item.target"></Wxopendata>
+                </template>
                 <template #value>
                   <span v-if="item.point != 0" :class="item.point>0?'color_blue':'color_red'">{{item.point}}</span>
                 </template>

+ 25 - 3
src/components/integral/integral_rank.vue

@@ -40,6 +40,12 @@
               <span>{{ item.title }}</span>
             </div>
           </div>
+          <div class="filterItemsTitle">积分类型</div>
+          <div class="filterItemsContent">
+            <div class="sub__item"  v-for="(item, k) in types" :key="k" @click="onselect(item, types)" :class="{ selected: item.selected }">
+              <span>{{ item.title }}</span>
+            </div>
+          </div>
         </div>
 
         <div class="date-picker__toolbar">
@@ -114,7 +120,8 @@ export default {
       mapRankIconName: { 0: 'rank-first', 1: 'rank-second', 2: 'rank-third' },
       ruleId: null,
       position_arr: [{ title: '全部', code: 'all', selected: true }, { title: '管理者', code: 'manager', selected: false }, { title: '员工', code: 'employee', selected: false }],
-      sort_arr: [{ title: '从高到低', code: 'DESC', selected: true }, { title: '从低到高', code: 'ASC', selected: false }]
+      sort_arr: [{ title: '从高到低', code: 'DESC', selected: true }, { title: '从低到高', code: 'ASC', selected: false }],
+      types: [{ title: 'B分', code: '3', selected: true }, { title: 'A分', code: '2', selected: false }],
     }
   },
   components: { DeptSelectorDropdown, userImage, RuleCategorySelDropdown },
@@ -123,6 +130,16 @@ export default {
       return this.loading || (Array.isArray(this.data) && this.data.length > 0)
     }
   },
+  watch: {
+    dateType(val){
+      let newData = new Date()
+      if(val == 2){
+        this.date = new Date(newData.getFullYear() + '-' + '01')
+      }else if(val == 1){
+        this.date = newData
+      }
+    },
+  },
   methods: {
     // 打开明细列表
     openDetail (item) {
@@ -172,7 +189,7 @@ export default {
       if (this.dateType === 0) {
         return `${this.year}年`
       }
-      return `${this.date.getMonth() + 1}${this.dateType === 1 ? '月' : '季度'}`
+      return `${this.dateType === 1 ? this.date.getMonth() + 1 : this.date.getMonth() > 3 ? 1 : this.date.getMonth() + 1}${this.dateType === 1 ? '月' : '季度'}`
     },
     onYearChange (item, value) {
       this.year = value
@@ -224,7 +241,7 @@ export default {
       } else if (this.dateType === 1) {
         params.month = moment(this.date).format('YYYY-MM')
       } else {
-        params.quarter = moment(this.date).format('YYYYM')
+        params.quarter = this.date.getMonth() > 3 ? moment(this.date).format('YYYY') + '1'  : moment(this.date).format('YYYYM')
       }
       this.ruleId ? (params.rule = this.ruleId) : (this.ruleId = null)
       this.position_arr.forEach(element => {
@@ -237,6 +254,11 @@ export default {
           params.sort = element.code
         }
       })
+      this.types.forEach(element => {
+        if (element.selected) {
+          params.pt_id = element.code
+        }
+      })
       return params
     },
     // 加载

+ 1 - 1
src/components/integral/manager_reward_deduction.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="mrd-container">
-   <van-nav-bar title="管理者奖扣" left-text="返回" @click-left="$route_back" left-arrow>
+   <van-nav-bar left-text="返回" @click-left="$route_back" left-arrow>
       <div class="department" slot="right">
         <DeptSelectorBtn title="选择部门" v-model="dept" :multi="false"></DeptSelectorBtn>
       </div>

+ 6 - 8
src/components/integral/point_base.vue

@@ -6,7 +6,7 @@
     </van-row>
     <van-row style="margin: 0 0 0.5rem 0;" type="flex">
       <van-col span="6" offset="2"><div class="base_point_label">基础分</div></van-col>
-      <van-col span="8" class="base_point"><van-field class="base_point_bg" v-model="base_point" placeholder="输入分值" type="digit"></van-field></van-col>
+      <van-col span="8" class="base_point"><van-field class="base_point_bg" v-model="parameter.base_point" placeholder="输入分值" type="digit"></van-field></van-col>
       <van-col span="6" class="base_point_right">B分</van-col>
     </van-row>
 
@@ -42,19 +42,18 @@ export default {
   name: 'point_base',
   data () {
     return {
-      base_point: '',
-      service_point: 0,
-      send_loading: false
+      send_loading: false,
+	    parameter:{base_point: 0 },
     }
   },
   components: {},
   methods: {
     saveBase () {
-      if (this.base_point == '') {
+      if (this.parameter.base_point == '') {
         this.$toast('请输入基础分')
         return
       }
-      request('post','/api/integral/site/config', { service_point: this.service_point, rule_limit_check: 0, task_review: 0, base_point: this.base_point }).then(res => {
+      request('post','/api/integral/site/config',this.parameter,'v2').then(res => {
         if (res.data.code == 1) {
           this.$toast('设置成功')
         } else {
@@ -65,8 +64,7 @@ export default {
     getPoint () {
       request('get', '/api/integral/site/config').then(res => {
         if (res.data.code == 1) {
-          this.base_point = res.data.data.base_point
-          this.service_point = res.data.data.service_point
+          this.parameter = res.data.data
         }
       })
     }

+ 1 - 1
src/components/integral/rule_category_edit.vue

@@ -4,7 +4,7 @@
     <div class="body_com has_header">
       <scroller>
         <van-cell-group>
-          <van-field v-model="data.name" label="分类名称" name="名称" placeholder="请输入名称" v-validate="'required|max:30'" required />
+          <van-field v-model="data.name" label="分类名称" name="名称" placeholder="请输入名称" v-validate="'required|min:2|max:10'" required />
         </van-cell-group>
         <van-cell-group>
           <CategorySelectorCell title="选择父级分类" v-model="rule_cate" :max="2" :multi="false"></CategorySelectorCell>

+ 1 - 1
src/components/integral/rule_item_edit.vue

@@ -122,7 +122,7 @@
       del() {
         let self = this
         this.$dialog.confirm({
-          title: '删除规则信息',
+          title: '删除规则信息',
           message: '确定要删除当前规则信息吗?'
         }).then(() => {
           self.$toast.loading({

+ 13 - 16
src/components/integral/senior_base.vue

@@ -9,7 +9,7 @@
         <span class="base_point_label">工龄分</span>
       </van-col>
       <van-col span="8"> 
-        <van-field style="background: #F5F7FA" v-model="service_point"  placeholder="输入分值" type="digit" />
+        <van-field style="background: #F5F7FA" v-model="parameter.service_point"  placeholder="输入分值" type="digit" />
       </van-col>
       <van-col span="6" class="base_point_right" style="background: #F5F7FA;line-height: 0.92rem;">B分</van-col>
     </van-row>
@@ -47,32 +47,29 @@ export default {
   name: 'point_base',
   data() {
     return {
-     base_point: 0,
-     service_point: '',
-     checked: false,
+	    parameter:{service_point:''},
      send_loading: false
     }
   },
   components: {},
   methods: {
       saveBase() {
-          if(this.service_point == '') {
-             this.$toast('请输入工龄分')
-              return;
+        if(this.parameter.service_point == '') {
+            this.$toast('请输入工龄分')
+            return;
+        }
+        request('post','/api/integral/site/config',this.parameter,'v2').then((res) => {
+          if(res.data.code == 1) {
+            this.$toast("设置成功")
+          }else {
+            this.$toast(res.data.msg)
           }
-          request('post','/api/integral/site/config',{service_point: this.service_point,rule_limit_check: 0,task_review:0, base_point: this.base_point}).then((res) => {
-			if(res.data.code == 1) {
-				this.$toast("设置成功")
-			}else {
-				this.$toast(res.data.msg)
-			}
-          })
+        })
       },
       getPoint() {
           request( 'get','/api/integral/site/config').then(res => {
               if(res.data.code == 1) {
-                this.base_point = res.data.data.base_point;
-                this.service_point = res.data.data.service_point;
+			          this.parameter=res.data.data;
               }
           })
       }

+ 3 - 0
src/components/message_detail.vue

@@ -82,6 +82,9 @@ export default {
     }
   },
   created () {
+    console.log(this.$route.query.cate)
+    console.log(this.$route.query.title)
+    console.log('2222222222222')
     this.cate = this.$route.query.cate
     this.title = this.$route.query.title
   },

+ 2 - 2
src/components/pk/add_log.vue

@@ -19,10 +19,10 @@
             autosize
             label="留言"
             type="textarea"
-            maxlength="50"
+            maxlength="30"
             placeholder="请输入留言"
             show-word-limit
-            v-validate="'mix:3'"
+            v-validate="'min:3'"
           />
         </van-cell-group>
         <van-cell-group>

+ 485 - 0
src/components/pk/pk_teams_copy.vue

@@ -0,0 +1,485 @@
+<template>
+  <div style="height: 100%">
+    <div class="pk_team_scroller">
+      <scroller>
+        <div class="pk-team__wrap" v-for="(item, i) in teams_list" :key="i">
+          <div class="pk-team__headedr">
+            <div class="pk-team__title">
+              <span>{{ item.name }}</span>
+            </div>
+            <div class="pk-team__toolbar">
+              <van-button hairline type="info" v-if="hasPermission && pkStatus !== 'end'" @click="edit_team_btn(item)" size="mini" round>设置</van-button>
+              <van-button hairline type="danger" v-if="hasPermission && pkStatus !== 'end'" @click="del_team(get_id, item)" size="mini" round>删除</van-button>
+            </div>
+          </div>
+          <div class="team-member__list">
+            <div class="team-member__item">
+              <icon name="team_pk_leader" height="0.4rem" width="0.44rem" />
+              <span class="team-member__name"><Wxopendata type="userName" :openid="item.leader.name"></Wxopendata>(队长)</span>
+            </div>
+            <div class="team-member__item" v-for="(m, j) in item.members" :key="j" v-show="m.id !== item.leader.id">
+              <icon name="team_pk_member" height="0.4rem" width="0.44rem" />
+              <span class="team-member__name"><Wxopendata type="userName" :openid="m.name"></Wxopendata></span>
+            </div>
+          </div>
+        </div>
+        <noData :list="teams_list" />
+        <div style="height: 1.5rem;"></div>
+      </scroller>
+    </div>
+    <div style="padding: 0 0.32rem;" v-if="hasPermission && pkStatus !== 'end'"><van-button class="create_pk" type="info" block @click="add_team_btn">新增团队</van-button></div>
+    <div style="padding: 0 0.32rem;" v-else v-for="(item, index) in pk_info.manager_ids" :key="index">
+      <van-button v-if="$store.getters.user_info.id == item && pkStatus !== 'end'" class="create_pk" type="info" block @click="add_team_btn">新增团队</van-button>
+    </div>
+
+    <!-- 团队弹窗 -->
+    <van-dialog v-model="show_team_popup" :closeOnClickOverlay="false" @cancel="team_cancel" :before-close="checkTeamForm" show-cancel-button class="team_popup">
+      <van-field required type="text" label="团队名称" name="团队名称" maxlength="15" v-model="popup_teams_name" v-validate="'required'" placeholder="请输入团队名称" />
+      <van-cell required title="成员" name="成员" @click="onOpenEmployee" is-link>
+        <template slot="default">
+          <span v-for="(item,index) in select_employee_name" :key="index">
+            <Wxopendata type="userName" :openid="item"></Wxopendata><span v-if="(select_employee_name.length-index)>1">,</span>
+          </span>
+        </template>
+      </van-cell>
+      <van-cell required title="队长" @click="open_captain" name="队长" :value="formData.leader.name" is-link>
+        <template slot="default" v-if="formData.leader.name">
+            <Wxopendata type="userName" :openid="formData.leader.name"></Wxopendata>
+        </template>
+      </van-cell>
+    </van-dialog>
+
+    <!-- 选择成员 -->
+    <EmployeeSelector
+      :can_select_employee="true"
+      :can_select_dept="false"
+      :selected.sync="selected"
+      :dept_multi="false"
+      @confirm="move_confirm"
+      :visible.sync="show_employee_selector"
+      @cancel="move_cancel"
+    ></EmployeeSelector>
+
+    <!-- 队长选择 -->
+    <van-popup v-model="showCaptain" position="bottom">
+      <!-- <van-picker show-toolbar title="选择队长" value-key="name" :columns="team_employee_list" @cancel="captainCancel" @confirm="captainConfirm" /> -->
+      
+      <div class="van-picker">
+        <div class="van-hairline--top-bottom van-picker__toolbar">
+          <div class="van-picker__cancel" @click="captainCancel">取消</div>
+          <div class="van-picker__confirm" @click="captainConfirm(team_employee_list[picker_active])">确认</div>
+        </div>
+        <div class="van-picker__columns" style="height: 220px">
+          <div class="van-picker-column"
+                @scroll="change_picker_scroll"
+                style="height: 220px;overflow-y: auto;">
+            <ul class="transition: all 0ms ease 0s; transform: translate3d(0px, 88px, 0px)" style="line-height: 44px">
+              <!-- "van-picker-column__item--selected":picker_active==index -->
+              <!-- picker_active==index?"":"" -->
+              <li :class='picker_active==index?"clickColor":""'
+                  class="van-ellipsis van-picker-column__item"
+                  style="height: 44px"
+                  @click="change_picker(item,index)"
+                  v-for="(item,index) in team_employee_list" :key="index">
+                  <Wxopendata type="userName" :openid="item.name"></Wxopendata>
+              </li>
+            </ul>
+
+          </div>
+        </div>
+      </div>
+    </van-popup>
+  </div>
+</template>
+<script>
+import request from '@/utils/request'
+import EmployeeSelector from '@/components/common/EmployeeSelector'
+import Vue from 'vue'
+import { Dialog, CellGroup, Toast } from 'vant'
+Vue.use(Dialog)
+  .use(CellGroup)
+  .use(Toast)
+export default {
+  comments: {},
+  props: {
+    createInfo: {
+      type: Object,
+      default: {}
+    },
+    pkStatus: {
+      type: String,
+      default: ''
+    }
+  },
+  // 数据
+  data () {
+    return {
+      picker_active:1,
+      get_id: this.$route.query.id,
+      page: 1,
+      teams_list: null,
+      team_popup_type: 'add',
+      show_team_popup: false,
+      employee_list: [],
+      team_employee_list: [],
+      formData: {
+        name: '',
+        leader: {
+          name: ''
+        },
+        members: []
+      },
+      popup_teams_name: '',
+      show_employee_selector: false,
+      selected: {},
+      showCaptain: false,
+      select_employee_name: null,
+      pk_info: {}
+    }
+  },
+  computed: {
+    hasPermission () {
+      const { createInfo } = this
+      const { is_creator, id } = this.$store.getters.user_info
+      return is_creator === 1 || id == createInfo.creatorId || createInfo.manages.has(id.toString())
+    }
+  },
+  // 组件
+  components: {
+    EmployeeSelector
+  },
+  // 方法
+  methods: {
+    onOpenEmployee () {
+      this.selected = {
+        employee: this.team_employee_list,
+        dept: []
+      }
+      this.show_employee_selector = true
+    },
+    // 查询团队列表
+    get_teams_list (id, page) {
+      let self = this
+      request('get', '/api/integral/pk/teams', { pk_id: id, page: page, page_size: 100 })
+        .then(res => {
+          if (res.data.code == '1') {
+            self.teams_list = res.data.data.list.list
+            self.$toast.clear()
+          } else {
+            self.$toast.clear()
+            self.$toast(res.data.msg)
+          }
+        })
+        .catch(e => {
+          self.$toast.clear()
+        })
+    },
+    // 查询人员列表
+    get_employee_list (id) {
+      this.showLoading()
+      request('get', '/api/integral/pk/members', { pk_id: id })
+        .then(res => {
+          if (res.data.code == '1') {
+            this.employee_list = res.data.data
+          }
+        })
+        .finally(() => this.$toast.clear())
+    },
+
+    // 删除团队
+    del_team (id, d) {
+      Dialog.confirm({ title: '提示', message: '确定删除此项?' })
+        .then(() => {
+          this.showLoading()
+          const data = { pk_id: id, team_id: d.id }
+          request('delete', '/api/integral/pk/teams', data)
+            .then(res => {
+              if (res.data.code == 1) {
+                this.$toast(res.data.msg)
+                this.get_teams_list(this.get_id, 1)
+              } else {
+                this.$toast(res.data.msg)
+              }
+            })
+            .catch(e => {
+              this.$toast(res.data.msg)
+            })
+            .finally(() => this.$toast.clear())
+        })
+        .catch(() => {})
+    },
+    // 新增团队
+    add_team_btn () {
+      this.team_popup_type = 'add'
+      this.popup_teams_name = null
+      this.select_employee_name = null
+      this.formData.leader.name = null
+      this.team_employee_list = []
+      this.show_team_popup = true
+    },
+    // 修改团队按钮
+    edit_team_btn (item) {
+      this.team_popup_type = 'edit'
+      this.formData = item
+      this.get_team_employee_list(item)
+      this.popup_teams_name = this.formData.name
+      // let employee_arr = []
+      // this.team_employee_list.forEach(v => {
+      //   employee_arr.push(v.name)
+      // })
+      // this.select_employee_name = employee_arr
+      this.show_team_popup = true
+    },
+    checkTeamForm (action, done) {
+      if (action === 'confirm') {
+        var teamName = this.popup_teams_name
+        var selectedEmployees = this.team_employee_list
+        if (!teamName) {
+          this.$notify({ type: 'danger', message: '团队名字不能为空' })
+          done(false)
+        } else if (!Array.isArray(selectedEmployees) || selectedEmployees.length === 0) {
+          this.$notify({ type: 'danger', message: '团队成员至少要有一名' })
+          done(false)
+        } else if (!this.formData.leader.id) {
+          this.$notify({ type: 'danger', message: '请选择队长' })
+          done(false)
+        } else {
+          this.team_confirm(done)
+        }
+      } else {
+        done()
+      }
+    },
+    // 获取团队人员列表
+    get_team_employee_list (item) {
+      this.team_employee_list = []
+      // let teamEmployeeList = []
+      let employee_arr = []
+      // item.members.forEach(v => {
+      //   this.employee_list.list.forEach(d => {
+      //     if (v.id == d.id) {
+      //       teamEmployeeList.push(d)
+      //       employee_arr.push(d.name)
+      //     }
+      //   })
+      // })
+      item.members.forEach((item,index)=>{
+        employee_arr.push(item.name)
+      })
+      // const arr2Ids = this.employee_list.list.map(item => item.id);
+      // console.log('arr2Ids')
+      // console.log(arr2Ids)
+      // const intersection1 = item.members.filter(item => arr2Ids.includes(item.id))
+      // console.log('intersection1');
+      // console.log(intersection1);
+      // intersection1.forEach((item,index)=>{
+      //   employee_arr.push(item.name)
+      // })
+      this.team_employee_list = item.members
+      this.select_employee_name = employee_arr
+    },
+    // 加载
+    showLoading () {
+      this.$toast.loading({
+        loadingType: 'spinner',
+        message: '正在处理'
+      })
+    },
+    // 修改团队
+    team_confirm (done) {
+      let self = this,
+        team_member = []
+      self.team_employee_list.forEach(v => {
+        team_member.push(v.id)
+      })
+      self.showLoading()
+      let data = {
+        team: {
+          pk_id: self.get_id,
+          team_id: self.formData.id,
+          team_name: self.popup_teams_name,
+          team_member: team_member,
+          team_leader: self.formData.leader.id
+        }
+      }
+      if (self.team_popup_type == 'add') {
+        data.team.team_id = '0'
+      }
+      request('post', '/api/integral/pk/teams', data)
+        .then(res => {
+          if (res.data.code == 1) {
+            self.get_teams_list(self.get_id, self.page)
+            self.$toast.clear()
+            done(false)
+          } else {
+            done(false)
+            self.$toast.clear()
+            self.$toast({
+              message: res.data.msg,
+              duration: 1000
+            })
+          }
+        })
+        .finally(() => {
+          done(false)
+          self.show_team_popup = false
+          self.$toast.clear()
+        })
+    },
+    // 取消关闭弹窗
+    team_cancel () {
+      self.show_team_popup = false
+    },
+    // 打开弹窗
+    open_captain () {
+      this.team_employee_list.some((item,index)=>{
+        if(item.name == this.formData.leader.name){
+          this.picker_active = index
+          return true
+        }
+      })
+      this.showCaptain = true
+    },
+    // 选择队长
+    captainConfirm (data) {
+      this.formData.leader = data
+      this.showCaptain = false
+    },
+    // 队长弹窗 取消
+    captainCancel () {
+      this.showCaptain = false
+    },
+    change_picker(item,index){
+      this.picker_active=index;
+    },
+    change_picker_scroll(v){
+      let scrollTop = v.srcElement.scrollTop;
+      this.picker_active = Math.ceil(scrollTop/44)+1;//向上取整,并加上第一个空格
+    },
+    // 关闭选择部门弹窗
+    move_cancel () {
+      this.select_mode = false
+    },
+    // 选择人员 完成
+    move_confirm (data) {
+      this.team_employee_list = []
+      if (data.employee.length) {
+        let name_arr = []
+        let captain_arr = []
+        let hasCaptain = false
+        for (let i = 0; i < data.employee.length; i++) {
+          const employee = data.employee[i]
+          name_arr.push(employee.name)
+          this.team_employee_list.push(employee)
+          if (hasCaptain === false && employee.id === this.formData.leader.id) {
+            hasCaptain = true
+          }
+        }
+        if (!hasCaptain) {
+          this.formData.leader.id = false
+          this.formData.leader.name = null
+        }
+        this.selected.employee = this.team_employee_list
+        this.formData.leader = this.team_employee_list[0]
+        this.select_employee_name = name_arr
+      } else {
+        this.formData.leader.id = false
+        this.formData.leader.name = null
+        this.select_employee_name = null
+      }
+      this.move_cancel()
+    },
+    get_pk_info () {
+      let self = this
+      let data = {
+        pk_id: self.$route.query.id
+      }
+      request('get', '/api/integral/pk/info', data).then(res => {
+        if (res.data.code == 1) {
+          self.pk_info = res.data.data
+        } else {
+          self.$toast(res.data.msg)
+        }
+      })
+    }
+  },
+  // 生命周期 --- 创建完成
+  created () {
+    // created 创建完毕状态
+    this.get_employee_list(this.get_id)
+    this.get_teams_list(this.get_id, this.page)
+    this.get_pk_info()
+  }
+}
+</script>
+<style scoped lang="less">
+.pk-team__wrap {
+  position: relative;
+  margin-top: 0.16rem;
+  font-size: 0.32rem;
+  color: #333;
+  background: #fff;
+
+  & .pk-team__headedr {
+    position: relative;
+    display: flex;
+    align-items: center;
+    flex-direction: row;
+    &:after {
+      position: absolute;
+      box-sizing: border-box;
+      content: ' ';
+      pointer-events: none;
+      right: 0;
+      bottom: 0;
+      left: 0;
+      border-bottom: 1px solid #ebedf0;
+      transform: scaleY(0.5);
+    }
+    & .pk-team__title {
+      display: flex;
+      flex: 1;
+      padding: 0.24rem 0.32rem;
+    }
+    & .pk-team__toolbar {
+      position: relative;
+      padding-right: 0.32rem;
+    }
+  }
+
+  & .team-member__item {
+    display: flex;
+    position: relative;
+    padding: 0 0.32rem;
+    height: 0.88rem;
+    align-items: center;
+    touch-action: none;
+
+    &:not(:last-child):after {
+      position: absolute;
+      box-sizing: border-box;
+      content: ' ';
+      pointer-events: none;
+      right: 0;
+      bottom: 0;
+      left: 0.32rem;
+      border-bottom: 1px solid #ebedf0;
+      transform: scaleY(0.5);
+    }
+  }
+
+  & .team-member__name {
+    position: relative;
+    padding-left: 0.2rem;
+  }
+}
+
+.pk_team_scroller {
+  height: calc(100% - 1rem);
+}
+.clickColor{
+  background-color: #f3f3f3;
+  transition: .5s;
+  border: #ececec;
+}
+</style>

+ 1 - 1
src/components/pk/read_pk.vue

@@ -31,7 +31,7 @@ import moment from 'moment';
 import EmployeeSelector from '@/components/common/EmployeeSelector'
 import PkRules from '@/components/pk/pk_rules'
 import PkLog from '@/components/pk/pk_log'
-import PkTeams from '@/components/pk/pk_teams'
+import PkTeams from '@/components/pk/pk_teams_copy'
 import PkRanking from '@/components/pk/pk_ranking'
 import { Tab, Tabs, panel, Notify, Dialog, Picker } from 'vant'
 Vue.use(Tab).use(Tabs).use(panel).use(Notify).use(Dialog).use(Picker)

+ 0 - 1
src/components/power/edit_user_power.vue

@@ -364,7 +364,6 @@ export default {
             }
           }).catch((e) => {
             self.$toast.clear()
-            self.$toast(e)
           })
         }
       })

+ 1 - 1
src/components/user/add_common_menu.vue

@@ -63,7 +63,7 @@ export default {
         }
       }
       var data = {id: this.$store.getters.user_info.id, menu_common: ret}
-      request('POST', '/api/employee/update', data).then((res) => {
+      request('POST', '/api/employee/menu', data).then((res) => {
         if (res.data.code == 1) {
           if (window.plus) {
             plus.storage.setItem('menuCommon', JSON.stringify(ret))

+ 5 - 0
src/main.js

@@ -30,6 +30,11 @@ import Icon1 from 'vue2-svg-icon/Icon'
 import VueScroller from '@/components/common/scroller/src'
 import noData from '@/components/common/noData'
 
+import {getTypes, getUserData } from '@/utils/auth'
+
+Vue.prototype.$userInfo=getUserData;
+Vue.prototype.$getTypes = getTypes()
+
 // wx通讯录
 import wwOpenDAtas from '@/view/wxOpendata'
 Vue.component('Wxopendata', wwOpenDAtas)

+ 17 - 10
src/permission.js

@@ -1,4 +1,5 @@
 import Vue from 'vue'
+import Cookies from 'js-cookie'
 import router from './router'
 import store from './store'
 import request from '@/utils/request'
@@ -11,12 +12,14 @@ router.beforeEach((to, from, next) => {
       item('interrupt'); //给个标志,中断请求
     })
   }
-
-  if (getToken()) {//local中A-Token
-    thens(to, from, next)
-  } else if (cookGetToken()){//Cook中A-Token
+  if (cookGetToken()){//Cook中A-Token
     setToken(cookGetToken())
     detailAxiox()//员工详细信息
+    // Cookies.remove('Admin-Token')
+    Cookies.remove('Admin-Token')
+    thens(to, from, next)
+  } else if (getToken()) {//local中A-Token
+    console.log('无cook,走localStorage')
     thens(to, from, next)
   } else {
       if (!window.$routes_map[to.name].need_login) { // 在免登录白名单,直接进入
@@ -37,8 +40,6 @@ router.beforeEach((to, from, next) => {
 })
 
 function thens(to, from, next){
-  console.log(to.path)
-  console.log(to.name)
   // if (to.path == '/login'||to.name == 'init') { // 在免登录白名单,直接进入
   //   next({ name: 'home'})
   //   return false
@@ -50,8 +51,12 @@ function thens(to, from, next){
   }
   console.log(window.$routes_map)
   
+  console.log('跳转后的path:')
+  console.log(to.path)
+  console.log('跳转前的path:')
+  console.log(from.path)
   //首页按返回到登录 或 初始化时--直接退出
-  if(to.path == '/login' && from.path == '/home' || to.path == '/init' && from.path == '/home'){
+  if(to.path == '/login' && from.path == '/home' || to.path == '/init' && from.path == '/home' || to.path == '/' && from.path == '/home'){
     wx.closeWindow();//关闭当前网页窗口
     return false
   }
@@ -62,9 +67,9 @@ function thens(to, from, next){
   // 初始一些数据
   init(to);
   // next();
-  console.log('wxAuth12121221121221666')
+  console.log('wxAuth12121221121221888')
   console.log(router.history.current.name)
-  wxAuth('',next,to)
+  wxAuth(false,next,to)
 
 }
 
@@ -94,10 +99,12 @@ function detailAxiox(){
   request('get',process.env.BASE_API+'/api/employee/detail')
   .then(res => {
     if(res.data.code == 1){
-      this.$store.commit("SET_USERINFO", res.data.data.user); // 设置员工信息
+      store.commit("SET_USERINFO", res.data.data.user); // 设置员工信息
       window.sessionStorage.setItem('__VCKEEPALIVE__', JSON.stringify(['/']))
       window.sessionStorage.setItem('routers', '/')
       console.log(getToken());
+      console.log(JSON.parse(localStorage.getItem('user_info')))
+      console.log(store.getters.user_info)
     }
   })
 }

+ 31 - 0
src/utils/auth.js

@@ -3,6 +3,37 @@ const UserIdKey = 'uidkey'
 import Cookies from 'js-cookie'
 import store from '@/store';
 
+// 获取当前用户详情
+export function getUserData() {
+  let data='';
+  if(window.plus){
+    if(plus.storage.getItem('user_info')){
+        data=JSON.parse(plus.storage.getItem('user_info')).data
+    }
+  }else{
+    if(localStorage.getItem('user_info')){
+       data=JSON.parse(localStorage.getItem('user_info')).data
+    }
+  }
+  if(!data){
+    data=store.getters.user_info;
+  }
+  return  data
+}
+
+// 获取积分类型
+export function getTypes(id) {
+  if (id) {
+    var arr = (window.plus ? JSON.parse(plus.storage.getItem('SET_POINT_TYPES')) : JSON.parse(localStorage.getItem('SET_POINT_TYPES')))||store.getters.point_types
+    var item = arr.filter(element => {
+      return typeof (id) === 'string' ? element.code == id : element.id == id
+    })
+    return item[0]
+  } else {
+    return (window.plus ? JSON.parse(plus.storage.getItem('SET_POINT_TYPES')) : JSON.parse(localStorage.getItem('SET_POINT_TYPES')))||store.getters.point_types
+  }
+}
+
 export function getToken() {
   if (window.plus) {
     return plus.storage.getItem(TokenKey)

+ 6 - 1
src/utils/wx-auth-two.js

@@ -8,8 +8,9 @@ import Router from '@/router'
 import {
   getToken
 } from '@/utils/auth'
-
+let isfot = false
 export const wxAuth = async (ifHome, next, to) => {
+  if(isfot) return
   const wechatConfigUrl = location.href.split('#')[0]
   console.log('--获取url--')
   console.log(wechatConfigUrl)
@@ -23,6 +24,7 @@ export const wxAuth = async (ifHome, next, to) => {
           name: 'home'
         })
       } else {
+        console.log('走next()')
         if (next) {
           next()
         }
@@ -41,6 +43,7 @@ export const wxAuth = async (ifHome, next, to) => {
 }
 
 async function wxConfigByCorp(ifHome, body, next) {
+  isfot = true
   var data;
   await allocations(body).then((res) => {
     if (res.data.code == 1) {
@@ -95,6 +98,7 @@ async function wxConfigByCorp(ifHome, body, next) {
           console.log('--window.WWOpenData--')
           console.log(window.WWOpenData)
           console.log(next)
+          isfot = false
           if (next) {
             next()
           }
@@ -134,6 +138,7 @@ async function wxConfigByCorp(ifHome, body, next) {
           console.log(res)
           console.log('window.WWOpenData')
           console.log(window.WWOpenData)
+          isfot = false
           if (next) {
             next()
           }

BIN
static/images/head_default.png