guojy 1 year ago
parent
commit
903012eaf5

+ 0 - 2
src/api/configget.js

@@ -8,8 +8,6 @@ export function allocation(){
 }
 // import request from '@/utils/request'
 export async function allocations(body){
-    console.log("请求配置")
-    console.log(body)
     if(getToken()){
         let params = {url : body}
         return await request('get','/api/wechat/config', params)

+ 280 - 0
src/components/SelectRule.vue

@@ -0,0 +1,280 @@
+<template>
+  <el-dialog append-to-body :title="title" :visible.sync="visible_" :close-on-click-modal="false" :before-close="close_before" width="1000px" top="5%">
+    <div class="flex-box" style="border-bottom: 1px solid #f1f1f1;">
+      <div class="left scroll-bar">
+        <el-tree node-key="id"  ref="tree" :data="rule_tree" :props="defaultProps" @node-click="dept_click" highlight-current class="cate-tree"></el-tree>
+      </div>
+
+      <div class="right scroll-bar">
+        <div class="flex-box-end">
+            <el-input type="text" prefix-icon="el-icon-search" class="search"  style="width: 250px;margin-bottom: 10px;" placeholder="输入关键字搜索" v-model.trim="keyword"/>
+        </div>
+        <div style="height: 430px;overflow-y: scroll;" class="scroll-bar">
+          <div class="flex-box-ce" style="background-color: #ECF5FF;padding: 10px 0;border-bottom: 1px solid #EBEEF5;width:660px">
+            <div style="width: 40px;"></div>
+            <div class="flex-5">内容</div>
+            <div class="flex-1">分值</div>
+          </div>
+          <div class="flex-box-ce itemBox" v-for="(item, index) in list" :key="index" v-show="item.remark.indexOf(keyword) >= 0" style="width:660px" @click="handleSelectionChange(item.checked, item)">
+            <div style="width: 40px;text-align: center;position: relative;">
+              <el-checkbox :key="item.id" v-model="item.checked"></el-checkbox>
+              <div style="width: 40px;height: 40px;position: absolute;top: -10px;z-index: 999;"></div>
+            </div>
+            <div class="flex-5 ">
+              <el-tooltip v-if="item.remark.length>100" class="item" effect="dark" :content="item.remark" placement="bottom">
+                <div class="content">{{ item.remark }}</div>
+              </el-tooltip>
+              <div class="content" v-else>{{ item.remark }}</div>
+            </div>
+            <div class="flex-1">
+              <div v-if="item.range_type == 1">
+                <span :class="item.min_point > 0 ? 'red' : 'green'">{{ item.min_point }}</span>
+                {{ item.pt_id == 3 ? 'B分' : 'A分' }}
+              </div>
+              <div v-if="item.range_type == 2">
+                <span :class="item.min_point > 0 ? 'red' : 'green'">{{ item.min_point }}</span>
+                至
+                <span :class="item.max_point > 0 ? 'red' : 'green'">{{ item.max_point }}</span>
+                {{ item.pt_id == 3 ? 'B分' : 'A分' }}
+              </div>
+            </div>
+          </div>
+          <noData content="暂无数据" v-if="list.length==0"></noData>
+        </div>
+      </div>
+    </div>
+
+    <div slot="footer" class="flex-box-ce">
+      <el-button type="danger" plain @click="empty">清空选择</el-button>
+      <div class="flex-1"></div>
+      <el-button @click="close">取 消</el-button>
+      <el-button type="primary" @click="confirm">确 定</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+export default {
+  props: {
+    title: {
+      // 标题
+      type: String,
+      default: '选择规则'
+    },
+    visible: {
+      // 是否显示组件
+      type: Boolean,
+      default: false
+    },
+    ptId: {
+      type: Number,
+      default: 3
+    },
+    selectItems: {
+      type: Array,
+      default: () => {
+        return [];
+      }
+    }
+  },
+  name: 'SelectRule',
+  data() {
+    return {
+      keyword:'',
+      visible_: false,
+      rule_tree: [],
+      item_list: [],
+      defaultProps: {
+        children: 'child',
+        label: 'name'
+      },
+      list: [],
+      item_all:[],
+      selectArrItem: []
+    };
+  },
+  watch: {
+    visible(val) {
+      this.visible_ = JSON.parse(JSON.stringify(val));
+      if (val) {
+        this.selectArrItem = JSON.parse(JSON.stringify(this.selectItems));
+        this.get_department_list();
+      }
+    },
+    keyword(val){
+      this.$nextTick(()=>{
+        this.$refs.tree.setCurrentKey(null);
+        this.list = this.item_all;
+      })
+    },
+  },
+  methods: {
+    empty() {
+      this.list.forEach(item => {
+        item.checked = false;
+      });
+      this.list = JSON.parse(JSON.stringify(this.list));
+    },
+
+    handleSelectionChange(val, item) {
+      this.list.forEach(obj => {
+        obj.checked = false;
+        if(!val&&obj.id==item.id){
+          obj.checked = true;
+        }
+      });
+      this.list = JSON.parse(JSON.stringify(this.list));
+    },
+    dept_click(item) {
+      let ruleIds = [item.id];
+      this.parse_tree(item.child, ruleIds);
+      this.list = this.get_item_list(ruleIds);
+    },
+    parse_tree(child, ruleIds) {
+      for (let i in child) {
+        ruleIds.push(child[i].id);
+        if (child[i].child) {
+          this.parse_tree(child[i].child, ruleIds);
+        }
+      }
+    },
+    get_item_list(trees) {
+      let item_list = [];
+      trees.map(e => {
+        if (this.item_list['rule_' + e]) {
+          item_list.push(...this.item_list['rule_' + e]);
+        }
+      });
+      item_list.forEach(item => {
+          item.checked = false;
+      });
+      return item_list;
+    },
+    getTreeData2(data) {
+      for (var i = 0; i < data.length; i++) {
+        if (data[i].child.length < 1) {
+          data[i].child = undefined;
+        } else {
+          this.getTreeData2(data[i].child);
+        }
+      }
+      return data;
+    },
+    get_department_list() {
+      let data = {
+        cycle_type: '1',
+        // keyword: this.keyword,
+        pt_id: this.ptId
+      };
+      this.$http('get', '/api/integral/rule/trees', data).then(res => {
+        this.rule_tree = this.getTreeData2(res.data.data.rule_tree);
+        this.item_list = res.data.data.item_list;
+        this.list = [];
+        let item_list = [];
+        for (let i in this.item_list) {
+          for (let k in this.item_list[i]) {
+            item_list.push(this.item_list[i][k]);
+          }
+        }
+        item_list.forEach(item => {
+          item.checked = false;
+          this.selectArrItem.forEach((e, index) => {
+            if (e.id == item.id) {
+              item.checked = true;
+            }
+          });
+        });
+
+        this.item_all=item_list;
+        this.list = item_list;
+      });
+    },
+    close_before(done) {
+      this.close();
+      done();
+    },
+    close() {
+      this.$emit('update:visible', false);
+    },
+    confirm() {
+      let obj='';
+      this.list.forEach(item=>{
+        if(item.checked){
+          obj=item
+        }
+      })
+      if(!obj){
+        this.$message.error("请选择规则");
+        return false
+      }
+      this.$emit('confirm',obj);
+      this.close();
+    }
+  },
+  created() {}
+};
+</script>
+
+<style scoped lang="scss">
+.itemBox {
+  padding: 12px 0;
+  background-color: #fff;
+  border-bottom: 1px solid #ebeef5;
+
+  cursor: pointer;
+}
+/deep/ .el-dialog__body {
+  padding: 20px;
+  color: #606266;
+  font-size: 14px;
+  word-break: break-all;
+}
+.option-box {
+  padding: 10px 0;
+  border-bottom: 1px solid #f1f1f1;
+}
+
+.option-box button {
+  margin-right: 16px;
+}
+.content {
+  display: -webkit-box;
+  -webkit-box-orient: vertical;
+  -webkit-line-clamp: 3;
+  overflow: hidden;
+  line-height: 1.5rem;
+}
+.left {
+  padding: 0px 10px;
+  width: 260px;
+  height: 480px;
+  overflow: scroll;
+  border-right: 1px solid #f1f1f1;
+}
+.left {
+  /deep/ .el-tree-node {
+    border-bottom: 1px #f8f8f8 solid;
+  }
+  /deep/ .el-tree-node__content {
+    height: 56px;
+    line-height: 56px;
+    width: 230px;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+    display: block;
+  }
+  /deep/ .is-current .el-tree-node__content .el-icon-caret-right {
+    // color: #409EFF !important;
+  }
+  /deep/ .is-current .el-tree-node__content .el-tree-node__label {
+    color: #409EFF !important;
+  }
+  /deep/ .is-current .el-tree-node__children .el-icon-caret-right {
+    color: #c0c4cc !important;
+  }
+  /deep/ .is-current .el-tree-node__children .el-tree-node__label {
+    color: #606266 !important;
+  }
+}
+</style>

+ 1 - 1
src/components/noData.vue

@@ -1,7 +1,7 @@
 <template>
     <div class="flex-box-v flex-v-zhu">
       <img :src="imgUrl" style="width: 266px;height: 182px;margin: 30px auto;">
-      <div class="fontColorF" v-if="!isSolt">{{content}}</div>
+      <div class="fontColorF" v-if="!isSolt" style="text-align: center;">{{content}}</div>
       <slot></slot>
     </div>
 </template>

+ 4 - 3
src/main.js

@@ -10,17 +10,18 @@ import App from './App'
 import router from './router'
 import store from './store'
 import {getToken, getEmployeeMap,getCache,setCache,removeCache} from '@/utils/auth'
-import {supremeAuthority ,authoritys , getUserData, getTypsName} from './api/auth';
+import {supremeAuthority,authoritys,getUserData,getTypsName} from './api/auth';
 import downloadFile from '@/utils/downloadFile'
 import i18n from './lang' // Internationalization
 import './icons' // icon
 import './permission' // permission control
 import * as filters from '@/utils/filters' // global filters
 import jtoken from '@/utils/Jtoken'
-
+import noData from '@/components/noData'
+Vue.component('NoData', noData)
 
 import VConsole from 'vconsole'
-new VConsole()
+// new VConsole()
 
 // 头像
 import userImage from '@/components/user_image'

+ 1 - 7
src/utils/request-user.js

@@ -82,17 +82,11 @@ service.interceptors.response.use(
       })
       return Promise.reject('error')
     } else {
-      // console.log('user_token_temp')
-      // console.log(res.refresh_token)
-      // if(res.refresh_token && res.code == 1){
-      //   console.log('平台Token'+moment().format('YYYY-MM-DD  HH:mm:ss'))
-      //   console.log(res.refresh_token)
-      //   localStorage.setItem('user_token_temp', res.refresh_token)
-      // }
       return response
     }
   },
   error => {
+    console.log('错误'+JSON.stringify(error))
     if(error.message=='interrupt'){//是强制中断请求就拦截报错
     	return Promise.reject(error)
     }

+ 1 - 47
src/utils/request.js

@@ -23,12 +23,6 @@ service.interceptors.request.use(
     }else if (store.getters.token) {
       config.headers['A-TOKEN'] = cookGetToken()
     }
-    // if (config.url == '/api/integral/statistics/ranking') {
-    //   config.headers['Accept'] = 'application/vnd.test.v2+json'
-    // }
-    // if (config.url == '/api/integral/performance/employee') {
-    //   config.headers['Accept'] = 'application/vnd.test.v3+json'
-    // }
     return config
   },
   error => {
@@ -40,48 +34,9 @@ var bool = true// 五秒执行一次变量
 service.interceptors.response.use(
   response => {
     const res = response.data
-    // if (response.data.code === 1) {
-    //   if (response.data.refresh_token) {
-    //     if (response.data.refresh_token !== getToken()) {
-    //       localStorage.setItem('Admin-Token', response.data.refresh_token)
-    //     }
-    //   }
-    //   var timestamp = parseInt((new Date()).valueOf() / 1000)
-    //   if (window.plus) {
-    //       var temp_timestamp = plus.storage.getItem('token-expire')
-    //       if (temp_timestamp < timestamp && response.data.refresh_token) {
-    //         setToken(response.data.refresh_token)
-    //         plus.storage.setItem('token-expire', timestamp + 7200)
-    //       }
-    //   } else {
-    //     var temp_timestamp = localStorage.getItem('token-expire')
-    //     if (temp_timestamp < timestamp && response.data.refresh_token) {
-    //       setToken(response.data.refresh_token)
-    //       localStorage.setItem('token-expire', timestamp + 7200)
-    //     }
-    //   }
-    //   return response
-    // }else 
     if (res.code === 401) {
-      // 50008:非法的token; 50012:其他客户端登录了;  401:Token 过期了; 2000 考勤系统的token过期
-      // MessageBox.confirm('当前登录授权时间已经过期,请重新授权登录', '确定登出', {
-      //   confirmButtonText: '重新登录',
-      //   showClose: false,
-      //   closeOnClickModal: false,
-      //   closeOnPressEscape: false,
-      //   showCancelButton: false,
-      //   type: 'warning'
-      // }).then(() => {
-      //   store.dispatch('LogOut');
-      // }).catch(() => {
-      //   store.dispatch('LogOut');
-      // })
       store.dispatch('LogOut');
       window.location.href = process.env.BASE_API//直接重新授权
-      // Router.push({
-      //   path: '/login'
-      // })
-      // window.location.href = process.env.BASE_API;
       return Promise.reject('error')
     } else if (res.code === 0) {
       if (res.msg == '') {
@@ -116,10 +71,8 @@ service.interceptors.response.use(
       })
       return Promise.reject('error')
     }  else if(res.code === 4444){
-      console.log(res)
         localStorage.clear()
         sessionStorage.clear()
-        console.log('requser:4444')
         Router.push({
           path: '/noAccess',
           query: {
@@ -149,6 +102,7 @@ service.interceptors.response.use(
     }
   },
   error => {
+     console.log('错误'+JSON.stringify(error))
     if(error.message=='interrupt'){//是强制中断请求就拦截报错
     	return Promise.reject(error)
     }

+ 0 - 159
src/utils/wx-auth-two.js

@@ -9,12 +9,6 @@ import moment from 'moment' // 时间库
 
 export const wxAuth = async (pushindex, next) => {
   const wechatConfigUrl = location.href.split('#')[0]
-  // const wechatConfigUrl = location.href.split("?")[1].split("=")[1]
-  // console.log('获取url')
-  // console.log(location.href)
-  // console.log(wechatConfigUrl)
-  // console.log(window.wechatConfigUrl)
-  // console.log(window.WWOpenData)
   if (window.wechatConfigUrl === wechatConfigUrl && window.WWOpenData) {
     if (next) {
       next()
@@ -35,19 +29,13 @@ async function wxConfigByCorp(body, pushindex, next) {
   var data;
   await allocations(body).then((res) => {
     if (res.data.code == 1) {
-      console.log("请求配置成功")
       data = res.data.data
     }else{
     }
   }).catch(()=>{
-    // withoutCodeLoad()
   })
   const wxConfigParams = data.config
   const appSignature = data.agentConfig
-  // console.log(wxConfigParams)
-  // console.log(appSignature)
-  // console.log('wxConfig开始')
-  // console.log(Vue.prototype.$wx)
   await Vue.prototype.$wx.config({ // 鉴权(企业的身份与权限)
     beta: true, // 必须这么写,否则wx.invoke调用形式的jsapi会有问题
     debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
@@ -66,14 +54,10 @@ async function wxConfigByCorp(body, pushindex, next) {
     ] // 必填,需要使用的JS接口列表,凡是要调用的接口都需要传进来
   });
   await Vue.prototype.$wx.ready(function () {
-    // console.log('wxConfig成功')
-    // console.log('wx.agentConfig开始')
-    // console.log('wx.agentConfig:BEGIN');
     const u = navigator.userAgent;
     const isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1; // 安卓
     const isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); // ios终端
     if (isAndroid) {
-      console.log('安卓手机');
       Vue.prototype.$wx.invoke('agentConfig', {
         corpid: appSignature.appId, // 必填,企业微信的corpid,必须与当前登录的企业一致
         agentid: appSignature.agentid, // 必填,企业微信的应用id (e.g. 1000247)生产环境 写自己环境的agentid
@@ -89,7 +73,6 @@ async function wxConfigByCorp(body, pushindex, next) {
       });
     }
     if (isIOS) {
-      console.log('苹果手机');
       Vue.prototype.$wx.agentConfig({
         corpid: appSignature.appId, // 必填,企业微信的corpid,必须与当前登录的企业一致
         agentid: appSignature.agentid, // 必填,企业微信的应用id (e.g. 1000247)生产环境
@@ -112,14 +95,9 @@ async function wxConfigByCorp(body, pushindex, next) {
       });
     }
 
-
-
-
     if (/Android|webOS|iPhone|iPod|BlackBerry/i.test(navigator.userAgent)) {
 
     } else {
-      console.log('pc端')
-      // console.log(appSignature)
       Vue.prototype.$wx.agentConfig({ //鉴权(应用的身份与权限)
         corpid: appSignature.corpid, // 必填,企业微信的corpid,必须与当前登录的企业一致
         agentid: appSignature.agentid, // 必填,企业微信的应用id (e.g. 1000247)
@@ -128,11 +106,6 @@ async function wxConfigByCorp(body, pushindex, next) {
         signature: appSignature.signature, // 必填,签名,见附录-JS-SDK使用权限签名算法
         jsApiList: ['selectExternalContact'], //必填
         success: function (res) { // 回调  //  wx.agentConfig成功回调后,WWOpenData 才会注入到 window 对象上面
-          console.log('agentConfig成功')
-          // console.log('回调')
-          // console.log(res)
-          console.log('window.WWOpenData')
-          console.log(window.WWOpenData)
           if (next) {
             next()
           }
@@ -153,135 +126,3 @@ async function wxConfigByCorp(body, pushindex, next) {
     }
   });
 }
-
-
-
-// export const wxAuth = async (to,pushindex) => {
-//     // const tempUrl = window.location.protocol + '//' + window.location.host + '/nwd-enterprise-wechat' + to.fullPath;
-//     // const urlNow = encodeURIComponent(tempUrl);
-//     // console.log('当前授权URL:', urlNow);
-//     // const noncestr = Math.floor(Math.random() * 100000000000000);
-//     // const body = {
-//     //     url: urlNow,
-//     //     timestamp: (new Date()) - 0,
-//     //     nonceStr: noncestr
-//     // };
-//     console.log('111111')
-//     const body = window.location.href.split('#')[0]
-//     console.log(body)
-//     var data ;
-//     await allocations(body).then((res)=>{
-//         console.log('1111111111')
-//             if(res.data.code == 1){
-//                 data = res.data.data
-//                 console.log(res.data.data.agentConfig)
-//                 return res.data.data.agentConfig
-//             }
-//         })
-//     const wxConfigParams = data.config
-//     const appSignature = data.agentConfig
-//     console.log(wxConfigParams)
-//     console.log(appSignature)
-//     // const wxConfigParams =  network.common.getWxConfigParams(body); // 通过接口,获取wxConfig的参数
-//     // const appSignature =  network.common.getAppSignature(body); // 通过接口,获取agentConfig的参数
-//     Vue.prototype.$wx.config({
-//         beta: true, // 必须这么写,否则wx.invoke调用形式的jsapi会有问题
-//         debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
-//         appId: wxConfigParams.appId, // 必填,企业微信的corpID
-//         timestamp: wxConfigParams.timestamp, // 必填,生成签名的时间戳
-//         nonceStr: wxConfigParams.nonceStr, // 必填,生成签名的随机串
-//         signature: wxConfigParams.signature, // 必填,签名,见 附录-JS-SDK使用权限签名算法
-//         jsApiList: [
-//             'shareAppMessage',
-//             'previewFile',
-//             'selectEnterpriseContact',
-//             'onMenuShareAppMessage',
-//             'invoke',
-//             'hideOptionMenu',
-//             'showOptionMenu'
-//         ] // 必填,需要使用的JS接口列表,凡是要调用的接口都需要传进来
-//     });
-//     Vue.prototype.$wx.ready(function() {
-//         console.log('wx.agentConfig:BEGIN');const u = navigator.userAgent;
-//         const isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1; // 安卓
-//         const isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); // ios终端
-//         if (isAndroid) {
-//             console.log('安卓手机');
-//             Vue.prototype.$wx.invoke('agentConfig', {
-//                 corpid: appSignature.appId, // 必填,企业微信的corpid,必须与当前登录的企业一致
-//                 agentid:  appSignature.agentid, // 必填,企业微信的应用id (e.g. 1000247)生产环境 写自己环境的agentid
-//                 timestamp: appSignature.timestamp, // 必填,生成签名的时间戳
-//                 nonceStr: appSignature.nonceStr, // 必填,生成签名的随机串
-//                 signature: appSignature.signature, // 必填,签名,见附录-JS-SDK使用权限签名算法
-//                 jsApiList: [
-//                     'openUserProfile',
-//                     'previewFile'
-//                 ], // 必填
-//             }, function(res) {
-//                 console.log('result', res);
-//             });
-//         }
-//         if (isIOS) {
-//             console.log('苹果手机');
-//             Vue.prototype.$wx.agentConfig({
-//                 corpid: appSignature.appId, // 必填,企业微信的corpid,必须与当前登录的企业一致
-//                 agentid: appSignature.agentid, // 必填,企业微信的应用id (e.g. 1000247)生产环境
-//                 timestamp: appSignature.timestamp, // 必填,生成签名的时间戳
-//                 nonceStr: appSignature.nonceStr, // 必填,生成签名的随机串
-//                 signature: appSignature.signature, // 必填,签名,见附录-JS-SDK使用权限签名算法
-//                 jsApiList: [
-//                     'openUserProfile',
-//                     'previewFile'
-//                 ], // 必填
-//                 success(res) {
-//                     console.log('agentConfig', res);
-//                 },
-//                 fail(res) {
-//                     console.log('err', res);
-//                     if (res.errMsg.indexOf('function not exist') > -1) {
-//                         alert('版本过低请升级');
-//                     }
-//                 }
-//             });
-//         }
-
-
-
-
-//         if(/Android|webOS|iPhone|iPod|BlackBerry/i.test(navigator.userAgent)) {
-
-//         }else{
-//             console.log('pc端')
-//             console.log('wxConfig成功')
-//             Vue.prototype.$wx.agentConfig({
-//                 corpid: appSignature.corpid, // 必填,企业微信的corpid,必须与当前登录的企业一致
-//                 agentid: appSignature.agentid, // 必填,企业微信的应用id (e.g. 1000247)
-//                 timestamp: appSignature.timestamp, // 必填,生成签名的时间戳
-//                 nonceStr: appSignature.nonceStr, // 必填,生成签名的随机串
-//                 signature: appSignature.signature,// 必填,签名,见附录-JS-SDK使用权限签名算法
-//                 jsApiList: ['selectExternalContact'], //必填
-//                 success: function(res) { // 回调
-//                     console.log('agentConfig成功')
-//                     console.log(res)
-//                         //wx.agentConfig成功回调后,WWOpenData 才会注入到 window 对象上面
-//                     console.log(window.WWOpenData)
-//                     // if(routpush){
-//                     //     Router.push({path: '/'})//跳转首页
-//                     // }
-//                     console.log(to)
-//                     if(pushindex){
-//                         Router.push({path: '/'})//跳转首页
-//                     }else{
-//                         Router.push({path: to.path})//跳转首页
-//                     }
-//                 },
-//                 fail: function(res) {
-//                 console.log(res)
-//                     if(res.errMsg.indexOf('function not exist') > -1){
-//                         alert('版本过低请升级')
-//                     }
-//                 }
-//             });
-//         }
-//     });
-// };

+ 1 - 3
src/utils/wxconfiguration.js

@@ -1,6 +1,5 @@
-// import moment from 'moment' // 时间库
+
 export function withoutCodeLoad() {
-  console.log(process.env.APPID)
   let appid, redirect_uri, response_type, scope, state, wechat, agentid
   appid = process.env.APPID
   redirect_uri = process.env.REDIRECT_URI
@@ -10,5 +9,4 @@ export function withoutCodeLoad() {
   wechat = '#wechat_redirect'
   let link = 'appid=' + appid + '&redirect_uri=' + redirect_uri + '&response_type=' + response_type + '&scope=' + scope + '&state=' + state + wechat
   window.location.href = 'https://open.weixin.qq.com/connect/oauth2/authorize?' + link
-  // +moment().format('X')
 }

+ 2 - 2
src/views/common/EmployeeSelector.vue

@@ -743,8 +743,8 @@ export default {
         }
       }
 
-      var eSList = this.employee_selected_list;
-      this.employee_selected_list = eSList.filter(x => list.some(y => y.id === x.id));
+      // var eSList = this.employee_selected_list;
+      // this.employee_selected_list = eSList.filter(x => list.some(y => y.id === x.id));
       return list;
     }
   },

+ 98 - 139
src/views/common/bonusPointsPopup.vue

@@ -8,7 +8,6 @@
       :before-close="closePopup"
       width="600px">
       <div>
-        <!-- {{dialogData}} -->
         <el-form :model="dialogData" ref="dialogData" label-width="80px" v-loading="loading">
           <el-form-item label="录入对象" prop="members" :rules="[{ required: true, message: '请选择录入对象', trigger: 'change' }]">
             <el-row>
@@ -23,16 +22,6 @@
                 <div v-if="employee_list.length == 0" @click="noPersonnelListTips" style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"></div>
               </el-col>
             </el-row>
-            <!-- <EmployeeSelector
-              :employee_not_select="employee_not_select"
-              :employee_list="employee_list"
-              :can_select_employee="true"
-              :can_select_dept="false"
-              :close_clear_data="false"
-              :selected="employee_selected"
-              :visible.sync="show_employee_selector"
-              @confirm="move_employee_confirm"/> -->
-              
             <EmployeeSelector
               :employee_not_select="employee_not_select"
               :user_employee_list="true"
@@ -43,7 +32,7 @@
               @confirm="move_employee_confirm"
             />
           </el-form-item>
-          
+
           <div v-for="(item,index) in dialogData.items" :key="index" @click.stop="itemIndex = index">
             <div style="overflow: hidden;">
               <span style="line-height: 36px;">录入明细({{index+1}})</span>
@@ -66,11 +55,17 @@
               :options="rule_list"
               @change="ruleChange"
               :props="{ children: 'child', label: 'name', value: 'id', checkStrictly: true }"
-              ></el-cascader> 
+              ></el-cascader>
             </el-form-item>
 
-            <el-form-item label="选择规则" v-show="item.rule_switch" :prop="'items.'+ index +'.rule_item_list_value'" :rules="[item.rule_switch?{ required: true, message: '请选择规则', trigger: 'blur' }:{}]">
-              <el-cascader
+            <el-form-item label="选择规则" v-show="item.rule_switch" :prop="'items.'+ index +'.item_id'" :rules="[item.rule_switch?{ required: true, message: '请选择规则', trigger: 'blur' }:{}]">
+
+              <div class="inputBox" @click="openIsshowItem(item)">
+                <span v-if="item.item_id">已选择</span>
+                <span v-else style="color: #909399;">请选择</span>
+              </div>
+
+<!--              <el-cascader
               v-model="item.rule_item_list_value"
               ref="ruleItem"
               :popper-class="'itemClass'"
@@ -78,13 +73,13 @@
               @change="ruleItemChange"
               :show-all-levels="false"
               :props="{ children: 'child', label: 'name', value: 'id'}"
-              ></el-cascader>
+              ></el-cascader> -->
             </el-form-item>
 
             <el-form-item>
               <div v-show="item.rule_item_details.range_type == 1">{{get_point_name(ptid)}}  {{item.rule_item_details.min_point}}</div>
               <div v-show="item.rule_item_details.range_type == 2">{{get_point_name(ptid)}}  {{item.rule_item_details.min_point}} ~ {{item.rule_item_details.max_point}}</div>
-              <div>{{item.rule_item_details.name}}</div>
+              <div>{{item.rule_item_details.remark}}</div>
             </el-form-item>
             <el-form-item label="积分" :prop="'items.'+ index +'.point'" :rules="[{ required: true, message: '请输入分值', trigger: 'blur' }]">
               <el-input-number v-if="item.rule_item_details.range_type == 2" :min="item.min" :max="item.max" v-model="item.point" type="number"></el-input-number>
@@ -98,7 +93,7 @@
                 </el-col>
               </el-row>
             </el-form-item>
-            
+
             <el-form-item label="事件内容" :prop="'items.'+ index +'.remark'" :rules="[{ required: true, message: '请输入事件内容', trigger: 'blur' },{ min: 3, max: 100, message: '长度在 3 到 100 个字符', trigger: 'blur' }]">
               <el-row>
                 <el-col :span="18">
@@ -107,12 +102,11 @@
               </el-row>
             </el-form-item>
 
-            <!-- 20200831 未处理完成 -->
             <el-form-item label="图片">
               <uploadOss
                 :headers="Xtoken"
                 class="avatar-uploader"
-                :action="'https://'+'integralsys.oss-cn-shenzhen.aliyuncs.com'"
+                :action="'https://integralsys.oss-cn-shenzhen.aliyuncs.com'"
                 :show-file-list="true"
                 :file-list="item.fileList"
                 :on-success="handleFilesSuccess"
@@ -124,7 +118,6 @@
                 ref="clearPicture"
               >
                 <el-button size="small" type="primary" >点击上传</el-button>(最多选择3张)
-                <!-- <span>{{imageState}}</span> -->
               </uploadOss>
             </el-form-item>
             <el-form-item label="递交审批">
@@ -137,16 +130,6 @@
                   <div v-if="item.approvalName==''" @click="item.show_approval_selector = true" style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"></div>
                 </el-col>
               </el-row>
-              <!-- <EmployeeSelector
-                :employee_not_select="item.approval_not_select"
-                :can_select_employee="true"
-                :can_select_dept="false"
-                :multi="false"
-                :employee_list="employee_lists"
-                :selected="item.approval_selected"
-                :visible.sync="item.show_approval_selector"
-                @confirm="approval_confirm"/> -->
-                
               <EmployeeSelector
                 :employee_not_select="item.approval_not_select"
                 :multi="false"
@@ -174,36 +157,36 @@
         </el-form>
       </div>
     </el-dialog>
-    
-        <el-dialog
-          :title="'提交结果'"
-          :visible.sync="error_list_show"
-          :append-to-body='true'
-          @close='error_list_SX'
-          width="700px">
-          <el-table :data="error_list">
-            <el-table-column prop="target" label="员工">
-              <template slot-scope="scope">
-                <WWOpenData type="userName" :openid="scope.row.target"></WWOpenData>
-              </template>
-            </el-table-column>
-            <el-table-column prop="point" label="积分"></el-table-column>
-            <el-table-column prop="status" label="处理状态">
-              <template slot-scope="scope">
-                <span :style="'color:'+(scope.row.status==0?'#f70000':'#47bf47')">{{scope.row.status==0?'提交失败':'提交成功'}}</span>
-              </template>
-            </el-table-column>
-            <el-table-column prop="msg" label="备注信息"></el-table-column>
-          </el-table>
-        </el-dialog>
 
+    <el-dialog
+      :title="'提交结果'"
+      :visible.sync="error_list_show"
+      :append-to-body='true'
+      @close='error_list_SX'
+      width="700px">
+      <el-table :data="error_list">
+        <el-table-column prop="target" label="员工">
+          <template slot-scope="scope">
+            <WWOpenData type="userName" :openid="scope.row.target"></WWOpenData>
+          </template>
+        </el-table-column>
+        <el-table-column prop="point" label="积分"></el-table-column>
+        <el-table-column prop="status" label="处理状态">
+          <template slot-scope="scope">
+            <span :style="'color:'+(scope.row.status==0?'#f70000':'#47bf47')">{{scope.row.status==0?'提交失败':'提交成功'}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="msg" label="备注信息"></el-table-column>
+      </el-table>
+    </el-dialog>
+    <SelectRule :visible.sync="isShowRule" @confirm="ruleConfirm" :ptId="integralType" :selectItems="selectItem"></SelectRule>
   </div>
 </template>
 
 <script>
   import moment from 'moment'
   import EmployeeSelector from '@/views/common/EmployeeSelector'
-  // import EmployeeSelector from '@/views/common/EmployeeSelectorVTwo'
+  import SelectRule from '@/components/SelectRule';
   import uploadOss from "@/views/upload_oss/upload"
   import { getToken } from '@/utils/auth'
 
@@ -246,7 +229,7 @@
         Xtoken: { 'X-Token': getToken() },
         btn_loading: false,
         loading: false,
-        dialogData:{ 
+        dialogData:{
           members: [],
           items: [{
             rule_switch: true,
@@ -292,19 +275,21 @@
         rule_list: [],
         // 规则细则
         rule_item_list: [],
-        flatteningIntegralRules: null,
         ptid: 0,
         point_types: JSON.parse(localStorage.getItem('SET_POINT_TYPES')),
         itemIndex: 0,
+
+        isShowRule: false,
+        selectItem: [],
       }
     },
-    components: {EmployeeSelector,uploadOss},
+    components: {EmployeeSelector,uploadOss,SelectRule},
     watch:{
       integralType(val){
         this.dialogData.items[0].pt_id = val
         this.ptid = val
         this.getRuleData()
-        this.getRuleItemData()
+        // this.getRuleItemData()
       },
       'dialogData.members'(val){
         if(val.length == 0){
@@ -327,7 +312,22 @@
         })
     },
     methods: {
-      // 20200831 图片上传 未完成
+      openIsshowItem(item){
+        this.selectItem = [item.rule_item_details];
+        this.isShowRule = true
+      },
+      //选择规则
+      ruleConfirm(rules) {
+        let item = this.dialogData.items[this.itemIndex]
+        let ruleItemDetails = JSON.parse(JSON.stringify(rules))
+        item.rule_item_details = ruleItemDetails
+        item.remark = ruleItemDetails.remark
+        item.rule_id = ruleItemDetails.rule_id
+        item.item_id = ruleItemDetails.id
+        item.max = ruleItemDetails.max_point * 1
+        item.min = ruleItemDetails.min_point * 1
+        item.point = ruleItemDetails.min_point
+      },
       // 附件上传
       beforeUpload(file){
         const isJPG = /^image\/(jpeg|png|jpg)$/.test(file.type)
@@ -338,34 +338,10 @@
         if (!isLt2M) {
           this.$message.error('上传头像图片大小不能超过 2MB!')
         }
-        return isJPG && isLt2M   
+        return isJPG && isLt2M
       },
       onFilePreView(file) {
         window.open(file.response.url,'_blank')
-        // // 点击时查看文件
-        // debugger
-        // const $ext_list = ['doc', 'docx', 'pptx', 'xls', 'xlsx', 'ppt', 'txt']
-        // const $ext_name = file.name.split('.')[1]
-        // if ($ext_list.indexOf($ext_name) >= 0) {
-        //   window.open(file.response.url,'_blank')
-        // }
-        // // 点击时查看图片
-        // const $ext_list1 = ['jpg', 'png', 'bmp', 'jpeg','JPG','PNG']
-        // const $ext_name1 = file.name.split('.')[1]
-        // if ($ext_list1.indexOf($ext_name1) >= 0) {
-        //   let ii = 0
-        //   for (const i in this.dialogData.items[this.itemIndex].files) {
-        //     console.log(this.dialogData.items[this.itemIndex].files[i].split('.')[1])
-        //     debugger
-        //     if (['jpg', 'png', 'bmp', 'jpeg','JPG','PNG'].indexOf(this.dialogData.items[this.itemIndex].files[i].split('.')[1]) >= 0) {
-        //       if (this.dialogData.items[this.itemIndex].files[i] == file) {
-        //         this.openPhotoSwipe(ii,document.querySelectorAll('img[preview]'))
-        //         return
-        //       }
-        //       ii++
-        //     }
-        //   }
-        // }
       },
       onFileRemove(file, fileList) {
         this.dialogData.items[this.itemIndex].fileList = fileList
@@ -382,8 +358,6 @@
           this.dialogData.items[this.itemIndex].files.push(element.url)
         });
       },
-      // 图片上传
-
 
       // 没有人员提示
       noPersonnelListTips(){
@@ -405,7 +379,6 @@
       },
       // 选择录入对象
       move_employee_confirm(data){
-        console.log(data)
         this.employeeNames = []
         this.employee_selected = {dept: [],employee:[]}
         this.employeeName = ''
@@ -422,76 +395,44 @@
       },
       // 获取规则信息
       getRuleData(){
-        let self = this
         let data = {
           cycle_type: '1',
           pt_id: 2
         }
-        this.integralType === 1?data.pt_id = '1':this.integralType === 2?data.pt_id = '2':data.pt_id = '3'
-        self.$http('get','/api/integral/rule/trees',data
-        ).then(res => {
-					if (res.data.code == 1) {
-            const resultData = res.data.data
-            self.rule_list = resultData.rule_tree
-          }
-          self.rule_list = self.getTreeData(self.rule_list)
-				}).catch(e => {self.$message.error(e.data.msg)})
+        this.integralType === 1?data.pt_id = '1':this.integralType === 2?data.pt_id = '2':data.pt_id = '3';
+        this.$http('get','/api/integral/rule/trees',data).then(res => {
+          this.rule_list = this.getTreeData(res.data.data.rule_tree)
+				})
       },
       // 获取规则细则
       getRuleItemData(){
-        let self = this
         let data = {
           cycle_type: '1',
           pt_id: '1'
         }
-        self.loading = true
+        this.loading = true
         this.integralType === 1?data.pt_id = '1':this.integralType === 2?data.pt_id = '2':data.pt_id = '3'
-        // const headers = {'Accept':'application/vnd.test.v2+json'}
-        self.$http('get','/api/integral/rule/trees',data,'v2').then(res => {
+        this.$http('get','/api/integral/rule/trees',data,'v2').then(res => {
 					if (res.data.code == 1) {
             const resultData = res.data.data
-            self.rule_item_list = resultData.tree
-            self.flatteningIntegralRules = self.getItemDetail(self.rule_item_list)
-            self.loading = false
+            this.rule_item_list = resultData.tree
+            this.loading = false
           }
-				}).catch(e => {self.$message.error(e.data.msg)})
+				})
       },
       // 规则细则变化关闭down
       ruleItemChange(value){
         let item = this.dialogData.items[this.itemIndex]
         let ruleItemDetails = null
-        // this.flatteningIntegralRules.forEach(element => {
-        //   if (element.id == value[value.length - 1]) {
-        //     ruleItemDetails = {...element}
-        //   }
-        // })
         ruleItemDetails = this.$refs["ruleItem"][this.itemIndex].getCheckedNodes()[0].data
-        console.log(ruleItemDetails)
-
         if(ruleItemDetails){
           item.rule_item_details = ruleItemDetails
           item.remark = ruleItemDetails.name
           item.rule_id = ruleItemDetails.pid
           item.item_id = value[value.length - 1]
         }
-
-        const user_info = this.$store.getters.user_info
-        // if(item.reviewer_id){
-        //   item.pointShow = 2
-        // }else{
-        //   item.pointShow = 1
-          // if (ruleItemDetails.min_point === ruleItemDetails.max_point) {
-          //   user_info.point_config.point_limit.forEach(element => {
-          //     if(this.ptid == this.integralType){
-          //       item.max = element.point * 1
-          //       item.min = element.point * -1
-          //     }
-          //   });
-          // }else{
-            item.max = ruleItemDetails.max_point * 1
-            item.min = ruleItemDetails.min_point * 1
-          // }
-        // }
+        item.max = ruleItemDetails.max_point * 1
+        item.min = ruleItemDetails.min_point * 1
         item.point = ruleItemDetails.min_point
       },
       // 规则分类变化关闭dewn
@@ -612,7 +553,6 @@
         }
         const user_info = this.$store.getters.user_info
         const index = user_info.point_config.point_limit.findIndex(o => o.pt_id === this.integralType)
-        console.log(this.dialogData)
         let employeePointLimitMin = null
         let employeePointLimitMax = null
         user_info.point_config.point_limit.forEach(element => {
@@ -649,9 +589,9 @@
               !element.reviewer_id?element.reviewer_id = 0:''
               !element.item_id?element.item_id = 0:''
               if(
-                (element.reviewer_id && element.point !== 0 && element.rule_id > 0) || 
-                (element.reviewer_id <= 0 && element.item_id > 0 && ruleLimitCheck && element.point !== 0 && element.point <= maxPointPermission && Math.abs(element.point) <= maxPointPermission) || 
-                (element.reviewer_id <= 0 && !ruleLimitCheck && this.integralType == 3 && element.rule_id > 0) || 
+                (element.reviewer_id && element.point !== 0 && element.rule_id > 0) ||
+                (element.reviewer_id <= 0 && element.item_id > 0 && ruleLimitCheck && element.point !== 0 && element.point <= maxPointPermission && Math.abs(element.point) <= maxPointPermission) ||
+                (element.reviewer_id <= 0 && !ruleLimitCheck && this.integralType == 3 && element.rule_id > 0) ||
                 (element.reviewer_id <= 0 && element.item_id >= 0 && element.point !== 0 && element.point <= maxPointPermission && Math.abs(element.point) <= maxPointPermission && element.rule_id > 0 )
               ){
                 data.items.push({rule_id: element.rule_id || 0, item_id: element.item_id || 0, point: element.point, remark: element.remark, event_time: element.event_time, pt_id: self.ptid, reviewer_id: element.reviewer_id || 0, files: element.files})
@@ -669,6 +609,7 @@
           this.btn_loading = false
           return false
         }
+        console.log(data)
         self.$http('post',this.integralType === 1?'':this.integralType === 2?'/api/integral/review/a/entry':'/api/integral/point/entry',data
         ).then(res => {
           if(res.data.code == 1){
@@ -688,7 +629,7 @@
         }).catch(e => {self.$message.close()})
         this.$nextTick(() => {
           self.btn_loading = false
-        })  
+        })
       },
       //关闭错误信息时的回调
       error_list_SX(){
@@ -794,7 +735,25 @@
      padding-left:15px;
      overflow: hidden;
   }
-
-  // ruleClass
-  // itemClass
-</style>
+  .inputBox {
+    height: 36px;
+    line-height: 36px;
+    padding-right: 30px;
+    -webkit-appearance: none;
+    background-color: #fff;
+    background-image: none;
+    border-radius: 4px;
+    border: 1px solid #dcdfe6;
+    -webkit-box-sizing: border-box;
+    box-sizing: border-box;
+    color: #606266;
+    display: inline-block;
+    font-size: inherit;
+    width: 230px;
+    outline: 0;
+    padding: 0 15px;
+    cursor: pointer;
+    -webkit-transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+    transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
+  }
+</style>

+ 2 - 3
src/views/common/examinePopup.vue

@@ -413,11 +413,10 @@ export default {
     this.getRuleItemTree();
     this.employee_lists = this.$store.getters.user_info.employee_detail.superior_list
     //刷新当前角色上级
-    this.$http('get', '/api/employee/detail')
-      .then(res => {
+    this.$http('get', '/api/employee/detail').then(res => {
         let list = res.data.data.user
         this.employee_lists = list.employee_detail.superior_list
-      })
+    })
   },
   methods: {
     cascaderItemIdChange(val) {

+ 1 - 1
src/views/dashboard/index.vue

@@ -326,7 +326,7 @@
               <span class="title1" style="padding-bottom:10px;">暂无积分数据</span>
             </div>
             <div v-else style="display:flex">
-              <userImage width="45px" height="45px" :id="buckle.id" :user_name="buckle.name" :img_url="prize.img_url" style="margin-right:8px"></userImage>
+              <userImage width="45px" height="45px" :id="buckle.id" :user_name="buckle.name" :img_url="buckle.img_url" style="margin-right:8px"></userImage>
               <div class="rightexamineAndApproveList">
                 <p style="font-size:16px;width: 200px;" class="font-flex-word" >
                   <b ><WWOpenData type="userName" :openid="buckle.name"></WWOpenData></b>

+ 1 - 2
src/views/setting/set_role.vue

@@ -586,7 +586,6 @@
 </template>
 <script>
 import EmployeeSelector from '@/views/common/EmployeeSelector';
-import EmployeeSelector1 from '@/views/common/EmployeeSelector1';
 import { getToken } from '@/utils/auth';
 import ApproverSet from './approver_set';
 var bool = true;
@@ -732,7 +731,7 @@ export default {
       ]
     };
   },
-  components: { EmployeeSelector1, EmployeeSelector, ApproverSet },
+  components: {EmployeeSelector, ApproverSet },
   watch: {
     checked(val) {},
     setPowerType(val) {

+ 1 - 1
src/views/statistics_new/custom_rank.vue

@@ -63,7 +63,7 @@
 							placeholder="全部规则分类"
 						></el-cascader>
 					</el-form-item> -->
-          <el-form-item>
+          <el-form-item v-if="table_list.length>0">
             <el-checkbox v-model="sort" size="medium" label="由低到高" border></el-checkbox>
             <el-button class="company_intergral_button" @click="export_all" type="primary" plain style="margin-left: 10px;">导出报表</el-button>
           </el-form-item>