Bladeren bron

增加添加创始人功能版本

347617796@qq.com 3 jaren geleden
bovenliggende
commit
c3dac8df37
100 gewijzigde bestanden met toevoegingen van 7882 en 3870 verwijderingen
  1. 11 0
      .ftp/ftp-sync.json
  2. 1 0
      WW_verify_VPOsOaC1KmaFfBER.txt
  3. 10 2
      config/dev.env.js
  4. 1 1
      config/index.js
  5. 1 1
      config/prod.env.js
  6. 3 1
      config/sit.env.js
  7. 24 16
      index.html
  8. 22 0
      src/App.vue
  9. 21 5
      src/api/auth.js
  10. 0 3
      src/api/configget.js
  11. 945 0
      src/components/EmployeeSelector.vue
  12. 83 0
      src/components/Steps.vue
  13. 5 3
      src/components/deptData.vue
  14. 13 5
      src/components/user_image.vue
  15. 1 1
      src/components/wxOpendata.vue
  16. 1 20
      src/icons/svg/employee_table_icon.svg
  17. 1 22
      src/icons/svg/fixed_integral_icon.svg
  18. 1 16
      src/icons/svg/rule_manage_icon.svg
  19. 1 19
      src/icons/svg/set_basics_icon.svg
  20. 1 27
      src/icons/svg/set_role_icon.svg
  21. 8 6
      src/main.js
  22. 99 74
      src/permission.js
  23. 8 8
      src/router/index.js
  24. 108 108
      src/store/modules/user.js
  25. 113 13
      src/styles/index.scss
  26. 18 2
      src/utils/auth.js
  27. 26 16
      src/utils/request.js
  28. 7 1
      src/utils/wx-auth-two.js
  29. 1 1
      src/utils/wxconfiguration.js
  30. 2 2
      src/views/attendance/attenadenChange.vue
  31. 2 2
      src/views/attendance/attendance_hiolday.vue
  32. 3 3
      src/views/attendance/attendance_rating.vue
  33. 936 928
      src/views/common/EmployeeSelector.vue
  34. 922 0
      src/views/common/EmployeeSelector1 copy.vue
  35. 673 828
      src/views/common/EmployeeSelector1.vue
  36. 1115 0
      src/views/common/EmployeeSelectorVTwo.vue
  37. 91 52
      src/views/common/applicationIntegrationPopup.vue
  38. 47 9
      src/views/common/bonusPointsPopup.vue
  39. 58 48
      src/views/common/examinePopup.vue
  40. 1 1
      src/views/common/pastDue.vue
  41. 3 3
      src/views/common/repeatTaskDetailsPopup.vue
  42. 21 5
      src/views/common/rewardTask.vue
  43. 20 4
      src/views/common/rewardTaskAmend.vue
  44. 3 3
      src/views/common/rewardTaskDetailsPopup.vue
  45. 11 4
      src/views/common/taskDetailsPopup.vue
  46. 26 7
      src/views/common/temporaryTask.vue
  47. 25 7
      src/views/common/temporaryTaskAmend.vue
  48. 1 1
      src/views/dashboard/components/DepartmentPointAll.vue
  49. 1 1
      src/views/dashboard/components/IntegralCreateApplicationBtn.vue
  50. 2 2
      src/views/dashboard/components/IntegralCreateReviewBtn.vue
  51. 1 1
      src/views/dashboard/components/PointAutoCom.vue
  52. 1 1
      src/views/dashboard/components/TaskCreateBtn.vue
  53. 10 10
      src/views/dashboard/components/anniu.vue
  54. 1 1
      src/views/dashboard/components/fuli.vue
  55. 5 5
      src/views/dashboard/components/jcnr.vue
  56. 1 1
      src/views/dashboard/components/jfsjlb.vue
  57. 1 1
      src/views/dashboard/components/notice.vue
  58. 6 6
      src/views/dashboard/components/paiming.vue
  59. 6 6
      src/views/dashboard/components/paiming2.vue
  60. 4 4
      src/views/dashboard/components/paiming_all.vue
  61. 4 4
      src/views/dashboard/components/paiming_department.vue
  62. 4 4
      src/views/dashboard/components/tubiao.vue
  63. 4 4
      src/views/dashboard/components/tubiaoAdmin.vue
  64. 4 4
      src/views/dashboard/components/tubiaoEmployee.vue
  65. 1057 1157
      src/views/dashboard/index.vue
  66. 2 2
      src/views/integral/ChartDept.vue
  67. 6 6
      src/views/integral/ChartPersonal.vue
  68. 3 3
      src/views/integral/DepartmentDataDetal.vue
  69. 12 2
      src/views/integral/EmploeAdd.vue
  70. 5 5
      src/views/integral/EmployeeSelector.vue
  71. 142 163
      src/views/integral/EmployeeTable.vue
  72. 5 5
      src/views/integral/PkRankLeader.vue
  73. 5 5
      src/views/integral/PkRankMember.vue
  74. 4 4
      src/views/integral/PkRankTeam.vue
  75. 2 2
      src/views/integral/PointAutoCreateBtn.vue
  76. 1 1
      src/views/integral/PointAutoSetting.vue
  77. 4 4
      src/views/integral/PointRankDepartment.vue
  78. 7 7
      src/views/integral/RankEntire.vue
  79. 6 6
      src/views/integral/RankJob.vue
  80. 6 6
      src/views/integral/RankManager.vue
  81. 1 1
      src/views/integral/avatarUpload.vue
  82. 4 4
      src/views/integral/commonDepartment.vue
  83. 2 2
      src/views/integral/commonManager.vue
  84. 2 2
      src/views/integral/framework.vue
  85. 96 21
      src/views/integral/rule/rule_category.vue
  86. 1 1
      src/views/layout/Layout.vue
  87. 100 29
      src/views/layout/components/Navbar.vue
  88. 3 3
      src/views/layout/components/Sidebar/index.vue
  89. 1 1
      src/views/login/autoLogin.vue
  90. 3 3
      src/views/login/create_company.vue
  91. 6 6
      src/views/login/forgetPwd.vue
  92. 8 8
      src/views/login/index.vue
  93. 113 62
      src/views/login/index1.vue
  94. 562 0
      src/views/login/index2.vue
  95. 100 0
      src/views/login/index3.vue
  96. 7 7
      src/views/login/invite_new_company.vue
  97. 35 0
      src/views/login/loginTransfer.vue
  98. 5 5
      src/views/login/reg.vue
  99. 2 2
      src/views/login/resetPwd.vue
  100. 15 2
      src/views/noAccess.vue

+ 11 - 0
.ftp/ftp-sync.json

@@ -0,0 +1,11 @@
+{
+    "name": "pc_qywx",
+    "host": "47.106.219.66",
+    "protocol": "sftp",
+    "port": 22,
+    "username": "tuser",
+    "password": "gdy123456",
+    "remotePath": "/home/tuser/qywxpc",
+    "uploadOnSave": false,
+    "downloadOnOpen":false
+}

+ 1 - 0
WW_verify_VPOsOaC1KmaFfBER.txt

@@ -0,0 +1 @@
+VPOsOaC1KmaFfBER

+ 10 - 2
config/dev.env.js

@@ -3,9 +3,17 @@ module.exports = {
   ENV_CONFIG: '"dev"',
   // BASE_API: '"https://new.gdy.g107.com"',
   // SERVE_AD: '"https://nkaoqin.g107.net"'
-  BASE_API: '"http://192.168.0.88:8888"',
+  
+  // BASE_API: '"http://test.qywx.g107.net"',
+  // BASE_API: '"http://qywx.1024win.cn"',
+
+  // BASE_API: '"http://test.qywx.g107.net"',//开发
+  BASE_API: '"https://qywx.g107.net"',//生产
   SERVE_AD: '"https://nkaoqin.g107.net"',
-  APPID: '"ww4065f0d4bb232a6a"',
+  // APPID: '"ww4065f0d4bb232a6a"',
+  APPID: '"wwa8bbe3b687a632dd"',
+  // APPID: '"ww1d41fd7a34ed1a64"',//测试
+  // REDIRECT_URI: '"http%3A%2F%2Fwechatdings.vaiwan.com"',
   // BASE_API: '"https://oa.g107.com"',
   // SERVE_AD:'"https://ad.g107.com"'
 }

+ 1 - 1
config/index.js

@@ -9,7 +9,7 @@ module.exports = {
     proxyTable: {},
 	
     host: 'localhost',
-    port: 9527, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
+    port: 6681, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
     autoOpenBrowser: false,
     errorOverlay: true,
     notifyOnErrors: false,

+ 1 - 1
config/prod.env.js

@@ -1,6 +1,6 @@
 module.exports = {
   NODE_ENV: '"production"',
   ENV_CONFIG: '"prod"',
-  BASE_API: '"https://oa.g107.com"',
+  BASE_API: '"https://qywx.g107.net"',//生产
   SERVE_AD:'"https://ad.g107.com"'
 }

+ 3 - 1
config/sit.env.js

@@ -1,6 +1,8 @@
 module.exports = {
   NODE_ENV: '"production"',
   ENV_CONFIG: '"sit"',
-  BASE_API: '"https://new.gdy.g107.com"',
+  // BASE_API: '"https://new.gdy.g107.com"',
+  // BASE_API: '"http://qywx.1024win.cn"',
+  BASE_API: '"http://test.qywx.g107.net"',//开发
   SERVE_AD: '"https://nkaoqin.g107.net"'
 }

+ 24 - 16
index.html

@@ -13,6 +13,14 @@
 <script type="text/javascript" src="//open.work.weixin.qq.com/wwopen/js/jwxwork-1.0.0.js"></script>
 
   <script src="static/js/polyfill.min.js"></script>
+  <script>
+    
+    if(/Android|webOS|iPhone|iPod|BlackBerry/i.test(navigator.userAgent)) {
+      console.log('app')
+    } else {
+      console.log('pc')
+    }
+  </script>
   
   <!-- <script>
     /**
@@ -72,27 +80,27 @@
   <input type="password">
 </div>
   <div id="app"></div>
-  <div id='ie_tip' style='display:none'><img style='position:absolute;left:50%;margin-left:-366px;' src='/static/images/ltIE9.png'><a
+  <!-- <div id='ie_tip' style='display:none'><img style='position:absolute;left:50%;margin-left:-366px;' src='static/images/ltIE9.png'><a
       href='https://www.baidu.com/s?ie=UTF-8&wd=%E8%B0%B7%E6%AD%8C%E6%B5%8F%E8%A7%88%E5%99%A8' target='_blank' class='chromLink'></a><a
-      href='https://www.baidu.com/s?ie=UTF-8&wd=%E7%81%AB%E7%8B%90%E6%B5%8F%E8%A7%88%E5%99%A8' target='_blank' class='firefoxLink'></a></div>
+      href='https://www.baidu.com/s?ie=UTF-8&wd=%E7%81%AB%E7%8B%90%E6%B5%8F%E8%A7%88%E5%99%A8' target='_blank' class='firefoxLink'></a></div> -->
   <!-- built files will be auto injected -->
 </body>
 <script>
-  (function (window) { // ie9以下浏览器
-    var theUA = window.navigator.userAgent.toLowerCase();
-    if ((theUA.match(/msie\s\d+/) && theUA.match(/msie\s\d+/)[0]) || (theUA.match(/trident\s?\d+/) && theUA.match(/trident\s?\d+/)[0])) {
-      var ieVersion = theUA.match(/msie\s\d+/)[0].match(/\d+/)[0] || theUA.match(/trident\s?\d+/)[0];
-      if (ieVersion < 9) {
-        // document.writeln("<img style='position:absolute;left:50%;margin-left:-366px;' src='./static/images/ltIE9.png'><a href='https://www.baidu.com/s?ie=UTF-8&wd=%E8%B0%B7%E6%AD%8C%E6%B5%8F%E8%A7%88%E5%99%A8' target='_blank' class='chromLink'></a><a href='https://www.baidu.com/s?ie=UTF-8&wd=%E7%81%AB%E7%8B%90%E6%B5%8F%E8%A7%88%E5%99%A8' target='_blank' class='firefoxLink'></a>");
-        // document.execCommand("Stop");
-        var app = document.getElementById("app")
-        var ie_tip = document.getElementById("ie_tip")
-        ie_tip.style.display = 'block';
-        app.appendChild(ie_tip)
-      };
-    }
+  // (function (window) { // ie9以下浏览器
+  //   var theUA = window.navigator.userAgent.toLowerCase();
+  //   if ((theUA.match(/msie\s\d+/) && theUA.match(/msie\s\d+/)[0]) || (theUA.match(/trident\s?\d+/) && theUA.match(/trident\s?\d+/)[0])) {
+  //     var ieVersion = theUA.match(/msie\s\d+/)[0].match(/\d+/)[0] || theUA.match(/trident\s?\d+/)[0];
+  //     if (ieVersion < 9) {
+  //       // document.writeln("<img style='position:absolute;left:50%;margin-left:-366px;' src='static/images/ltIE9.png'><a href='https://www.baidu.com/s?ie=UTF-8&wd=%E8%B0%B7%E6%AD%8C%E6%B5%8F%E8%A7%88%E5%99%A8' target='_blank' class='chromLink'></a><a href='https://www.baidu.com/s?ie=UTF-8&wd=%E7%81%AB%E7%8B%90%E6%B5%8F%E8%A7%88%E5%99%A8' target='_blank' class='firefoxLink'></a>");
+  //       // document.execCommand("Stop");
+  //       var app = document.getElementById("app")
+  //       var ie_tip = document.getElementById("ie_tip")
+  //       ie_tip.style.display = 'block';
+  //       app.appendChild(ie_tip)
+  //     };
+  //   }
 
-  })(window);
+  // })(window);
 </script>
 
 </html>

+ 22 - 0
src/App.vue

@@ -13,3 +13,25 @@
     },
   }
 </script>
+
+<style lang="scss">
+  //解决弹窗抖动
+  // .dialog-shake{
+    .el-dialog__wrapper {
+      display: flex;
+      justify-content: center;
+      align-items: center;
+      .el-dialog {
+        display: flex;
+        flex-direction: column;
+        margin: 0 !important;
+        max-height: calc(100% - 30px);
+        max-width: calc(100% - 30px);
+        .el-dialog__body {
+          flex: 1;
+          overflow: auto;
+        }
+      }
+    }
+  // }
+</style>

+ 21 - 5
src/api/auth.js

@@ -1,11 +1,12 @@
 import store from '@/store'
 
+// 获取当前用户详情
 export function getUserData() {
-    return store.getters.user_info.employee_detail.role_list;
-  }
+	return store.getters.user_info || JSON.parse(localStorage.getItem('user_info'))
+}
 export function getIsCreator (key) {
 	 let is=false;
-	 let getUserdatas = getUserData()
+	 let getUserdatas = getUserData().employee_detail.role_list
 	 for(let i in getUserdatas){
 		 if(key == getUserdatas[i].name){
 			is=true;
@@ -30,18 +31,33 @@ export function authoritys (key) {//判断是否为某项权限:this.$authorit
 	return supremeAuthority() == key
 }
 
-
+// 获取积分类型
+export function getTyps(id) {
+	if (id) {
+		var arr = JSON.parse(localStorage.getItem('SET_POINT_TYPES'))
+		var item = arr.filter(element => {
+		return typeof (id) === 'string' ? element.code == id : element.id == id
+		})
+		return item[0]
+	} else {
+		return JSON.parse(localStorage.getItem('SET_POINT_TYPES'))
+	}
+}
+// 获取积分类型名称
+export function getTypsName(id) {
+	return getTyps(id).name
+}
 
 // 防抖
 //用法
 // _debounce(this.XXX(),1000)
 export function _debounce (fn, delay) {
+	if(!delay)delay=500
     let timer = null
     return function () {
         let arg = arguments
         clearTimeout(timer)
         timer = setTimeout(() => {
-          console.log(this,arg)
             fn.apply(this, arg)
         }, delay)
     }

+ 0 - 3
src/api/configget.js

@@ -3,9 +3,7 @@ import request from '@/utils/request'
 import {getToken} from '@/utils/auth' // getToken from cookie
 export function allocation(){
     let urls = window.location.href
-    console.log(urls.split('#')[0])
     let params = {url : urls.split('#')[0]}
-    // let params = {url : 'http%3A%2F%2Fwechatdings.vaiwan.com%2F'}
     return request('get','/api/wechat/config', params)
 }
 // import request from '@/utils/request'
@@ -14,7 +12,6 @@ export async function allocations(body){
     console.log(body)
     if(getToken()){
         let params = {url : body}
-        // let params = {url : 'http%3A%2F%2Fwechatdings.vaiwan.com%2F'}
         return await request('get','/api/wechat/config', params)
     }
 }

+ 945 - 0
src/components/EmployeeSelector.vue

@@ -0,0 +1,945 @@
+<template>
+  <el-dialog
+    :title="title"
+    :visible.sync="visible_"
+    :close-on-click-modal="false"
+    :before-close="close_before"
+    append-to-body
+    @open="openDialog"
+    width="640px"
+    class="employee_select_dialog"
+  >
+    <slot name="header"></slot>
+    <div class="employee_selector_box" v-if="visible_">
+      <el-row :gutter="10">
+        <el-col :xs="11" :sm="11" :md="11" :lg="11" :xl="11" class="scroller-box one">
+          <div class="search-box">
+            <div class="search flex-box"><el-input v-model="keyword" placeholder="请输入内容" clearable></el-input></div>
+            <div class="search flex-box" style="margin-top: 7px;">
+              <el-cascader
+                v-show="can_select_employee&&deptId==0"
+                style="width: 100%;"
+                v-model="dept_id"
+                ref="dept"
+                :options="dept_list"
+                :props="{ checkStrictly: true, value: 'id', label: 'name', children: 'children' }"
+                clearable
+                :disabled="deptId > 0"
+                placeholder="全公司"
+              ></el-cascader>
+            </div>
+          </div>
+
+          <div class="dept_path scroll-bar flex-box flex-d-wrap" v-if="can_select_dept">
+            <template v-if="pid_list_arr.length > 0">
+              <div @click="back_by_index(0)" class="blue" style="cursor: pointer;">全公司</div>
+              <div v-for="(item, index) in pid_list_arr" :key="index" @click="back_by_index(index + 1, item)" class="font-flex-word" style="max-width: 120px;">
+                <i class="el-icon-arrow-right"></i>
+                <span class="blue" style="cursor: pointer;">{{ item.name }}</span>
+              </div>
+            </template>
+          </div>
+		  <!-- 人员 -->
+          <div class="flex-box-end" v-if="can_select_employee && isChecKedAll && multi" style="padding: 10px;border-bottom: 1px solid #f1f1f1;">
+            <el-checkbox v-model="checked" @change="checkedChange">全选</el-checkbox>
+          </div>
+          <el-scrollbar
+            wrap-class="column-wrapper scrollable-items-container"
+            :native="false"
+            :class="(can_select_dept || isChecKedAll)? 'scrollbarHeight1' : 'scrollbarHeight2'"
+            v-loading="table_loading"
+          >
+            <div class="choose_left">
+              <template v-if="can_select_dept">
+                <div class="persons_box" style="padding-top:4px;" v-if="dept_list.length > 0">
+                  <div v-for="(item, index) in dept_list" :key="index">
+                    <div class="flex-box flex-v-ce deptList" @click="select_dept(item, index)" v-show="item.name.indexOf(keyword) >= 0">
+                      <div :class="[item.checked? 'showCheckbox':'']" class="checkbox"><span class="isCheckbox"></span></div>
+                      <div class="employee_name flex-1 font-flex-word">{{ item.name }}</div>
+                      <div v-if="item.children" class="blue" @click.stop="show_child(item)">| 下级</div>
+                    </div>
+                  </div>
+                </div>
+              </template>
+              <template v-if="can_select_employee">
+                <div class="persons_box" style="padding-top:4px;" v-if="list.length > 0">
+                  <div class="employee_cell_a" v-for="(item, index) in list" :key="index" v-show="item.id">
+                    <div class="employee_cell" @click.prevent.stop="select_employee(item)">
+                      <div class="employee_checkbox"><el-checkbox v-model="item.checked"></el-checkbox></div>
+                      <div class="employee_img_url"><img :src="item.img_url" class="employee_cell_head_img" /></div>
+                      <div class="employee_name">{{ item.name }}</div>
+                      <div class="employee_cell_clear"></div>
+                    </div>
+                  </div>
+                </div>
+                <div v-else class="fontColorF" style="text-align: center;margin-top: 50px;">暂无可选人员</div>
+              </template>
+            </div>
+          </el-scrollbar>
+        </el-col>
+        <el-col :xs="2" :sm="2" :md="2" :lg="2" :xl="2" class="col-line"><span style="opacity: 0;">空</span></el-col>
+        <el-col :xs="11" :sm="11" :md="11" :lg="11" :xl="11" class="scroller-box">
+          <div class="option-box">
+            <span style="line-height: 40px; padding-left: 10px;" class="fl" v-if="multi && can_select_employee">已选择{{ employee_selected_list.length }}个员工</span>
+            <el-button type="type" @click="clear_data">清空</el-button>
+          </div>
+          <el-scrollbar wrap-class="column-wrapper scrollable-items-container" :native="false" style="height: 400px;">
+            <div class="choose_right">
+              <div class="employee_cell" v-for="(item, index) in dept_selected_list" :key="index">
+                <div class="employee_name">{{ item.dept_name }}</div>
+                <div class="employee_delete"><el-button type="default" size="mini" @click="dept_delete(item, index)" icon="el-icon-close" circle></el-button></div>
+                <div class="employee_cell_clear"></div>
+              </div>
+              <div class="employee_cell" v-for="(item, index) in employee_selected_list" :key="index">
+                <div class="employee_img_url" v-if="item.img_url"><img :src="item.img_url" class="employee_cell_head_img" /></div>
+                <div class="employee_img_url" v-else><img src="static/images/head_default.png" class="employee_cell_head_img" /></div>
+                <div class="employee_name">{{ item.name }}</div>
+                <div class="employee_delete"><el-button type="default" size="mini" @click="employee_cancel(item, true)" icon="el-icon-close" circle></el-button></div>
+                <div class="employee_cell_clear"></div>
+              </div>
+            </div>
+          </el-scrollbar>
+        </el-col>
+      </el-row>
+    </div>
+    <span slot="footer" class="dialog-footer">
+      <el-button @click="close">取 消</el-button>
+      <el-button type="primary" @click="confirm">确 定</el-button>
+    </span>
+  </el-dialog>
+</template>
+
+<script>
+export default {
+  props: {
+    title: {
+      // 标题
+      type: String,
+      default: '选择部门和员工'
+    },
+    deptId: {
+      //指定部门ID,人员列表就是该部门的
+      type: Number,
+      default: 0
+    },
+    visible: {
+      // 是否显示组件
+      type: Boolean,
+      default: false
+    },
+    can_select_dept: {
+      // 是否能选择部门(单选择部门,不能选择人员)
+      type: Boolean,
+      default: false
+    },
+    dept_not_select: {
+      // 排除部门ID
+      type: Array,
+      default: () => {
+        return [];
+      }
+    },
+    dept_multi: {
+      // 指定部门是否能多选
+      type: Boolean,
+      default: true
+    },
+    dept_children: {
+      //选择部门时是否包含子部门
+      type: Boolean,
+      default: true
+    },
+    can_select_employee: {
+      // 指定是否能选择员工
+      type: Boolean,
+      default: true
+    },
+    employee_not_select: {
+      // 排除员工的ID,包含ID时不出现在选择列表中
+      type: Array,
+      default: () => {
+        return [];
+      }
+    },
+    selected: {
+      // 已经选择的员工和部门
+      type: Object,
+      default: () => {
+        return { employee: [], dept: [] };
+      }
+    },
+    multi: {
+      // 指定员工是否能多选
+      type: Boolean,
+      default: true
+    },
+    user_employee_list: {
+      // 为true时,employee_list才生效
+      type: Boolean,
+      default: false
+    },
+    employee_list: {
+      // 指定显示的员工列表,注意:传值后组件的员工数据将不是统一向服务器获取的,而是指定的员工列表,格式是:[{id: 1, name: “张三”, img_url: “”}]
+      type: Array,
+      default: () => {
+        return [];
+      }
+    },
+    isChecKedAll: {
+      //是否全选
+      type: Boolean,
+      default: true
+    },
+    close_clear_data: {
+      //关闭时是否清除选择的数据
+      type: Boolean,
+      default: true
+    },
+    max: {
+      //选择的人数限制
+      type: Number,
+      default: 0
+    },
+    is_filtration_creator: {
+      //是否去除创始人
+      type: Boolean,
+      default: true
+    },
+    is_manager_only: {
+      //是否只显示管理者
+      type: Boolean,
+      default: false
+    },
+    include_self: {
+      //是否显示自己
+      type: Boolean,
+      default: true
+    },
+    child:{
+      //当人员列表点击部门筛选时不显示子部门人员 ,目前只在设置主管有使用到
+      type: Boolean,
+      default: true
+    },
+    isRequired:{
+      //是否必须选择人员或者部门
+      type: Boolean,
+      default: false
+    }
+  },
+  name: 'EmployeeSelector',
+  data() {
+    return {
+      // 基础配置
+      table_loading: false,
+      searchBox: [], //用于搜索的全部人员
+      keyword: '',
+      checked: false,
+      visible_: false,
+      // 选择人员相关
+      employee_selected_list: [],
+      employee_selected: [],
+      list: [],
+      // 选择部门相关
+      dept_selected_list: [],
+      dept_name: '',
+      dept_id: [],
+      dept_select_id: 0,
+      dept_list: [],
+      dept_list_all: [], //备用全部部门
+      pid_list_arr: []
+    };
+  },
+  watch: {
+    // 当动态改变“employee_list”时,获取employee_list与employee_selected_list的交集,用于考勤组功能
+    employee_list(val) {
+      var eSList = this.employee_selected_list;
+      this.employee_selected_list = [...eSList].filter(x => [...val].some(y => y.id === x.id));
+    },
+    visible(val) {
+      this.visible_ = JSON.parse(JSON.stringify(val));
+      if (val) {
+        setTimeout(() => {
+          this.get_user_list();
+          this.get_dept_list();
+        }, 200);
+      }
+    },
+    dept_id(val) {
+      this.dept_select_id = val[val.length - 1];
+      this.$nextTick(() => {
+        if (this.can_select_employee) {
+          this.$refs.dept.dropDownVisible = false;
+        }
+        this.get_user_list();
+        this.checked = false;
+      });
+    },
+    keyword(val) {
+      this.list = this.searchBox.filter(item => item.name.includes(this.keyword));
+      if (!val) {
+        this.checked = false;
+      }
+    }
+  },
+  methods: {
+    //打开Dialog的回调,用刷每次打开都初始化selected
+    openDialog() {
+      if (this.deptId != 0) {
+        this.dept_id = [this.deptId];
+        this.dept_select_id = this.deptId;
+      }
+      let selected = this.selected;
+      this.employee_selected = [];
+      this.employee_selected_list = JSON.parse(JSON.stringify(selected.employee));
+      this.dept_selected_list =JSON.parse(JSON.stringify(selected.dept));
+      for (let i in selected.employee) {
+        this.employee_selected.push(selected.employee[i].id);
+      }
+    },
+    close_before(done) {
+      this.close();
+      done();
+    },
+    // 全选(只用选择人员)
+    checkedChange(val) {
+      if (val) {
+        this.$nextTick(() => {
+          let employeeSelectedList = JSON.parse(JSON.stringify(this.employee_selected_list)); //获取选择的人员
+          let employeeSelectedIds = [],
+            total = 0;
+          employeeSelectedList.forEach(element => {
+            employeeSelectedIds.push(element.id);
+          });
+          for (let i in this.list) {
+            this.$set(this.list[i], 'checked', true);
+            if (!employeeSelectedIds.includes(this.list[i].id)) {
+              //去除已经选择的人员
+              this.employee_selected_list.push(this.list[i]);
+            }
+          }
+        });
+      } else {
+        this.employee_selected_list = [];
+        this.employee_selected = [];
+        for (let i in this.list) {
+          this.$set(this.list[i], 'checked', false);
+        }
+      }
+    },
+    // 点击部门导航
+    back_by_index(index, item) {
+      this.pid_list_arr.splice(index, 100);
+      if (index == 0) {
+        this.dept_list = this.dept_list_all;
+        return false;
+      }
+      if (item.children) {
+        this.dept_list = item.children;
+      }
+    },
+    //下一级
+    show_child(item) {
+      if (item.children) {
+        this.dept_list = item.children;
+      }
+      this.pid_list_arr.push(item);
+    },
+    //获取一个部门的下的所有子部门
+    getChildrens(list) {
+      var dept_list = [];
+      list.forEach(item => {
+        item.checked = true;
+        dept_list.push({ dept_id: item.id, dept_name: item.name, avatar: 'static/images/e66f.jpg' });
+        if (item.children) {
+          dept_list.push(...this.getChildrens(item.children));
+        }
+      });
+      return dept_list;
+    },
+    //选择部门
+    select_dept(item, index) {
+      if (item.checked) {
+        this.dept_cancel(item);
+      } else {
+        if (!this.dept_multi) {
+          //是否能多选
+          this.dept_selected_list = [];
+          for (let i in this.dept_list_all) {
+            this.dept_cancel(this.dept_list_all[i], true);
+          }
+        }
+        item.checked = true;
+        if (item.children && this.dept_children) {
+          //是否存在子部门
+          this.dept_selected_list.push({ dept_id: item.id, dept_name: item.name, avatar: 'static/images/e66f.jpg' });
+          var arr = this.getChildrens(item.children);
+          this.dept_selected_list.push(...arr);
+        } else {
+          this.dept_selected_list.push({ dept_id: item.id, dept_name: item.name, avatar: 'static/images/e66f.jpg' });
+        }
+      }
+    },
+    //清除选择的部门
+    dept_cancel(item, is) {
+      item.checked = false;
+      if (item.children) {
+        //左边
+        item.children.forEach(childrens => {
+          this.dept_cancel(childrens);
+        });
+      }
+      if (is) {
+        return false;
+      }
+      var deptSelectedList = this.dept_selected_list;
+      deptSelectedList.forEach((dept, index) => {
+        //右边
+        if (dept.dept_id == item.id) {
+          deptSelectedList.splice(index, 1);
+        }
+      });
+    },
+    //删除部门
+    dept_delete(item) {
+      var dept_list = this.dept_list;
+      var obj = this.getDeptz(item.dept_id, dept_list); //递归找到所属部门
+      this.dept_cancel(obj);
+    },
+    // 递归获取指定ID部门
+    getDeptz(id, arr) {
+      var obj = {};
+      for (let i = 0; i < arr.length; i++) {
+        if (id == arr[i].id) {
+          obj = arr[i];
+          break;
+        } else if (arr[i].children) {
+          if (this.getDeptz(id, arr[i].children).id) {
+            obj = this.getDeptz(id, arr[i].children);
+          }
+        }
+      }
+      return obj;
+    },
+
+    //清除选择的人员
+    employee_cancel(item) {
+      this.checked = false;
+      this.employee_selected.splice(this.employee_selected.indexOf(item.id), 1);
+      let delete_index = -1;
+      for (let i in this.employee_selected_list) {
+        if (this.employee_selected.indexOf(this.employee_selected_list[i].id) < 0) {
+          delete_index = i;
+        }
+      }
+      if (delete_index >= 0) {
+        for (let i in this.list) {
+          if (this.list[i].id == item.id) {
+            this.$set(this.list[i], 'checked', false);
+          }
+        }
+        for (let i in this.employee_selected_list) {
+          if (this.employee_selected_list[i].id == item.id) {
+            this.employee_selected_list.splice(i, 1);
+          }
+        }
+      }
+    },
+    //选择人员
+    select_employee(item) {
+      if (item.checked) {
+        item.checked = false;
+        this.employee_cancel(item);
+      } else {
+        if (!this.multi) {
+          this.employee_selected = [];
+          this.employee_selected_list = [];
+          for (let i in this.list) {
+            this.$set(this.list[i], 'checked', false);
+          }
+        }
+        if (this.max > 0 && this.employee_selected.length == this.max && this.multi) {
+          this.$message.error('最多只能选择' + this.max + '人');
+          return false;
+        }
+        this.employee_selected.push(item.id);
+        this.employee_selected_list.push({ id: item.id, name: item.name, img_url: item.img_url });
+        item.checked = true;
+      }
+    },
+
+    //清空
+    clear_data() {
+      this.checked = false;
+      this.employee_selected = [];
+      this.employee_selected_list = [];
+      this.dept_selected_list = [];
+      for (let i in this.list) {
+        this.$set(this.list[i], 'checked', false);
+      }
+      for (let i in this.dept_list) {
+        this.$set(this.dept_list[i], 'checked', false);
+      }
+      for (let i in this.dept_list_all) {
+        this.$set(this.dept_list_all[i], 'checked', false);
+      }
+    },
+    //关闭||清空数据
+    close() {
+      this.$emit('update:visible', false);
+      if (this.close_clear_data) {
+        this.checked = false;
+        this.keyword='';
+        this.employee_selected = [];
+        this.employee_selected_list = [];
+        this.dept_selected_list = [];
+        this.pid_list_arr=[];
+        for (let i in this.list) {
+          this.$set(this.list[i], 'checked', false);
+        }
+        for (let i in this.dept_list) {
+          this.$set(this.dept_list[i], 'checked', false);
+        }
+        for (let i in this.dept_list_all) {
+          this.$set(this.dept_list_all[i], 'checked', false);
+        }
+      }
+    },
+    // 确定
+    confirm() {
+      if(this.isRequired){
+        if(this.employee_selected_list.length==0){
+           this.$message.error("请选择人员");
+           return false
+        }
+      }
+      this.$emit('confirm', {
+        employee: this.employee_selected_list,
+        dept: this.dept_selected_list
+      });
+      this.close();
+    },
+    // 获取部门
+    get_dept_list() {
+      this.$http('get', '/api/department/tree', '', 'v2').then(res => {
+        var list = res.data.data.list;
+        var dept_list = [];
+        // 排除部门
+        if (this.dept_not_select.length > 0) {
+          dept_list = list.filter(item => {
+            return this.dept_not_select.indexOf(item.id) == -1;
+          });
+        } else {
+          dept_list = list;
+        }
+        dept_list = this.getTreeData(dept_list); //过滤children
+        //默认选中部门
+        if (this.dept_selected_list.length > 0) {
+          this.dept_selected_list.forEach(item => {
+            this.setDeptChecked(item.dept_id, dept_list);
+          });
+        }
+        this.dept_list = dept_list;
+        this.dept_list_all = this.dept_list;
+      });
+    },
+    //设置默认部门
+    setDeptChecked(id, arr) {
+      for (let i = 0; i < arr.length; i++) {
+        if (id == arr[i].id) {
+          arr[i].checked = true;
+          break;
+        } else if (arr[i].children) {
+          this.setDeptChecked(id, arr[i].children);
+        }
+      }
+    },
+    getTreeData(data) {
+      for (var i = 0; i < data.length; i++) {
+        data[i].checked = false;
+        if (data[i].children.length < 1) {
+          // children若为空数组,则将children设为undefined
+          data[i].children = undefined;
+        } else {
+          // children若不为空数组,则继续 递归调用 本方法
+          this.getTreeData(data[i].children);
+        }
+      }
+      return data;
+    },
+
+    // 默认选择中的人勾上
+    parse_list(data) {
+      let _list = [];
+      data.map(item => {
+        item['checked'] = false;
+        for (var i in this.employee_selected_list) {
+          //判断传进来的员工是否是员工集合里的,是就设为已点击状态
+          if (this.employee_selected_list[i].id == item.id) {
+            item['checked'] = true;
+          }
+        }
+        if (item.img_url == '') {
+          item.img_url = 'static/images/head_default.png';
+        }
+      });
+      this.searchBox = data;
+      this.list = data;
+    },
+    //获取人员
+    get_user_list() {
+      this.table_loading = true;
+      this.$http('get', '/api/employee/index', { dept_id: this.dept_select_id, keywords: this.keyword, page: 1, page_size: 2000, child:this.child? '1':'0' }, 'v2')
+        .then(res => {
+          let list = this.filtration(res.data.data.list);
+          // 当有指定显示列表时
+          if (this.user_employee_list) {
+            var employee_list = this.employee_list;
+            var userData = [];
+            list.map(item => {
+              // 列表数据是否是自己的管理范围
+              employee_list.map(item2 => {
+                if (item.id == item2.id) {
+                  userData.push(item);
+                }
+              });
+            });
+            this.parse_list(userData);
+          } else {
+            // 没有指定人员列表
+            this.parse_list(list);
+          }
+        })
+        .finally(() => {
+          this.table_loading = false;
+        });
+    },
+    // 过滤各种条件:如:自己,创始人,只显示管理者等。。。
+    filtration(data) {
+      var list = data;
+      // 去除已经离职的人
+      for (let i = 0; i < list.length; i++) {
+        if (list[i].status == 2) {
+          list.splice(i, 1);
+          i--
+        }
+      }
+      var managerList = []; // 管理者列表
+      // 只显示管理者
+      if (this.is_manager_only) {
+        var isManager;
+        list.map(item => {
+          isManager = false;
+          item.employee_detail.role_list.map(item2 => {
+            if (item2.name == 'creator' || item2.name == 'point_manager' || item2.name == 'dept_manager' || item2.name == 'admin') {
+              isManager = true;
+            }
+          });
+          if (isManager) {
+            managerList.push(item);
+          }
+        });
+        list = managerList;
+      }
+      // 过滤自己
+      if (!this.include_self) {
+        const currUserId = this.$store.getters.user_info.id;
+        for (let i = 0; i < list.length; i++) {
+          if (list[i].id == currUserId) {
+            list.splice(i, 1);
+            i--
+          }
+        }
+      }
+      // 过滤创始人
+      if (this.is_filtration_creator) {
+        for (let i = 0; i < list.length; i++) {
+          if (list[i].is_creator == 1) {
+            list.splice(i,1);
+            i--
+          }
+        }
+      }
+      //过滤指定人员[]
+      if (this.employee_not_select.length > 0) {
+        for (let i = 0; i < list.length; i++) {
+          if (this.employee_not_select.indexOf(list[i].id) >= 0) {
+            list.splice(i, 1);
+            i--
+          }
+        }
+      }
+      return list;
+    }
+  },
+  created() {}
+};
+</script>
+
+<style scoped lang="scss">
+.showCheckbox .isCheckbox{
+   height: 7px;
+   width: 7px;
+   background-color: #26A2FF;
+   display: inline-block;
+   border-radius: 2px;
+   line-height: 14px;
+   position: relative;
+   top: -3px;
+}
+.showCheckbox{
+  border: 1px solid #26A2FF !important;
+}
+.checkbox{
+  height: 14px;
+  width: 14px;
+  border: 1px solid #dcdfe6;
+  background: #fff;
+  border-radius: 2px;
+  position: relative;
+  box-sizing: border-box;
+  text-align: center;
+}
+.deptList {
+  padding: 12px 0;
+  border-bottom: 1px solid #f1f1f1;
+  cursor: pointer;
+}
+.employee_selector_box {
+  width: 600px;
+  padding: 20px;
+  box-sizing: border-box;
+  margin: 0 auto;
+}
+
+/* 搜索框 */
+.employee_selector_box .search {
+  margin: 0 auto;
+  width: 80%;
+  min-height: 36px;
+}
+
+.employee_selector_box .search-box button {
+  display: inline-block;
+  vertical-align: middle;
+  margin-left: 10px;
+  width: auto;
+  padding: 0;
+  background: none;
+  border-radius: 0px;
+  border: none;
+}
+/* /搜索框 */
+
+/* 左边框 */
+.employee_selector_box .choose_left {
+  padding: 8px 10px 8px 10px;
+}
+
+.employee_selector_box .choose_left .employee_cell {
+  border-bottom: 1px #f1f1f1 solid;
+}
+
+.employee_selector_box .choose_left .employee_cell_a .employee_cell {
+  border-bottom: none;
+}
+
+.employee_selector_box .choose_left .employee_checkbox {
+  padding-left: 8px;
+}
+
+.employee_selector_box .choose_left .employee_img_url {
+  padding-left: 8px;
+}
+
+.employee_selector_box .choose_left .employee_name {
+  padding-left: 8px;
+}
+
+.employee_selector_box ::v-deep .el-scrollbar__thumb {
+  width: 2px;
+  margin: 15px 0 0 6px;
+  background: #409eff;
+}
+
+/* 左边框 */
+
+/* 右边距 */
+.employee_selector_box .option-box {
+  padding: 14px 0;
+}
+
+.employee_selector_box .option-box button {
+  margin-right: 16px;
+}
+
+.employee_selector_box .choose_right {
+  padding: 8px 10px;
+}
+
+.employee_selector_box .choose_right .employee_delete .el-button {
+  transform: scale(0.5);
+  background: #c0c4cc;
+}
+
+.employee_selector_box .choose_right .employee_delete .el-button /deep/ .el-icon-close {
+  color: #fff;
+}
+
+.employee_selector_box .choose_right .employee_delete .el-button:active {
+  background: #409eff;
+}
+
+.employee_selector_box .choose_right .employee_delete .el-button:active /deep/ .el-icon-close {
+  color: #fff;
+}
+
+.employee_selector_box .choose_right .employee_cell .employee_name {
+  padding-left: 8px;
+}
+
+.employee_selector_box .choose_right .employee_cell .employee_img_url {
+  padding-left: 8px;
+}
+
+/* 右边距 */
+
+.employee_selector_box /deep/ .employee_cell {
+  padding: 8px 0;
+  border-bottom: 1px #f1f1f1 solid;
+}
+
+.employee_selector_box /deep/ .employee_cell:hover {
+  background: #ecf5ff;
+}
+
+.employee_cell {
+  display: -webkit-inline-box;
+  cursor: pointer;
+  width: 100%;
+  color: #606266;
+  padding: 8px 0;
+  background-color: transparent;
+}
+
+.employee_cell .employee_cell_clear {
+  clear: both;
+}
+
+.employee_cell .employee_img_url {
+  display: table-cell;
+  vertical-align: middle;
+  width: 30px;
+  padding-left: 0px;
+}
+
+.employee_cell .employee_img_url img {
+  width: 24px;
+  height: 24px;
+  border-radius: 50%;
+}
+
+.employee_cell .employee_checkbox {
+  display: table-cell;
+  vertical-align: middle;
+  width: 30px;
+  text-align: center;
+}
+
+.employee_cell .employee_name {
+  display: table-cell;
+  vertical-align: middle;
+  color: #606266;
+}
+
+.employee_delete {
+  display: table-cell;
+  text-align: right;
+  padding-right: 0px;
+}
+
+.employee_cell_a {
+  display: block;
+}
+
+.employee_cell_a:hover {
+  background-color: #ecf5ff;
+  border-radius: 4px;
+}
+
+.dept_child_cell {
+  display: table-cell;
+  vertical-align: middle;
+}
+
+.dept_child_cell span {
+  float: right;
+  padding-right: 8px;
+}
+
+.dept_child_cell span:hover {
+  color: #1c1c1c;
+}
+
+.dept_child_cell span:active {
+  color: #1c1c1c;
+}
+
+.scroller-box {
+  height: 440px;
+  padding-right: 0px !important;
+  background-color: #fdfdfd;
+  border: 1px solid #eee;
+  border-radius: 4px;
+  overflow: hidden;
+}
+/* .scroller-box.one{
+    height: 440px;
+  } */
+
+.col-line {
+  position: relative;
+  height: 400px;
+}
+
+.col-line:before {
+  content: ' ';
+  width: 1px;
+  height: 400px;
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  left: 50%;
+  background-color: #eee;
+}
+
+.search-box {
+  background-color: #fff;
+  padding: 14px 5px;
+  border-bottom: 1px solid #eee;
+  margin: 0 -5px;
+}
+
+.option-box {
+  padding: 5px;
+  background-color: #fff;
+  border-bottom: 1px solid #eee;
+  margin: 0 -5px;
+  text-align: right;
+}
+
+.child_btn {
+  color: #409eff;
+}
+.dept_path {
+  padding: 10px 0;
+  border-bottom: 1px solid #f1f1f1;
+  min-height: 37px;
+}
+
+.scrollbarHeight1 {
+  height: 310px;
+}
+.scrollbarHeight2 {
+  height: 350px;
+}
+</style>

+ 83 - 0
src/components/Steps.vue

@@ -0,0 +1,83 @@
+<template>
+  <div>
+    <p class="row_title">
+      审批
+      <span class="row_tips">多人审批时,以最后一人为准</span>
+    </p>
+    <div class="examine_steps">
+      <el-steps direction="vertical" :space="50">
+        <el-step v-for="(item, index) in process" :key="index" style="margin-bottom: 5px;display: -webkit-box;">
+          <template slot="icon">
+            <userImage width="36px" height="36px" fontSize="14" :img_url="item.img_url" :user_name="item.name"></userImage>
+          </template>
+          <template slot="title">
+            <div>
+              <div class="flex-box-ce" style="color: #303133;font-size:14px;margin-top:-2px;">
+                <div class="flex-1">
+                  <WWOpenData type="userName" :openid="item.name"></WWOpenData>
+                  <span style="margin: 0 5px;">
+                    <span v-if="item.remark == '待审核'" class="yellow" style="font-size:13px">待审批</span>
+                    <span v-else-if="item.remark == '审核通过'" class="green" style="font-size:13px">审批通过</span>
+                    <span v-else-if="item.remark == '审核驳回'" class="red" style="font-size:13px">审批驳回</span>
+                    <span v-else>{{ item.remark }}</span>
+                  </span>
+                  <strong style="font-weight: 500;">
+                    <span class="green point" v-show="item.review_point > 0">+{{ item.review_point }}</span>
+                    <span class="red point" v-show="item.review_point < 0">{{ item.review_point }}</span>
+                  </strong>
+                </div>
+                <span class="fontColorF" style="font-size:12px;">{{ item.time }}</span>
+              </div>
+            </div>
+          </template>
+          <template slot="description" style="">
+            <div class="fontColorB" style="margin: 5px 0;">{{ item.review_remark }}</div>
+          </template>
+        </el-step>
+      </el-steps>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'Steps',
+  props: {
+    process: {
+      type: Array,
+      default: () => {
+        return [];
+      }
+    }
+  },
+  data() {
+    return {};
+  },
+  methods: {}
+};
+</script>
+
+<style scoped="scoped" lang="scss">
+.row_title {
+  position: relative;
+  margin: 0 0 20px 0;
+  padding-top: 12px;
+  font-size: 16px;
+  color: #303133;
+  line-height: 22px;
+}
+.row_title:before {
+  position: absolute;
+  top: 0;
+  content: ' ';
+  width: 100%;
+  border-top: 1px #f8f8f8 solid;
+}
+.el-row {
+  margin-bottom: 10px;
+  font-size: 14px;
+  .el-col-4 {
+    color: #606266;
+  }
+}
+</style>

+ 5 - 3
src/components/deptData.vue

@@ -5,14 +5,14 @@
     @click="clickDept(refsName)"
     :style="deptStyle"
   >
-    <wwOpenDAta type="departmentName" :openid="toPdept"></wwOpenDAta>
+    <WWOpenData type="departmentName" :openid="toPdept"></WWOpenData>
   </div>
 </template>
 <script>
 export default {
   props: {
     refsName: {
-      type: Object,
+      type: '',
       default: ""
     },
     toPdept: {
@@ -29,7 +29,9 @@ export default {
   methods: {
     clickDept(refsNAme) {
         console.log(refsNAme)
-        refsNAme.dropDownVisible = true;
+        this.$nextTick(()=>{
+          refsNAme.dropDownVisible = true;
+        })
     }
   }
 };

+ 13 - 5
src/components/user_image.vue

@@ -2,7 +2,7 @@
   <div>
     <el-image 
       v-if="info.img_url"
-      :src="info.img_url"
+      :src="info.img_url == defaultImg() ? replaceImg() : info.img_url"
       :style="{width: width, height: height}"
       style="border-radius: 50%"
       fit="fill"
@@ -11,9 +11,8 @@
         <i class="el-icon-picture"></i>
       </div>
     </el-image>
-    <!-- <ww-open-data v-if="info.img_url" type="userAvatarUrl" :openid="info.img_url"></ww-open-data> -->
     <span class="img_round" v-else>
-      <div class="user_name_div" :style="{width: width, height: height,lineHeight: height, fontSize: fontSize + 'px'}"><wwOpenDAta type="userName" :openid="user_name"></wwOpenDAta></div>
+      <div class="user_name_div" :style="{width: width, height: height,lineHeight: height, fontSize: fontSize + 'px'}"><WWOpenData type="userName" :openid="user_name"></WWOpenData></div>
       <div class="user_img_bg" :style="{width: width, height: height}" ></div>
     </span>
   </div>
@@ -44,7 +43,7 @@
       },
       fontSize:{
         type: String,
-        default: '16'
+        default: '14'
       }
     },
     watch:{
@@ -104,7 +103,14 @@
             this.name = this.info.name
           }
         }
-      }
+      },
+      defaultImg(){
+        return "https://rescdn.qqmail.com/node/wwmng/wwmng/style/images/independent/DefaultAvatar$73ba92b5.png"
+      },
+      replaceImg(){
+        // return 'static/images/gttx'+ Math.round(Math.random()*5) +'.jpg'
+        return 'static/images/default5.png'
+      },
     },
     // 组件挂载完成
     mounted() {
@@ -127,6 +133,8 @@
     z-index: 1;
     text-align: center;
     color: #fff;
+    white-space:nowrap;
+    overflow: hidden;
   }
   .logo_img{
     border-radius: 50%;

+ 1 - 1
src/components/wxOpendata.vue

@@ -3,7 +3,7 @@
 </template>
 <script>
 export default {
-  name: "wwOpenDAta",
+  name: "WWOpenData",
   props: ["type", "openid"],
   watch: {
     openid(item) {

+ 1 - 20
src/icons/svg/employee_table_icon.svg

@@ -1,20 +1 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 23.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
-<style type="text/css">
-	.st0{fill:#909399;}
-</style>
-<title>编组</title>
-<desc>Created with Sketch.</desc>
-<g>
-	<g id="组织架构" transform="translate(2.000000, 2.000000)">
-		<path id="形状结合" class="st0" d="M626.4,83.3c42.8,0,77.6,34.7,77.6,77.6v155.2c0,42.8-34.7,77.6-77.6,77.6l-77.6,0v77.6
-			l196.5,0c18.6,0,33.9,15,36,34.3l0.2,4.5l0,116.4l77.6,0c42.8,0,77.6,34.7,77.6,77.6v155.2c0,42.8-34.7,77.6-77.6,77.6H626.4
-			c-42.8,0-77.6-34.7-77.6-77.6V703.9c0-42.8,34.7-77.6,77.6-77.6l82.7,0l0-77.6H310.9l0,77.6l82.8,0c42.8,0,77.6,34.7,77.6,77.6
-			v155.2c0,42.8-34.7,77.6-77.6,77.6H160.9c-42.8,0-77.6-34.7-77.6-77.6V703.9c0-42.8,34.7-77.6,77.6-77.6l77.6,0l0-116.4
-			c0-19.9,14-36.3,32-38.5l4.2-0.3l196.5,0v-77.6l-77.5,0c-42.8,0-77.6-34.7-77.6-77.6V160.9c0-42.8,34.7-77.6,77.6-77.6H626.4z
-			 M393.6,703.9H160.9v155.2h232.7V703.9z M859.1,703.9H626.4v155.2h232.7V703.9z M626.4,160.9H393.6v155.2h232.7V160.9z"/>
-	</g>
-</g>
-</svg>
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1623986171396" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10102" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M628.4 85.3c42.8 0 77.6 34.7 77.6 77.6v155.2c0 42.8-34.7 77.6-77.6 77.6h-77.6v77.6h196.5c18.6 0 33.9 15 36 34.3l0.2 4.5v116.4h77.6c42.8 0 77.6 34.7 77.6 77.6v155.2c0 42.8-34.7 77.6-77.6 77.6H628.4c-42.8 0-77.6-34.7-77.6-77.6V705.9c0-42.8 34.7-77.6 77.6-77.6h82.7v-77.6H312.9v77.6h82.8c42.8 0 77.6 34.7 77.6 77.6v155.2c0 42.8-34.7 77.6-77.6 77.6H162.9c-42.8 0-77.6-34.7-77.6-77.6V705.9c0-42.8 34.7-77.6 77.6-77.6h77.6V511.9c0-19.9 14-36.3 32-38.5l4.2-0.3h196.5v-77.6h-77.5c-42.8 0-77.6-34.7-77.6-77.6v-155c0-42.8 34.7-77.6 77.6-77.6h232.7zM395.6 705.9H162.9v155.2h232.7V705.9z m465.5 0H628.4v155.2h232.7V705.9z m-232.7-543H395.6v155.2h232.7V162.9z" p-id="10103"></path></svg>

+ 1 - 22
src/icons/svg/fixed_integral_icon.svg

@@ -1,22 +1 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 23.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
-<style type="text/css">
-	.st0{fill:#909399;}
-</style>
-<title>编组</title>
-<desc>Created with Sketch.</desc>
-<g id="自动积分" transform="translate(1.000000, 2.000000)">
-	<path id="路径备份" class="st0" d="M379.9,160.2C437.6,60,581.3,57.5,639.4,154.1l4.2,7.4l0.4,0.8l0,0l51.7,103.3
-		c6.2,13.5,20.9,24.4,39.4,28.7l6.3,1.2L855,311.9c117.1,15.8,165.1,153,86.6,239l-5.4,5.7l-82.8,76.7
-		c-12.6,12.2-19.3,28.6-18.8,43.7l0.6,5.6L854,793c19,114.6-98.4,199.8-204.1,153.6l-6.9-3.2l-101.7-50.7c-16.8-8.1-34.8-9-51.4-3
-		l-6.1,2.6l-104.2,52.8c-105,51.8-225-29.8-211.8-143.2l1-7.4l19-111.7c3.2-15.3-1.3-30.5-13.3-43L85.9,556
-		c-85-82.1-40.7-219.3,73.7-242.6l7.7-1.4l114-16.4c18.5-2.7,33.9-12.2,43.1-25.8l3.1-5.3L379.9,160.2z M568.2,201.5
-		c-22.3-42.1-82.9-43.9-109.8-6l-3.3,5.2l-51.3,102.5c-20.3,39.2-57.4,66.4-101.3,75.4l-8.9,1.5L180,396.4
-		c-49,7.6-68.6,59.8-38.9,93.9l3.8,4l81.5,77.2c35.5,29.7,52.9,74.7,46.7,118.8L253,808.6c-7.5,45.5,39.1,80.1,83.3,62.5l5.1-2.3
-		l104.6-53c39.5-19.1,83.7-20.4,124.3-3.6l8.6,3.9l102,50.9c44.4,21.9,92.9-10.2,89.5-54.7l-0.6-5.2L751,696.7
-		c-6.9-42.1,7.1-85.8,37.1-118.5l6.7-6.8l82.3-76.3c33.6-33.4,17.3-87.5-28.3-97.6l-5.6-1L729.1,380c-45.7-6.6-86-32.5-106.5-69.8
-		L568.2,201.5z"/>
-</g>
-</svg>
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1623986604334" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10611" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M380.9 162.2C438.6 62 582.3 59.5 640.4 156.1l4.2 7.4 0.4 0.8 51.7 103.3c6.2 13.5 20.9 24.4 39.4 28.7l6.3 1.2L856 313.9c117.1 15.8 165.1 153 86.6 239l-5.4 5.7-82.8 76.7c-12.6 12.2-19.3 28.6-18.8 43.7l0.6 5.6L855 795c19 114.6-98.4 199.8-204.1 153.6l-6.9-3.2-101.7-50.7c-16.8-8.1-34.8-9-51.4-3l-6.1 2.6-104.2 52.8c-105 51.8-225-29.8-211.8-143.2l1-7.4 19-111.7c3.2-15.3-1.3-30.5-13.3-43L86.9 558c-85-82.1-40.7-219.3 73.7-242.6l7.7-1.4 114-16.4c18.5-2.7 33.9-12.2 43.1-25.8l3.1-5.3 52.4-104.3z m188.3 41.3c-22.3-42.1-82.9-43.9-109.8-6l-3.3 5.2-51.3 102.5c-20.3 39.2-57.4 66.4-101.3 75.4l-8.9 1.5L181 398.4c-49 7.6-68.6 59.8-38.9 93.9l3.8 4 81.5 77.2c35.5 29.7 52.9 74.7 46.7 118.8L254 810.6c-7.5 45.5 39.1 80.1 83.3 62.5l5.1-2.3 104.6-53c39.5-19.1 83.7-20.4 124.3-3.6l8.6 3.9 102 50.9c44.4 21.9 92.9-10.2 89.5-54.7l-0.6-5.2L752 698.7c-6.9-42.1 7.1-85.8 37.1-118.5l6.7-6.8 82.3-76.3c33.6-33.4 17.3-87.5-28.3-97.6l-5.6-1L730.1 382c-45.7-6.6-86-32.5-106.5-69.8l-54.4-108.7z" p-id="10612"></path></svg>

+ 1 - 16
src/icons/svg/rule_manage_icon.svg

@@ -1,16 +1 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 23.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
-<style type="text/css">
-	.st0{fill:#909399;}
-</style>
-<title>编组</title>
-<desc>Created with Sketch.</desc>
-<g>
-	<path class="st0" d="M806.2,85.3H626.5H262.7C181.2,85.6,128,132,128,170.7V640v85.3v128c0,38.9,53.2,85.3,134.7,85.3h498.5
-		c81.6,0,134.7-46.4,134.7-85.3V170.7C896,134,847.5,89.3,806.2,85.3z M640,170.7v213.1l-41.9-31.5c-25.2-18.9-60.6-19-85.9-0.1
-		l-42.9,32.1V170.7H640z M806.2,853.3H217.8V170.7H384V427c0,24.4,13.5,46.3,35.3,57.2c9.1,4.6,18.9,6.8,28.7,6.8
-		c13.5,0,26.9-4.3,38.2-12.8l68.9-51.5l67.9,51c19.5,14.6,45.1,17,67,6.1c21.8-10.9,35.4-32.8,35.4-57.2v-256h80.8V853.3z"/>
-</g>
-</svg>
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1623986590282" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10357" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M806.2 85.3H262.7C181.2 85.6 128 132 128 170.7v682.6c0 38.9 53.2 85.3 134.7 85.3h498.5c81.6 0 134.7-46.4 134.7-85.3V170.7c0.1-36.7-48.4-81.4-89.7-85.4zM640 170.7v213.1l-41.9-31.5c-25.2-18.9-60.6-19-85.9-0.1l-42.9 32.1V170.7H640z m166.2 682.6H217.8V170.7H384V427c0 24.4 13.5 46.3 35.3 57.2 9.1 4.6 18.9 6.8 28.7 6.8 13.5 0 26.9-4.3 38.2-12.8l68.9-51.5 67.9 51c19.5 14.6 45.1 17 67 6.1 21.8-10.9 35.4-32.8 35.4-57.2v-256h80.8v682.7z" p-id="10358"></path></svg>

+ 1 - 19
src/icons/svg/set_basics_icon.svg

@@ -1,19 +1 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 23.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
-<style type="text/css">
-	.st0{fill-rule:evenodd;clip-rule:evenodd;fill:#909399;}
-</style>
-<title>编组</title>
-<desc>Created with Sketch.</desc>
-<g id="基础设置" transform="translate(2.000000, 4.000000)">
-	<path id="形状结合" class="st0" d="M339.3,678.7c31.6,0,59.2,17.2,73.9,42.7l480.8,0c23.6,0,42.7,19.1,42.7,42.7
-		s-19.1,42.7-42.7,42.7l-480.8,0c-14.8,25.5-42.3,42.6-73.9,42.6s-59.1-17.1-73.9-42.6l-139.4,0c-23.6,0-42.7-19.1-42.7-42.7
-		s19.1-42.7,42.7-42.7l139.4,0C280.2,695.8,307.7,678.7,339.3,678.7z M680.7,422.7c31.6,0,59.2,17.2,73.9,42.7l139.4,0
-		c23.6,0,42.7,19.1,42.7,42.7s-19.1,42.7-42.7,42.7l-139.4,0c-14.8,25.5-42.3,42.6-73.9,42.6s-59.1-17.1-73.9-42.6l-480.8,0
-		c-23.6,0-42.7-19.1-42.7-42.7s19.1-42.7,42.7-42.7l480.8,0C621.5,439.8,649.1,422.7,680.7,422.7z M339.3,166.7
-		c31.6,0,59.2,17.2,73.9,42.7l480.8,0c23.6,0,42.7,19.1,42.7,42.7s-19.1,42.7-42.7,42.7l-480.8,0c-14.8,25.5-42.3,42.6-73.9,42.6
-		s-59.1-17.1-73.9-42.6l-139.4,0c-23.6,0-42.7-19.1-42.7-42.7s19.1-42.7,42.7-42.7l139.4,0C280.2,183.8,307.7,166.7,339.3,166.7z"/>
-</g>
-</svg>
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1623986596579" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10484" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M341.3 682.7c31.6 0 59.2 17.2 73.9 42.7H896c23.6 0 42.7 19.1 42.7 42.7s-19.1 42.7-42.7 42.7H415.2c-14.8 25.5-42.3 42.6-73.9 42.6s-59.1-17.1-73.9-42.6H128c-23.6 0-42.7-19.1-42.7-42.7s19.1-42.7 42.7-42.7h139.4c14.8-25.6 42.3-42.7 73.9-42.7z m341.4-256c31.6 0 59.2 17.2 73.9 42.7H896c23.6 0 42.7 19.1 42.7 42.7s-19.1 42.7-42.7 42.7H756.6c-14.8 25.5-42.3 42.6-73.9 42.6s-59.1-17.1-73.9-42.6H128c-23.6 0-42.7-19.1-42.7-42.7s19.1-42.7 42.7-42.7h480.8c14.7-25.6 42.3-42.7 73.9-42.7z m-341.4-256c31.6 0 59.2 17.2 73.9 42.7H896c23.6 0 42.7 19.1 42.7 42.7s-19.1 42.7-42.7 42.7H415.2c-14.8 25.5-42.3 42.6-73.9 42.6s-59.1-17.1-73.9-42.6H128c-23.6 0-42.7-19.1-42.7-42.7s19.1-42.7 42.7-42.7h139.4c14.8-25.6 42.3-42.7 73.9-42.7z" p-id="10485"></path></svg>

+ 1 - 27
src/icons/svg/set_role_icon.svg

@@ -1,27 +1 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 23.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
-<style type="text/css">
-	.st0{fill-rule:evenodd;clip-rule:evenodd;fill:#909399;}
-</style>
-<title>编组</title>
-<desc>Created with Sketch.</desc>
-<g>
-	<g>
-		<path class="st0" d="M338.1,853.3H213.3l-5-0.3c-21.2-2.5-37.7-20.5-37.7-42.4V213.3l0.3-5c2.5-21.2,20.5-37.7,42.4-37.7H768
-			l5,0.3c21.2,2.5,37.7,20.5,37.7,42.4V297l0.3,5c2.5,21.2,20.5,37.7,42.4,37.7c23.6,0,42.7-19.1,42.7-42.7v-83.7l-0.2-7.5
-			C891.9,138.6,836.2,85.3,768,85.3H213.3l-7.5,0.2c-67.2,3.9-120.5,59.6-120.5,127.8v597.3l0.2,7.5
-			c3.9,67.2,59.6,120.5,127.8,120.5h124.8l5-0.3c21.2-2.5,37.7-20.5,37.7-42.4C380.8,872.4,361.7,853.3,338.1,853.3z"/>
-		<path class="st0" d="M822.7,699.5h-64.5c53.5-22.2,91.2-74.9,91.2-136.1V416H701.2C619.5,416,553,482.2,553,563.5
-			c0,61.2,37.7,113.8,91.2,136.1h-64.5c-66.8,0-121.1,54-121.1,120.5v55.9c0,40,32.7,72.6,72.9,72.6h340.3
-			c39.6,0,71.9-32.5,71.9-72.6V820C943.8,753.6,889.5,699.5,822.7,699.5z M767.9,564.4c0,37.1-29.2,66.2-66.6,66.2
-			s-66.7-29.1-66.7-66.2c0-36.5,29.9-66.2,66.7-66.2h66.6V564.4z M540.2,821c0-22,17.4-39.2,39.5-39.2h243
-			c22.2,0,39.5,17.2,39.5,39.2v47.2h-322V821z"/>
-		<path class="st0" d="M725.3,298.7c0-23.6-19.1-42.7-42.7-42.7h-384c-23.6,0-42.7,19.1-42.7,42.7c0,23.6,19.1,42.7,42.7,42.7h384
-			C706.2,341.3,725.3,322.2,725.3,298.7z"/>
-		<path class="st0" d="M298.7,426.7c-23.6,0-42.7,19.1-42.7,42.7s19.1,42.7,42.7,42.7h170.7c23.6,0,42.7-19.1,42.7-42.7
-			s-19.1-42.7-42.7-42.7H298.7z"/>
-	</g>
-</g>
-</svg>
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1623986577874" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10229" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M338.1 853.3H213.3l-5-0.3c-21.2-2.5-37.7-20.5-37.7-42.4V213.3l0.3-5c2.5-21.2 20.5-37.7 42.4-37.7H768l5 0.3c21.2 2.5 37.7 20.5 37.7 42.4V297l0.3 5c2.5 21.2 20.5 37.7 42.4 37.7 23.6 0 42.7-19.1 42.7-42.7v-83.7l-0.2-7.5c-4-67.2-59.7-120.5-127.9-120.5H213.3l-7.5 0.2c-67.2 3.9-120.5 59.6-120.5 127.8v597.3l0.2 7.5c3.9 67.2 59.6 120.5 127.8 120.5h124.8l5-0.3c21.2-2.5 37.7-20.5 37.7-42.4 0-23.5-19.1-42.6-42.7-42.6z" p-id="10230"></path><path d="M822.7 699.5h-64.5c53.5-22.2 91.2-74.9 91.2-136.1V416H701.2C619.5 416 553 482.2 553 563.5c0 61.2 37.7 113.8 91.2 136.1h-64.5c-66.8 0-121.1 54-121.1 120.5V876c0 40 32.7 72.6 72.9 72.6h340.3c39.6 0 71.9-32.5 71.9-72.6v-56c0.1-66.4-54.2-120.5-121-120.5z m-54.8-135.1c0 37.1-29.2 66.2-66.6 66.2s-66.7-29.1-66.7-66.2c0-36.5 29.9-66.2 66.7-66.2h66.6v66.2zM540.2 821c0-22 17.4-39.2 39.5-39.2h243c22.2 0 39.5 17.2 39.5 39.2v47.2h-322V821zM725.3 298.7c0-23.6-19.1-42.7-42.7-42.7h-384c-23.6 0-42.7 19.1-42.7 42.7s19.1 42.7 42.7 42.7h384c23.6-0.1 42.7-19.2 42.7-42.7zM298.7 426.7c-23.6 0-42.7 19.1-42.7 42.7s19.1 42.7 42.7 42.7h170.7c23.6 0 42.7-19.1 42.7-42.7s-19.1-42.7-42.7-42.7H298.7z" p-id="10231"></path></svg>

+ 8 - 6
src/main.js

@@ -9,14 +9,14 @@ import axios_user from '@/utils/request-user'
 import App from './App'
 import router from './router'
 import store from './store'
-import {getToken} from '@/utils/auth'
-import {supremeAuthority,authoritys} from './api/auth';
+import {getToken, getEmployeeMap} from '@/utils/auth'
+import {supremeAuthority ,authoritys , getUserData, getTypsName} from './api/auth';
 
 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 jtoken from '@/utils/Jtoken'
 
 // import VConsole from 'vconsole'
 // new VConsole()
@@ -25,8 +25,8 @@ import jtoken from '@/utils/jtoken'
 import userImage from '@/components/user_image'
 Vue.component('userImage', userImage)
 // wx通讯录
-import wwOpenDAtas from '@/components/wxOpendata'
-Vue.component('wwOpenDAta', wwOpenDAtas)
+import WWOpenDatas from '@/components/wxOpendata'
+Vue.component('WWOpenData', WWOpenDatas)
 // 选择部门的选中内容覆盖
 import deptData from '@/components/deptData.vue'
 Vue.component('deptData', deptData)
@@ -47,7 +47,9 @@ Vue.prototype.$supremeAuthority = supremeAuthority
 Vue.prototype.$authoritys = authoritys
 Vue.prototype.$wx = (window).wx; // 全局使用
 
-
+Vue.prototype.$getTypsName = getTypsName
+Vue.prototype.$getEmployeeMap = getEmployeeMap
+Vue.prototype.$userInfo = getUserData
 
 Object.keys(filters).forEach(key => {
   Vue.filter(key, filters[key])

+ 99 - 74
src/permission.js

@@ -1,13 +1,19 @@
+import Cookies from 'js-cookie'
 import router from './router'
 import store from './store'
 import Vue from 'vue'
-import { Message } from 'element-ui'
-import NProgress from 'nprogress'
-import 'nprogress/nprogress.css'
-import { getToken , removeToken } from '@/utils/auth'
-import { wxAuth } from '@/utils/wx-auth-two.js'; 
-
-NProgress.configure({ showSpinner: false })
+import {
+  Message
+} from 'element-ui'
+import {
+  cookGetToken,
+  localSetToken,
+  getToken,
+  removeToken
+} from '@/utils/auth'
+import {
+  wxAuth
+} from '@/utils/wx-auth-two.js';
 
 function hasPermission(roles, permissionRoles) {
   if (roles.indexOf('admin') >= 0) return true
@@ -15,84 +21,103 @@ function hasPermission(roles, permissionRoles) {
   return roles.some(role => permissionRoles.indexOf(role) >= 0)
 }
 // 免登名单
-const whiteList = ['/invite_new_company', '/create_company', '/login','/noAccess' , '/loginbytoken', '/reg', '/forgetPwd', '/resetPwd', '/android', '/demo', '/swiperShow','/autoLogin' ]// no redirect whitelist
-
+const whiteList = ['/invite_new_company', '/create_company', '/login', '/loginTransfer', '/noAccess', '/loginbytoken',
+  '/reg', '/forgetPwd', '/resetPwd', '/android', '/demo', '/swiperShow', '/autoLogin'
+]
+const stopPath = ['/login', '/noAccess']
 router.beforeEach((to, from, next) => {
-  if(Vue.$httpRequestList.length>0){        //强行中断时才向下执行
-    Vue.$httpRequestList.forEach(item=>{
-        item('interrupt');//给个标志,中断请求
+  if (Vue.$httpRequestList.length > 0) { //强行中断时才向下执行
+    Vue.$httpRequestList.forEach(item => {
+      item('interrupt'); //给个标志,中断请求
     })
   }
-  // NProgress.start()
-  if (getToken()) {
-    store.dispatch('get_point_types').then((res) => {})
-    store.dispatch('get_site_info').then((res) => {})
-    store.dispatch('get_employee_map').then((res) => {}) // 取得员工列表的地图
-    store.dispatch('get_dept_tree').then((res) => {})// 获取部门树型结构列表
-    if (to.path === '/login') {
-      next({ path: '/' })
-      // NProgress.done()
+  if (stopPath.indexOf(to.path) !== -1) {
+    next()
+  } else {
+    if (cookGetToken()) {
+      if (getToken() !== cookGetToken()) {
+        store.commit('SET_DELETE_USER', {})
+        store.commit('SET_TOKEN', cookGetToken())
+        localStorage.setItem('Admin-Token', cookGetToken())
+        init(to, next)
+      } else {
+        init(to, next)
+      }
+    } else if (getToken()) {
+      if (!store.state.user.token) store.commit("SET_TOKEN", getToken());
+      init(to, next)
     } else {
-      if (!store.getters.user_info.id) { // 判断当前用户是否已拉取完user_info信息
-        store.dispatch('GetUserInfo').then(res => { // 拉取user_info
-          console.log(res)
-          // 设置title
-          document.title = ''
-          const mo_list = []
-          res.data['mo_list'] = []
-          for (const i in mo_list) {
-            res.data['mo_list'].push(mo_list[i].code)
-          }
-          const roles = ['admin']
-          store.dispatch('GenerateRoutes', { roles }).then(() => {
-            // 增加动态权限列表,在这里发送一个请求,得到路由
-            const addRouters = []
-            for (const item in store.getters.addRouters) {
-              const obj = []
-              for (const ritem in store.getters.addRouters[item].children) {
-                if (res.data.mo_list.indexOf(store.getters.addRouters[item].children[ritem].name) >= 0 || store.getters.addRouters[item].children[ritem].hidden === true || store.getters.addRouters[item].children[ritem].common === true) {
-                  obj.push(store.getters.addRouters[item].children[ritem])
-                }
+      if (whiteList.indexOf(to.path) !== -1 || window.location.href.indexOf('loginbytoken/') !== -1) { // 在免登录白名单,直接进入
+        next()
+      } else {
+        window.location.href = process.env.BASE_API //直接重新授权
+      }
+    }
+  }
+})
+
+function init(to, next) {
+  if (to.path === '/login') {
+    next({
+      path: '/'
+    })
+  } else {
+    if (!store.getters.user_info.id) { // 判断当前用户是否已拉取完user_info信息
+      store.dispatch('GetUserInfo').then(res => { // 拉取user_info
+        // 设置title
+        document.title = ''
+        const mo_list = []
+        res.data['mo_list'] = []
+        for (const i in mo_list) {
+          res.data['mo_list'].push(mo_list[i].code)
+        }
+        const roles = ['admin']
+        store.dispatch('GenerateRoutes', {
+          roles
+        }).then(() => {
+          // 增加动态权限列表,在这里发送一个请求,得到路由
+          const addRouters = []
+          for (const item in store.getters.addRouters) {
+            const obj = []
+            for (const ritem in store.getters.addRouters[item].children) {
+              if (res.data.mo_list.indexOf(store.getters.addRouters[item].children[ritem].name) >= 0 || store
+                .getters.addRouters[item].children[ritem].hidden === true || store.getters.addRouters[item]
+                .children[ritem].common === true) {
                 obj.push(store.getters.addRouters[item].children[ritem])
               }
-              if (obj.length > 0) {
-                const _R = store.getters.addRouters[item]
-                _R['children'] = obj
-                addRouters.push(_R)
-              }
+              obj.push(store.getters.addRouters[item].children[ritem])
+            }
+            if (obj.length > 0) {
+              const _R = store.getters.addRouters[item]
+              _R['children'] = obj
+              addRouters.push(_R)
             }
-            router.addRoutes(addRouters) // 动态添加可访问路由表
-            next({ ...to, replace: true }) // hack方法 确保addRoutes已完成 ,set the replace: true so the navigation will not leave a history record
-          })
-        }).catch((err) => {
-          // console.log(err)
-          // 登出
-          // store.dispatch('LogOut')
+          }
+          router.addRoutes(addRouters) // 动态添加可访问路由表
+          next({...to,replace: true}) // hack方法 确保addRoutes已完成 ,set the replace: true so the navigation will not leave a history record
         })
-      } else {
-        // 没有动态改变权限的需求可直接next() 删除下方权限判断 ↓
-        if (hasPermission(store.getters.roles, to.meta.roles)) {
-          // removeToken()
-          wxAuth('',next);
-          // next()
-          // NProgress.start()
-        } else {
-          next({ path: '/401', replace: true, query: { noGoBack: true }})
-          // NProgress.start()
+      }).catch((err) => {
+        if (getToken()) {
+          next('/login')
         }
-      }
-    }
-  } else {
-    if (whiteList.indexOf(to.path) !== -1 || window.location.href.indexOf('loginbytoken/') !== -1) { // 在免登录白名单,直接进入
-      next()
+      })
     } else {
-      next('/login') // 否则全部重定向到登录页
-      // NProgress.done()
+      // 没有动态改变权限的需求可直接next() 删除下方权限判断 ↓
+      if (hasPermission(store.getters.roles, to.meta.roles)) {
+        wxAuth('', next);
+      } else {
+        next({
+          path: '/401',
+          replace: true,
+          query: {
+            noGoBack: true
+          }
+        })
+      }
     }
   }
-})
+}
 
 router.afterEach((to, from) => {
-  // console.log(to)
-  // NProgress.done() // finish progress bar
-})
+
+})

+ 8 - 8
src/router/index.js

@@ -21,10 +21,16 @@ export const constantRouterMap = [
   {
     path: '/login',
     name: 'login',
-    component: () => import('@/views/login/index1'),
+    component: () => import('@/views/login/index3'),
     hidden: true,
     meta: { pushindex : true},
   },
+  {
+    path: '/loginTransfer',
+    name: 'loginTransfer',
+    component: () => import('@/views/login/loginTransfer'),
+    hidden: true,
+  },
   // {
   //   path: '/login',
   //   name: 'login',
@@ -156,7 +162,7 @@ export const asyncRouterMap = [
         path: '/performance',
         name: 'performance',
         component: () => import('@/views/workbench/workbench'),
-        meta: { title: '绩效分', icon: 'jxf', show: true, noCache: true },
+        meta: { title: '绩效分', icon: 'jxf', show: true, noCache: true , jurisdiction:['creator','point_manager','admin','dept_manager','employee'] },
         alwaysShow: true, // 一直显示根路由
         children: [
           {
@@ -438,12 +444,6 @@ export const asyncRouterMap = [
         component: () => import('@/views/setting/set_role'),
         meta: { title: '角色权限', icon: 'set_role_icon', noCache: true }
       },
-      // {
-      //   path: '/integral_rule',
-      //   name: 'integral_rule',
-      //   component: () => import('@/views/setting/integral_rule'),
-      //   meta: { title: '积分规则', icon: 'workCenter', noCache: true }
-      // },
       {
         path: '/set_basics',
         name: 'set_basics',

+ 108 - 108
src/store/modules/user.js

@@ -1,5 +1,6 @@
 import { loginByUsername, getUserInfo, loginByDemo, get_employee_map, get_point_types, get_site_info, get_dept_tree } from '@/api/login'
 import { getToken, setToken, removeToken, removeAllToken } from '@/utils/auth'
+import router from '@/router'
 const user = {
   state: {
     user: '',
@@ -84,14 +85,67 @@ const user = {
     },
     SET_SITEINFO: (state, data) => {
       state.site_info = data
-    }
+    },
+    SET_DELETE_USER (state, data) {
+      if(state) state = data
+    },
   },
 
   actions: {
-    // 用户名登录
+    // 人员列表
+    get_employee_map({ commit }) {
+      return new Promise((resolve, reject) => {
+        // let employee_map = employee_map = JSON.parse(localStorage.getItem('SET_EMPLOYEE_MAP'))
+        // if (employee_map) {
+        //   commit('SET_EMPLOYEE_MAP', employee_map)
+        //   resolve(employee_map)
+        // } else {
+
+          get_employee_map().then(response => {
+            if (response.data.code == 1) {
+              const data = {}
+              for (const i in response.data.data.list) {
+                data[response.data.data.list[i].id] = response.data.data.list[i]
+              }
+              commit('SET_EMPLOYEE_MAP', data)
+              if (window.plus) {
+                plus.storage.setItem('SET_EMPLOYEE_MAP', JSON.stringify(data))
+              } else {
+                localStorage.setItem('SET_EMPLOYEE_MAP', JSON.stringify(data))
+              }
+            }
+            resolve([])
+          }).catch(error => {
+            reject(error)
+          })
+
+        // }
+      })
+    },
+    // 公司信息
+    get_site_info({ state, commit, rootState }) {
+      return new Promise((resolve, reject) => {
+        // const site_info = JSON.parse(localStorage.getItem('site_info'))
+        // if (site_info) {
+        //   commit('SET_SITEINFO', site_info)
+        //   resolve(site_info)
+        // } else {
+          get_site_info().then(response => {
+            if (response.data.code == 1) {
+              commit('SET_SITEINFO', response.data.data)
+              localStorage.setItem('site_info', JSON.stringify(response.data.data))
+              resolve(response.data.data)
+            }
+          }).catch(error => {
+            reject(error)
+          })
+        // }
+      })
+    },
+    // 部门树
     get_dept_tree({ commit }) {
       return new Promise((resolve, reject) => {
-        if (!localStorage.getItem('dept_tree')) {
+        // if (!localStorage.getItem('dept_tree')) {
           get_dept_tree().then(response => {
             if (response.data.code == 1) {
               localStorage.setItem('dept_tree', JSON.stringify(response.data.data.list))
@@ -103,9 +157,36 @@ const user = {
           }).catch(error => {
             reject(error)
           })
-        }
+        // }
       })
     },
+    // 积分类型
+    get_point_types({ commit }) {
+      return new Promise((resolve, reject) => {
+        // let point_types = point_types = JSON.parse(localStorage.getItem('SET_POINT_TYPES'))
+        // if (point_types) {
+        //   commit('SET_POINT_TYPES', point_types)
+        //   resolve(point_types)
+        // } else {
+          get_point_types().then(response => {
+            if (response.data.code == 1) {
+              commit('SET_POINT_TYPES', response.data.data.list)
+              if (window.plus) {
+                plus.storage.setItem('SET_POINT_TYPES', JSON.stringify(response.data.data.list))
+              } else {
+                localStorage.setItem('SET_POINT_TYPES', JSON.stringify(response.data.data.list))
+              }
+            }
+            resolve(response.data.data.list)
+          }).catch(error => {
+            reject(error)
+          })
+        // }
+      })
+    },
+
+
+
     // 用户名登录
     LoginByUsername({ commit }, userInfo) {
       const username = userInfo.tel.trim()
@@ -142,58 +223,6 @@ const user = {
         })
       })
     },
-    get_employee_map({ commit }) {
-      return new Promise((resolve, reject) => {
-        let employee_map = null
-        if (window.plus) {
-          employee_map = JSON.parse(plus.storage.getItem('SET_EMPLOYEE_MAP'))
-        } else {
-          employee_map = JSON.parse(localStorage.getItem('SET_EMPLOYEE_MAP'))
-        }
-        if (employee_map) {
-          commit('SET_EMPLOYEE_MAP', employee_map)
-          resolve(employee_map)
-        } else {
-          get_employee_map().then(response => {
-            if (response.data.code == 1) {
-              const data = {}
-              for (const i in response.data.data.list) {
-                data[response.data.data.list[i].id] = response.data.data.list[i]
-              }
-              commit('SET_EMPLOYEE_MAP', data)
-              if (window.plus) {
-                plus.storage.setItem('SET_EMPLOYEE_MAP', JSON.stringify(data))
-              } else {
-                localStorage.setItem('SET_EMPLOYEE_MAP', JSON.stringify(data))
-              }
-            }
-            resolve([])
-          }).catch(error => {
-            reject(error)
-          })
-        }
-      })
-    },
-    get_site_info({ state, commit, rootState }) {
-      return new Promise((resolve, reject) => {
-        const site_info = JSON.parse(localStorage.getItem('site_info'))
-        if (site_info) {
-          commit('SET_SITEINFO', site_info)
-          resolve(site_info)
-        } else {
-          get_site_info().then(response => {
-            if (response.data.code == 1) {
-              // console.log(response);
-              commit('SET_SITEINFO', response.data.data)
-              localStorage.setItem('site_info', JSON.stringify(response.data.data))
-              resolve(response.data.data)
-            }
-          }).catch(error => {
-            reject(error)
-          })
-        }
-      })
-    },
 
     // 获取用户信息
     GetUserInfo({ commit, state }) {
@@ -202,51 +231,35 @@ const user = {
           if (!response.data) {
             reject('error')
           }
-          const data = response.data
-          commit('SET_ROLES', ['admin'])
-          commit('SET_NAME', data.data.user.name)
-          commit('SET_AVATAR', data.data.user.img_url)
-          commit('SET_INTRODUCTION', '')
-          commit('SET_SITEID', data.data.user.site_id)
-          commit('SET_MANAGERTYPE', 4)
-          commit('SET_USERINFO', data.data.user)
-          commit('SET_SETTINGS', {})
-          resolve(response)
+          if(response.data.code == 1){
+            if(response.data.data.user.is_official == 0){
+              router.push({
+                path: '/noAccess',
+                query: {
+                  msg: '当前用户未授权进入系统,请联系管理员为您【启用积分管理】,<br/>如需咨询客服,请到您企业专属的功道云服务群咨询'
+                }
+              })
+              return
+            }
+            const data = response.data
+            commit('SET_ROLES', ['admin'])
+            commit('SET_NAME', data.data.user.name)
+            commit('SET_AVATAR', data.data.user.img_url)
+            commit('SET_INTRODUCTION', '')
+            commit('SET_SITEID', data.data.user.site_id)
+            commit('SET_MANAGERTYPE', 4)
+            commit('SET_USERINFO', data.data.user)
+            commit('SET_SETTINGS', {})
+            resolve(response)
+          }else{
+            reject(response.data)
+          }
         }).catch(error => {
           reject(error)
         })
       })
     },
 
-    get_point_types({ commit }) {
-      return new Promise((resolve, reject) => {
-        let point_types = null
-        if (window.plus) {
-          point_types = JSON.parse(plus.storage.getItem('SET_POINT_TYPES'))
-        } else {
-          point_types = JSON.parse(localStorage.getItem('SET_POINT_TYPES'))
-        }
-        if (point_types) {
-          commit('SET_POINT_TYPES', point_types)
-          resolve(point_types)
-        } else {
-          get_point_types().then(response => {
-            if (response.data.code == 1) {
-              commit('SET_POINT_TYPES', response.data.data.list)
-              if (window.plus) {
-                plus.storage.setItem('SET_POINT_TYPES', JSON.stringify(response.data.data.list))
-              } else {
-                localStorage.setItem('SET_POINT_TYPES', JSON.stringify(response.data.data.list))
-              }
-            }
-            resolve(response.data.data.list)
-          }).catch(error => {
-            reject(error)
-          })
-        }
-      })
-    },
-
     LoginByToken({ commit }, token) {
       return new Promise((resolve, reject) => {
         commit('SET_TOKEN', token)
@@ -255,19 +268,6 @@ const user = {
         resolve(token)
       })
     },
-    // 第三方验证登录
-    // LoginByThirdparty({ commit, state }, code) {
-    //   return new Promise((resolve, reject) => {
-    //     commit('SET_CODE', code)
-    //     loginByThirdparty(state.status, state.email, state.code).then(response => {
-    //       commit('SET_TOKEN', response.data.token)
-    //       setToken(response.data.token)
-    //       resolve()
-    //     }).catch(error => {
-    //       reject(error)
-    //     })
-    //   })
-    // },
 
     // 登出
     LogOut({ commit, state }) {

+ 113 - 13
src/styles/index.scss

@@ -17,13 +17,14 @@ ul,li {
   padding: 0;
 }
 label {
-  font-weight: 700;
+  font-weight: 600;
 }
 
 html {
   height: 100%;
   box-sizing: border-box;
   overflow: hidden;
+  color: #282828;
 }
 
 #app{
@@ -195,14 +196,67 @@ code {
 .multiselect--active {
   z-index: 1000 !important;
 }
+/* 字体颜色 */
+.blue {
+	color: #26A2FF!important;
+}
+
+.red {
+	color: #F56C6C!important;
+}
+
+.yellow {
+	color: #E6A23C!important;
+}
+
+.green {
+	color: #67C23A!important;
+}
+.blue-box {
+	color: #26A2FF!important;
+  background-color: #ecf5ff!important;
+}
+
+.red-box {
+	color: #F56C6C!important;
+  background-color: #fef0f0!important;
+}
+
+.yellow-box {
+	color: #E6A23C!important;
+  background-color: #fdf6ec!important;
+}
+
+.green-box {
+	color: #67C23A!important;
+  background-color: #f0f9eb!important;
+}
+
+.fontColorZ {
+	color: #303133!important;
+}
+
+.fontColorB {
+	color: #777777 !important;
+}
+
+.fontColorF {
+	color: #909399 !important;
+}
+
+.fontColorT {
+	color: #C0C4CC!important;
+}
+
 
 /* 盒子模型 */
 .flex-box {
-  display: -webkit-box;
-  display: -moz-box;
-  display: -ms-flexbox;
-  display: -webkit-flex;
-  display: flex;
+    display: -webkit-box; /* Chrome 4+, Safari 3.1, iOS Safari 3.2+ */
+    display: -moz-box; /* Firefox 17- */
+    display: -webkit-flex; /* Chrome 21+, Safari 6.1+, iOS Safari 7+, Opera 15/16 */
+    display: -moz-flex; /* Firefox 18+ */
+    display: -ms-flexbox; /* IE 10 */
+    display: flex; /* Chrome 29+, Firefox 22+, IE 11+, Opera 12.1/17/18, Android 4.4+ */
 }
 
 /*盒子模型,竖向自适应,垂直排列  */
@@ -242,15 +296,14 @@ code {
   -moz-box-align: center;
 }
 
-/*对view中的子元素进行居中,并且位于容器的中间位置(flex-box水平;flex-box-v垂直)  */
+/*对view中的子元素进行居中,并且位于容器的中间位置水平居中 */
 .flex-v-zhu,
 .flex-h-zhu {
   justify-content: center;
   -webkit-justify-content: center;
   -webkit-box-pack: center;
 }
-
-/*对view中的子元素进行居中,并且位于容器的中间位置(flex-box垂直;flex-box-v水平)  */
+// 垂直居中
 .flex-v-ce,
 .flex-h-ce {
   align-items: center;
@@ -258,6 +311,19 @@ code {
   -webkit-box-align: center;
 }
 
+/*flex-box与 flex-v-ce结合*/
+.flex-box-ce {
+  display: -webkit-box;
+  display: -moz-box;
+  display: -ms-flexbox;
+  display: -webkit-flex;
+  display: flex;
+  align-items: center;
+  -webkit-align-items: center;
+  -webkit-box-align: center;
+}
+
+
 /*让所有弹性盒模型对象的子元素都有相同的长度,且忽略它们内部的内容:  */
 .flex-1 {
   -webkit-box-flex: 1;
@@ -335,6 +401,36 @@ code {
   display: flex;
   justify-content: flex-end;
 }
+// 滚动条样式
+.scroll-bar::-webkit-scrollbar {
+  width: 6px;
+  height: 6px;
+}
+
+/*外层轨道。可以用display:none让其不显示,也可以添加背景图片,颜色改变显示效果*/
+.scroll-bar::-webkit-scrollbar-track {
+  width: 6px;
+  background-color: #fff0;
+  -webkit-border-radius: 2em;
+  -moz-border-radius: 2em;
+  border-radius: 2em;
+
+}
+
+/*滚动条的设置*/
+.scroll-bar::-webkit-scrollbar-thumb {
+  background-color: #fff0;
+  background-clip: padding-box;
+  -webkit-border-radius: 2em;
+  -moz-border-radius: 2em;
+  border-radius: 2em;
+}
+/*滚动条移上去的背景*/
+.scroll-bar:hover::-webkit-scrollbar-thumb {
+  background-color: rgba(144, 147, 153, 0.3);
+  height: 20px;
+}
+
 
 .el-date-editor .el-range-separator {
     padding: 0px 0px !important;
@@ -386,7 +482,7 @@ code {
     width: 110px;
     height: 110px;
     margin: 22px auto 16px;
-    background: url("/static/images/nodata_default.png") no-repeat center;
+    background: url(/images/nodata_default.png) no-repeat center;
     background-size: 99%;
   }
   & .noperson {
@@ -394,7 +490,7 @@ code {
     width: 110px;
     height: 110px;
     margin: 22px auto 16px;
-    background: url("/static/images/noperson_default.png") no-repeat center;
+    background: url(/images/noperson_default.png) no-repeat center;
     background-size: 99%;
   }
   & .title {
@@ -406,8 +502,12 @@ code {
   }
 }
 
-// 
+//
 .testinfo_class .el-message__icon{
   font-size: 20px;
   color: red;
-}
+}
+
+.el-tooltip__popper{
+  max-width: 400px;
+}

+ 18 - 2
src/utils/auth.js

@@ -1,4 +1,5 @@
 import Cookies from 'js-cookie'
+import store from '@/store'
 
 const TokenKey = 'Admin-Token'
 const JTOKEN = 'jtoken'
@@ -6,9 +7,17 @@ const ATOKEN = 'atoken'
 const USER = 'user'
 const PASW = 'pasw'
 
-export function getToken() {
+// 获取用户列表
+export function getEmployeeMap() {
+  return JSON.parse(localStorage.getItem('SET_EMPLOYEE_MAP'))
+}
+
+export function cookGetToken() {
   return Cookies.get(TokenKey)
 }
+export function getToken() {
+  return localStorage.getItem(TokenKey)
+}
 export function getJtoken() {
   return Cookies.get(JTOKEN)
 }
@@ -22,6 +31,13 @@ export function getPasw() {
   return Cookies.get(PASW)
 }
 
+
+export function localSetToken(token) {
+  if(getToken() !== token){
+    store.commit('SET_DELETE_USER', {})
+    return localStorage.setItem(TokenKey, token)
+  }
+}
 export function setUser(value) {
   return Cookies.set('user', value, { expires: 365 })
 }
@@ -52,10 +68,10 @@ export function removeAoken() {
 }
 
 export function removeAllToken() {
+   localStorage.removeItem(TokenKey);
 	 Cookies.remove('user')
 	 Cookies.remove('pasw')
 	 Cookies.remove(TokenKey)
-	 Cookies.remove(TokenKey)
 	 Cookies.remove(ATOKEN)
 	 Cookies.remove(JTOKEN)
    return true

+ 26 - 16
src/utils/request.js

@@ -2,7 +2,7 @@ import axios from 'axios'
 import { Message, MessageBox } from 'element-ui'
 import store from '@/store'
 import Router from'@/router'
-import {getToken, removeAllToken, setToken} from '@/utils/auth'
+import {cookGetToken, getToken, removeAllToken, setToken} from '@/utils/auth'
 import qs from 'qs'
 import Vue from 'vue'
 const service = axios.create({
@@ -17,8 +17,10 @@ const service = axios.create({
 })
 service.interceptors.request.use(
   config => {
-    if (store.getters.token) {
+    if(getToken()){
       config.headers['A-TOKEN'] = getToken()
+    }else if (store.getters.token) {
+      config.headers['A-TOKEN'] = cookGetToken()
     }
     return config
   },
@@ -33,18 +35,24 @@ service.interceptors.response.use(
     const res = response.data
     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');
-      })
+      // 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 == '') {
@@ -81,9 +89,11 @@ service.interceptors.response.use(
         store.state.user.pastDue = true
         localStorage.clear()
         sessionStorage.clear()
-        removeAllToken()
         Router.push({
-          path: '/login'
+          path: '/noAccess',
+          query: {
+            msg: res.msg
+          }
         })
         return Promise.reject('error')
     } else {

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

@@ -9,10 +9,13 @@ 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)
-  if (window.wechatConfigUrl === wechatConfigUrl) {
+  console.log(window.WWOpenData)
+  if (window.wechatConfigUrl === wechatConfigUrl && window.WWOpenData) {
     if (next) {
       next()
     }
@@ -44,6 +47,8 @@ async function wxConfigByCorp(body, pushindex, next) {
   console.log(wxConfigParams)
   console.log(appSignature)
   console.log('wxConfig开始')
+  console.log(Vue.prototype.$wx)
+  console.log(Vue.prototype.$wx.config)
   await Vue.prototype.$wx.config({ // 鉴权(企业的身份与权限)
     beta: true, // 必须这么写,否则wx.invoke调用形式的jsapi会有问题
     debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
@@ -115,6 +120,7 @@ async function wxConfigByCorp(body, pushindex, next) {
 
     } else {
       console.log('pc端')
+      console.log(appSignature)
       Vue.prototype.$wx.agentConfig({ //鉴权(应用的身份与权限)
         corpid: appSignature.corpid, // 必填,企业微信的corpid,必须与当前登录的企业一致
         agentid: appSignature.agentid, // 必填,企业微信的应用id (e.g. 1000247)

+ 1 - 1
src/utils/wxconfiguration.js

@@ -3,7 +3,7 @@ export function withoutCodeLoad() {
   console.log(process.env.APPID)
   let appid, redirect_uri, response_type, scope, state, wechat, agentid
   appid = process.env.APPID
-  redirect_uri = 'http%3A%2F%2Fwechatdings.vaiwan.com'
+  redirect_uri = process.env.REDIRECT_URI
   response_type = 'code'
   scope = 'snsapi_privateinfo'
   state = 'a'

+ 2 - 2
src/views/attendance/attenadenChange.vue

@@ -263,7 +263,7 @@
                         >
                         <img
                           v-if="scope.row.img_url == null"
-                          src="/static/images/head_default.png"
+                          src="static/images/head_default.png"
                           width="42px"
                           height="42px"
                         >
@@ -1368,7 +1368,7 @@ export default {
   margin: 0 auto;
   width: 40px;
   height: 40px;
-  background-image: url(/static/images/jflr.png);
+  background-image: url(/images/jflr.png);
   background-size: 100%;
 }
 .integral-create-review-btn .card-panel-description {

+ 2 - 2
src/views/attendance/attendance_hiolday.vue

@@ -113,8 +113,8 @@
         <div class="typeThree" v-if="activeName2 == 'type_3'" style="padding:0 15px;">
           <div class="picture" style="padding-top: 20px;padding-bottom: 15px;">
             <img style="width: 35px;height:35px;border-radius: 50%;"
-              :src="img_url ||'/static/images/head_default.png' " />
-            <!-- <img  v-if="img_url=='' ||img_url== undefined " style="width: 35px;height:35px;border-radius: 50%;" src="/static/images/head_default.png" /> -->
+              :src="img_url ||'static/images/head_default.png' " />
+            <!-- <img  v-if="img_url=='' ||img_url== undefined " style="width: 35px;height:35px;border-radius: 50%;" src="static/images/head_default.png" /> -->
 
             <div class="pictureOne">
               <div style="color: #606266;font-size: 16px;">{{nameId}}-假期使用记录</div>

+ 3 - 3
src/views/attendance/attendance_rating.vue

@@ -83,17 +83,17 @@
           <template slot-scope="scope">
             <img
               v-if="scope.row.rank === 1"
-              src="/static/images/statistics_NO1.png"
+              src="static/images/statistics_NO1.png"
               alt
             />
             <img
               v-if="scope.row.rank === 2"
-              src="/static/images/statistics_NO2.png"
+              src="static/images/statistics_NO2.png"
               alt
             />
             <img
               v-if="scope.row.rank === 3"
-              src="/static/images/statistics_NO3.png"
+              src="static/images/statistics_NO3.png"
               alt
             />
             <span v-if="scope.row.rank > 3">{{ scope.row.rank }}</span>

+ 936 - 928
src/views/common/EmployeeSelector.vue

@@ -1,126 +1,125 @@
 <template>
   <el-dialog
     :title="title"
-    :visible.sync="visible_" :close-on-click-modal="false" :before-close="close_before" append-to-body @close='closeDialog'
-    width="640px" class="employee_select_dialog">
-    <div class="employee_selector_box" v-loading="selectApersonModuleLoad">
+    :visible.sync="visible_"
+    :close-on-click-modal="false"
+    :before-close="close_before"
+    append-to-body
+    @open="openDialog"
+    width="640px"
+    class="employee_select_dialog"
+  >
+    <slot name="header"></slot>
+    <div class="employee_selector_box" v-if="visible_">
       <el-row :gutter="10">
-        <el-col :xs="11" :sm="11" :md="11" :lg="11" :xl="11" class="scroller-box">
-
+        <el-col :xs="11" :sm="11" :md="11" :lg="11" :xl="11" class="scroller-box one">
           <div class="search-box">
-            <div class="search">
-            <el-button slot="append" icon="el-icon-search" class="manager_button"></el-button>
-            <el-input v-model="keyword" placeholder="请输入内容"></el-input>
+            <!-- <div class="search flex-box"><el-input v-model="keyword" placeholder="请输入内容" clearable></el-input></div> -->
+            <div class="search flex-box dept_icon" style="margin-top: 7px; width: 80%; position: relative;">
+              <deptData  v-if="toPdept1 && toPdept1!=0" :refsName="$refs.dept1" :toPdept="toPdept1" style="width: 79%;"></deptData>
+              <el-cascader
+                v-show="can_select_employee&&deptId==0"
+                v-model="dept_id"
+                :options="dept_list"
+                :props="{ checkStrictly: true, value: 'id', label: 'name', children: 'children' }"
+                @change="dept1_null"
+                ref="dept1"
+                filterable
+                :disabled="deptId > 0"
+                change-on-select
+                placeholder="请选择部门"
+                clearable
+              >
+                <template slot-scope="{ node, data }">
+                  <span>
+                    <WWOpenData type="departmentName" :openid="data.name"></WWOpenData>
+                  </span>
+                </template>
+              </el-cascader>
             </div>
           </div>
-          <div class="dept_path">
-            <a href="javascript:void(0);" @click="back_by_index(0)">全公司</a>
-            <a
-              v-for="(item, index) in pid_list_arr"
-              :key="index"
-              href="javascript:void(0);"
-              @click="back_by_index(index + 1)"
-            >
-              <i class="el-icon-arrow-right"></i>
-              <wwOpenDAta type="departmentName" :openid="item.name"></wwOpenDAta>
-            </a>
+
+          <div class="dept_path scroll-bar flex-box flex-d-wrap" v-if="can_select_dept">
+            <template v-if="pid_list_arr.length > 0">
+              <div @click="back_by_index(0)" class="blue" style="cursor: pointer;">全公司</div>
+              <div v-for="(item, index) in pid_list_arr" :key="index" @click="back_by_index(index + 1, item)" class="font-flex-word" style="max-width: 120px;">
+                <i class="el-icon-arrow-right"></i>
+                <span class="blue" style="cursor: pointer;">
+                  <WWOpenData type="departmentName" :openid="item.name"></WWOpenData>
+                  <!-- {{ item.name }} -->
+                </span>
+              </div>
+            </template>
+          </div>
+		  <!-- 人员 -->
+          <div class="flex-box-end" v-if="can_select_employee && isChecKedAll && multi" style="padding: 10px;border-bottom: 1px solid #f1f1f1;">
+            <el-checkbox v-model="checked" @change="checkedChange">全选</el-checkbox>
           </div>
-          <el-checkbox v-if="isChecKedAll" v-model="checked" @change="checkedChange" >全选</el-checkbox>
           <el-scrollbar
             wrap-class="column-wrapper scrollable-items-container"
             :native="false"
-            :class="isChecKedAll?'scrollbarHeight1':'scrollbarHeight2'"
+            :class="(can_select_dept || isChecKedAll)? 'scrollbarHeight1' : 'scrollbarHeight2'"
+            v-loading="table_loading"
           >
             <div class="choose_left">
-              <div v-if="hidden_department">
-              </div>
-              <a href="javascript:void(0)" v-for="(item,index) in dept_list" :key="index" v-else>
-                <div class="employee_cell" @click.stop="select_dept(item)"
-                     v-show="item.pid == pid && item.name.indexOf(keyword) >= 0 && dept_not_select.indexOf(item.id) < 0">
-
-                  <div class="employee_checkbox" style="position: relative;">
-                    <el-checkbox v-if="can_select_dept" v-model="item.checked"></el-checkbox>
-                    <div style=" position: absolute; top: 0; left: 0; right: 0; bottom: 0; z-index: 5;"></div>
-                  </div>
-                  <div class="employee_name">
-                    <wwOpenDAta type="departmentName" :openid="item.name"></wwOpenDAta>
-                  </div>
-
-                  <div v-if="can_select_dept" class="dept_child_cell">
-                    <span href="javascript:void(0);" class="child_btn" @click.stop="show_child(item)">
-                      | 下级
-                    </span>
+              <template v-if="can_select_dept">
+                <div class="persons_box" style="padding-top:4px;" v-if="dept_list.length > 0">
+                  <div v-for="(item, index) in dept_list" :key="index">
+                    <div class="flex-box flex-v-ce deptList" @click="select_dept(item, index)" v-show="item.name.indexOf(keyword) >= 0">
+                      <div :class="[item.checked? 'showCheckbox':'']" class="checkbox"><span class="isCheckbox"></span></div>
+                      <div class="employee_name flex-1 font-flex-word">
+                        <!-- {{ item.name }} -->
+                        <WWOpenData type="departmentName" :openid="item.name"></WWOpenData>
+                      </div>
+                      <div v-if="item.children" class="blue" @click.stop="show_child(item)">| 下级</div>
+                    </div>
                   </div>
-
-                  <div class="employee_cell_clear"></div>
-
                 </div>
-              </a>
-
-              <div class="persons_box" style="padding-top:4px;">
-                <a class="employee_cell_a" href="javascript:void(0)" v-for="(item,index) in list" :key="index">
-                  <div class="employee_cell" v-if="can_select_employee" @click="select_employee(item)"
-                       v-show="employee_not_select.indexOf(item.id) < 0">
-
-                    <div class="employee_checkbox" style="position: relative;">
-                      <!-- <el-checkbox v-model="item.checked"></el-checkbox> -->
-                      <el-checkbox v-model="item.checked" v-if="selectedQuitEmployee" :style="item.status > 1 || employee_not_select.indexOf(item.id) > 0?'opacity: 0':'opacity: 1'" ></el-checkbox>
-                      <el-checkbox v-model="item.checked" v-if="!selectedQuitEmployee" :style="item.status > 1 || employee_not_select.indexOf(item.id) > 0?'opacity: 0':'opacity: 1'" ></el-checkbox>
-                      <div style=" position: absolute; top: 0; left: 0; right: 0; bottom: 0; z-index: 5;"></div>
-                    </div>
-                    <div class="employee_img_url">
-                      <img :src="item.img_url" class="employee_cell_head_img"/>
+              </template>
+              <template v-if="can_select_employee">
+                <div class="persons_box" style="padding-top:4px;" v-if="list.length > 0">
+                  <div class="employee_cell_a" v-for="(item, index) in list" :key="index" v-show="item.id">
+                    <div class="employee_cell" @click.prevent.stop="select_employee(item)">
+                      <div class="employee_checkbox"><el-checkbox v-model="item.checked"></el-checkbox></div>
+                      <div class="employee_img_url" v-if="item.img_url && item.img_url != defaultImg()"><img :src="item.img_url" class="employee_cell_head_img" /></div>
+                      <div class="employee_img_url" v-else><img src="static/images/default5.png" class="employee_cell_head_img" /></div>
+                      <div class="employee_name">
+                        <WWOpenData type="userName" :openid="item.name"></WWOpenData>
+                        <!-- {{ item.name }} -->
+                      </div>
+                      <div class="employee_cell_clear"></div>
                     </div>
-                    <div class="employee_name">
-                      <!-- {{item.name}} -->
-                      <wwOpenDAta type="userName" :openid="item.name"></wwOpenDAta>
-                      {{item.direct_Supervisor?'(直属上级)':''}}
-                    </div>
-                    <div class="employee_cell_clear"></div>
-
                   </div>
-                </a>
-              </div>
-
+                </div>
+                <div v-else class="fontColorF" style="text-align: center;margin-top: 50px;">暂无可选人员</div>
+              </template>
             </div>
-
-
           </el-scrollbar>
         </el-col>
         <el-col :xs="2" :sm="2" :md="2" :lg="2" :xl="2" class="col-line"><span style="opacity: 0;">空</span></el-col>
         <el-col :xs="11" :sm="11" :md="11" :lg="11" :xl="11" class="scroller-box">
           <div class="option-box">
+            <span style="line-height: 40px; padding-left: 10px;" class="fl" v-if="multi && can_select_employee">已选择{{ employee_selected_list.length }}个员工</span>
             <el-button type="type" @click="clear_data">清空</el-button>
           </div>
-          <el-scrollbar
-            wrap-class="column-wrapper scrollable-items-container"
-            :native="false"
-            style="height: 354px;"
-          >
+          <el-scrollbar wrap-class="column-wrapper scrollable-items-container" :native="false" style="height: 400px;">
             <div class="choose_right">
-              <div class="employee_cell" v-for="(item,index) in dept_selected_list" :key="index">
-
+              <div class="employee_cell" v-for="(item, index) in dept_selected_list" :key="index">
                 <div class="employee_name">
-                  <wwOpenDAta type="departmentName" :openid="item.dept_name"></wwOpenDAta>
-                </div>
-                <div class="employee_delete">
-                  <el-button type="default" size="mini" @click="dept_cancel(item)" icon="el-icon-close" circle></el-button>
+                  <WWOpenData type="departmentName" :openid="item.dept_name"></WWOpenData>
+                  <!-- {{ item.dept_name }} -->
                 </div>
+                <div class="employee_delete"><el-button type="default" size="mini" @click="dept_delete(item, index)" icon="el-icon-close" circle></el-button></div>
                 <div class="employee_cell_clear"></div>
               </div>
-
-              <div class="employee_cell" v-for="(item,index) in employee_selected_list" :key="index">
-                <div class="employee_img_url">
-                  <img :src="item.img_url" class="employee_cell_head_img"/>
-                </div>
+              <div class="employee_cell" v-for="(item, index) in employee_selected_list" :key="index">
+                <div class="employee_img_url" v-if="item.img_url && item.img_url != defaultImg()"><img :src="item.img_url" class="employee_cell_head_img" /></div>
+                <div class="employee_img_url" v-else><img src="static/images/default5.png" class="employee_cell_head_img" /></div>
                 <div class="employee_name">
-                  <!-- {{item.name}} -->
-                  <wwOpenDAta type="userName" :openid="item.name"></wwOpenDAta>
-                  <span v-if="direct_Supervisor_you">{{item.id==directSupervisor?'(直属上级)':''}}</span>
-                </div>
-                <div class="employee_delete">
-                  <el-button type="default" size="mini" @click="employee_cancel(item)" icon="el-icon-close" circle></el-button>
+                  <WWOpenData type="userName" :openid="item.name"></WWOpenData>
+                  <!-- {{ item.name }} -->
                 </div>
+                <div class="employee_delete"><el-button type="default" size="mini" @click="employee_cancel(item, true)" icon="el-icon-close" circle></el-button></div>
                 <div class="employee_cell_clear"></div>
               </div>
             </div>
@@ -128,898 +127,907 @@
         </el-col>
       </el-row>
     </div>
-
     <span slot="footer" class="dialog-footer">
-    <el-button @click="close">取 消</el-button>
-    <el-button type="primary" @click="confirm">确 定</el-button>
-  </span>
-
-
+      <el-button @click="close">取 消</el-button>
+      <el-button type="primary" @click="confirm">确 定</el-button>
+    </span>
   </el-dialog>
 </template>
 
 <script>
-
-  export default {
-    props:{
-      title:{
-        type: String,
-        default: "选择部门和员工"
-      },
-      isChecKedAll: {
-        type: Boolean,
-        default: false
-      },
-      whether_to_remove_right: {
-        type: Boolean,
-        default: false
-      },
-      hidden_department: {
-        type: Boolean,
-        default: false
-      },
-      append_body: {
-        type: Boolean,
-        default: false
-      },
-      visible: {
-        type: Boolean,
-        default: false
-      },
-      can_select_dept: {
-        type: Boolean,
-        default: true
-      },
-      can_select_employee: {
-        type: Boolean,
-        default: true
-      },
-      employee_not_select: {
-        type: Array,
-        default: () => {
-          return []
-        }
-      },
-      dept_not_select: {
-        type: Array,
-        default: () => {
-          return []
-        }
-      },
-      selected: {
-        type: Object,
-        default: () => {
-          return {employee: [], dept: []}
-        }
-      },
-      multi: {
-        type: Boolean,
-        default: true
-      },
-      dept_multi: {
-        type: Boolean,
-        default: true
-      },
-      employee_list: {
-        type: Array,
-        default: () => {
-          return []
-        }
-      },
-      selectedQuitEmployee:{
-        type: Boolean,
-        default: true
-      },
-      close_clear_data: {
-        type: Boolean,
-        default: true
-      },
-      max: {
-        type: Number,
-        default: 0
-      },
-      use_employee_list: {
-        type: Boolean,
-        default: false
+export default {
+  props: {
+    title: {
+      // 标题
+      type: String,
+      default: '选择部门和员工'
+    },
+    deptId: {
+      //指定部门ID,人员列表就是该部门的
+      type: Number,
+      default: 0
+    },
+    visible: {
+      // 是否显示组件
+      type: Boolean,
+      default: false
+    },
+    can_select_dept: {
+      // 是否能选择部门(单选择部门,不能选择人员)
+      type: Boolean,
+      default: false
+    },
+    dept_not_select: {
+      // 排除部门ID
+      type: Array,
+      default: () => {
+        return [];
+      }
+    },
+    dept_multi: {
+      // 指定部门是否能多选
+      type: Boolean,
+      default: true
+    },
+    dept_children: {
+      //选择部门时是否包含子部门
+      type: Boolean,
+      default: true
+    },
+    can_select_employee: {
+      // 指定是否能选择员工
+      type: Boolean,
+      default: true
+    },
+    employee_not_select: {
+      // 排除员工的ID,包含ID时不出现在选择列表中
+      type: Array,
+      default: () => {
+        return [];
       }
     },
-    name: "EmployeeSelector",
-    data() {
-      let selected = JSON.parse(JSON.stringify(this.selected))
-      return {
-        selectApersonModuleLoad:false,
-        searchBox:[],
-        direct_Supervisor_you:false,
-        directSupervisor:0,
-        dialogVisible: true,
-        employee_selected_list: selected.employee,
-        dept_selected_list: selected.dept,
-        employee_selected: [],
-        dept_selected: [],
-        com_height: '100%',
-        company_info: {},
-        actions_show: false,
-        dept_name: '',
-        dept_id: 0,
-        list: [],
-        dept_list: [],
-        keyword: '',
-        owner_id: 0,
-        user_info: this.$store.getters.user_info,
-        pid: 0,
-        pid_list: [],
-        selected_box_width: '0',
-        pid_list_arr: [],
-        visible_: false,
-        checked: false//全选按钮
+    selected: {
+      // 已经选择的员工和部门
+      type: Object,
+      default: () => {
+        return { employee: [], dept: [] };
+      }
+    },
+    multi: {
+      // 指定员工是否能多选
+      type: Boolean,
+      default: true
+    },
+    user_employee_list: {
+      // 为true时,employee_list才生效
+      type: Boolean,
+      default: false
+    },
+    employee_list: {
+      // 指定显示的员工列表,注意:传值后组件的员工数据将不是统一向服务器获取的,而是指定的员工列表,格式是:[{id: 1, name: “张三”, img_url: “”}]
+      type: Array,
+      default: () => {
+        return [];
+      }
+    },
+    isChecKedAll: {
+      //是否全选
+      type: Boolean,
+      default: true
+    },
+    close_clear_data: {
+      //关闭时是否清除选择的数据
+      type: Boolean,
+      default: true
+    },
+    max: {
+      //选择的人数限制
+      type: Number,
+      default: 0
+    },
+    is_filtration_creator: {
+      //是否去除创始人
+      type: Boolean,
+      default: true
+    },
+    is_manager_only: {
+      //是否只显示管理者
+      type: Boolean,
+      default: false
+    },
+    is_superior: {
+      //是否只显示上级
+      type: Boolean,
+      default: false
+    },
+    include_self: {
+      //是否显示自己
+      type: Boolean,
+      default: true
+    },
+    child:{
+      //当人员列表点击部门筛选时不显示子部门人员 ,目前只在设置主管有使用到
+      type: Boolean,
+      default: true
+    },
+    isRequired:{
+      //是否必须选择人员或者部门
+      type: Boolean,
+      default: false
+    }
+  },
+  name: 'EmployeeSelector',
+  data() {
+    return {
+      // 基础配置
+      table_loading: false,
+      searchBox: [], //用于搜索的全部人员
+      keyword: '',
+      checked: false,
+      visible_: false,
+      // 选择人员相关
+      employee_selected_list: [],
+      employee_selected: [],
+      list: [],
+      // 选择部门相关
+      dept_selected_list: [],
+      dept_name: '',
+      dept_id: [],
+      dept_select_id: 0,
+      dept_list: [],
+      dept_list_all: [], //备用全部部门
+      pid_list_arr: [],
+      toPdept1:0,//选择部门的遮到
+    };
+  },
+  watch: {
+    // 当动态改变“employee_list”时,获取employee_list与employee_selected_list的交集,用于考勤组功能
+    employee_list(val) {
+      var eSList = this.employee_selected_list;
+      this.employee_selected_list = [...eSList].filter(x => [...val].some(y => y.id === x.id));
+    },
+    visible(val) {
+      this.visible_ = JSON.parse(JSON.stringify(val));
+      if (val) {
+        setTimeout(() => {
+          this.toPdept1 = 0
+          this.dept_select_id = 0
+          this.dept_id = []
+          this.get_user_list();
+          this.get_dept_list();
+        }, 200);
+      }
+    },
+    // dept_id(val) {
+    //   this.dept_select_id = val[val.length - 1];
+    //   this.$nextTick(() => {
+    //     if (this.can_select_employee) {
+    //       this.$refs.dept.dropDownVisible = false;
+    //     }
+    //     this.get_user_list();
+    //     this.checked = false;
+    //   });
+    // },
+    keyword(val) {
+      this.list = this.searchBox.filter(item => item.name.includes(this.keyword));
+      if (!val) {
+        this.checked = false;
+      }
+    }
+  },
+  methods: {
+    defaultImg(){
+      return "https://rescdn.qqmail.com/node/wwmng/wwmng/style/images/independent/DefaultAvatar$73ba92b5.png"
+    },
+    dept1_null(val){
+      this.toPdept1 = val[val.length-1]
+    	if(val.length>1){
+    		this.dept_select_id=val[val.length-1];
+    	}else{
+    		this.dept_select_id=val[0];
+    	}
+      this.$nextTick(()=>{
+        this.get_user_list();
+        this.checked = false;
+        this.$refs.dept1.dropDownVisible = false;
+      })
+    },
+    //打开Dialog的回调,用刷每次打开都初始化selected
+    openDialog() {
+      if (this.deptId != 0) {
+        this.dept_id = [this.deptId];
+        this.dept_select_id = this.deptId;
       }
+      let selected = this.selected;
+      this.employee_selected = [];
+      this.employee_selected_list = JSON.parse(JSON.stringify(selected.employee));
+      this.dept_selected_list =JSON.parse(JSON.stringify(selected.dept));
+      for (let i in selected.employee) {
+        this.employee_selected.push(selected.employee[i].id);
+      }
+    },
+    close_before(done) {
+      this.close();
+      done();
     },
-    watch: {
-      max(val) {
-        this.set_button_width()
-      },
-      selected:{
-        deep:true,
-        handler(val){
-          let selected = JSON.parse(JSON.stringify(val))
-          this.employee_selected = []
-          this.dept_selected = []
-          this.employee_selected_list = selected.employee
-          this.dept_selected_list = selected.dept
-          for (let i in selected.employee) {
-            if (!selected.employee[i].img_url) {
-              this.$set(this.selected.employee[i], 'img_url', 'static/images/head_default.png')
+    // 全选(只用选择人员)
+    checkedChange(val) {
+      if (val) {
+        this.$nextTick(() => {
+          let employeeSelectedList = JSON.parse(JSON.stringify(this.employee_selected_list)); //获取选择的人员
+          let employeeSelectedIds = [],
+            total = 0;
+          employeeSelectedList.forEach(element => {
+            employeeSelectedIds.push(element.id);
+          });
+          for (let i in this.list) {
+            this.$set(this.list[i], 'checked', true);
+            if (!employeeSelectedIds.includes(this.list[i].id)) {
+              //去除已经选择的人员
+              this.employee_selected_list.push(this.list[i]);
             }
-            this.employee_selected.push(selected.employee[i].id)
           }
-          for(let i in selected.dept){
-            this.dept_selected.push(selected.dept[i].dept_id)
-          }
-          this.set_button_width()
+        });
+      } else {
+        this.employee_selected_list = [];
+        this.employee_selected = [];
+        for (let i in this.list) {
+          this.$set(this.list[i], 'checked', false);
         }
-      },
-      // selected(val) {
-      //   let selected = JSON.parse(JSON.stringify(val))
-      //   this.employee_selected = []
-      //   this.dept_selected = []
-      //   this.employee_selected_list = selected.employee
-      //   this.dept_selected_list = selected.dept
-      //   for (let i in selected.employee) {
-      //     this.employee_selected.push(selected.employee[i].id)
-      //   }
-      //   for(let i in selected.dept){
-      //     this.dept_selected.push(selected.dept[i].dept_id)
-      //   }
-      //   this.set_button_width()
-      // },
-      visible(val){
-        this.visible_ = JSON.parse(JSON.stringify(val))
-        if(val){
-          this.selectApersonModuleLoad = true
-          setTimeout(() => {
-            if (this.$route.query.pid) {
-              this.pid = this.$route.query.pid
-            }
-            this.get_user_list(function () {
-
-            })
-            this.get_dept_list()
-          }, 200)
+      }
+    },
+    // 点击部门导航
+    back_by_index(index, item) {
+      this.pid_list_arr.splice(index, 100);
+      if (index == 0) {
+        this.dept_list = this.dept_list_all;
+        return false;
+      }
+      if (item.children) {
+        this.dept_list = item.children;
+      }
+    },
+    //下一级
+    show_child(item) {
+      if (item.children) {
+        this.dept_list = item.children;
+      }
+      this.pid_list_arr.push(item);
+    },
+    //获取一个部门的下的所有子部门
+    getChildrens(list) {
+      var dept_list = [];
+      list.forEach(item => {
+        item.checked = true;
+        dept_list.push({ dept_id: item.id, dept_name: item.name, avatar: 'static/images/e66f.jpg' });
+        if (item.children) {
+          dept_list.push(...this.getChildrens(item.children));
         }
-        this.set_button_width()
-      },
-      employee_selected_list() {
-        let l = this.employee_selected_list.length + this.dept_selected_list.length
-        let width = 0.9 * l;
-        this.selected_box_width = width + 'rem'
-        this.set_button_width()
-        
-        this.checkAll_Optimize()//全选细节优化,选中发生变化时执行
-      },
-      dept_selected_list() {
-        let l = this.employee_selected_list.length + this.dept_selected_list.length
-        let width = 0.9 * l;
-        this.selected_box_width = width + 'rem'
-        this.set_button_width()
-      },
-      keyword(val) {
-        this.list = this.searchBox.filter(item=> item.name.includes(this.keyword))
-        // this.get_user_list(function () {
-
-        // })
-      },
-      
-      list(){
-        this.checkAll_Optimize()//全选细节优化,人员列表发生变化时执行
-      },
+      });
+      return dept_list;
     },
-    methods: {
-      //全选细节优化
-      checkAll_Optimize(){
-        let checkedTrue = true
-        for(let i in this.list){
-          if(this.list[i].status!=2 && this.list[i].status!=3){//排除人员列表中的离职和拒绝加入人员
-            if(this.list[i].checked == false){
-              checkedTrue = false
-            }
+    //选择部门
+    select_dept(item, index) {
+      if (item.checked) {
+        this.dept_cancel(item);
+      } else {
+        if (!this.dept_multi) {
+          //是否能多选
+          this.dept_selected_list = [];
+          for (let i in this.dept_list_all) {
+            this.dept_cancel(this.dept_list_all[i], true);
           }
         }
-        if(checkedTrue){
-          if(this.list.length != 0){
-            this.checked = true
-          }else{
-            this.checked = false
-          }
-        }else{
-          this.checked = false
+        item.checked = true;
+        if (item.children && this.dept_children) {
+          //是否存在子部门
+          this.dept_selected_list.push({ dept_id: item.id, dept_name: item.name, avatar: 'static/images/e66f.jpg' });
+          var arr = this.getChildrens(item.children);
+          this.dept_selected_list.push(...arr);
+        } else {
+          this.dept_selected_list.push({ dept_id: item.id, dept_name: item.name, avatar: 'static/images/e66f.jpg' });
         }
-      },
-      //关闭弹窗清除数据
-      closeDialog(){
-          this.direct_Supervisor_you = false
-      },
-      // 全选
-      checkedChange(val){
-        if (val) {
-          for (let i in this.list) {
-            if (this.employee_not_select.indexOf(this.list[i].id) < 0) {
-              this.$set(this.list[i], 'checked', true)
-            }
-          }
-          this.$nextTick(() => {
-            let employeeSelectedList = JSON.parse(JSON.stringify(this.employee_selected_list))
-            let employeeSelectedIds = [], total = 0
-            employeeSelectedList.forEach(element => {
-              employeeSelectedIds.push(element.id)
-            });
-            for (const i in this.list) {
-              this.list[i].status !== 2 && this.list[i].status !== 3 && this.selectedQuitEmployee?this.$set(this.list[i], 'checked', true):''
-              if (employeeSelectedIds.includes(this.list[i].id)) {
-                total += 1
-              }else{
-                this.list[i].status !== 2 && this.list[i].status !== 3 && this.selectedQuitEmployee?this.employee_selected_list.push(this.list[i]):''
-              }
-            }
-            // debugger
-          })
-        }else{
-            for(let i in this.employee_selected_list){
-              for(let a in this.list){
-                if(this.list[a].status!=2 && this.list[a].status!=3){//排除人员列表中的离职和拒绝加入人员
-                  if(this.employee_selected_list[i].id == this.list[a].id){
-                    this.employee_selected_list.splice(i,1)
-                  }
-                }
-              }
-            }
-          // this.employee_selected_list = []
-          // this.employee_selected = []
-          for (let i in this.list) {
-            this.$set(this.list[i], 'checked', false)
+      }
+    },
+    //清除选择的部门
+    dept_cancel(item, is) {
+      item.checked = false;
+      if (item.children) {
+        //左边
+        item.children.forEach(childrens => {
+          this.dept_cancel(childrens);
+        });
+      }
+      if (is) {
+        return false;
+      }
+      var deptSelectedList = this.dept_selected_list;
+      deptSelectedList.forEach((dept, index) => {
+        //右边
+        if (dept.dept_id == item.id) {
+          deptSelectedList.splice(index, 1);
+        }
+      });
+    },
+    //删除部门
+    dept_delete(item) {
+      var dept_list = this.dept_list;
+      var obj = this.getDeptz(item.dept_id, dept_list); //递归找到所属部门
+      this.dept_cancel(obj);
+    },
+    // 递归获取指定ID部门
+    getDeptz(id, arr) {
+      var obj = {};
+      for (let i = 0; i < arr.length; i++) {
+        if (id == arr[i].id) {
+          obj = arr[i];
+          break;
+        } else if (arr[i].children) {
+          if (this.getDeptz(id, arr[i].children).id) {
+            obj = this.getDeptz(id, arr[i].children);
           }
-          // this.clear_data()
         }
-      },
-
-      close_before(done) {
-        this.close()
-      },
-      set_button_width() {
-
-      },
-      back() {
-        this.pid = this.pid_list[this.pid_list.length - 1]
-        this.pid_list.splice(this.pid_list.length - 1)
-        this.pid_list_arr.splice(this.pid_list_arr.length - 1)
-        this.get_user_list(function () {
-
-        })
-      },
-      back_by_index(index) {
+      }
+      return obj;
+    },
 
-        if (index == this.pid_list.length) {
-          return false
+    //清除选择的人员
+    employee_cancel(item) {
+      this.checked = false;
+      this.employee_selected.splice(this.employee_selected.indexOf(item.id), 1);
+      let delete_index = -1;
+      for (let i in this.employee_selected_list) {
+        if (this.employee_selected.indexOf(this.employee_selected_list[i].id) < 0) {
+          delete_index = i;
+        }
+      }
+      if (delete_index >= 0) {
+        for (let i in this.list) {
+          if (this.list[i].id == item.id) {
+            this.$set(this.list[i], 'checked', false);
+          }
         }
-        this.pid = this.pid_list[index]
-        this.pid_list.splice(index, 100)
-        this.pid_list_arr.splice(index, 100)
-        this.get_user_list(function () {
-
-        })
-      },
-      show_child(item) {
-        this.pid_list.push(this.pid)
-        this.pid_list_arr.push(item)
-        this.pid = item.id
-        this.get_user_list(function () {
-
-        })
-      },
-      employee_cancel(item) {
-
-        this.employee_selected.splice(this.employee_selected.indexOf(item.id), 1)
-        let delete_index = -1
         for (let i in this.employee_selected_list) {
-          if (this.employee_selected.indexOf(this.employee_selected_list[i].id) < 0) {
-            delete_index = i
+          if (this.employee_selected_list[i].id == item.id) {
+            this.employee_selected_list.splice(i, 1);
           }
         }
-        if (delete_index >= 0) {
-          // this.employee_selected_list.splice(delete_index, 1)
+      }
+    },
+    //选择人员
+    select_employee(item) {
+      if (item.checked) {
+        item.checked = false;
+        this.employee_cancel(item);
+      } else {
+        if (!this.multi) {
+          this.employee_selected = [];
+          this.employee_selected_list = [];
           for (let i in this.list) {
-            if (this.list[i].id == item.id) {
-              this.$set(this.list[i], 'checked', false)
-            }
-          }
-          
-          for(let i in this.employee_selected_list){
-            if(this.employee_selected_list[i].id == item.id){
-              this.employee_selected_list.splice(i, 1)
-            }
+            this.$set(this.list[i], 'checked', false);
           }
         }
-      },
-      dept_cancel(item) {
-        this.dept_selected.splice(this.dept_selected.indexOf(item.dept_id), 1)
-        let delete_index = -1
-        for (let i in this.dept_selected_list) {
-          // if (this.dept_selected.indexOf(this.dept_selected_list[i].dept_id) < 0) {
-          //   delete_index = i
-          // }
-          if(this.dept_selected_list[i].dept_id == item.id){
-            delete_index = i
-          }
-          if(this.dept_selected_list[i].dept_id == item.dept_id){
-            delete_index = i
-          }
+        if (this.max > 0 && this.employee_selected.length == this.max && this.multi) {
+          this.$message.error('最多只能选择' + this.max + '人');
+          return false;
         }
-        if (delete_index >= 0) {
-          this.dept_selected_list.splice(delete_index, 1)
-          for(let i in this.dept_list){
-            if(this.dept_list[i].id == item.dept_id){
-              this.$set(this.dept_list[i], 'checked', false)
-            }
-          }
+        this.employee_selected.push(item.id);
+        this.employee_selected_list.push({ id: item.id, name: item.name, img_url: item.img_url });
+        item.checked = true;
+      }
+    },
+
+    //清空
+    clear_data() {
+      this.checked = false;
+      this.employee_selected = [];
+      this.employee_selected_list = [];
+      this.dept_selected_list = [];
+      for (let i in this.list) {
+        this.$set(this.list[i], 'checked', false);
+      }
+      for (let i in this.dept_list) {
+        this.$set(this.dept_list[i], 'checked', false);
+      }
+      for (let i in this.dept_list_all) {
+        this.$set(this.dept_list_all[i], 'checked', false);
+      }
+    },
+    //关闭||清空数据
+    close() {
+      this.toPdept1 = 0
+      this.dept_select_id = 0
+      this.dept_id = []
+      this.$emit('update:visible', false);
+      this.$refs.dept1.dropDownVisible = false;
+      if (this.close_clear_data) {
+        this.checked = false;
+        this.keyword='';
+        this.employee_selected = [];
+        this.employee_selected_list = [];
+        this.dept_selected_list = [];
+        this.pid_list_arr=[];
+        for (let i in this.list) {
+          this.$set(this.list[i], 'checked', false);
         }
-      },
-      select_employee(item){
-        if (this.selectedQuitEmployee) {
-          if (this.employee_not_select.indexOf(item.id) >= 0 || item.status > 1) {
-            return false
-          }
-        }else{
-          if (this.employee_not_select.indexOf(item.id) >= 0) {
-            return false
-          }
+        for (let i in this.dept_list) {
+          this.$set(this.dept_list[i], 'checked', false);
         }
-
-        if(item.checked){
-          item.checked = false
-          this.employee_cancel(item)
-        } else {
-          if (!this.multi) {
-            this.employee_selected = []
-            this.employee_selected_list = []
-            for (let i in this.list) {
-              this.$set(this.list[i], 'checked', false)
-            }
-          }
-          if (this.max > 0 && this.employee_selected.length == this.max && this.multi) {
-            this.$toast('最多只能选择' + this.max + '人')
-            return false
-          }
-          this.employee_selected.push(item.id)
-          this.employee_selected_list.push({id: item.id, name: item.name, img_url: item.img_url,direct_Supervisor:item.direct_Supervisor})
-          item.checked = true
+        for (let i in this.dept_list_all) {
+          this.$set(this.dept_list_all[i], 'checked', false);
         }
-        
-        WWOpenData.bind(this.$el)
-      },
-      unique(arr){
-        return Array.from(new Set(arr))
-      },
-      select_dept(item) {
-        if (!this.can_select_dept) {
-          this.show_child(item)
-          return false
+      }
+    },
+    // 确定
+    confirm() {
+      if(this.isRequired){
+        if(this.employee_selected_list.length==0){
+           this.$message.error("请选择人员");
+           return false
         }
-        if (item.checked) {
-          item.checked = false
-          this.dept_cancel(item)
+      }
+      this.$emit('confirm', {
+        employee: this.employee_selected_list,
+        dept: this.dept_selected_list
+      });
+      this.close();
+    },
+    // 获取部门
+    get_dept_list() {
+      this.$http('get', '/api/department/tree', '').then(res => {
+        var list = res.data.data.list;
+        var dept_list = [];
+        // 排除部门
+        if (this.dept_not_select.length > 0) {
+          dept_list = list.filter(item => {
+            return this.dept_not_select.indexOf(item.id) == -1;
+          });
         } else {
-          if (!this.dept_multi) {
-            this.dept_selected = []
-            this.dept_selected_list = []
-            for (let i in this.dept_list) {
-              this.$set(this.dept_list[i], 'checked', false)
-            }
-          }
-          let dept_sele = this.dept_selected
-          dept_sele.push(item.id)
-          this.dept_selected =this.unique(dept_sele)
-          // this.dept_selected.push(item.id)
-          // let dept_sele = new Set(this.dept_selected)
-          // this.dept_selected = this.unique(this.dept_selected)
-          this.dept_selected_list.push({dept_id: item.id, dept_name: item.name, avatar: 'static/images/e66f.jpg'})
-          let newobj = {};
-            this.dept_selected_list = this.dept_selected_list .reduce((preVal, curVal) => {
-              newobj[curVal.dept_id] ? '' : newobj[curVal.dept_id] = preVal.push(curVal);
-              return preVal
-            }, [])
-          item.checked = true
+          dept_list = list;
         }
-
-      },
-      clear_data(){
-        this.employee_selected = []
-        this.employee_selected_list = []
-        this.dept_selected = []
-        this.dept_selected_list = []
-        for (let i in this.list) {
-          this.$set(this.list[i], 'checked', false)
+        dept_list = this.getTreeData(dept_list); //过滤children
+        //默认选中部门
+        if (this.dept_selected_list.length > 0) {
+          this.dept_selected_list.forEach(item => {
+            this.setDeptChecked(item.dept_id, dept_list);
+          });
         }
-        for (let i in this.dept_list) {
-          this.$set(this.dept_list[i], 'checked', false)
+        this.dept_list = dept_list;
+        this.dept_list_all = this.dept_list;
+      });
+    },
+    //设置默认部门
+    setDeptChecked(id, arr) {
+      for (let i = 0; i < arr.length; i++) {
+        if (id == arr[i].id) {
+          arr[i].checked = true;
+          break;
+        } else if (arr[i].children) {
+          this.setDeptChecked(id, arr[i].children);
         }
-      },
-      close() {
-        //this.visible = false
-        this.$emit('update:visible', false)
-        this.$emit('cancel')
-        if (this.close_clear_data) {
-          // this.employee_selected = []
-          // this.employee_selected_list = []
-          this.dept_selected = []
-          this.dept_selected_list = []
-          for (let i in this.list) {
-            this.$set(this.list[i], 'checked', false)
-          }
-          for (let i in this.dept_list) {
-            this.$set(this.dept_list[i], 'checked', false)
-          }
+      }
+    },
+    getTreeData(data) {
+      for (var i = 0; i < data.length; i++) {
+        data[i].checked = false;
+        if (data[i].children.length < 1) {
+          // children若为空数组,则将children设为undefined
+          data[i].children = undefined;
+        } else {
+          // children若不为空数组,则继续 递归调用 本方法
+          this.getTreeData(data[i].children);
         }
+      }
+      return data;
+    },
 
-      },
-      confirm() {
-        this.$emit('confirm', {
-          employee: this.employee_selected_list,
-          dept: this.dept_selected_list
-        })
-        this.close()
-      },
-      get_dept_list(){
-        if(this.employee_list.length > 0){
-          return
-        }
-        this.$http('get','/api/department/index',{pid: this.pid, keyword:this.keyword}).then((res) => {
-          for(let i in res.data.data.list){
-            res.data.data.list[i]['checked'] = false
-            if (this.dept_selected.indexOf(res.data.data.list[i].id) >= 0) {
-              res.data.data.list[i]['checked'] = true
-            }
+    // 默认选择中的人勾上
+    parse_list(data) {
+      let _list = [];
+      data.map(item => {
+        item['checked'] = false;
+        for (var i in this.employee_selected_list) {
+          //判断传进来的员工是否是员工集合里的,是就设为已点击状态
+          if (this.employee_selected_list[i].id == item.id) {
+            item['checked'] = true;
           }
-          this.dept_list = res.data.data.list
-          this.owner_id = res.data.data.owner_id
-          this.company_info = res.data.data.company_info
-          if (res.data.data.dept_info == null) {
-            this.dept_name = JSON.parse(JSON.stringify(res.data.data.company_info.name))
-            this.dept_id = 0
+        }
+        if (item.img_url == '') {
+          item.img_url = 'static/images/default5.png';
+        }
+      });
+      this.searchBox = data;
+      this.list = data;
+    },
+    //获取人员
+    get_user_list() {
+      this.table_loading = true;
+      let params = {
+        dept_id: this.dept_select_id,
+        keywords: this.keyword,
+        page: 0,
+        page_size: 2000,
+        child:this.child? '1':'0',
+        is_official: 1
+      }
+      this.$http('get', '/api/employee/index', params)
+        .then(res => {
+          let list = this.filtration(res.data.data.list);
+          // 当有指定显示列表时
+          if (this.user_employee_list) {
+            var employee_list = this.employee_list;
+            var userData = [];
+            list.map(item => {
+              // 列表数据是否是自己的管理范围
+              employee_list.map(item2 => {
+                if (item.id == item2.id) {
+                  userData.push(item);
+                }
+              });
+            });
+            this.parse_list(userData);
           } else {
-            this.dept_name = JSON.parse(JSON.stringify(res.data.data.dept_info.name))
-            this.dept_id = res.data.data.dept_info.id
+            // 没有指定人员列表
+            this.parse_list(list);
           }
-
-        }).catch((e) => {
-
         })
-      },
-      get_user_list (done) {
-        if(this.employee_list.length > 0){
-          let list = this.employee_list
-          if(this.employee_selected.length == 0){
-            for(let i in this.selected.employee){
-              this.employee_selected.push(this.selected.employee[i].id)
-            }
-          }
-          for(let i in list){
-            if(list[i].direct_Supervisor){
-              this.direct_Supervisor_you = list[i].direct_Supervisor
-              this.directSupervisor = list[i].id
-            }
-            list[i]['letter_index'] = '#'
-            if(this.$store.getters.employee_map[list[i].id]){
-              list[i]['letter_index'] = this.$store.getters.employee_map[list[i].id].letter_index
-              if(this.$store.getters.employee_map[list[i].id].img_url == ''){
-                list[i]['img_url'] = 'static/images/head_default.png'
-              }else {
-                list[i]['img_url'] = this.$store.getters.employee_map[list[i].id].img_url
-              }
-            }
-
-            list[i]['checked'] = false
-            if(this.employee_selected.indexOf(list[i].id) >= 0){
-              list[i]['checked'] = true
-            }
-          }
-
-          if (this.keyword) {
-            list = []
-            this.employee_list.forEach(element => {
-              if(element.name.indexOf(this.keyword) != "-1"){
-                list.push(element)
-              }
-            });
-          }
-
-          this.list = list.sort((a,b) => {
-            return a.letter_index.charCodeAt(0) - b.letter_index.charCodeAt(0)
-          })
-          if(this.whether_to_remove_right){
-            this.selectedLists()
-          }
-          this.searchBox = this.list
-          
-          this.selectApersonModuleLoad = false
-          done()
-          return false
+        .finally(() => {
+          this.table_loading = false;
+        });
+    },
+    // 过滤各种条件:如:自己,创始人,只显示管理者等。。。
+    filtration(data) {
+      var list = data;
+      // 去除已经离职的人
+      for (let i = 0; i < list.length; i++) {
+        if (list[i].status == 2) {
+          list.splice(i, 1);
+          i--
         }
-        this.list = []
-        this.selectApersonModuleLoad = true
-        this.$http('get','/api/employee/index',{dept_id: this.pid,keywords: this.keyword,page: 0,page_size: 2000}).then((res) => {
-          let employeeSelectedData = []
-          for(let i in this.employee_selected_list){
-            employeeSelectedData.push(this.employee_selected_list[i].id)
-          }
-          for (let i in res.data.data.list) {
-            res.data.data.list[i]['checked'] = false
-            if (this.employee_selected.indexOf(res.data.data.list[i].id) >= 0) {
-              res.data.data.list[i]['checked'] = true
-            }
-            if (employeeSelectedData.indexOf(res.data.data.list[i].id) >= 0) {
-              res.data.data.list[i]['checked'] = true
-            }
-            if (res.data.data.list[i].img_url == '') {
-              res.data.data.list[i].img_url = 'static/images/head_default.png'
+      }
+      var managerList = []; // 管理者列表
+      // 只显示管理者
+      if (this.is_manager_only) {
+        var isManager;
+        list.map(item => {
+          isManager = false;
+          item.employee_detail.role_list.map(item2 => {
+            if (item2.name == 'creator' || item2.name == 'point_manager' || item2.name == 'dept_manager' || item2.name == 'admin') {
+              isManager = true;
             }
+          });
+          if (isManager) {
+            managerList.push(item);
           }
-          if (this.use_employee_list) {
-            res.data.data.list.forEach(element => {
-              if (element.employee_detail.role_list.findIndex((value)=>value.name=='dept_manager'||value.name=='creator'||value.name=='point_manager'||value.name=='admin') >= 0) {
-                this.list.push(element)
-              }
-            });
-            return false
-          }else{
-            this.list = res.data.data.list
-          }
-          if(this.whether_to_remove_right){
-            this.selectedLists()
-          }
-          this.searchBox = this.list
-          done()
-        }).catch((e) => {
-          done()
-        }).finally(()=>{
-          this.selectApersonModuleLoad = false
-        })
-      },
-      selectedLists(){
-        let selected_list = []
-        // console.log(this.employee_selected_list.filter(a=>!this.list.some(b=>b.id==a.id)))
-        selected_list = this.employee_selected_list.filter(a=>!this.list.some(b=>b.id==a.id))
-        console.log(selected_list.length)
-        if(selected_list.length!=0){
-          console.log(selected_list.length)
-          for(let i in this.employee_selected_list){
-            for(let a in selected_list){
-              if(this.employee_selected_list[i].id == selected_list[a].id){
-                this.employee_selected_list.splice(i,1)
-              }
-            }
+        });
+        list = managerList;
+      }
+      //只显示上级
+      // if (this.is_superior) {
+      //   let isManager = [];
+      //   list.some(item => {
+      //     if(item.id == this.$store.getters.user_info.id){
+      //       isManager = item.employee_detail.superior_list
+      //       return true
+      //     }
+      //   });
+      //   console.log(isManager)
+      //   list = isManager;
+      // }
+      // 过滤自己
+      if (!this.include_self) {
+        const currUserId = this.$store.getters.user_info.id;
+        for (let i = 0; i < list.length; i++) {
+          if (list[i].id == currUserId) {
+            list.splice(i, 1);
+            i--
           }
         }
-      },
-      removeSelf(list){
-        if (!this.include_self){
-          const currUserId = this.$store.getters.user_info.id
-          const index = list.findIndex(o=>o.id === currUserId)
-          if(index > -1){
-            list.splice(index, 1)
+      }
+      // 过滤创始人
+      if (this.is_filtration_creator) {
+        for (let i = 0; i < list.length; i++) {
+          if (list[i].is_creator == 1) {
+            list.splice(i,1);
+            i--
           }
         }
-        return list
       }
-    },
-    created() {
-      for(let i in this.selected.employee){
-        if(!this.selected.employee[i].img_url){
-          this.selected.employee[i].img_url = 'static/images/head_default.png'
+      //过滤指定人员[]
+      if (this.employee_not_select.length > 0) {
+        for (let i = 0; i < list.length; i++) {
+          if (this.employee_not_select.indexOf(list[i].id) >= 0) {
+            list.splice(i, 1);
+            i--
+          }
         }
       }
-      if (document.documentElement.style.height) {
-        this.com_height = document.documentElement.style.height
-      }
-      setTimeout(() => {
-        if (this.$route.query.pid) {
-          this.pid = this.$route.query.pid
-        }
-        this.get_user_list(function () {
-          
-        })
-        
-        this.get_dept_list()
-      }, 200)
 
+      var eSList = this.employee_selected_list;
+      this.employee_selected_list = eSList.filter(x => list.some(y => y.id === x.id));
+      return list;
     }
-  }
+  },
+  created() {}
+};
 </script>
 
-<style scoped>
-  .employee_selector_box {
-    width: 600px;
-    padding: 24px;
-  }
-
-  /* 搜索框 */
-  .employee_selector_box .search{
-    position: relative;
-    display: table-cell;
-    left: 10%;
-    padding: 0;
-    border: 1px #C0C4CC solid;
-    border-radius: 16.5px;
-  }
-  .employee_selector_box .search-box button{
-    display: inline-block;
-    vertical-align: middle;
-    margin-left: 10px;
-    width: auto;
-    padding: 0;
-    background: none;
-    border-radius: 0px;
-    border: none;
-  }
-  .employee_selector_box .search-box /deep/ .el-input{
-    display: inline-block;
-    width: 84%;
-    padding: 0 24px 0 6px;
-    background: none;
-    border-radius: 0px;
-    border: none;
-  }
-  .employee_selector_box .search-box /deep/ .el-input input{
-    padding:0;
-    line-height: 34px;
-    border:none;
-  }
-  /* /搜索框 */
-
-  /* 左边框 */
-  .employee_selector_box .choose_left {
-    /* padding:8px 10px 8px 10px; */
-    padding: 0 10px;
-    margin: 8px 0;
-  }
-
-  .employee_selector_box .choose_left .employee_cell{
-    border-bottom:1px #f8f8f8 solid;
-  }
-  .employee_selector_box .choose_left .employee_cell_a .employee_cell{
-    border-bottom:none;
-  }
-  .employee_selector_box .choose_left .employee_checkbox{
-    padding-left: 8px;
-  }
-  .employee_selector_box .choose_left .employee_img_url{
-    padding-left: 8px;
-  }
-  .employee_selector_box .choose_left .employee_name{
-    padding-left: 8px;
-  }
-
-  .employee_selector_box /deep/ .el-scrollbar__thumb {
-    width:2px;
-    margin:15px 0 0 6px;
-    background:#409EFF;
-  }
-  /* 左边框 */
-
-  /* 右边距 */
-  .employee_selector_box .option-box{
-    padding:14px 0;
-  }
-  .employee_selector_box .option-box button{
-    margin-right:16px;
-  }
-  .employee_selector_box .choose_right{
-    padding:8px 10px;
-  }
-  .employee_selector_box .choose_right .employee_delete .el-button{
-    transform: scale(0.5);
-    background: #C0C4CC;
-  }
-  .employee_selector_box .choose_right .employee_delete .el-button /deep/ .el-icon-close{
-    color:#fff;
-  }
-  .employee_selector_box .choose_right .employee_delete .el-button:active{
-    background: #409EFF;
-  }
-  .employee_selector_box .choose_right .employee_delete .el-button:active /deep/ .el-icon-close{
-    color:#FFF;
-  }
-  .employee_selector_box .choose_right .employee_cell .employee_name{
-    padding-left:8px;
-  }
-  .employee_selector_box .choose_right .employee_cell .employee_img_url{
-    padding-left:8px;
-  }
-  /* 右边距 */
-
-  .employee_selector_box /deep/ .employee_cell{
-    padding:8px 0;
-  }
-  .employee_selector_box /deep/ .employee_cell:hover{
-    background:#ecf5ff;
-  }
-
-  .employee_cell {
-    display: table;
-    cursor: pointer;
-    width: 100%;
-    color:#606266;
-    padding: 8px 0;
-    background-color: transparent;
-  }
-
-  .employee_cell .employee_cell_clear {
-    clear: both;
-  }
-
-  .employee_cell .employee_img_url {
-    display: table-cell;
-    vertical-align: middle;
-    width: 30px;
-    padding-left:0px;
-  }
-
-  .employee_cell .employee_img_url img {
-    width: 24px;
-    height: 24px;
-    border-radius: 50%;
-  }
-
-  .employee_cell .employee_checkbox {
-    display: table-cell;
-    vertical-align: middle;
-    width: 30px;
-    text-align: center;
-  }
-
-  .employee_cell .employee_name{
-    display:table-cell;
-    vertical-align: middle;
-    color:#606266;
-  }
-
-  .employee_delete {
-    display: table-cell;
-    text-align: right;
-    padding-right:0px;
-  }
-
-  .employee_cell_a {
-    display: block;
-  }
-
-  .employee_cell_a:hover {
-    background-color: #ecf5ff;
-    border-radius:4px;
-  }
-
-  .dept_child_cell {
-    display: table-cell;
-    vertical-align: middle;
-  }
-
-  .dept_child_cell span {
-    float: right;
-    padding-right:8px;
-  }
-  .dept_child_cell span:hover{
-    color:#1c1c1c;
-  }
-  .dept_child_cell span:active{
-    color:#1c1c1c;
-  }
-
-  .scroller-box {
-    height: 400px;
-    padding-right: 0px !important;
-    background-color: #fdfdfd;
-    border: 1px solid #eee;
-    border-radius: 4px;
-    overflow: hidden;
-  }
-
-  .col-line {
-    position: relative;
-    height: 400px;
-  }
-
-  .col-line:before {
-    content: " ";
-    width: 1px;
-    height: 400px;
-    position: absolute;
-    top: 0;
-    bottom: 0;
-    left: 50%;
-    background-color: #eee;
-  }
-
-  .search-box {
-    background-color: #fff;
-    padding:14px 5px;
-    border-bottom: 1px solid #eee;
-    margin: 0 -5px;
-  }
-
-  .option-box {
-    padding: 5px;
-    background-color: #fff;
-    border-bottom: 1px solid #eee;
-    margin: 0 -5px;
-    text-align: right;
-  }
-
-  .child_btn {
-    color: #409EFF;
-  }
-  .dept_path{
-    margin: 10px 0;
-    display: block;
-    white-space: nowrap;
-    overflow: auto;
-  }
-
-  /*滚动条的宽度*/
-
-  .dept_path::-webkit-scrollbar {
-    width:5px;
-    height:5px;
-  }
-
-  /*外层轨道。可以用display:none让其不显示,也可以添加背景图片,颜色改变显示效果*/
-
-  .dept_path::-webkit-scrollbar-track {
-    width: 6px;
-    background-color:#fff0;
-    -webkit-border-radius: 2em;
-    -moz-border-radius: 2em;
-    border-radius:2em;
-  }
-
-  /*滚动条的设置*/
-
-  .dept_path::-webkit-scrollbar-thumb {
-    background-color:#fff0;
-    background-clip:padding-box;
-    min-height:28px;
-    -webkit-border-radius: 2em;
-    -moz-border-radius: 2em;
-    border-radius:2em;
-  }
-  /*滚动条移上去的背景*/
-
-  .dept_path:hover::-webkit-scrollbar-thumb{
-    background-color:rgba(144,147,153,.3);
-  }
-
-
-  .scrollbarHeight1{
-    height: 300px;
-  }
-  .scrollbarHeight2{
-    height: 320px;
+<style scoped lang="scss">
+.showCheckbox .isCheckbox{
+   height: 7px;
+   width: 7px;
+   background-color: #26A2FF;
+   display: inline-block;
+   border-radius: 2px;
+   line-height: 14px;
+   position: relative;
+   top: -3px;
+}
+.showCheckbox{
+  border: 1px solid #26A2FF !important;
+}
+.checkbox{
+  height: 14px;
+  width: 14px;
+  border: 1px solid #dcdfe6;
+  background: #fff;
+  border-radius: 2px;
+  position: relative;
+  box-sizing: border-box;
+  text-align: center;
+}
+.deptList {
+  padding: 12px 0;
+  border-bottom: 1px solid #f1f1f1;
+  cursor: pointer;
+}
+.employee_selector_box {
+  width: 600px;
+  padding: 20px;
+  box-sizing: border-box;
+  margin: 0 auto;
+}
+
+/* 搜索框 */
+.employee_selector_box .search {
+  margin: 0 auto;
+  width: 80%;
+  min-height: 36px;
+}
+
+.employee_selector_box .search-box button {
+  display: inline-block;
+  vertical-align: middle;
+  margin-left: 10px;
+  width: auto;
+  padding: 0;
+  background: none;
+  border-radius: 0px;
+  border: none;
+}
+/* /搜索框 */
+
+/* 左边框 */
+.employee_selector_box .choose_left {
+  padding: 8px 10px 8px 10px;
+}
+
+.employee_selector_box .choose_left .employee_cell {
+  border-bottom: 1px #f1f1f1 solid;
+}
+
+.employee_selector_box .choose_left .employee_cell_a .employee_cell {
+  border-bottom: none;
+}
+
+.employee_selector_box .choose_left .employee_checkbox {
+  padding-left: 8px;
+}
+
+.employee_selector_box .choose_left .employee_img_url {
+  padding-left: 8px;
+}
+
+.employee_selector_box .choose_left .employee_name {
+  padding-left: 8px;
+}
+
+.employee_selector_box ::v-deep .el-scrollbar__thumb {
+  width: 2px;
+  margin: 15px 0 0 6px;
+  background: #409eff;
+}
+
+/* 左边框 */
+
+/* 右边距 */
+.employee_selector_box .option-box {
+  padding: 14px 0;
+}
+
+.employee_selector_box .option-box button {
+  margin-right: 16px;
+}
+
+.employee_selector_box .choose_right {
+  padding: 8px 10px;
+}
+
+.employee_selector_box .choose_right .employee_delete .el-button {
+  transform: scale(0.5);
+  background: #c0c4cc;
+}
+
+.employee_selector_box .choose_right .employee_delete .el-button /deep/ .el-icon-close {
+  color: #fff;
+}
+
+.employee_selector_box .choose_right .employee_delete .el-button:active {
+  background: #409eff;
+}
+
+.employee_selector_box .choose_right .employee_delete .el-button:active /deep/ .el-icon-close {
+  color: #fff;
+}
+
+.employee_selector_box .choose_right .employee_cell .employee_name {
+  padding-left: 8px;
+}
+
+.employee_selector_box .choose_right .employee_cell .employee_img_url {
+  padding-left: 8px;
+}
+
+/* 右边距 */
+
+.employee_selector_box /deep/ .employee_cell {
+  padding: 8px 0;
+  border-bottom: 1px #f1f1f1 solid;
+}
+
+.employee_selector_box /deep/ .employee_cell:hover {
+  background: #ecf5ff;
+}
+
+.employee_cell {
+  display: -webkit-inline-box;
+  cursor: pointer;
+  width: 100%;
+  color: #606266;
+  padding: 8px 0;
+  background-color: transparent;
+}
+
+.employee_cell .employee_cell_clear {
+  clear: both;
+}
+
+.employee_cell .employee_img_url {
+  display: table-cell;
+  vertical-align: middle;
+  width: 30px;
+  padding-left: 0px;
+}
+
+.employee_cell .employee_img_url img {
+  width: 24px;
+  height: 24px;
+  border-radius: 50%;
+}
+
+.employee_cell .employee_checkbox {
+  display: table-cell;
+  vertical-align: middle;
+  width: 30px;
+  text-align: center;
+}
+
+.employee_cell .employee_name {
+  display: table-cell;
+  vertical-align: middle;
+  color: #606266;
+}
+
+.employee_delete {
+  display: table-cell;
+  text-align: right;
+  padding-right: 0px;
+}
+
+.employee_cell_a {
+  display: block;
+}
+
+.employee_cell_a:hover {
+  background-color: #ecf5ff;
+  border-radius: 4px;
+}
+
+.dept_child_cell {
+  display: table-cell;
+  vertical-align: middle;
+}
+
+.dept_child_cell span {
+  float: right;
+  padding-right: 8px;
+}
+
+.dept_child_cell span:hover {
+  color: #1c1c1c;
+}
+
+.dept_child_cell span:active {
+  color: #1c1c1c;
+}
+
+.scroller-box {
+  height: 440px;
+  padding-right: 0px !important;
+  background-color: #fdfdfd;
+  border: 1px solid #eee;
+  border-radius: 4px;
+  overflow: hidden;
+}
+/* .scroller-box.one{
+    height: 440px;
+  } */
+
+.col-line {
+  position: relative;
+  height: 400px;
+}
+
+.col-line:before {
+  content: ' ';
+  width: 1px;
+  height: 400px;
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  left: 50%;
+  background-color: #eee;
+}
+
+.search-box {
+  background-color: #fff;
+  padding: 14px 5px;
+  border-bottom: 1px solid #eee;
+  margin: 0 -5px;
+}
+
+.option-box {
+  padding: 5px;
+  background-color: #fff;
+  border-bottom: 1px solid #eee;
+  margin: 0 -5px;
+  text-align: right;
+}
+
+.child_btn {
+  color: #409eff;
+}
+.dept_path {
+  padding: 10px 0;
+  border-bottom: 1px solid #f1f1f1;
+  min-height: 37px;
+}
+
+.scrollbarHeight1 {
+  height: 310px;
+}
+.scrollbarHeight2 {
+  height: 350px;
+}
+/deep/ .dept_icon{
+  .el-input__validateIcon{
+    display: none;
   }
+}
+/deep/ .el-cascader__dropdown{
+  // position: fixed;
+  // top: 190px;
+  // left: 364px;
+  z-index: 10001;
+}
 </style>

+ 922 - 0
src/views/common/EmployeeSelector1 copy.vue

@@ -0,0 +1,922 @@
+<template>
+  <div>
+    <div class="employee_selector_box">
+      <el-row :gutter="10">
+        <el-col :xs="11" :sm="11" :md="11" :lg="11" :xl="11" class="scroller-box one">
+
+          <div class="search-box">
+            <div class="search">
+              <el-button slot="append" icon="el-icon-search" class="manager_button"></el-button>
+              <el-input v-model="keyword" placeholder="请输入内容"></el-input>
+            </div>
+          </div>
+          <div class="dept_path">
+            <a href="javascript:void(0);" @click="back_by_index(0)">全公司</a>
+            <a
+              v-for="(item, index) in pid_list_arr"
+              :key="index"
+              href="javascript:void(0);"
+              @click="back_by_index(index + 1)"
+            >
+              <i class="el-icon-arrow-right"></i>
+              <WWOpenData type="departmentName" :openid="item.name"></WWOpenData>
+            </a>
+          </div>
+          <el-checkbox v-if="isChecKedAll" v-model="checked" @change="checkedChange" >全选</el-checkbox>
+          <el-scrollbar wrap-class="column-wrapper scrollable-items-container" :native="false" :class="isChecKedAll?'scrollbarHeight1':'scrollbarHeight2'">
+            <div class="choose_left">
+              <a href="javascript:void(0)" v-for="(item,index) in dept_list" :key="index">
+                <div class="employee_cell" @click="select_dept(item)" v-show="item.pid == pid && item.name.indexOf(keyword) >= 0 && dept_not_select.indexOf(item.id) < 0">
+                  <i class="el-icon-caret-right" style=" display: inline-block;"></i>
+                  <div class="employee_checkbox" v-if="can_select_dept">
+                    <el-checkbox v-model="item.checked"></el-checkbox>
+                  </div>
+                  <div class="employee_name">
+                    <WWOpenData type="departmentName" :openid="item.name"></WWOpenData>
+                  </div>
+
+                  <div v-if="can_select_dept" class="dept_child_cell">
+                    <span href="javascript:void(0);" class="child_btn" @click.stop="show_child(item)">
+                      | 下级
+                    </span>
+                  </div>
+
+                  <div class="employee_cell_clear"></div>
+
+                </div>
+              </a>
+              <div class="persons_box" style="padding-top:4px;">
+                <a class="employee_cell_a" href="javascript:void(0)" v-for="(item,index) in list" :key="index" v-show="item.id">
+                  <div class="employee_cell" v-if="can_select_employee" @click.prevent.stop="select_employee(item)" v-show="employee_not_select.indexOf(item.id) < 0">
+                    <div class="employee_checkbox">
+                      <el-checkbox v-model="item.checked" v-if="selectedQuitEmployee" :style="item.status > 1 || employee_not_select.indexOf(item.id) > 0?'opacity: 0':'opacity: 1'" ></el-checkbox>
+                      <el-checkbox v-model="item.checked" v-if="!selectedQuitEmployee" :style="item.status > 1 || employee_not_select.indexOf(item.id) > 0?'opacity: 0':'opacity: 1'" ></el-checkbox>
+                    </div>
+                    
+                    <div class="employee_img_url">
+                      <img :src="item.img_url" class="employee_cell_head_img" />
+                    </div>
+                    <div class="employee_name">
+                      <!-- {{item.name}} -->
+                      <WWOpenData type="userName" :openid="item.name"></WWOpenData>
+                    </div>
+                    <div class="employee_cell_clear"></div>
+
+                  </div>
+                </a>
+              </div>
+
+            </div>
+
+
+          </el-scrollbar>
+        </el-col>
+        <el-col :xs="2" :sm="2" :md="2" :lg="2" :xl="2" class="col-line"><span style="opacity: 0;">空</span></el-col>
+        <el-col :xs="11" :sm="11" :md="11" :lg="11" :xl="11" class="scroller-box">
+          <div class="option-box">
+            <span style="line-height: 40px; padding-left: 10px;" class="fl" v-show="multi">已选择{{employee_selected_list.length}}个员工</span>
+            <el-button type="type" @click="clear_data">清空</el-button>
+          </div>
+          <el-scrollbar wrap-class="column-wrapper scrollable-items-container" :native="false" style="height: 400px;">
+            <div class="choose_right">
+              <div class="employee_cell" v-for="(item,index) in dept_selected_list" :key="index">
+
+                <div class="employee_name">
+                  <WWOpenData type="departmentName" :openid="item.dept_name"></WWOpenData>
+                </div>
+                <div class="employee_delete">
+                  <el-button type="default" size="mini" @click="dept_cancel(item)" icon="el-icon-close" circle></el-button>
+                </div>
+                <div class="employee_cell_clear"></div>
+              </div>
+
+              <div class="employee_cell" v-for="(item,index) in employee_selected_list" :key="index">
+
+                <div class="employee_img_url" v-if="item.img_url">
+                  <img :src="item.img_url" class="employee_cell_head_img" />
+                </div>
+                <div class="employee_img_url" v-else>
+                  <img src="static/images/head_default.png" class="employee_cell_head_img" />
+                </div>
+                <div class="employee_name">
+                  <!-- {{item.name}} -->
+                  <WWOpenData type="userName" :openid="item.name"></WWOpenData>
+                </div>
+                <div class="employee_delete">
+                  <el-button type="default" size="mini" @click="employee_cancel(item,true)" icon="el-icon-close" circle></el-button>
+                </div>
+                <div class="employee_cell_clear"></div>
+              </div>
+            </div>
+          </el-scrollbar>
+        </el-col>
+      </el-row>
+    </div>
+
+    <!--    
+    <span slot="footer" class="dialog-footer">
+      <el-button @click="close">取 消</el-button>
+      <el-button type="primary" @click="confirm">确 定</el-button>
+    </span> 
+    -->
+
+  </div>
+</template>
+
+<script>
+  var timers = null
+  export default {
+    props:{
+      Out_of_the_current:{
+        type: Boolean,
+      },
+      two_of_the_current:{
+        type: Boolean,
+      },
+      two_of_the_current_two:{
+        type: Number,
+      },
+      append_body: {
+        type: Boolean,
+        default: false
+      },
+      visible: {
+        type: Boolean,
+        default: false
+      },
+      can_select_dept: {
+        type: Boolean,
+        default: true
+      },
+      can_select_employee: {
+        type: Boolean,
+        default: true
+      },
+      employee_not_select: {
+        type: Array,
+        default: () => {
+          return []
+        }
+      },
+      dept_not_select: {
+        type: Array,
+        default: () => {
+          return []
+        }
+      },
+      selected: {
+        type: Object,
+        default: () => {
+          return {employee: [], dept: []}
+        }
+      },
+      multi: {
+        type: Boolean,
+        default: true
+      },
+      dept_multi: {
+        type: Boolean,
+        default: true
+      },
+      employee_list: {
+        type: Array,
+        default: () => {
+          return []
+        }
+      },
+      selectedQuitEmployee:{
+        type: Boolean,
+        default: true
+      },
+      isChecKedAll: {
+        type: Boolean,
+        default: true
+      },
+      close_clear_data: {
+        type: Boolean,
+        default: true
+      },
+      max: {
+        type: Number,
+        default: 0
+      }
+    },
+    name: "EmployeeSelector",
+    data() {
+      let selected = JSON.parse(JSON.stringify(this.selected))
+      return {
+        searchBox:[],
+        dialogVisible: true,
+        employee_selected_list: selected.employee,
+        dept_selected_list: selected.dept,
+        employee_selected: [],
+        dept_selected: [],
+        com_height: '100%',
+        company_info: {},
+        actions_show: false,
+        dept_name: '',
+        dept_id: 0,
+        list: [],
+        dept_list: [],
+        keyword: '',
+        owner_id: 0,
+        user_info: this.$store.getters.user_info,
+        pid: 0,
+        pid_list: [],
+        selected_box_width: '0',
+        pid_list_arr: [],
+        visible_: false,
+        checked: false
+      }
+    },
+    watch: {
+      max(val) {
+        this.set_button_width()
+      },
+      selected:{
+        deep:true,
+        handler(val){
+          let selected = JSON.parse(JSON.stringify(val))
+          this.employee_selected = []
+          this.dept_selected = []
+          this.employee_selected_list = selected.employee
+          this.dept_selected_list = selected.dept
+          for (let i in selected.employee) {
+            this.employee_selected.push(selected.employee[i].id)
+          }
+          for(let i in selected.dept){
+            this.dept_selected.push(selected.dept[i].dept_id)
+          }
+          this.set_button_width()
+        },
+        immediate: true
+      },
+      // selected(val) {
+      //   let selected = JSON.parse(JSON.stringify(val))
+      //   this.employee_selected = []
+      //   this.dept_selected = []
+      //   this.employee_selected_list = selected.employee
+      //   this.dept_selected_list = selected.dept
+      //   for (let i in selected.employee) {
+      //     this.employee_selected.push(selected.employee[i].id)
+      //   }
+      //   for(let i in selected.dept){
+      //     this.dept_selected.push(selected.dept[i].dept_id)
+      //   }
+      //   this.set_button_width()
+      // },
+      visible(val){
+        this.visible_ = JSON.parse(JSON.stringify(val))
+        if(val){
+          setTimeout(() => {
+            if (this.$route.query.pid) {
+              this.pid = this.$route.query.pid
+            }
+            this.get_user_list(function () {
+
+            })
+            this.get_dept_list()
+          }, 200)
+        }
+        this.set_button_width()
+      },
+      employee_selected_list() {
+        let l = this.employee_selected_list.length + this.dept_selected_list.length
+        let width = 0.9 * l;
+        this.selected_box_width = width + 'rem'
+        this.set_button_width()
+      },
+      dept_selected_list() {
+        let l = this.employee_selected_list.length + this.dept_selected_list.length
+        let width = 0.9 * l;
+        this.selected_box_width = width + 'rem'
+        this.set_button_width()
+      },
+      keyword(val) {
+        // this.options =this.keyword?this.alloptions.filter(item=> item.name.includes (this,keyword)): this. alloptions
+        //this.list
+        this.list = this.searchBox.filter(item=> item.name.includes(this.keyword))
+        // this.list.filter(val)
+        // clearTimeout(timers)
+        // // timers = setTimeout(function () {
+        // //   this.get_user_list(function () {})
+        // // }, 500)
+        // timers = setTimeout(()=>{
+        //   this.get_user_list()
+        // },500)
+      }
+    },
+    methods: {
+      defaultImg(){
+        return "https://rescdn.qqmail.com/node/wwmng/wwmng/style/images/independent/DefaultAvatar$73ba92b5.png"
+      },
+      // 全选
+      checkedChange(val){
+        if (val) {
+          for (let i in this.list) {
+            if (this.employee_not_select.indexOf(this.list[i].id) < 0) {
+              this.$set(this.list[i], 'checked', true)
+            }
+          }
+          this.$nextTick(() => {
+            let employeeSelectedList = JSON.parse(JSON.stringify(this.employee_selected_list))
+            let employeeSelectedIds = [], total = 0
+            employeeSelectedList.forEach(element => {
+              employeeSelectedIds.push(element.id)
+            });
+            for (const i in this.list) {
+              this.list[i].status !== 2 && this.selectedQuitEmployee?this.$set(this.list[i], 'checked', true):''
+              if (employeeSelectedIds.includes(this.list[i].id)) {
+                total += 1
+              }else{
+                this.list[i].status !== 2 && this.selectedQuitEmployee?this.employee_selected_list.push(this.list[i]):''
+              }
+            }
+            // console.log(this.employee_not_select)
+            // console.log(this.employee_selected_list)
+            // debugger
+          })
+        }else{
+          this.employee_selected_list = []
+          this.employee_selected = []
+          for (let i in this.list) {
+            this.$set(this.list[i], 'checked', false)
+          }
+          // this.clear_data() 
+        }
+      },
+      close_before(done) {
+        this.close()
+      },
+      set_button_width() {
+
+      },
+      back() {
+        this.pid = this.pid_list[this.pid_list.length - 1]
+        this.pid_list.splice(this.pid_list.length - 1)
+        this.pid_list_arr.splice(this.pid_list_arr.length - 1)
+        this.get_user_list(function () {
+
+        })
+      },
+      back_by_index(index) {
+
+        if (index == this.pid_list.length) {
+          return false
+        }
+        this.pid = this.pid_list[index]
+        this.pid_list.splice(index, 100)
+        this.pid_list_arr.splice(index, 100)
+        this.get_user_list(function () {
+
+        })
+      },
+      show_child(item) {
+        this.pid_list.push(this.pid)
+        this.pid_list_arr.push(item)
+        this.pid = item.id
+        this.get_user_list(function () {
+
+        })
+      },
+      employee_cancel(item) {
+        this.employee_selected.splice(this.employee_selected.indexOf(item.id), 1)
+        let delete_index = -1
+        for (let i in this.employee_selected_list) {
+          if (this.employee_selected.indexOf(this.employee_selected_list[i].id) < 0) {
+            delete_index = i
+          }
+        }
+        if (delete_index >= 0) {
+          // this.employee_selected_list.splice(delete_index, 1)
+          for (let i in this.list) {
+            if (this.list[i].id == item.id) {
+              this.$set(this.list[i], 'checked', false)
+            }
+          }
+          for(let i in this.employee_selected_list){
+            if(this.employee_selected_list[i].id == item.id){
+              this.employee_selected_list.splice(i, 1)
+            }
+          }
+        }
+      },
+      dept_cancel(item) {
+        this.dept_selected.splice(this.dept_selected.indexOf(item.dept_id), 1)
+        let delete_index = -1
+        for (let i in this.dept_selected_list) {
+          if (this.dept_selected.indexOf(this.dept_selected_list[i].dept_id) < 0) {
+            delete_index = i
+          }
+        }
+        if (delete_index >= 0) {
+          this.dept_selected_list.splice(delete_index, 1)
+          for(let i in this.dept_list){
+            if(this.dept_list[i].id == item.dept_id){
+              this.$set(this.dept_list[i], 'checked', false)
+            }
+          }
+        }
+      },
+      select_employee(item){
+        
+        if (this.selectedQuitEmployee) {
+          if (this.employee_not_select.indexOf(item.id) >= 0 || item.status > 1) {
+            return false
+          }
+        }else{
+          if (this.employee_not_select.indexOf(item.id) >= 0) {
+            return false
+          }
+        }
+
+        if(item.checked){
+          item.checked = false
+          this.employee_cancel(item)
+          this.$emit('confirms', '')
+        } else {
+          if (!this.multi) {
+            this.employee_selected = []
+            this.employee_selected_list = []
+            for (let i in this.list) {
+              this.$set(this.list[i], 'checked', false)
+            }
+          }
+          if (this.max > 0 && this.employee_selected.length == this.max && this.multi) {
+            this.$toast('最多只能选择' + this.max + '人')
+            return false
+          }
+          this.employee_selected.push(item.id)
+          this.employee_selected_list.push({id: item.id, name: item.name, img_url: item.img_url})
+          item.checked = true
+          this.$emit('confirms', this.employee_selected_list)
+        }
+      },
+      select_dept(item) {
+        if (!this.can_select_dept) {
+          this.show_child(item)
+          return false
+        }
+        if (item.checked) {
+          item.checked = false
+          this.dept_cancel(item)
+        } else {
+          if (!this.dept_multi) {
+            this.dept_selected = []
+            this.dept_selected_list = []
+            for (let i in this.dept_list) {
+              this.$set(this.dept_list[i], 'checked', false)
+            }
+          }
+          this.dept_selected.push(item.id)
+          this.dept_selected_list.push({dept_id: item.id, dept_name: item.name, avatar: 'static/images/e66f.jpg'})
+          item.checked = true
+        }
+
+      },
+      clear_data(){
+        this.employee_selected = []
+        this.employee_selected_list = []
+        this.dept_selected = []
+        this.dept_selected_list = []
+        for (let i in this.list) {
+          this.$set(this.list[i], 'checked', false)
+        }
+        for (let i in this.dept_list) {
+          this.$set(this.dept_list[i], 'checked', false)
+        }
+      },
+      close() {
+        //this.visible = false
+        // this.$emit('update:visible', false)
+        this.$emit('cancel')
+        if (this.close_clear_data) {
+          this.employee_selected = []
+          this.employee_selected_list = []
+          this.dept_selected = []
+          this.dept_selected_list = []
+          for (let i in this.list) {
+            this.$set(this.list[i], 'checked', false)
+          }
+          for (let i in this.dept_list) {
+            this.$set(this.dept_list[i], 'checked', false)
+          }
+        }
+
+      },
+      confirm() {
+        this.$emit('confirm', {
+          employee: this.employee_selected_list,
+          dept: this.dept_selected_list
+        })
+        this.close()
+      },
+      get_dept_list(){
+        if(this.employee_list.length > 0){
+          return
+        }
+        this.$http('get','/api/department/index',{pid: this.pid, keyword:this.keyword}).then((res) => {
+          for(let i in res.data.data.list){
+            res.data.data.list[i]['checked'] = false
+            if (this.dept_selected.indexOf(res.data.data.list[i].id) >= 0) {
+              res.data.data.list[i]['checked'] = true
+            }
+          }
+          this.dept_list = res.data.data.list
+          this.owner_id = res.data.data.owner_id
+          this.company_info = res.data.data.company_info
+          if (res.data.data.dept_info == null) {
+            this.dept_name = JSON.parse(JSON.stringify(res.data.data.company_info.name))
+            this.dept_id = 0
+          } else {
+            this.dept_name = JSON.parse(JSON.stringify(res.data.data.dept_info.name))
+            this.dept_id = res.data.data.dept_info.id
+          }
+
+        }).catch((e) => {
+
+        })
+      },
+      get_user_list (done) {
+        if(this.employee_list.length > 0){
+          let list = this.employee_list
+          for(let i in list){
+            list[i]['letter_index'] = '#'
+            if(this.$store.getters.employee_map[list[i].id] && this.employee_not_select.indexOf(list[i].id) < 0){
+              list[i]['letter_index'] = this.$store.getters.employee_map[list[i].id].letter_index
+              list[i]['status'] = this.$store.getters.employee_map[list[i].id].status
+              if(this.$store.getters.employee_map[list[i].id].img_url == '' || this.$store.getters.employee_map[list[i].id].img_url == this.defaultImg()){
+                list[i]['img_url'] = 'static/images/head_default.png'
+              }else {
+                list[i]['img_url'] = this.$store.getters.employee_map[list[i].id].img_url
+              }
+            }
+
+            list[i]['checked'] = false
+            if(this.employee_selected.indexOf(list[i].id) >= 0){
+              list[i]['checked'] = true
+            }
+          }
+
+          if (this.keyword) {
+            list = []
+            this.employee_list.forEach(element => {
+              if(element.name.indexOf(this.keyword) != "-1"){
+                list.push(element)
+              }
+            });
+          }
+
+          this.list = list.sort((a,b) => {
+            return a.letter_index.charCodeAt(0) - b.letter_index.charCodeAt(0)
+          })
+          this.searchBox = this.list
+          done()
+          return false
+        }
+        this.list = []
+        this.$http('get','/api/employee/index',{dept_id: this.pid,keywords: this.keyword,page: 0,page_size: 2000}).then((res) => {
+          for (let i in res.data.data.list) {
+            res.data.data.list[i]['checked'] = false
+            if (this.employee_selected.indexOf(res.data.data.list[i].id) >= 0) {
+              res.data.data.list[i]['checked'] = true
+            }
+            if (res.data.data.list[i].img_url == '' || res.data.data.list[i].img_url == this.defaultImg()) {
+              res.data.data.list[i].img_url = 'static/images/head_default.png'
+            }
+          }
+          let lists = res.data.data.list
+          lists.forEach((element,index) => {
+            let role_list = element.employee_detail.role_list
+              if(this.Out_of_the_current){
+                role_list.forEach((item,key)=>{
+                  if(item.name == "creator"){
+                    lists.splice(index,1)
+                  }
+               })
+              }
+          });
+          lists.forEach((element,index) => {
+            if(this.two_of_the_current){
+              if(element.id == this.two_of_the_current_two){
+                lists.splice(index,1)
+              }
+            }
+          })
+          this.list = lists
+          this.searchBox = this.list
+          // console.log(this.searchBox)
+          done()
+        }).catch((e) => {
+          done()
+        })
+      }
+    },
+    created() {
+      if (document.documentElement.style.height) {
+        this.com_height = document.documentElement.style.height
+      }
+      setTimeout(() => {
+        if (this.$route.query.pid) {
+          this.pid = this.$route.query.pid
+        }
+        this.get_user_list(function () {
+
+        })
+        this.get_dept_list()
+      }, 200)
+
+    }
+  }
+</script>
+
+<style scoped>
+  .employee_selector_box {
+    width: 600px;
+    padding: 24px;
+  }
+
+  /* 搜索框 */
+  .employee_selector_box .search {
+    position: relative;
+    display: table-cell;
+    left: 10%;
+    padding: 0;
+    border: 1px #C0C4CC solid;
+    border-radius: 16.5px;
+  }
+
+  .employee_selector_box .search-box button {
+    display: inline-block;
+    vertical-align: middle;
+    margin-left: 10px;
+    width: auto;
+    padding: 0;
+    background: none;
+    border-radius: 0px;
+    border: none;
+  }
+
+  .employee_selector_box .search-box /deep/ .el-input {
+    display: inline-block;
+    width: 84%;
+    padding: 0 24px 0 6px;
+    background: none;
+    border-radius: 0px;
+    border: none;
+  }
+
+  .employee_selector_box .search-box /deep/ .el-input input {
+    padding: 0;
+    line-height: 34px;
+    border: none;
+  }
+
+  /* /搜索框 */
+
+  /* 左边框 */
+  .employee_selector_box .choose_left {
+    padding: 0 10px;
+    margin: 8px 0;
+  }
+
+  .employee_selector_box .choose_left .employee_cell {
+    border-bottom: 1px #f8f8f8 solid;
+  }
+
+  .employee_selector_box .choose_left .employee_cell_a .employee_cell {
+    border-bottom: none;
+  }
+
+  .employee_selector_box .choose_left .employee_checkbox {
+    padding-left: 8px;
+  }
+
+  .employee_selector_box .choose_left .employee_img_url {
+    padding-left: 8px;
+  }
+
+  .employee_selector_box .choose_left .employee_name {
+    padding-left: 8px;
+  }
+
+  .employee_selector_box /deep/ .el-scrollbar__thumb {
+    width: 2px;
+    margin: 15px 0 0 6px;
+    background: #409EFF;
+  }
+
+  /* 左边框 */
+
+  /* 右边距 */
+  .employee_selector_box .option-box {
+    padding: 14px 0;
+  }
+
+  .employee_selector_box .option-box button {
+    margin-right: 16px;
+  }
+
+  .employee_selector_box .choose_right {
+    padding: 8px 10px;
+  }
+
+  .employee_selector_box .choose_right .employee_delete .el-button {
+    transform: scale(0.5);
+    background: #C0C4CC;
+  }
+
+  .employee_selector_box .choose_right .employee_delete .el-button /deep/ .el-icon-close {
+    color: #fff;
+  }
+
+  .employee_selector_box .choose_right .employee_delete .el-button:active {
+    background: #409EFF;
+  }
+
+  .employee_selector_box .choose_right .employee_delete .el-button:active /deep/ .el-icon-close {
+    color: #FFF;
+  }
+
+  .employee_selector_box .choose_right .employee_cell .employee_name {
+    padding-left: 8px;
+  }
+
+  .employee_selector_box .choose_right .employee_cell .employee_img_url {
+    padding-left: 8px;
+  }
+
+  /* 右边距 */
+
+  .employee_selector_box /deep/ .employee_cell {
+    padding: 8px 0;
+  }
+
+  .employee_selector_box /deep/ .employee_cell:hover {
+    background: #ecf5ff;
+  }
+
+  .employee_cell {
+    display: -webkit-inline-box;
+    cursor: pointer;
+    width: 100%;
+    color: #606266;
+    padding: 8px 0;
+    background-color: transparent;
+  }
+
+  .employee_cell .employee_cell_clear {
+    clear: both;
+  }
+
+  .employee_cell .employee_img_url {
+    display: table-cell;
+    vertical-align: middle;
+    width: 30px;
+    padding-left: 0px;
+  }
+
+  .employee_cell .employee_img_url img {
+    width: 24px;
+    height: 24px;
+    border-radius: 50%;
+  }
+
+  .employee_cell .employee_checkbox {
+    display: table-cell;
+    vertical-align: middle;
+    width: 30px;
+    text-align: center;
+  }
+
+  .employee_cell .employee_name {
+    display: table-cell;
+    vertical-align: middle;
+    color: #606266;
+  }
+
+  .employee_delete {
+    display: table-cell;
+    text-align: right;
+    padding-right: 0px;
+  }
+
+  .employee_cell_a {
+    display: block;
+  }
+
+  .employee_cell_a:hover {
+    background-color: #ecf5ff;
+    border-radius: 4px;
+  }
+
+  .dept_child_cell {
+    display: table-cell;
+    vertical-align: middle;
+  }
+
+  .dept_child_cell span {
+    float: right;
+    padding-right: 8px;
+  }
+
+  .dept_child_cell span:hover {
+    color: #1c1c1c;
+  }
+
+  .dept_child_cell span:active {
+    color: #1c1c1c;
+  }
+
+  .scroller-box {
+    height: 440px;
+    padding-right: 0px !important;
+    background-color: #fdfdfd;
+    border: 1px solid #eee;
+    border-radius: 4px;
+    overflow: hidden;
+  }
+  /* .scroller-box.one{
+    height: 440px;
+  } */
+
+  .col-line {
+    position: relative;
+    height: 400px;
+  }
+
+  .col-line:before {
+    content: " ";
+    width: 1px;
+    height: 400px;
+    position: absolute;
+    top: 0;
+    bottom: 0;
+    left: 50%;
+    background-color: #eee;
+  }
+
+  .search-box {
+    background-color: #fff;
+    padding: 14px 5px;
+    border-bottom: 1px solid #eee;
+    margin: 0 -5px;
+  }
+
+  .option-box {
+    padding: 5px;
+    background-color: #fff;
+    border-bottom: 1px solid #eee;
+    margin: 0 -5px;
+    text-align: right;
+  }
+
+  .child_btn {
+    color: #409EFF;
+  }
+  .dept_path{
+    margin: 10px 0;
+    display: block;
+    white-space: nowrap;
+    overflow: auto;
+  }
+
+  /*滚动条的宽度*/
+
+  .dept_path::-webkit-scrollbar {
+    width:5px;
+    height:5px;
+  }
+
+  /*外层轨道。可以用display:none让其不显示,也可以添加背景图片,颜色改变显示效果*/
+
+  .dept_path::-webkit-scrollbar-track {
+    width: 6px;
+    background-color:#fff0;
+    -webkit-border-radius: 2em;
+    -moz-border-radius: 2em;
+    border-radius:2em;
+  }
+
+  /*滚动条的设置*/
+
+  .dept_path::-webkit-scrollbar-thumb {
+    background-color:#fff0;
+    background-clip:padding-box;
+    min-height:28px;
+    -webkit-border-radius: 2em;
+    -moz-border-radius: 2em;
+    border-radius:2em;
+  }
+  /*滚动条移上去的背景*/
+
+  .dept_path:hover::-webkit-scrollbar-thumb{
+    background-color:rgba(144,147,153,.3);
+  }
+  .scrollbarHeight1{
+    height: 320px;
+  }
+  .scrollbarHeight2{
+    height: 340px;
+  }
+</style>

+ 673 - 828
src/views/common/EmployeeSelector1.vue

@@ -3,108 +3,75 @@
     <div class="employee_selector_box">
       <el-row :gutter="10">
         <el-col :xs="11" :sm="11" :md="11" :lg="11" :xl="11" class="scroller-box one">
-
           <div class="search-box">
-            <div class="search">
-              <el-button slot="append" icon="el-icon-search" class="manager_button"></el-button>
-              <el-input v-model="keyword" placeholder="请输入内容"></el-input>
+            <!-- <div class="search flex-box" style="margin-bottom: 7px;"><el-input v-model="keyword" placeholder="请输入内容" clearable></el-input></div> -->
+            <div class="search flex-box" style="margin-top: 7px; width: 80%; position: relative;">
+              <deptData  v-if="toPdept1 && toPdept1!=0" :refsName="$refs.dept1" :toPdept="toPdept1"></deptData>
+              <el-cascader
+                style="width: 100%;"
+                v-model="dept_id"
+                @change="dept1_null"
+                ref="dept1"
+                :options="dept_list"
+                :props="{ checkStrictly: true, value: 'id', label: 'name', children: 'children' }"
+                clearable
+                filterable
+                placeholder="全公司"
+              >
+                <template slot-scope="{ node, data }">
+                  <span>
+                    <WWOpenData type="departmentName" :openid="data.name"></WWOpenData>
+                  </span>
+                </template>
+              </el-cascader>
             </div>
           </div>
-          <div class="dept_path">
-            <a href="javascript:void(0);" @click="back_by_index(0)">全公司</a>
-            <a
-              v-for="(item, index) in pid_list_arr"
-              :key="index"
-              href="javascript:void(0);"
-              @click="back_by_index(index + 1)"
-            >
-              <i class="el-icon-arrow-right"></i>
-              <wwOpenDAta type="departmentName" :openid="item.name"></wwOpenDAta>
-            </a>
+          <div class="flex-box-end" v-if="isChecKedAll&&multi" style="padding: 10px;border-bottom: 1px solid #f1f1f1;">
+            <el-checkbox v-model="checked" @change="checkedChange">全选</el-checkbox>
           </div>
-          <el-checkbox v-if="isChecKedAll" v-model="checked" @change="checkedChange" >全选</el-checkbox>
-          <el-scrollbar wrap-class="column-wrapper scrollable-items-container" :native="false" :class="isChecKedAll?'scrollbarHeight1':'scrollbarHeight2'">
+          <el-scrollbar wrap-class="column-wrapper scrollable-items-container" :native="false" :class="isChecKedAll ? 'scrollbarHeight1' : 'scrollbarHeight2'" v-loading="table_loading">
             <div class="choose_left">
-              <a href="javascript:void(0)" v-for="(item,index) in dept_list" :key="index">
-                <div class="employee_cell" @click="select_dept(item)" v-show="item.pid == pid && item.name.indexOf(keyword) >= 0 && dept_not_select.indexOf(item.id) < 0">
-                  <i class="el-icon-caret-right" style=" display: inline-block;"></i>
-                  <div class="employee_checkbox" v-if="can_select_dept">
-                    <el-checkbox v-model="item.checked"></el-checkbox>
-                  </div>
-                  <div class="employee_name">
-                    <wwOpenDAta type="departmentName" :openid="item.name"></wwOpenDAta>
-                  </div>
-
-                  <div v-if="can_select_dept" class="dept_child_cell">
-                    <span href="javascript:void(0);" class="child_btn" @click.stop="show_child(item)">
-                      | 下级
-                    </span>
-                  </div>
-
-                  <div class="employee_cell_clear"></div>
-
-                </div>
-              </a>
-              <div class="persons_box" style="padding-top:4px;">
-                <a class="employee_cell_a" href="javascript:void(0)" v-for="(item,index) in list" :key="index" v-show="item.id">
-                  <div class="employee_cell" v-if="can_select_employee" @click.prevent.stop="select_employee(item)" v-show="employee_not_select.indexOf(item.id) < 0">
-                    <div class="employee_checkbox">
-                      <el-checkbox v-model="item.checked" v-if="selectedQuitEmployee" :style="item.status > 1 || employee_not_select.indexOf(item.id) > 0?'opacity: 0':'opacity: 1'" ></el-checkbox>
-                      <el-checkbox v-model="item.checked" v-if="!selectedQuitEmployee" :style="item.status > 1 || employee_not_select.indexOf(item.id) > 0?'opacity: 0':'opacity: 1'" ></el-checkbox>
-                    </div>
-                    
-                    <div class="employee_img_url">
-                      <img :src="item.img_url" class="employee_cell_head_img" />
-                    </div>
+              <div class="persons_box" style="padding-top:4px;" v-if="list.length > 0">
+                <a class="employee_cell_a" href="javascript:void(0)" v-for="(item, index) in list" :key="index" v-show="item.id">
+                  <div class="employee_cell" v-if="can_select_employee" @click.prevent.stop="select_employee(item)">
+                    <div class="employee_checkbox"><el-checkbox v-model="item.checked"></el-checkbox></div>
+                    <div class="employee_img_url"><img :src="item.img_url" class="employee_cell_head_img" /></div>
                     <div class="employee_name">
-                      <!-- {{item.name}} -->
-                      <wwOpenDAta type="userName" :openid="item.name"></wwOpenDAta>
+                      <WWOpenData type="userName" :openid="item.name"></WWOpenData>
+                      <!-- {{ item.name }} -->
                     </div>
                     <div class="employee_cell_clear"></div>
-
                   </div>
                 </a>
               </div>
-
+              <div v-else class="fontColorF" style="text-align: center;margin-top: 50px;">暂无可选人员</div>
             </div>
-
-
           </el-scrollbar>
         </el-col>
         <el-col :xs="2" :sm="2" :md="2" :lg="2" :xl="2" class="col-line"><span style="opacity: 0;">空</span></el-col>
         <el-col :xs="11" :sm="11" :md="11" :lg="11" :xl="11" class="scroller-box">
           <div class="option-box">
-            <span style="line-height: 40px; padding-left: 10px;" class="fl" v-show="multi">已选择{{employee_selected_list.length}}个员工</span>
+            <span style="line-height: 40px; padding-left: 10px;" class="fl" v-show="multi">已选择{{ employee_selected_list.length }}个员工</span>
             <el-button type="type" @click="clear_data">清空</el-button>
           </div>
           <el-scrollbar wrap-class="column-wrapper scrollable-items-container" :native="false" style="height: 400px;">
             <div class="choose_right">
-              <div class="employee_cell" v-for="(item,index) in dept_selected_list" :key="index">
-
+              <div class="employee_cell" v-for="(item, index) in dept_selected_list" :key="index">
                 <div class="employee_name">
-                  <wwOpenDAta type="departmentName" :openid="item.dept_name"></wwOpenDAta>
-                </div>
-                <div class="employee_delete">
-                  <el-button type="default" size="mini" @click="dept_cancel(item)" icon="el-icon-close" circle></el-button>
+                  <WWOpenData type="departmentName" :openid="data.name"></WWOpenData>
+                  <!-- {{ item.dept_name }} -->
                 </div>
+                <div class="employee_delete"><el-button type="default" size="mini" @click="dept_cancel(item)" icon="el-icon-close" circle></el-button></div>
                 <div class="employee_cell_clear"></div>
               </div>
-
-              <div class="employee_cell" v-for="(item,index) in employee_selected_list" :key="index">
-
-                <div class="employee_img_url" v-if="item.img_url">
-                  <img :src="item.img_url" class="employee_cell_head_img" />
-                </div>
-                <div class="employee_img_url" v-else>
-                  <img src="static/images/head_default.png" class="employee_cell_head_img" />
-                </div>
+              <div class="employee_cell" v-for="(item, index) in employee_selected_list" :key="index">
+                <div class="employee_img_url" v-if="item.img_url"><img :src="item.img_url" class="employee_cell_head_img" /></div>
+                <div class="employee_img_url" v-else><img src="static/images/head_default.png" class="employee_cell_head_img" /></div>
                 <div class="employee_name">
-                  <!-- {{item.name}} -->
-                  <wwOpenDAta type="userName" :openid="item.name"></wwOpenDAta>
-                </div>
-                <div class="employee_delete">
-                  <el-button type="default" size="mini" @click="employee_cancel(item,true)" icon="el-icon-close" circle></el-button>
+                  <WWOpenData type="userName" :openid="item.name"></WWOpenData>
+                  <!-- {{ item.name }} -->
                 </div>
+                <div class="employee_delete"><el-button type="default" size="mini" @click="employee_cancel(item, true)" icon="el-icon-close" circle></el-button></div>
                 <div class="employee_cell_clear"></div>
               </div>
             </div>
@@ -112,808 +79,686 @@
         </el-col>
       </el-row>
     </div>
-
-    <!--    
-    <span slot="footer" class="dialog-footer">
-      <el-button @click="close">取 消</el-button>
-      <el-button type="primary" @click="confirm">确 定</el-button>
-    </span> 
-    -->
-
   </div>
 </template>
 
 <script>
-  var timers = null
-  export default {
-    props:{
-      Out_of_the_current:{
-        type: Boolean,
-      },
-      two_of_the_current:{
-        type: Boolean,
-      },
-      two_of_the_current_two:{
-        type: Number,
-      },
-      append_body: {
-        type: Boolean,
-        default: false
-      },
-      visible: {
-        type: Boolean,
-        default: false
-      },
-      can_select_dept: {
-        type: Boolean,
-        default: true
-      },
-      can_select_employee: {
-        type: Boolean,
-        default: true
-      },
-      employee_not_select: {
-        type: Array,
-        default: () => {
-          return []
-        }
-      },
-      dept_not_select: {
-        type: Array,
-        default: () => {
-          return []
-        }
-      },
-      selected: {
-        type: Object,
-        default: () => {
-          return {employee: [], dept: []}
-        }
-      },
-      multi: {
-        type: Boolean,
-        default: true
-      },
-      dept_multi: {
-        type: Boolean,
-        default: true
-      },
-      employee_list: {
-        type: Array,
-        default: () => {
-          return []
-        }
-      },
-      selectedQuitEmployee:{
-        type: Boolean,
-        default: true
-      },
-      isChecKedAll: {
-        type: Boolean,
-        default: true
-      },
-      close_clear_data: {
-        type: Boolean,
-        default: true
-      },
-      max: {
-        type: Number,
-        default: 0
+var timers = null;
+export default {
+  props: {
+    can_select_dept: {// 是否能选择部门
+      type: Boolean,
+      default: true
+    },
+    can_select_employee: {// 指定是否能选择员工
+      type: Boolean,
+      default: true
+    },
+    employee_not_select: {// 排除员工的ID,包含ID时不出现在选择列表中
+      type: Array,
+      default: () => {
+        return [];
       }
     },
-    name: "EmployeeSelector",
-    data() {
-      let selected = JSON.parse(JSON.stringify(this.selected))
-      return {
-        searchBox:[],
-        dialogVisible: true,
-        employee_selected_list: selected.employee,
-        dept_selected_list: selected.dept,
-        employee_selected: [],
-        dept_selected: [],
-        com_height: '100%',
-        company_info: {},
-        actions_show: false,
-        dept_name: '',
-        dept_id: 0,
-        list: [],
-        dept_list: [],
-        keyword: '',
-        owner_id: 0,
-        user_info: this.$store.getters.user_info,
-        pid: 0,
-        pid_list: [],
-        selected_box_width: '0',
-        pid_list_arr: [],
-        visible_: false,
-        checked: false
+    dept_not_select: { // 排除部门ID
+      type: Array,
+      default: () => {
+        return [];
       }
     },
-    watch: {
-      max(val) {
-        this.set_button_width()
-      },
-      selected:{
-        deep:true,
-        handler(val){
-          let selected = JSON.parse(JSON.stringify(val))
-          this.employee_selected = []
-          this.dept_selected = []
-          this.employee_selected_list = selected.employee
-          this.dept_selected_list = selected.dept
-          for (let i in selected.employee) {
-            this.employee_selected.push(selected.employee[i].id)
-          }
-          for(let i in selected.dept){
-            this.dept_selected.push(selected.dept[i].dept_id)
-          }
-          this.set_button_width()
-        },
-        immediate: true
-      },
-      // selected(val) {
-      //   let selected = JSON.parse(JSON.stringify(val))
-      //   this.employee_selected = []
-      //   this.dept_selected = []
-      //   this.employee_selected_list = selected.employee
-      //   this.dept_selected_list = selected.dept
-      //   for (let i in selected.employee) {
-      //     this.employee_selected.push(selected.employee[i].id)
-      //   }
-      //   for(let i in selected.dept){
-      //     this.dept_selected.push(selected.dept[i].dept_id)
-      //   }
-      //   this.set_button_width()
-      // },
-      visible(val){
-        this.visible_ = JSON.parse(JSON.stringify(val))
-        if(val){
-          setTimeout(() => {
-            if (this.$route.query.pid) {
-              this.pid = this.$route.query.pid
-            }
-            this.get_user_list(function () {
-
-            })
-            this.get_dept_list()
-          }, 200)
+    selected: {// 已经选择的员工和部门
+      type: Object,
+      default: () => {
+        return { employee: [], dept: [] };
+      }
+    },
+    multi: { // 指定员工是否能多选
+      type: Boolean,
+      default: true
+    },
+    dept_multi: { // 指定部门是否能多选
+      type: Boolean,
+      default: true
+    },
+    employee_list: { // 指定显示的员工列表,注意:传值后组件的员工数据将不是统一向服务器获取的,而是指定的员工列表,格式是:[{id: 1, name: “张三”, img_url: “”}]
+      type: Array,
+      default: () => {
+        return [];
+      }
+    },
+    user_employee_list:{// 为true时,employee_list才生效
+    		 type: Boolean,
+    		 default: false
+    },
+    isChecKedAll: { //是否全选
+      type: Boolean,
+      default: true
+    },
+    close_clear_data: { //关闭时是否清除选择的数据
+      type: Boolean,
+      default: true
+    },
+    max: { //选择的人数限制
+      type: Number,
+      default: 0
+    },
+    is_filtration_creator:{//是否去除创始人
+      type: Boolean,
+      default: false
+    },
+    is_manager_only:{//是否只显示管理者
+      type: Boolean,
+      default: false
+    },
+    include_self:{//是否显示自己
+      type: Boolean,
+      default: true
+    },
+  },
+  name: 'EmployeeSelector',
+  data() {
+    let selected = JSON.parse(JSON.stringify(this.selected));
+    return {
+      table_loading:false,
+      searchBox: [],//用于搜索的全部人员
+      employee_selected_list: selected.employee,
+      dept_selected_list: selected.dept,
+      employee_selected: [],
+      dept_selected: [],
+      dept_name: '',
+      dept_id: 0,
+      list: [],
+      dept_list: [],
+      keyword: '',
+      pid: 0,
+      pid_list: [],
+      selected_box_width: '0',
+      indeterminate: false,
+      pid_list_arr: [],
+      checked: false,
+      toPdept1:0,//选择部门的遮到
+    };
+  },
+  watch: {
+    // dept_id(val){
+    // 	if(val.length>1){
+    // 		this.pid=val[val.length-1];
+    // 	}else{
+    // 		this.pid=val[0];
+    // 	}
+    // 	this.$nextTick(() => {
+    // 		this.$refs.dept.dropDownVisible = false;
+    // 		this.get_user_list();
+    // 		this.checked=false;
+    // 	});
+    // },
+    selected: {
+      deep: true,
+      handler(val) {
+        let selected = JSON.parse(JSON.stringify(val));
+        this.employee_selected = [];
+        this.dept_selected = [];
+        this.employee_selected_list = selected.employee;
+        this.dept_selected_list = selected.dept;
+        for (let i in selected.employee) {
+          this.employee_selected.push(selected.employee[i].id);
+        }
+        for (let i in selected.dept) {
+          this.dept_selected.push(selected.dept[i].dept_id);
         }
-        this.set_button_width()
-      },
-      employee_selected_list() {
-        let l = this.employee_selected_list.length + this.dept_selected_list.length
-        let width = 0.9 * l;
-        this.selected_box_width = width + 'rem'
-        this.set_button_width()
-      },
-      dept_selected_list() {
-        let l = this.employee_selected_list.length + this.dept_selected_list.length
-        let width = 0.9 * l;
-        this.selected_box_width = width + 'rem'
-        this.set_button_width()
       },
-      keyword(val) {
-        // this.options =this.keyword?this.alloptions.filter(item=> item.name.includes (this,keyword)): this. alloptions
-        //this.list
-        this.list = this.searchBox.filter(item=> item.name.includes(this.keyword))
-        // this.list.filter(val)
-        // clearTimeout(timers)
-        // // timers = setTimeout(function () {
-        // //   this.get_user_list(function () {})
-        // // }, 500)
-        // timers = setTimeout(()=>{
-        //   this.get_user_list()
-        // },500)
+      immediate: true
+    },
+    keyword(val) {
+      this.list = this.searchBox.filter(item => item.name.includes(this.keyword));
+      if(!val){
+        this.checked=false;
       }
+    }
+  },
+  methods: {
+    dept1_null(val){
+      this.toPdept1 = val[val.length-1]
+    	if(val.length>1){
+    		this.pid=val[val.length-1];
+    	}else{
+    		this.pid=val[0];
+    	}
+      // let valItem = 0
+      // for(let i in val){
+      //   valItem = val[i]
+      // }
+      this.$nextTick(()=>{
+    		this.get_user_list();
+    		this.checked=false;
+        this.$refs.dept1.dropDownVisible = false;
+      })
     },
-    methods: {
-      // 全选
-      checkedChange(val){
-        if (val) {
+    // 全选
+    checkedChange(val) {
+      if (val) {
+        this.$nextTick(() => {
+          let employeeSelectedList = JSON.parse(JSON.stringify(this.employee_selected_list));//获取选择的人员
+          let employeeSelectedIds = [],total = 0;
+          employeeSelectedList.forEach(element => {
+            employeeSelectedIds.push(element.id);
+          });
           for (let i in this.list) {
-            if (this.employee_not_select.indexOf(this.list[i].id) < 0) {
-              this.$set(this.list[i], 'checked', true)
+            this.$set(this.list[i], 'checked', true)
+            if (!employeeSelectedIds.includes(this.list[i].id)) {//去除已经选择的人员
+               this.employee_selected_list.push(this.list[i]);
             }
           }
-          this.$nextTick(() => {
-            let employeeSelectedList = JSON.parse(JSON.stringify(this.employee_selected_list))
-            let employeeSelectedIds = [], total = 0
-            employeeSelectedList.forEach(element => {
-              employeeSelectedIds.push(element.id)
-            });
-            for (const i in this.list) {
-              this.list[i].status !== 2 && this.selectedQuitEmployee?this.$set(this.list[i], 'checked', true):''
-              if (employeeSelectedIds.includes(this.list[i].id)) {
-                total += 1
-              }else{
-                this.list[i].status !== 2 && this.selectedQuitEmployee?this.employee_selected_list.push(this.list[i]):''
-              }
-            }
-            // console.log(this.employee_not_select)
-            // console.log(this.employee_selected_list)
-            // debugger
-          })
-        }else{
-          this.employee_selected_list = []
-          this.employee_selected = []
-          for (let i in this.list) {
-            this.$set(this.list[i], 'checked', false)
-          }
-          // this.clear_data() 
-        }
-      },
-      close_before(done) {
-        this.close()
-      },
-      set_button_width() {
-
-      },
-      back() {
-        this.pid = this.pid_list[this.pid_list.length - 1]
-        this.pid_list.splice(this.pid_list.length - 1)
-        this.pid_list_arr.splice(this.pid_list_arr.length - 1)
-        this.get_user_list(function () {
-
-        })
-      },
-      back_by_index(index) {
-
-        if (index == this.pid_list.length) {
-          return false
+        });
+      } else {
+        this.employee_selected_list = [];
+        this.employee_selected = [];
+        for (let i in this.list) {
+          this.$set(this.list[i], 'checked', false);
         }
-        this.pid = this.pid_list[index]
-        this.pid_list.splice(index, 100)
-        this.pid_list_arr.splice(index, 100)
-        this.get_user_list(function () {
-
-        })
-      },
-      show_child(item) {
-        this.pid_list.push(this.pid)
-        this.pid_list_arr.push(item)
-        this.pid = item.id
-        this.get_user_list(function () {
-
-        })
-      },
-      employee_cancel(item) {
-        this.employee_selected.splice(this.employee_selected.indexOf(item.id), 1)
-        let delete_index = -1
-        for (let i in this.employee_selected_list) {
-          if (this.employee_selected.indexOf(this.employee_selected_list[i].id) < 0) {
-            delete_index = i
-          }
+      }
+    },
+    back() {
+      this.pid = this.pid_list[this.pid_list.length - 1];
+      this.pid_list.splice(this.pid_list.length - 1);
+      this.pid_list_arr.splice(this.pid_list_arr.length - 1);
+      this.get_user_list();
+    },
+    back_by_index(index) {
+      if (index == this.pid_list.length) {
+        return false;
+      }
+      this.pid = this.pid_list[index];
+      this.pid_list.splice(index, 100);
+      this.pid_list_arr.splice(index, 100);
+      this.get_user_list();
+    },
+    show_child(item) {
+      this.pid_list.push(this.pid);
+      this.pid_list_arr.push(item);
+      this.pid = item.id;
+      this.get_user_list();
+    },
+    employee_cancel(item) {
+      this.checked=false;
+      this.employee_selected.splice(this.employee_selected.indexOf(item.id), 1);
+      let delete_index = -1;
+      for (let i in this.employee_selected_list) {
+        if (this.employee_selected.indexOf(this.employee_selected_list[i].id) < 0) {
+          delete_index = i;
         }
-        if (delete_index >= 0) {
-          // this.employee_selected_list.splice(delete_index, 1)
-          for (let i in this.list) {
-            if (this.list[i].id == item.id) {
-              this.$set(this.list[i], 'checked', false)
-            }
-          }
-          for(let i in this.employee_selected_list){
-            if(this.employee_selected_list[i].id == item.id){
-              this.employee_selected_list.splice(i, 1)
-            }
+      }
+      if (delete_index >= 0) {
+        for (let i in this.list) {
+          if (this.list[i].id == item.id) {
+            this.$set(this.list[i], 'checked', false);
           }
         }
-      },
-      dept_cancel(item) {
-        this.dept_selected.splice(this.dept_selected.indexOf(item.dept_id), 1)
-        let delete_index = -1
-        for (let i in this.dept_selected_list) {
-          if (this.dept_selected.indexOf(this.dept_selected_list[i].dept_id) < 0) {
-            delete_index = i
+        for (let i in this.employee_selected_list) {
+          if (this.employee_selected_list[i].id == item.id) {
+            this.employee_selected_list.splice(i, 1);
           }
         }
-        if (delete_index >= 0) {
-          this.dept_selected_list.splice(delete_index, 1)
-          for(let i in this.dept_list){
-            if(this.dept_list[i].id == item.dept_id){
-              this.$set(this.dept_list[i], 'checked', false)
-            }
-          }
+      }
+    },
+    dept_cancel(item) {
+      this.checked = false;
+      this.dept_selected.splice(this.dept_selected.indexOf(item.dept_id), 1);
+      let delete_index = -1;
+      for (let i in this.dept_selected_list) {
+        if (this.dept_selected.indexOf(this.dept_selected_list[i].dept_id) < 0) {
+          delete_index = i;
         }
-      },
-      select_employee(item){
-        
-        if (this.selectedQuitEmployee) {
-          if (this.employee_not_select.indexOf(item.id) >= 0 || item.status > 1) {
-            return false
-          }
-        }else{
-          if (this.employee_not_select.indexOf(item.id) >= 0) {
-            return false
+      }
+      if (delete_index >= 0) {
+        this.dept_selected_list.splice(delete_index, 1);
+        for (let i in this.dept_list) {
+          if (this.dept_list[i].id == item.dept_id) {
+            this.$set(this.dept_list[i], 'checked', false);
           }
         }
-
-        if(item.checked){
-          item.checked = false
-          this.employee_cancel(item)
-          this.$emit('confirms', '')
-        } else {
-          if (!this.multi) {
-            this.employee_selected = []
-            this.employee_selected_list = []
-            for (let i in this.list) {
-              this.$set(this.list[i], 'checked', false)
-            }
-          }
-          if (this.max > 0 && this.employee_selected.length == this.max && this.multi) {
-            this.$toast('最多只能选择' + this.max + '人')
-            return false
+      }
+    },
+    select_employee(item) {
+      if (item.checked) {
+        item.checked = false;
+        this.employee_cancel(item);
+        this.$emit('confirms', '');
+      } else {
+        if (!this.multi) {
+          this.employee_selected = [];
+          this.employee_selected_list = [];
+          for (let i in this.list) {
+            this.$set(this.list[i], 'checked', false);
           }
-          this.employee_selected.push(item.id)
-          this.employee_selected_list.push({id: item.id, name: item.name, img_url: item.img_url})
-          item.checked = true
-          this.$emit('confirms', this.employee_selected_list)
         }
-      },
-      select_dept(item) {
-        if (!this.can_select_dept) {
-          this.show_child(item)
-          return false
+        if (this.max > 0 && this.employee_selected.length == this.max && this.multi) {
+          this.$toast('最多只能选择' + this.max + '人');
+          return false;
         }
-        if (item.checked) {
-          item.checked = false
-          this.dept_cancel(item)
-        } else {
-          if (!this.dept_multi) {
-            this.dept_selected = []
-            this.dept_selected_list = []
-            for (let i in this.dept_list) {
-              this.$set(this.dept_list[i], 'checked', false)
-            }
+        this.employee_selected.push(item.id);
+        this.employee_selected_list.push({ id: item.id, name: item.name, img_url: item.img_url });
+        item.checked = true;
+        this.$emit('confirms', this.employee_selected_list);
+      }
+    },
+    select_dept(item) {
+      if (!this.can_select_dept) {
+        this.show_child(item);
+        return false;
+      }
+      if (item.checked) {
+        item.checked = false;
+        this.dept_cancel(item);
+      } else {
+        if (!this.dept_multi) {
+          this.dept_selected = [];
+          this.dept_selected_list = [];
+          for (let i in this.dept_list) {
+            this.$set(this.dept_list[i], 'checked', false);
           }
-          this.dept_selected.push(item.id)
-          this.dept_selected_list.push({dept_id: item.id, dept_name: item.name, avatar: 'static/images/e66f.jpg'})
-          item.checked = true
         }
-
-      },
-      clear_data(){
-        this.employee_selected = []
-        this.employee_selected_list = []
-        this.dept_selected = []
-        this.dept_selected_list = []
+        this.dept_selected.push(item.id);
+        this.dept_selected_list.push({ dept_id: item.id, dept_name: item.name, avatar: 'static/images/e66f.jpg' });
+        item.checked = true;
+      }
+    },
+    clear_data() {
+      this.checked = false;
+      this.employee_selected = [];
+      this.employee_selected_list = [];
+      this.dept_selected = [];
+      this.dept_selected_list = [];
+      for (let i in this.list) {
+        this.$set(this.list[i], 'checked', false);
+      }
+      for (let i in this.dept_list) {
+        this.$set(this.dept_list[i], 'checked', false);
+      }
+    },
+    close() {
+      this.$emit('cancel');
+      if (this.close_clear_data) {
+        this.employee_selected = [];
+        this.employee_selected_list = [];
+        this.dept_selected = [];
+        this.dept_selected_list = [];
         for (let i in this.list) {
-          this.$set(this.list[i], 'checked', false)
+          this.$set(this.list[i], 'checked', false);
         }
         for (let i in this.dept_list) {
-          this.$set(this.dept_list[i], 'checked', false)
-        }
-      },
-      close() {
-        //this.visible = false
-        // this.$emit('update:visible', false)
-        this.$emit('cancel')
-        if (this.close_clear_data) {
-          this.employee_selected = []
-          this.employee_selected_list = []
-          this.dept_selected = []
-          this.dept_selected_list = []
-          for (let i in this.list) {
-            this.$set(this.list[i], 'checked', false)
-          }
-          for (let i in this.dept_list) {
-            this.$set(this.dept_list[i], 'checked', false)
-          }
+          this.$set(this.dept_list[i], 'checked', false);
         }
+      }
+    },
+    confirm() {
+      this.$emit('confirm', {
+        employee: this.employee_selected_list,
+        dept: this.dept_selected_list
+      });
+      this.close();
+    },
+    get_dept_list() {
+      this.$http('get', '/api/department/tree','').then(res => {
+        this.dept_list =this.getTreeData(res.data.data.list);
+      });
+    },
+    getTreeData(data) {
+    		for (var i = 0; i < data.length; i++) {
+    			if (data[i].children.length < 1) {
+    				// children若为空数组,则将children设为undefined
+    				data[i].children = undefined;
+    			} else {
+    				// children若不为空数组,则继续 递归调用 本方法
+    				this.getTreeData(data[i].children);
+    			}
+    		}
+    		return data;
+    },
 
-      },
-      confirm() {
-        this.$emit('confirm', {
-          employee: this.employee_selected_list,
-          dept: this.dept_selected_list
-        })
-        this.close()
-      },
-      get_dept_list(){
-        if(this.employee_list.length > 0){
-          return
-        }
-        this.$http('get','/api/department/index',{pid: this.pid, keyword:this.keyword}).then((res) => {
-          for(let i in res.data.data.list){
-            res.data.data.list[i]['checked'] = false
-            if (this.dept_selected.indexOf(res.data.data.list[i].id) >= 0) {
-              res.data.data.list[i]['checked'] = true
-            }
-          }
-          this.dept_list = res.data.data.list
-          this.owner_id = res.data.data.owner_id
-          this.company_info = res.data.data.company_info
-          if (res.data.data.dept_info == null) {
-            this.dept_name = JSON.parse(JSON.stringify(res.data.data.company_info.name))
-            this.dept_id = 0
-          } else {
-            this.dept_name = JSON.parse(JSON.stringify(res.data.data.dept_info.name))
-            this.dept_id = res.data.data.dept_info.id
+    // 默认选择中的人勾上
+    parse_list (data) {
+      this.list = []
+      let _list = []
+      data.map((item)=>{
+      	 item['checked'] = false;
+      	 for(var i in this.employee_selected_list){//判断传进来的员工是否是员工集合里的,是就设为已点击状态
+      	   if(this.employee_selected_list[i].id==item.id){
+      		 item['checked'] = true;
+      	   }
+      	 }
+         if (item.img_url == '') {
+           item.img_url = 'static/images/head_default.png'
+         }
+      });
+      this.searchBox = data;
+      this.list = data;
+    },
+    get_user_list() {
+      this.table_loading = true;
+      let params = {
+        dept_id: this.pid,
+        keywords: this.keyword,
+        page: 0,
+        page_size: 2000,
+        is_official: 1
+      }
+      this.list = [];
+      this.$http('get', '/api/employee/index', params).then(res => {
+          let list = this.filtration(res.data.data.list);
+          // 当有指定显示列表时
+          if (this.user_employee_list) {
+            var employee_list = this.employee_list
+            var userData = []
+            list.map((item) => { // 列表数据是否是自己的管理范围
+              employee_list.map((item2) => {
+                if (item.id == item2.id) {
+                  userData.push(item)
+                }
+              })
+            })
+            this.parse_list(userData)
+          } else { // 没有指定人员列表
+            this.parse_list(list)
           }
-
-        }).catch((e) => {
-
+        }).finally(()=>{
+          this.table_loading = false;
         })
-      },
-      get_user_list (done) {
-        if(this.employee_list.length > 0){
-          let list = this.employee_list
-          for(let i in list){
-            list[i]['letter_index'] = '#'
-            if(this.$store.getters.employee_map[list[i].id] && this.employee_not_select.indexOf(list[i].id) < 0){
-              list[i]['letter_index'] = this.$store.getters.employee_map[list[i].id].letter_index
-              list[i]['status'] = this.$store.getters.employee_map[list[i].id].status
-              if(this.$store.getters.employee_map[list[i].id].img_url == ''){
-                list[i]['img_url'] = 'static/images/head_default.png'
-              }else {
-                list[i]['img_url'] = this.$store.getters.employee_map[list[i].id].img_url
-              }
-            }
-
-            list[i]['checked'] = false
-            if(this.employee_selected.indexOf(list[i].id) >= 0){
-              list[i]['checked'] = true
-            }
-          }
-
-          if (this.keyword) {
-            list = []
-            this.employee_list.forEach(element => {
-              if(element.name.indexOf(this.keyword) != "-1"){
-                list.push(element)
-              }
-            });
-          }
-
-          this.list = list.sort((a,b) => {
-            return a.letter_index.charCodeAt(0) - b.letter_index.charCodeAt(0)
-          })
-          this.searchBox = this.list
-          done()
-          return false
-        }
-        this.list = []
-        this.$http('get','/api/employee/index',{dept_id: this.pid,keywords: this.keyword,page: 0,page_size: 2000}).then((res) => {
-          for (let i in res.data.data.list) {
-            res.data.data.list[i]['checked'] = false
-            if (this.employee_selected.indexOf(res.data.data.list[i].id) >= 0) {
-              res.data.data.list[i]['checked'] = true
-            }
-            if (res.data.data.list[i].img_url == '') {
-              res.data.data.list[i].img_url = 'static/images/head_default.png'
-            }
+    },
+    // 过滤各种条件:如:自己,创始人,只显示管理者等。。。
+    filtration (data) {
+      var list = data
+      // 去除已经离职的人
+      list.forEach((item, index) => {
+          if (item.status == 2) {
+            list.splice(index, 1)
           }
-          let lists = res.data.data.list
-          lists.forEach((element,index) => {
-            let role_list = element.employee_detail.role_list
-              if(this.Out_of_the_current){
-                role_list.forEach((item,key)=>{
-                  if(item.name == "creator"){
-                    lists.splice(index,1)
-                  }
-               })
-              }
-          });
-          lists.forEach((element,index) => {
-            if(this.two_of_the_current){
-              if(element.id == this.two_of_the_current_two){
-                lists.splice(index,1)
-              }
+      })
+      var managerList = []// 管理者列表
+      // 只显示管理者
+      if (this.is_manager_only) {
+        var isManager=false;
+        list.map((item) => {
+          item.employee_detail.role_list.map((item2) => {
+            if (item2.name == 'creator' || item2.name == 'point_manager' || item2.name == 'dept_manager' || item2.name == 'admin') {
+              isManager=true;
             }
           })
-          this.list = lists
-          this.searchBox = this.list
-          // console.log(this.searchBox)
-          done()
-        }).catch((e) => {
-          done()
+          if(isManager){ managerList.push(item)}
         })
+        list = managerList
       }
-    },
-    created() {
-      if (document.documentElement.style.height) {
-        this.com_height = document.documentElement.style.height
+      // 过滤自己
+      if (!this.include_self) {
+        const currUserId = this.$store.getters.user_info.id;
+        for (let i = 0; i < list.length; i++) {
+          if (list[i].id == currUserId) {
+            list.splice(i, 1);
+            i--
+          }
+        }
       }
-      setTimeout(() => {
-        if (this.$route.query.pid) {
-          this.pid = this.$route.query.pid
+      // 过滤创始人
+      list.forEach((item, index) => {
+        if (this.is_filtration_creator) {
+          if (item.is_creator == 1) {
+            list.splice(index, 1)
+          }
         }
-        this.get_user_list(function () {
-
-        })
-        this.get_dept_list()
-      }, 200)
-
+      })
+      //过滤指定人员[]
+      list.forEach((item, index) => {
+        if (this.employee_not_select.length>0) {
+          if (this.employee_not_select.indexOf(item.id) >= 0) {
+            list.splice(index, 1);
+          }
+        }
+      })
+      return list
     }
+  },
+  mounted() {
+  },
+  created() {
+    setTimeout(() => {
+      if (this.$route.query.pid) {
+        this.pid = this.$route.query.pid;
+      }
+      this.get_user_list(function() {});
+      this.get_dept_list();
+    }, 200);
   }
+};
 </script>
 
 <style scoped>
-  .employee_selector_box {
-    width: 600px;
-    padding: 24px;
-  }
-
-  /* 搜索框 */
-  .employee_selector_box .search {
-    position: relative;
-    display: table-cell;
-    left: 10%;
-    padding: 0;
-    border: 1px #C0C4CC solid;
-    border-radius: 16.5px;
-  }
-
-  .employee_selector_box .search-box button {
-    display: inline-block;
-    vertical-align: middle;
-    margin-left: 10px;
-    width: auto;
-    padding: 0;
-    background: none;
-    border-radius: 0px;
-    border: none;
-  }
-
-  .employee_selector_box .search-box /deep/ .el-input {
-    display: inline-block;
-    width: 84%;
-    padding: 0 24px 0 6px;
-    background: none;
-    border-radius: 0px;
-    border: none;
-  }
-
-  .employee_selector_box .search-box /deep/ .el-input input {
-    padding: 0;
-    line-height: 34px;
-    border: none;
-  }
-
-  /* /搜索框 */
-
-  /* 左边框 */
-  .employee_selector_box .choose_left {
-    padding: 0 10px;
-    margin: 8px 0;
-  }
-
-  .employee_selector_box .choose_left .employee_cell {
-    border-bottom: 1px #f8f8f8 solid;
-  }
-
-  .employee_selector_box .choose_left .employee_cell_a .employee_cell {
-    border-bottom: none;
-  }
-
-  .employee_selector_box .choose_left .employee_checkbox {
-    padding-left: 8px;
-  }
-
-  .employee_selector_box .choose_left .employee_img_url {
-    padding-left: 8px;
-  }
-
-  .employee_selector_box .choose_left .employee_name {
-    padding-left: 8px;
-  }
-
-  .employee_selector_box /deep/ .el-scrollbar__thumb {
-    width: 2px;
-    margin: 15px 0 0 6px;
-    background: #409EFF;
-  }
-
-  /* 左边框 */
-
-  /* 右边距 */
-  .employee_selector_box .option-box {
-    padding: 14px 0;
-  }
-
-  .employee_selector_box .option-box button {
-    margin-right: 16px;
-  }
-
-  .employee_selector_box .choose_right {
-    padding: 8px 10px;
-  }
-
-  .employee_selector_box .choose_right .employee_delete .el-button {
-    transform: scale(0.5);
-    background: #C0C4CC;
-  }
-
-  .employee_selector_box .choose_right .employee_delete .el-button /deep/ .el-icon-close {
-    color: #fff;
-  }
-
-  .employee_selector_box .choose_right .employee_delete .el-button:active {
-    background: #409EFF;
-  }
-
-  .employee_selector_box .choose_right .employee_delete .el-button:active /deep/ .el-icon-close {
-    color: #FFF;
-  }
-
-  .employee_selector_box .choose_right .employee_cell .employee_name {
-    padding-left: 8px;
-  }
-
-  .employee_selector_box .choose_right .employee_cell .employee_img_url {
-    padding-left: 8px;
-  }
-
-  /* 右边距 */
-
-  .employee_selector_box /deep/ .employee_cell {
-    padding: 8px 0;
-  }
-
-  .employee_selector_box /deep/ .employee_cell:hover {
-    background: #ecf5ff;
-  }
-
-  .employee_cell {
-    display: -webkit-inline-box;
-    cursor: pointer;
-    width: 100%;
-    color: #606266;
-    padding: 8px 0;
-    background-color: transparent;
-  }
-
-  .employee_cell .employee_cell_clear {
-    clear: both;
-  }
-
-  .employee_cell .employee_img_url {
-    display: table-cell;
-    vertical-align: middle;
-    width: 30px;
-    padding-left: 0px;
-  }
-
-  .employee_cell .employee_img_url img {
-    width: 24px;
-    height: 24px;
-    border-radius: 50%;
-  }
-
-  .employee_cell .employee_checkbox {
-    display: table-cell;
-    vertical-align: middle;
-    width: 30px;
-    text-align: center;
-  }
-
-  .employee_cell .employee_name {
-    display: table-cell;
-    vertical-align: middle;
-    color: #606266;
-  }
-
-  .employee_delete {
-    display: table-cell;
-    text-align: right;
-    padding-right: 0px;
-  }
-
-  .employee_cell_a {
-    display: block;
-  }
-
-  .employee_cell_a:hover {
-    background-color: #ecf5ff;
-    border-radius: 4px;
-  }
-
-  .dept_child_cell {
-    display: table-cell;
-    vertical-align: middle;
-  }
-
-  .dept_child_cell span {
-    float: right;
-    padding-right: 8px;
-  }
-
-  .dept_child_cell span:hover {
-    color: #1c1c1c;
-  }
-
-  .dept_child_cell span:active {
-    color: #1c1c1c;
-  }
-
-  .scroller-box {
-    height: 440px;
-    padding-right: 0px !important;
-    background-color: #fdfdfd;
-    border: 1px solid #eee;
-    border-radius: 4px;
-    overflow: hidden;
-  }
-  /* .scroller-box.one{
+.employee_selector_box {
+  width: 600px;
+  padding: 20px;
+  box-sizing: border-box;
+  margin: 0 auto;
+}
+
+/* 搜索框 */
+.employee_selector_box .search {
+  margin: 0 auto;
+  width: 80%;
+}
+
+.employee_selector_box .search-box button {
+  display: inline-block;
+  vertical-align: middle;
+  margin-left: 10px;
+  width: auto;
+  padding: 0;
+  background: none;
+  border-radius: 0px;
+  border: none;
+}
+/* /搜索框 */
+
+/* 左边框 */
+.employee_selector_box .choose_left {
+  padding: 8px 10px 8px 10px;
+}
+
+.employee_selector_box .choose_left .employee_cell {
+  border-bottom: 1px #f8f8f8 solid;
+}
+
+.employee_selector_box .choose_left .employee_cell_a .employee_cell {
+  border-bottom: none;
+}
+
+.employee_selector_box .choose_left .employee_checkbox {
+  padding-left: 8px;
+}
+
+.employee_selector_box .choose_left .employee_img_url {
+  padding-left: 8px;
+}
+
+.employee_selector_box .choose_left .employee_name {
+  padding-left: 8px;
+}
+
+.employee_selector_box ::v-deep .el-scrollbar__thumb {
+  width: 2px;
+  margin: 15px 0 0 6px;
+  background: #409eff;
+}
+
+/* 左边框 */
+
+/* 右边距 */
+.employee_selector_box .option-box {
+  padding: 14px 0;
+}
+
+.employee_selector_box .option-box button {
+  margin-right: 16px;
+}
+
+.employee_selector_box .choose_right {
+  padding: 8px 10px;
+}
+
+.employee_selector_box .choose_right .employee_delete .el-button {
+  transform: scale(0.5);
+  background: #c0c4cc;
+}
+
+.employee_selector_box .choose_right .employee_delete .el-button /deep/ .el-icon-close {
+  color: #fff;
+}
+
+.employee_selector_box .choose_right .employee_delete .el-button:active {
+  background: #409eff;
+}
+
+.employee_selector_box .choose_right .employee_delete .el-button:active /deep/ .el-icon-close {
+  color: #fff;
+}
+
+.employee_selector_box .choose_right .employee_cell .employee_name {
+  padding-left: 8px;
+}
+
+.employee_selector_box .choose_right .employee_cell .employee_img_url {
+  padding-left: 8px;
+}
+
+/* 右边距 */
+
+.employee_selector_box /deep/ .employee_cell {
+  padding: 8px 0;
+}
+
+.employee_selector_box /deep/ .employee_cell:hover {
+  background: #ecf5ff;
+}
+
+.employee_cell {
+  display: -webkit-inline-box;
+  cursor: pointer;
+  width: 100%;
+  color: #606266;
+  padding: 8px 0;
+  background-color: transparent;
+}
+
+.employee_cell .employee_cell_clear {
+  clear: both;
+}
+
+.employee_cell .employee_img_url {
+  display: table-cell;
+  vertical-align: middle;
+  width: 30px;
+  padding-left: 0px;
+}
+
+.employee_cell .employee_img_url img {
+  width: 24px;
+  height: 24px;
+  border-radius: 50%;
+}
+
+.employee_cell .employee_checkbox {
+  display: table-cell;
+  vertical-align: middle;
+  width: 30px;
+  text-align: center;
+}
+
+.employee_cell .employee_name {
+  display: table-cell;
+  vertical-align: middle;
+  color: #606266;
+}
+
+.employee_delete {
+  display: table-cell;
+  text-align: right;
+  padding-right: 0px;
+}
+
+.employee_cell_a {
+  display: block;
+}
+
+.employee_cell_a:hover {
+  background-color: #ecf5ff;
+  border-radius: 4px;
+}
+
+.dept_child_cell {
+  display: table-cell;
+  vertical-align: middle;
+}
+
+.dept_child_cell span {
+  float: right;
+  padding-right: 8px;
+}
+
+.dept_child_cell span:hover {
+  color: #1c1c1c;
+}
+
+.dept_child_cell span:active {
+  color: #1c1c1c;
+}
+
+.scroller-box {
+  height: 440px;
+  padding-right: 0px !important;
+  background-color: #fdfdfd;
+  border: 1px solid #eee;
+  border-radius: 4px;
+  overflow: hidden;
+}
+/* .scroller-box.one{
     height: 440px;
   } */
 
-  .col-line {
-    position: relative;
-    height: 400px;
-  }
-
-  .col-line:before {
-    content: " ";
-    width: 1px;
-    height: 400px;
-    position: absolute;
-    top: 0;
-    bottom: 0;
-    left: 50%;
-    background-color: #eee;
-  }
-
-  .search-box {
-    background-color: #fff;
-    padding: 14px 5px;
-    border-bottom: 1px solid #eee;
-    margin: 0 -5px;
-  }
-
-  .option-box {
-    padding: 5px;
-    background-color: #fff;
-    border-bottom: 1px solid #eee;
-    margin: 0 -5px;
-    text-align: right;
-  }
-
-  .child_btn {
-    color: #409EFF;
-  }
-  .dept_path{
-    margin: 10px 0;
-    display: block;
-    white-space: nowrap;
-    overflow: auto;
-  }
-
-  /*滚动条的宽度*/
-
-  .dept_path::-webkit-scrollbar {
-    width:5px;
-    height:5px;
-  }
-
-  /*外层轨道。可以用display:none让其不显示,也可以添加背景图片,颜色改变显示效果*/
-
-  .dept_path::-webkit-scrollbar-track {
-    width: 6px;
-    background-color:#fff0;
-    -webkit-border-radius: 2em;
-    -moz-border-radius: 2em;
-    border-radius:2em;
-  }
-
-  /*滚动条的设置*/
-
-  .dept_path::-webkit-scrollbar-thumb {
-    background-color:#fff0;
-    background-clip:padding-box;
-    min-height:28px;
-    -webkit-border-radius: 2em;
-    -moz-border-radius: 2em;
-    border-radius:2em;
-  }
-  /*滚动条移上去的背景*/
-
-  .dept_path:hover::-webkit-scrollbar-thumb{
-    background-color:rgba(144,147,153,.3);
-  }
-  .scrollbarHeight1{
-    height: 320px;
-  }
-  .scrollbarHeight2{
-    height: 340px;
-  }
+.col-line {
+  position: relative;
+  height: 400px;
+}
+
+.col-line:before {
+  content: ' ';
+  width: 1px;
+  height: 400px;
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  left: 50%;
+  background-color: #eee;
+}
+
+.search-box {
+  background-color: #fff;
+  padding: 14px 5px;
+  border-bottom: 1px solid #eee;
+  margin: 0 -5px;
+}
+
+.option-box {
+  padding: 5px;
+  background-color: #fff;
+  border-bottom: 1px solid #eee;
+  margin: 0 -5px;
+  text-align: right;
+}
+.child_btn {
+  color: #409eff;
+}
+.scrollbarHeight1 {
+  height: 310px;
+}
+.scrollbarHeight2 {
+  height: 350px;
+}
 </style>

+ 1115 - 0
src/views/common/EmployeeSelectorVTwo.vue

@@ -0,0 +1,1115 @@
+<template>
+  <el-dialog
+    :title="title"
+    :visible.sync="visible_" :close-on-click-modal="false" :before-close="close_before" append-to-body @close='closeDialog'
+    width="640px" class="employee_select_dialog">
+    <div class="employee_selector_box" v-loading="selectApersonModuleLoad">
+      <el-row :gutter="10">
+        <el-col :xs="11" :sm="11" :md="11" :lg="11" :xl="11" class="scroller-box">
+
+          <div class="search-box">
+            <div class="search">
+            <el-button slot="append" icon="el-icon-search" class="manager_button"></el-button>
+            <el-input v-model="keyword" placeholder="请输入内容"></el-input>
+            </div>
+          </div>
+          <div class="dept_path">
+            <a href="javascript:void(0);" @click="back_by_index(0)">全公司</a>
+            <a
+              v-for="(item, index) in pid_list_arr"
+              :key="index"
+              href="javascript:void(0);"
+              @click="back_by_index(index + 1)"
+            >
+              <i class="el-icon-arrow-right"></i>
+              <WWOpenData type="departmentName" :openid="item.name"></WWOpenData>
+            </a>
+          </div>
+          <el-checkbox v-if="isChecKedAll" v-model="checked" @change="checkedChange" >全选</el-checkbox>
+          <el-scrollbar
+            wrap-class="column-wrapper scrollable-items-container"
+            :native="false"
+            :class="isChecKedAll?'scrollbarHeight1':'scrollbarHeight2'"
+          >
+            <div class="choose_left">
+              <div v-if="hidden_department">
+              </div>
+              <a href="javascript:void(0)" v-for="(item,index) in dept_list" :key="index" v-else>
+                <div class="employee_cell" @click.stop="select_dept(item)"
+                     v-show="item.pid == pid && item.name.indexOf(keyword) >= 0 && dept_not_select.indexOf(item.id) < 0">
+
+                  <div class="employee_checkbox" style="position: relative;">
+                    <el-checkbox v-if="can_select_dept" v-model="item.checked"></el-checkbox>
+                    <div style=" position: absolute; top: 0; left: 0; right: 0; bottom: 0; z-index: 5;"></div>
+                  </div>
+                  <div class="employee_name">
+                    <WWOpenData type="departmentName" :openid="item.name"></WWOpenData>
+                  </div>
+
+                  <div v-if="can_select_dept" class="dept_child_cell">
+                    <span href="javascript:void(0);" class="child_btn" @click.stop="show_child(item)">
+                      | 下级
+                    </span>
+                  </div>
+
+                  <div class="employee_cell_clear"></div>
+
+                </div>
+              </a>
+
+              <div class="persons_box" style="padding-top:4px;">
+                <a class="employee_cell_a" href="javascript:void(0)" v-for="(item,index) in list" :key="index">
+                  <div class="employee_cell" v-if="can_select_employee" @click="select_employee(item)"
+                       v-show="employee_not_select.indexOf(item.id) < 0">
+
+                    <div class="employee_checkbox" style="position: relative;">
+                      <!-- <el-checkbox v-model="item.checked"></el-checkbox> -->
+                      <el-checkbox v-model="item.checked" v-if="selectedQuitEmployee" :style="item.status > 1 || employee_not_select.indexOf(item.id) > 0?'opacity: 0':'opacity: 1'" ></el-checkbox>
+                      <el-checkbox v-model="item.checked" v-if="!selectedQuitEmployee" :style="item.status > 1 || employee_not_select.indexOf(item.id) > 0?'opacity: 0':'opacity: 1'" ></el-checkbox>
+                      <div style=" position: absolute; top: 0; left: 0; right: 0; bottom: 0; z-index: 5;"></div>
+                    </div>
+                    <div class="employee_img_url">
+                      <img :src="item.img_url" class="employee_cell_head_img"/>
+                    </div>
+                    <div class="employee_name">
+                      <!-- {{item.name}} -->
+                      <WWOpenData type="userName" :openid="item.name"></WWOpenData>
+                      {{item.direct_Supervisor?'(直属上级)':''}}
+                    </div>
+                    <div class="employee_cell_clear"></div>
+
+                  </div>
+                </a>
+              </div>
+
+            </div>
+
+
+          </el-scrollbar>
+        </el-col>
+        <el-col :xs="2" :sm="2" :md="2" :lg="2" :xl="2" class="col-line"><span style="opacity: 0;">空</span></el-col>
+        <el-col :xs="11" :sm="11" :md="11" :lg="11" :xl="11" class="scroller-box">
+          <div class="option-box">
+            <el-button type="type" @click="clear_data">清空</el-button>
+          </div>
+          <el-scrollbar
+            wrap-class="column-wrapper scrollable-items-container"
+            :native="false"
+            style="height: 354px;"
+          >
+            <div class="choose_right">
+              <div class="employee_cell" v-for="(item,index) in dept_selected_list" :key="index">
+
+                <div class="employee_name">
+                  <WWOpenData type="departmentName" :openid="item.dept_name"></WWOpenData>
+                </div>
+                <div class="employee_delete">
+                  <el-button type="default" size="mini" @click="dept_cancel(item)" icon="el-icon-close" circle></el-button>
+                </div>
+                <div class="employee_cell_clear"></div>
+              </div>
+
+              <div class="employee_cell" v-for="(item,index) in employee_selected_list" :key="index">
+                <div class="employee_img_url">
+                  <img :src="item.img_url" class="employee_cell_head_img"/>
+                </div>
+                <div class="employee_name">
+                  <!-- {{item.name}} -->
+                  <WWOpenData type="userName" :openid="item.name"></WWOpenData>
+                  <span v-if="direct_Supervisor_you">{{item.id==directSupervisor?'(直属上级)':''}}</span>
+                </div>
+                <div class="employee_delete">
+                  <el-button type="default" size="mini" @click="employee_cancel(item)" icon="el-icon-close" circle></el-button>
+                </div>
+                <div class="employee_cell_clear"></div>
+              </div>
+            </div>
+          </el-scrollbar>
+        </el-col>
+      </el-row>
+    </div>
+
+    <span slot="footer" class="dialog-footer">
+    <el-button @click="close">取 消</el-button>
+    <el-button type="primary" @click="confirm">确 定</el-button>
+  </span>
+
+
+  </el-dialog>
+</template>
+
+<script>
+
+  export default {
+    props:{
+      title:{
+        type: String,
+        default: "选择部门和员工"
+      },
+      isChecKedAll: {
+        type: Boolean,
+        default: false
+      },
+      whether_to_remove_right: {
+        type: Boolean,
+        default: false
+      },
+      hidden_department: {
+        type: Boolean,
+        default: false
+      },
+      append_body: {
+        type: Boolean,
+        default: false
+      },
+      visible: {
+        type: Boolean,
+        default: false
+      },
+      can_select_dept: {
+        type: Boolean,
+        default: true
+      },
+      can_select_employee: {
+        type: Boolean,
+        default: true
+      },
+      employee_not_select: {
+        type: Array,
+        default: () => {
+          return []
+        }
+      },
+      dept_not_select: {
+        type: Array,
+        default: () => {
+          return []
+        }
+      },
+      selected: {
+        type: Object,
+        default: () => {
+          return {employee: [], dept: []}
+        }
+      },
+      multi: {
+        type: Boolean,
+        default: true
+      },
+      dept_multi: {
+        type: Boolean,
+        default: true
+      },
+      employee_list: {
+        type: Array,
+        default: () => {
+          return []
+        }
+      },
+      selectedQuitEmployee:{
+        type: Boolean,
+        default: true
+      },
+      close_clear_data: {
+        type: Boolean,
+        default: true
+      },
+      max: {
+        type: Number,
+        default: 0
+      },
+      use_employee_list: {
+        type: Boolean,
+        default: false
+      },
+      is_filtration_creator: {
+        //是否去除创始人
+        type: Boolean,
+        default: false
+      },
+      is_manager_only: {
+        //是否只显示管理者
+        type: Boolean,
+        default: false
+      },
+      include_self: {
+        //是否显示自己
+        type: Boolean,
+        default: true
+      },
+      employee_not_select: {
+        // 排除员工的ID,包含ID时不出现在选择列表中
+        type: Array,
+        default: () => {
+          return [];
+        }
+      },
+    },
+    name: "EmployeeSelector",
+    data() {
+      let selected = JSON.parse(JSON.stringify(this.selected))
+      return {
+        selectApersonModuleLoad:false,
+        searchBox:[],
+        direct_Supervisor_you:false,
+        directSupervisor:0,
+        dialogVisible: true,
+        employee_selected_list: selected.employee,
+        dept_selected_list: selected.dept,
+        employee_selected: [],
+        dept_selected: [],
+        com_height: '100%',
+        company_info: {},
+        actions_show: false,
+        dept_name: '',
+        dept_id: 0,
+        list: [],
+        dept_list: [],
+        keyword: '',
+        owner_id: 0,
+        user_info: this.$store.getters.user_info,
+        pid: 0,
+        pid_list: [],
+        selected_box_width: '0',
+        pid_list_arr: [],
+        visible_: false,
+        checked: false//全选按钮
+      }
+    },
+    watch: {
+      max(val) {
+        this.set_button_width()
+      },
+      selected:{
+        deep:true,
+        handler(val){
+          let selected = JSON.parse(JSON.stringify(val))
+          this.employee_selected = []
+          this.dept_selected = []
+          this.employee_selected_list = selected.employee
+          this.dept_selected_list = selected.dept
+          for (let i in selected.employee) {
+            if (!selected.employee[i].img_url || selected.employee[i].img_url == this.defaultImg()) {
+              // this.$set(this.selected.employee[i], 'img_url', 'static/images/head_default.png')
+              this.$set(this.selected.employee[i], 'img_url', 'static/images/gttx0.jpg')
+            }
+            this.employee_selected.push(selected.employee[i].id)
+          }
+          for(let i in selected.dept){
+            this.dept_selected.push(selected.dept[i].dept_id)
+          }
+          this.set_button_width()
+        }
+      },
+      // selected(val) {
+      //   let selected = JSON.parse(JSON.stringify(val))
+      //   this.employee_selected = []
+      //   this.dept_selected = []
+      //   this.employee_selected_list = selected.employee
+      //   this.dept_selected_list = selected.dept
+      //   for (let i in selected.employee) {
+      //     this.employee_selected.push(selected.employee[i].id)
+      //   }
+      //   for(let i in selected.dept){
+      //     this.dept_selected.push(selected.dept[i].dept_id)
+      //   }
+      //   this.set_button_width()
+      // },
+      visible(val){
+        this.visible_ = JSON.parse(JSON.stringify(val))
+        if(val){
+          this.selectApersonModuleLoad = true
+          setTimeout(() => {
+            if (this.$route.query.pid) {
+              this.pid = this.$route.query.pid
+            }
+            this.get_user_list(function () {
+
+            })
+            this.get_dept_list()
+          }, 200)
+        }
+        this.set_button_width()
+      },
+      employee_selected_list() {
+        let l = this.employee_selected_list.length + this.dept_selected_list.length
+        let width = 0.9 * l;
+        this.selected_box_width = width + 'rem'
+        this.set_button_width()
+        
+        this.checkAll_Optimize()//全选细节优化,选中发生变化时执行
+      },
+      dept_selected_list() {
+        let l = this.employee_selected_list.length + this.dept_selected_list.length
+        let width = 0.9 * l;
+        this.selected_box_width = width + 'rem'
+        this.set_button_width()
+      },
+      keyword(val) {
+        this.list = this.searchBox.filter(item=> item.name.includes(this.keyword))
+        // this.get_user_list(function () {
+
+        // })
+      },
+      
+      list(){
+        this.checkAll_Optimize()//全选细节优化,人员列表发生变化时执行
+      },
+    },
+    methods: {
+      defaultImg(){
+        return "https://rescdn.qqmail.com/node/wwmng/wwmng/style/images/independent/DefaultAvatar$73ba92b5.png"
+      },
+      //全选细节优化
+      checkAll_Optimize(){
+        let checkedTrue = true
+        for(let i in this.list){
+          if(this.list[i].status!=2 && this.list[i].status!=3){//排除人员列表中的离职和拒绝加入人员
+            if(this.list[i].checked == false){
+              checkedTrue = false
+            }
+          }
+        }
+        if(checkedTrue){
+          if(this.list.length != 0){
+            this.checked = true
+          }else{
+            this.checked = false
+          }
+        }else{
+          this.checked = false
+        }
+      },
+      //关闭弹窗清除数据
+      closeDialog(){
+          this.direct_Supervisor_you = false
+      },
+      // 全选
+      checkedChange(val){
+        if (val) {
+          for (let i in this.list) {
+            if (this.employee_not_select.indexOf(this.list[i].id) < 0) {
+              this.$set(this.list[i], 'checked', true)
+            }
+          }
+          this.$nextTick(() => {
+            let employeeSelectedList = JSON.parse(JSON.stringify(this.employee_selected_list))
+            let employeeSelectedIds = [], total = 0
+            employeeSelectedList.forEach(element => {
+              employeeSelectedIds.push(element.id)
+            });
+            for (const i in this.list) {
+              this.list[i].status !== 2 && this.list[i].status !== 3 && this.selectedQuitEmployee?this.$set(this.list[i], 'checked', true):''
+              if (employeeSelectedIds.includes(this.list[i].id)) {
+                total += 1
+              }else{
+                this.list[i].status !== 2 && this.list[i].status !== 3 && this.selectedQuitEmployee?this.employee_selected_list.push(this.list[i]):''
+              }
+            }
+            // debugger
+          })
+        }else{
+            for(let i in this.employee_selected_list){
+              for(let a in this.list){
+                if(this.list[a].status!=2 && this.list[a].status!=3){//排除人员列表中的离职和拒绝加入人员
+                  if(this.employee_selected_list[i].id == this.list[a].id){
+                    this.employee_selected_list.splice(i,1)
+                  }
+                }
+              }
+            }
+          // this.employee_selected_list = []
+          // this.employee_selected = []
+          for (let i in this.list) {
+            this.$set(this.list[i], 'checked', false)
+          }
+          // this.clear_data()
+        }
+      },
+
+      close_before(done) {
+        this.close()
+      },
+      set_button_width() {
+
+      },
+      back() {
+        this.pid = this.pid_list[this.pid_list.length - 1]
+        this.pid_list.splice(this.pid_list.length - 1)
+        this.pid_list_arr.splice(this.pid_list_arr.length - 1)
+        this.get_user_list(function () {
+
+        })
+      },
+      back_by_index(index) {
+
+        if (index == this.pid_list.length) {
+          return false
+        }
+        this.pid = this.pid_list[index]
+        this.pid_list.splice(index, 100)
+        this.pid_list_arr.splice(index, 100)
+        this.get_user_list(function () {
+
+        })
+      },
+      show_child(item) {
+        this.pid_list.push(this.pid)
+        this.pid_list_arr.push(item)
+        this.pid = item.id
+        this.get_user_list(function () {
+
+        })
+      },
+      employee_cancel(item) {
+
+        this.employee_selected.splice(this.employee_selected.indexOf(item.id), 1)
+        let delete_index = -1
+        for (let i in this.employee_selected_list) {
+          if (this.employee_selected.indexOf(this.employee_selected_list[i].id) < 0) {
+            delete_index = i
+          }
+        }
+        if (delete_index >= 0) {
+          // this.employee_selected_list.splice(delete_index, 1)
+          for (let i in this.list) {
+            if (this.list[i].id == item.id) {
+              this.$set(this.list[i], 'checked', false)
+            }
+          }
+          
+          for(let i in this.employee_selected_list){
+            if(this.employee_selected_list[i].id == item.id){
+              this.employee_selected_list.splice(i, 1)
+            }
+          }
+        }
+      },
+      dept_cancel(item) {
+        this.dept_selected.splice(this.dept_selected.indexOf(item.dept_id), 1)
+        let delete_index = -1
+        for (let i in this.dept_selected_list) {
+          // if (this.dept_selected.indexOf(this.dept_selected_list[i].dept_id) < 0) {
+          //   delete_index = i
+          // }
+          if(this.dept_selected_list[i].dept_id == item.id){
+            delete_index = i
+          }
+          if(this.dept_selected_list[i].dept_id == item.dept_id){
+            delete_index = i
+          }
+        }
+        if (delete_index >= 0) {
+          this.dept_selected_list.splice(delete_index, 1)
+          for(let i in this.dept_list){
+            if(this.dept_list[i].id == item.dept_id){
+              this.$set(this.dept_list[i], 'checked', false)
+            }
+          }
+        }
+      },
+      select_employee(item){
+        if (this.selectedQuitEmployee) {
+          if (this.employee_not_select.indexOf(item.id) >= 0 || item.status > 1) {
+            return false
+          }
+        }else{
+          if (this.employee_not_select.indexOf(item.id) >= 0) {
+            return false
+          }
+        }
+
+        if(item.checked){
+          item.checked = false
+          this.employee_cancel(item)
+        } else {
+          if (!this.multi) {
+            this.employee_selected = []
+            this.employee_selected_list = []
+            for (let i in this.list) {
+              this.$set(this.list[i], 'checked', false)
+            }
+          }
+          if (this.max > 0 && this.employee_selected.length == this.max && this.multi) {
+            this.$toast('最多只能选择' + this.max + '人')
+            return false
+          }
+          this.employee_selected.push(item.id)
+          this.employee_selected_list.push({id: item.id, name: item.name, img_url: item.img_url,direct_Supervisor:item.direct_Supervisor})
+          item.checked = true
+        }
+        
+        WWOpenData.bind(this.$el)
+      },
+      unique(arr){
+        return Array.from(new Set(arr))
+      },
+      select_dept(item) {
+        if (!this.can_select_dept) {
+          this.show_child(item)
+          return false
+        }
+        if (item.checked) {
+          item.checked = false
+          this.dept_cancel(item)
+        } else {
+          if (!this.dept_multi) {
+            this.dept_selected = []
+            this.dept_selected_list = []
+            for (let i in this.dept_list) {
+              this.$set(this.dept_list[i], 'checked', false)
+            }
+          }
+          let dept_sele = this.dept_selected
+          dept_sele.push(item.id)
+          this.dept_selected =this.unique(dept_sele)
+          // this.dept_selected.push(item.id)
+          // let dept_sele = new Set(this.dept_selected)
+          // this.dept_selected = this.unique(this.dept_selected)
+          this.dept_selected_list.push({dept_id: item.id, dept_name: item.name, avatar: 'static/images/e66f.jpg'})
+          let newobj = {};
+            this.dept_selected_list = this.dept_selected_list .reduce((preVal, curVal) => {
+              newobj[curVal.dept_id] ? '' : newobj[curVal.dept_id] = preVal.push(curVal);
+              return preVal
+            }, [])
+          item.checked = true
+        }
+
+      },
+      clear_data(){
+        this.employee_selected = []
+        this.employee_selected_list = []
+        this.dept_selected = []
+        this.dept_selected_list = []
+        for (let i in this.list) {
+          this.$set(this.list[i], 'checked', false)
+        }
+        for (let i in this.dept_list) {
+          this.$set(this.dept_list[i], 'checked', false)
+        }
+      },
+      close() {
+        //this.visible = false
+        this.$emit('update:visible', false)
+        this.$emit('cancel')
+        if (this.close_clear_data) {
+          // this.employee_selected = []
+          // this.employee_selected_list = []
+          this.dept_selected = []
+          this.dept_selected_list = []
+          for (let i in this.list) {
+            this.$set(this.list[i], 'checked', false)
+          }
+          for (let i in this.dept_list) {
+            this.$set(this.dept_list[i], 'checked', false)
+          }
+        }
+
+      },
+      confirm() {
+        this.$emit('confirm', {
+          employee: this.employee_selected_list,
+          dept: this.dept_selected_list
+        })
+        this.close()
+      },
+      get_dept_list(){
+        if(this.employee_list.length > 0){
+          return
+        }
+        this.$http('get','/api/department/index',{pid: this.pid, keyword:this.keyword}).then((res) => {
+          for(let i in res.data.data.list){
+            res.data.data.list[i]['checked'] = false
+            if (this.dept_selected.indexOf(res.data.data.list[i].id) >= 0) {
+              res.data.data.list[i]['checked'] = true
+            }
+          }
+          this.dept_list = res.data.data.list
+          this.owner_id = res.data.data.owner_id
+          this.company_info = res.data.data.company_info
+          if (res.data.data.dept_info == null) {
+            this.dept_name = JSON.parse(JSON.stringify(res.data.data.company_info.name))
+            this.dept_id = 0
+          } else {
+            this.dept_name = JSON.parse(JSON.stringify(res.data.data.dept_info.name))
+            this.dept_id = res.data.data.dept_info.id
+          }
+
+        }).catch((e) => {
+
+        })
+      },
+      get_user_list (done) {
+        if(this.employee_list.length > 0){
+          let list = this.employee_list
+          if(this.employee_selected.length == 0){
+            for(let i in this.selected.employee){
+              this.employee_selected.push(this.selected.employee[i].id)
+            }
+          }
+          for(let i in list){
+            if(list[i].direct_Supervisor){
+              this.direct_Supervisor_you = list[i].direct_Supervisor
+              this.directSupervisor = list[i].id
+            }
+            list[i]['letter_index'] = '#'
+            if(this.$store.getters.employee_map[list[i].id]){
+              list[i]['letter_index'] = this.$store.getters.employee_map[list[i].id].letter_index
+              if(this.$store.getters.employee_map[list[i].id].img_url == '' || this.$store.getters.employee_map[list[i].id].img_url == this.defaultImg()){
+                // list[i]['img_url'] = 'static/images/head_default.png'
+                list[i]['img_url'] = 'static/images/gttx0.jpg'
+              }else {
+                list[i]['img_url'] = this.$store.getters.employee_map[list[i].id].img_url
+              }
+            }
+
+            list[i]['checked'] = false
+            if(this.employee_selected.indexOf(list[i].id) >= 0){
+              list[i]['checked'] = true
+            }
+          }
+
+          if (this.keyword) {
+            list = []
+            this.employee_list.forEach(element => {
+              if(element.name.indexOf(this.keyword) != "-1"){
+                list.push(element)
+              }
+            });
+          }
+
+          this.list = list.sort((a,b) => {
+            return a.letter_index.charCodeAt(0) - b.letter_index.charCodeAt(0)
+          })
+          if(this.whether_to_remove_right){
+            this.selectedLists()
+          }
+          this.searchBox = this.list
+          
+          this.selectApersonModuleLoad = false
+          done()
+          return false
+        }
+        this.list = []
+        this.selectApersonModuleLoad = true
+        this.$http('get','/api/employee/index',{dept_id: this.pid,keywords: this.keyword,page: 0,page_size: 2000}).then((res) => {
+          
+          let list = this.filtration(res.data.data.list);
+
+          let employeeSelectedData = []
+          for(let i in this.employee_selected_list){
+            employeeSelectedData.push(this.employee_selected_list[i].id)
+          }
+          for (let i in list) {
+            list[i]['checked'] = false
+            if (this.employee_selected.indexOf(list[i].id) >= 0) {
+              list[i]['checked'] = true
+            }
+            if (employeeSelectedData.indexOf(list[i].id) >= 0) {
+              list[i]['checked'] = true
+            }
+            if (list[i].img_url == '' || list[i].img_url == this.defaultImg()) {
+              // list[i].img_url = 'static/images/head_default.png'
+              list[i].img_url = 'static/images/gttx0.jpg'
+            }
+          }
+          if (this.use_employee_list) {
+            list.forEach(element => {
+              if (element.employee_detail.role_list.findIndex((value)=>value.name=='dept_manager'||value.name=='creator'||value.name=='point_manager'||value.name=='admin') >= 0) {
+                this.list.push(element)
+              }
+            });
+            return false
+          }else{
+            this.list = list
+          }
+          if(this.whether_to_remove_right){
+            this.selectedLists()
+          }
+          this.searchBox = this.list
+          done()
+        }).catch((e) => {
+          done()
+        }).finally(()=>{
+          this.selectApersonModuleLoad = false
+        })
+      },
+      selectedLists(){
+        let selected_list = []
+        // console.log(this.employee_selected_list.filter(a=>!this.list.some(b=>b.id==a.id)))
+        selected_list = this.employee_selected_list.filter(a=>!this.list.some(b=>b.id==a.id))
+        console.log(selected_list.length)
+        if(selected_list.length!=0){
+          console.log(selected_list.length)
+          for(let i in this.employee_selected_list){
+            for(let a in selected_list){
+              if(this.employee_selected_list[i].id == selected_list[a].id){
+                this.employee_selected_list.splice(i,1)
+              }
+            }
+          }
+        }
+      },
+      
+    // 过滤各种条件:如:自己,创始人,只显示管理者等。。。
+      filtration(data) {
+        var list = data;
+        // 去除已经离职的人
+        for (let i = 0; i < list.length; i++) {
+          if (list[i].status == 2) {
+            list.splice(i, 1);
+            i--
+          }
+        }
+        var managerList = []; // 管理者列表
+        // 只显示管理者
+        if (this.is_manager_only) {
+          var isManager;
+          list.map(item => {
+            isManager = false;
+            item.employee_detail.role_list.map(item2 => {
+              if (item2.name == 'creator' || item2.name == 'point_manager' || item2.name == 'dept_manager' || item2.name == 'admin') {
+                isManager = true;
+              }
+            });
+            if (isManager) {
+              managerList.push(item);
+            }
+          });
+          list = managerList;
+        }
+        // 过滤自己
+        if (!this.include_self) {
+          const currUserId = this.$store.getters.user_info.id;
+          for (let i = 0; i < list.length; i++) {
+            if (list[i].id == currUserId) {
+              list.splice(i, 1);
+              i--
+            }
+          }
+        }
+        // 过滤创始人
+        if (this.is_filtration_creator) {
+          for (let i = 0; i < list.length; i++) {
+            if (list[i].is_creator == 1) {
+              list.splice(i,1);
+              i--
+            }
+          }
+        }
+        //过滤指定人员[]
+        if (this.employee_not_select.length > 0) {
+          for (let i = 0; i < list.length; i++) {
+            if (this.employee_not_select.indexOf(list[i].id) >= 0) {
+              list.splice(i, 1);
+              i--
+            }
+          }
+        }
+        return list;
+      },
+      removeSelf(list){
+        if (!this.include_self){
+          const currUserId = this.$store.getters.user_info.id
+          const index = list.findIndex(o=>o.id === currUserId)
+          if(index > -1){
+            list.splice(index, 1)
+          }
+        }
+        return list
+      }
+    },
+    created() {
+      for(let i in this.selected.employee){
+        if(!this.selected.employee[i].img_url || this.selected.employee[i].img_url == this.defaultImg()){
+          // this.selected.employee[i].img_url = 'static/images/head_default.png'
+          this.selected.employee[i].img_url = 'static/images/gttx0.jpg'
+        }
+      }
+      if (document.documentElement.style.height) {
+        this.com_height = document.documentElement.style.height
+      }
+      setTimeout(() => {
+        if (this.$route.query.pid) {
+          this.pid = this.$route.query.pid
+        }
+        this.get_user_list(function () {
+          
+        })
+        
+        this.get_dept_list()
+      }, 200)
+
+    }
+  }
+</script>
+
+<style scoped>
+  .employee_selector_box {
+    width: 600px;
+    padding: 24px;
+  }
+
+  /* 搜索框 */
+  .employee_selector_box .search{
+    position: relative;
+    display: table-cell;
+    left: 10%;
+    padding: 0;
+    border: 1px #C0C4CC solid;
+    border-radius: 16.5px;
+  }
+  .employee_selector_box .search-box button{
+    display: inline-block;
+    vertical-align: middle;
+    margin-left: 10px;
+    width: auto;
+    padding: 0;
+    background: none;
+    border-radius: 0px;
+    border: none;
+  }
+  .employee_selector_box .search-box /deep/ .el-input{
+    display: inline-block;
+    width: 84%;
+    padding: 0 24px 0 6px;
+    background: none;
+    border-radius: 0px;
+    border: none;
+  }
+  .employee_selector_box .search-box /deep/ .el-input input{
+    padding:0;
+    line-height: 34px;
+    border:none;
+  }
+  /* /搜索框 */
+
+  /* 左边框 */
+  .employee_selector_box .choose_left {
+    /* padding:8px 10px 8px 10px; */
+    padding: 0 10px;
+    margin: 8px 0;
+  }
+
+  .employee_selector_box .choose_left .employee_cell{
+    border-bottom:1px #f8f8f8 solid;
+  }
+  .employee_selector_box .choose_left .employee_cell_a .employee_cell{
+    border-bottom:none;
+  }
+  .employee_selector_box .choose_left .employee_checkbox{
+    padding-left: 8px;
+  }
+  .employee_selector_box .choose_left .employee_img_url{
+    padding-left: 8px;
+  }
+  .employee_selector_box .choose_left .employee_name{
+    padding-left: 8px;
+  }
+
+  .employee_selector_box /deep/ .el-scrollbar__thumb {
+    width:2px;
+    margin:15px 0 0 6px;
+    background:#409EFF;
+  }
+  /* 左边框 */
+
+  /* 右边距 */
+  .employee_selector_box .option-box{
+    padding:14px 0;
+  }
+  .employee_selector_box .option-box button{
+    margin-right:16px;
+  }
+  .employee_selector_box .choose_right{
+    padding:8px 10px;
+  }
+  .employee_selector_box .choose_right .employee_delete .el-button{
+    transform: scale(0.5);
+    background: #C0C4CC;
+  }
+  .employee_selector_box .choose_right .employee_delete .el-button /deep/ .el-icon-close{
+    color:#fff;
+  }
+  .employee_selector_box .choose_right .employee_delete .el-button:active{
+    background: #409EFF;
+  }
+  .employee_selector_box .choose_right .employee_delete .el-button:active /deep/ .el-icon-close{
+    color:#FFF;
+  }
+  .employee_selector_box .choose_right .employee_cell .employee_name{
+    padding-left:8px;
+  }
+  .employee_selector_box .choose_right .employee_cell .employee_img_url{
+    padding-left:8px;
+  }
+  /* 右边距 */
+
+  .employee_selector_box /deep/ .employee_cell{
+    padding:8px 0;
+  }
+  .employee_selector_box /deep/ .employee_cell:hover{
+    background:#ecf5ff;
+  }
+
+  .employee_cell {
+    display: table;
+    cursor: pointer;
+    width: 100%;
+    color:#606266;
+    padding: 8px 0;
+    background-color: transparent;
+  }
+
+  .employee_cell .employee_cell_clear {
+    clear: both;
+  }
+
+  .employee_cell .employee_img_url {
+    display: table-cell;
+    vertical-align: middle;
+    width: 30px;
+    padding-left:0px;
+  }
+
+  .employee_cell .employee_img_url img {
+    width: 24px;
+    height: 24px;
+    border-radius: 50%;
+  }
+
+  .employee_cell .employee_checkbox {
+    display: table-cell;
+    vertical-align: middle;
+    width: 30px;
+    text-align: center;
+  }
+
+  .employee_cell .employee_name{
+    display:table-cell;
+    vertical-align: middle;
+    color:#606266;
+  }
+
+  .employee_delete {
+    display: table-cell;
+    text-align: right;
+    padding-right:0px;
+  }
+
+  .employee_cell_a {
+    display: block;
+  }
+
+  .employee_cell_a:hover {
+    background-color: #ecf5ff;
+    border-radius:4px;
+  }
+
+  .dept_child_cell {
+    display: table-cell;
+    vertical-align: middle;
+  }
+
+  .dept_child_cell span {
+    float: right;
+    padding-right:8px;
+  }
+  .dept_child_cell span:hover{
+    color:#1c1c1c;
+  }
+  .dept_child_cell span:active{
+    color:#1c1c1c;
+  }
+
+  .scroller-box {
+    height: 400px;
+    padding-right: 0px !important;
+    background-color: #fdfdfd;
+    border: 1px solid #eee;
+    border-radius: 4px;
+    overflow: hidden;
+  }
+
+  .col-line {
+    position: relative;
+    height: 400px;
+  }
+
+  .col-line:before {
+    content: " ";
+    width: 1px;
+    height: 400px;
+    position: absolute;
+    top: 0;
+    bottom: 0;
+    left: 50%;
+    background-color: #eee;
+  }
+
+  .search-box {
+    background-color: #fff;
+    padding:14px 5px;
+    border-bottom: 1px solid #eee;
+    margin: 0 -5px;
+  }
+
+  .option-box {
+    padding: 5px;
+    background-color: #fff;
+    border-bottom: 1px solid #eee;
+    margin: 0 -5px;
+    text-align: right;
+  }
+
+  .child_btn {
+    color: #409EFF;
+  }
+  .dept_path{
+    margin: 10px 0;
+    display: block;
+    white-space: nowrap;
+    overflow: auto;
+  }
+
+  /*滚动条的宽度*/
+
+  .dept_path::-webkit-scrollbar {
+    width:5px;
+    height:5px;
+  }
+
+  /*外层轨道。可以用display:none让其不显示,也可以添加背景图片,颜色改变显示效果*/
+
+  .dept_path::-webkit-scrollbar-track {
+    width: 6px;
+    background-color:#fff0;
+    -webkit-border-radius: 2em;
+    -moz-border-radius: 2em;
+    border-radius:2em;
+  }
+
+  /*滚动条的设置*/
+
+  .dept_path::-webkit-scrollbar-thumb {
+    background-color:#fff0;
+    background-clip:padding-box;
+    min-height:28px;
+    -webkit-border-radius: 2em;
+    -moz-border-radius: 2em;
+    border-radius:2em;
+  }
+  /*滚动条移上去的背景*/
+
+  .dept_path:hover::-webkit-scrollbar-thumb{
+    background-color:rgba(144,147,153,.3);
+  }
+
+
+  .scrollbarHeight1{
+    height: 300px;
+  }
+  .scrollbarHeight2{
+    height: 320px;
+  }
+</style>

+ 91 - 52
src/views/common/applicationIntegrationPopup.vue

@@ -19,23 +19,32 @@
             <el-form-item label="录入对象" :prop="'items.'+ index +'.employeeName'" :rules="[{ required: true, message: '请选择录入对象', trigger: 'change' }]">
               <el-row>
                 <el-col :span="18">
-                  <el-input v-show="employeeNames.length==0" auto-complete="off" v-model="item.employeeName" placeholder="请选择录入对象"></el-input>
+                  <el-input v-show="item.employeeNames.length==0" auto-complete="off" v-model="item.employeeName" placeholder="请选择录入对象"></el-input>
                   <div @click="item.show_employee_selector = true" style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"></div>
-                  <div v-if="employeeNames.length>0"  @click="item.show_employee_selector = true" class="zindexName">
-                    <span v-for="(item,index) in employeeNames" :key="index">
-                      <wwOpenDAta type="userName" :openid="item.name"></wwOpenDAta><span v-if="(employeeNames.length-index)>1">,</span>
+                  <div v-if="item.employeeNames.length>0"  @click="item.show_employee_selector = true" class="zindexName">
+                    <span v-for="(arr,att) in item.employeeNames" :key="att">
+                      <WWOpenData type="userName" :openid="arr.name"></WWOpenData><span v-if="(item.employeeNames.length-att)>1">,</span>
                     </span>
                   </div>
                 </el-col>
               </el-row>
-              <EmployeeSelector
+              <!-- <EmployeeSelector
+                :is_filtration_creator="true"
                 :employee_not_select="item.employee_not_select"
                 :can_select_employee="true"
                 :can_select_dept="false"
                 :multi="false"
                 :selected="item.employee_selected"
                 :visible.sync="item.show_employee_selector"
-                @confirm="employee_confirm"/>
+                @confirm="employee_confirm"/> -->
+              <EmployeeSelector
+                :isChecKedAll="false"
+                :employee_not_select="item.employee_not_select"
+                :multi="false"
+                :selected="item.employee_selected"
+                :visible.sync="item.show_employee_selector"
+                @confirm="employee_confirm"
+              />
             </el-form-item>
 
             <el-form-item label="指定规则">
@@ -74,7 +83,7 @@
             <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">
-                  <el-input type="textarea" rows="6" placeholder="请输入事件内容" style="width: 100%;" v-model="item.remark"></el-input>
+                  <el-input type="textarea" rows="6" placeholder="请输入事件内容(限100字)" style="width: 100%;" v-model="item.remark"></el-input>
                 </el-col>
               </el-row>
             </el-form-item>
@@ -105,12 +114,12 @@
                   <div v-if="item.approval_selected.length == 0" @click="approval_selected_null" style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"></div>
                   
                   <div v-else-if="item.approvalName!=''" @click="item.show_approval_selector = true" class="zindexName">
-                    <wwOpenDAta type="userName" :openid="item.approvalName"></wwOpenDAta>
+                    <WWOpenData type="userName" :openid="item.approvalName"></WWOpenData>
                   </div>
                   <div v-else-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
+              <!-- <EmployeeSelector
                 :employee_not_select="item.approval_not_select"
                 :can_select_employee="true"
                 :can_select_dept="false"
@@ -118,7 +127,20 @@
                 :employee_list="item.approval_employee_list"
                 :selected="item.approval_selected"
                 :visible.sync="item.show_approval_selector"
-                @confirm="approval_confirm"/>
+                @confirm="approval_confirm"/> -->
+              <EmployeeSelector
+                :employee_not_select="item.approval_not_select"
+                :multi="false"
+                :isChecKedAll="false"
+                :is_filtration_creator="false"
+
+                :user_employee_list="true"
+                :employee_list="item.approval_employee_list"
+
+                :selected="item.approval_selected"
+                :visible.sync="item.show_approval_selector"
+                @confirm="approval_confirm"
+              />
             </el-form-item>
 
           </div>
@@ -145,7 +167,7 @@
           <el-table :data="error_list">
             <el-table-column prop="target" label="员工">
               <template slot-scope="scope">
-                <wwOpenDAta type="userName" :openid="scope.row.target"></wwOpenDAta>
+                <WWOpenData type="userName" :openid="scope.row.target"></WWOpenData>
               </template>
             </el-table-column>
             <el-table-column prop="point" label="积分"></el-table-column>
@@ -165,6 +187,7 @@
   import EmployeeSelector from '@/views/common/EmployeeSelector'
   import uploadOss from "@/views/upload_oss/upload"
   import { getToken } from '@/utils/auth'
+  import { get_employee_map } from '@/api/login'
 
   export default {
     name: 'applicationIntegration',
@@ -189,7 +212,6 @@
     },
     data() {
       return {
-        employeeNames:[],
 
         pickerBeginDateBefore: {
           disabledDate(time) {
@@ -220,6 +242,7 @@
             // 录入对象
             employee_id: '',
             employeeName: '',
+            employeeNames:[],
             employee_not_select: [],
             employee_selected: {dept: [],employee:[]},
             show_employee_selector: false,
@@ -241,12 +264,29 @@
         user_info: null,
         employee_map: JSON.parse(localStorage.getItem('SET_EMPLOYEE_MAP')),
         point_types: JSON.parse(localStorage.getItem('SET_POINT_TYPES')),
-        btn_loading: false
+        btn_loading: false,
+
+        user_list: [],
       }
     },
     components: {EmployeeSelector,uploadOss},
     watch:{},
     mounted() {
+      get_employee_map().then(response => {
+        if (response.data.code == 1) {
+          const data = {}
+          for (const i in response.data.data.list) {
+            data[response.data.data.list[i].id] = response.data.data.list[i]
+          }
+          if (window.plus) {
+            plus.storage.setItem('SET_EMPLOYEE_MAP', JSON.stringify(data))
+          } else {
+            localStorage.setItem('SET_EMPLOYEE_MAP', JSON.stringify(data))
+          }
+          this.employee_map = data
+        }
+      })
+
       this.getRuleItemData()
       this.user_info = this.$store.getters.user_info
       this.point_types = JSON.parse(localStorage.getItem('SET_POINT_TYPES'))
@@ -254,10 +294,9 @@
       this.dialogData.items[0].employee_selected.employee = [{id: this.user_info.id ,img_url: this.user_info.img_url,name: this.user_info.name}]
       this.dialogData.items[0].employee_id = this.user_info.id
       this.dialogData.items[0].employeeName = this.user_info.name
-      this.employeeNames = this.dialogData.items[0].employee_selected.employee
+      this.dialogData.items[0].employeeNames = this.dialogData.items[0].employee_selected.employee
 
       this.initializesReviewer(this.user_info.employee_detail.superior_list,0,true)
-
     },
     methods: {
       // 附件上传
@@ -401,13 +440,14 @@
           approvalName: '',
           approval_not_select: [],
           approval_employee_id:0,//当前选中人的直属上级。0表示没有直属上级
-          approval_employee_list: [],
+          approval_employee_list: this.user_info.employee_detail.superior_list,
           approval_selected: {dept: [],employee:[]},
           show_approval_selector: false,
 
           // 录入对象
           employee_id: this.user_info.id,
           employeeName: this.user_info.name,
+          employeeNames: [{id: this.user_info.id ,img_url: this.user_info.img_url,name: this.user_info.name}],
           employee_not_select: [],
           employee_selected: {dept: [],employee:[{id: this.user_info.id ,img_url: this.user_info.img_url,name: this.user_info.name}]},
           show_employee_selector: false,
@@ -464,11 +504,18 @@
       },
       // 提交数据
       save(){
+        let reviewer_infoid = false
         let self = this
         let data = {items: []}
         self.dialogData.items.forEach(element => {
           data.items.push({rule_id: element.rule_id || 0, employee_id: element.employee_id || 0 ,item_id: element.item_id || 0, remark: element.remark, event_time: element.event_time, pt_id: element.pt_id, reviewer_id: element.reviewer_id || 0, files: element.files})
+          if(element.reviewer_id == this.user_info.id) reviewer_infoid = true
         });
+        if(reviewer_infoid){ 
+          self.btn_loading = false
+          this.$message.warning('不能提交给自己审批,请直接对员工进行【积分奖扣】或更换审批人')
+          return
+        }
         this.$http('post','/api/integral/review/apply',data,'v2').then(res => {
           if(res.data.code == 1){
             self.$refs['dialogData'].resetFields();
@@ -507,44 +554,36 @@
       },
       // 初始化审核人
       initializesReviewer(list,index,bool){
+
         const superior = list || this.user_info.employee_detail.superior_list
         const num = index || 0
         const item = this.dialogData.items[num]
         item.approval_employee_list = [...superior]
-        if (superior.length !== 0) {
-          if(bool){
-            item.approval_employee_id = this.user_info.employee_detail.superior_id//直属上级(这里是第一个,默认为当前登录人)
-          }
-
-          // if (!list) {
-            //this.user_info.employee_detail 当前登录账号信息
-            // item.approval_employee_id = this.user_info.employee_detail.superior_id//直属上级(这里是第一个,默认为当前登录人)
-            // item.approval_employee_list = [...superior]//上级列表(这里是第一个,默认为当前登录人)
-          // }else{
-            // item.approval_employee_list = [...superior]
-          // }
-
-          if(item.approval_employee_id != 0){//判断有无直属上级
-            for(let a in item.approval_employee_list){
-              if(item.approval_employee_id == item.approval_employee_list[a].id){
-                item.approval_employee_list[a].direct_Supervisor = true//一个字段,是直属上级的字段,为true
-              }
-            }
-            for(let i in superior){
-                if(item.approval_employee_id == superior[i].id){
-                  item.approval_selected.employee = [{id: superior[i].id ,img_url: superior[i].img_url,name: superior[i].name}]
-                  item.reviewer_id = superior[i].id
-                  item.approvalName = superior[i].name//审批人
-                }
-            }
-          }else{
-            // 拿取列表最后一个的数据,没有筛选
-            item.approval_selected.employee = [{id: superior[superior.length - 1].id ,img_url: superior[superior.length - 1].img_url,name: superior[superior.length - 1].name}]
-            item.reviewer_id = superior[superior.length - 1].id//审批人id
-            item.approvalName = superior[superior.length - 1].name//审批人name
-          }
+        // if (superior.length !== 0) {
+        //   if(bool){
+        //     item.approval_employee_id = this.user_info.employee_detail.superior_id//直属上级(这里是第一个,默认为当前登录人)
+        //   }
+        //   if(item.approval_employee_id != 0){//判断有无直属上级
+        //     for(let a in item.approval_employee_list){
+        //       if(item.approval_employee_id == item.approval_employee_list[a].id){
+        //         item.approval_employee_list[a].direct_Supervisor = true//一个字段,是直属上级的字段,为true
+        //       }
+        //     }
+        //     for(let i in superior){
+        //         if(item.approval_employee_id == superior[i].id){
+        //           item.approval_selected.employee = [{id: superior[i].id ,img_url: superior[i].img_url,name: superior[i].name}]
+        //           item.reviewer_id = superior[i].id
+        //           item.approvalName = superior[i].name//审批人
+        //         }
+        //     }
+        //   }else{
+        //     // 拿取列表最后一个的数据,没有筛选
+        //     item.approval_selected.employee = [{id: superior[superior.length - 1].id ,img_url: superior[superior.length - 1].img_url,name: superior[superior.length - 1].name}]
+        //     item.reviewer_id = superior[superior.length - 1].id//审批人id
+        //     item.approvalName = superior[superior.length - 1].name//审批人name
+        //   }
           
-        }
+        // }
       },
       // 选择审核人
       approval_confirm(data){
@@ -560,7 +599,6 @@
       },
       // 选择对象
       employee_confirm(data){
-        console.log(data)
         const item = this.dialogData.items[this.itemIndex]
         if (data.employee !== null && data.employee.length != 0) {
           for (const key in this.employee_map) {
@@ -575,11 +613,11 @@
           }
         }
         item.employeeName = ''
-        this.employeeNames = []
+        item.employeeNames = []
         item.employee_selected.employee = []
         item.employee_id = ''
         if (data.employee !== null && data.employee.length != 0) {
-          this.employeeNames = data.employee
+          item.employeeNames = data.employee
           item.employeeName = data.employee[0].name
           item.employee_selected.employee = [{name: data.employee[0].name,id:data.employee[0].id,img_url: data.employee[0].img_url}]
           item.employee_id = data.employee[0].id
@@ -619,6 +657,7 @@
             // 录入对象
             employee_id: this.user_info.id,
             employeeName: this.user_info.name,
+            employeeNames: [{id: this.user_info.id ,img_url: this.user_info.img_url,name: this.user_info.name}],
             employee_not_select: [],
             employee_selected: {dept: [],employee:[{id: this.user_info.id ,img_url: this.user_info.img_url,name: this.user_info.name}]},
             show_employee_selector: false,

+ 47 - 9
src/views/common/bonusPointsPopup.vue

@@ -17,13 +17,13 @@
                 <div v-if="employee_list.length > 0"  @click="show_employee_selector = true" style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"></div>
                 <div v-if="employee_list.length > 0 && employeeNames.length>0"  @click="show_employee_selector = true" class="zindexName">
                   <span v-for="(item,index) in employeeNames" :key="index">
-                    <wwOpenDAta type="userName" :openid="item.name"></wwOpenDAta><span v-if="(employeeNames.length-index)>1">,</span>
+                    <WWOpenData type="userName" :openid="item.name"></WWOpenData><span v-if="(employeeNames.length-index)>1">,</span>
                   </span>
                 </div>
                 <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
+            <!-- <EmployeeSelector
               :employee_not_select="employee_not_select"
               :employee_list="employee_list"
               :can_select_employee="true"
@@ -31,7 +31,17 @@
               :close_clear_data="false"
               :selected="employee_selected"
               :visible.sync="show_employee_selector"
-              @confirm="move_employee_confirm"/>
+              @confirm="move_employee_confirm"/> -->
+              
+            <EmployeeSelector
+              :employee_not_select="employee_not_select"
+              :user_employee_list="true"
+              :employee_list="employee_list"
+              :close_clear_data="false"
+              :selected="employee_selected"
+              :visible.sync="show_employee_selector"
+              @confirm="move_employee_confirm"
+            />
           </el-form-item>
           
           <div v-for="(item,index) in dialogData.items" :key="index" @click.stop="itemIndex = index">
@@ -92,7 +102,7 @@
             <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">
-                  <el-input type="textarea" rows="6" placeholder="请输入事件内容" style="width: 100%;" v-model="item.remark"></el-input>
+                  <el-input type="textarea" rows="6" placeholder="请输入事件内容(限100字)" style="width: 100%;" v-model="item.remark"></el-input>
                 </el-col>
               </el-row>
             </el-form-item>
@@ -122,12 +132,12 @@
                 <el-col :span="18">
                   <el-input v-show="item.approvalName==''" auto-complete="off" v-model="item.approvalName" placeholder="请选择审批人"></el-input>
                   <div v-if="item.approvalName!=''" @click="item.show_approval_selector = true" class="zindexName">
-                    <wwOpenDAta type="userName" :openid="item.approvalName"></wwOpenDAta>
+                    <WWOpenData type="userName" :openid="item.approvalName"></WWOpenData>
                   </div>
                   <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
+              <!-- <EmployeeSelector
                 :employee_not_select="item.approval_not_select"
                 :can_select_employee="true"
                 :can_select_dept="false"
@@ -135,7 +145,19 @@
                 :employee_list="employee_lists"
                 :selected="item.approval_selected"
                 :visible.sync="item.show_approval_selector"
-                @confirm="approval_confirm"/>
+                @confirm="approval_confirm"/> -->
+                
+              <EmployeeSelector
+                :employee_not_select="item.approval_not_select"
+                :multi="false"
+                :user_employee_list="true"
+                :isChecKedAll="false"
+                :is_filtration_creator="false"
+                :employee_list="employee_lists"
+                :selected="item.approval_selected"
+                :visible.sync="item.show_approval_selector"
+                @confirm="approval_confirm"
+              />
             </el-form-item>
 
           </div>
@@ -160,7 +182,11 @@
           @close='error_list_SX'
           width="700px">
           <el-table :data="error_list">
-            <el-table-column prop="target" label="员工"></el-table-column>
+            <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">
@@ -177,6 +203,7 @@
 <script>
   import moment from 'moment'
   import EmployeeSelector from '@/views/common/EmployeeSelector'
+  // import EmployeeSelector from '@/views/common/EmployeeSelectorVTwo'
   import uploadOss from "@/views/upload_oss/upload"
   import { getToken } from '@/utils/auth'
 
@@ -291,6 +318,13 @@
       this.point_types = JSON.parse(localStorage.getItem('SET_POINT_TYPES'))
       this.employee_list = this.$store.getters.user_info.employee_detail.manage_scope
       this.employee_lists = this.$store.getters.user_info.employee_detail.superior_list
+      //刷新当前角色下级上级
+      this.$http('get', '/api/employee/detail')
+        .then(res => {
+          let list = res.data.data.user
+          this.employee_list = list.employee_detail.manage_scope
+          this.employee_lists = list.employee_detail.superior_list
+        })
     },
     methods: {
       // 20200831 图片上传 未完成
@@ -622,7 +656,11 @@
               ){
                 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})
               }else{
-                this.$message.error('第'+ (index+1) +'条输入积分分值超出权限,请选择审批人递交');
+                if(element.point == 0){
+                  this.$message.error('积分不能为0');
+                }else{
+                  this.$message.error('第'+ (index+1) +'条输入积分分值超出权限,请选择审批人递交');
+                }
                 throw new Error()
               }
             })

+ 58 - 48
src/views/common/examinePopup.vue

@@ -7,15 +7,15 @@
           <el-row :gutter="10" style="padding-bottom:20px;border-bottom:1px #f8f8f8 solid;position: relative;">
             <el-col :span="24">
               <template>
-                <userImage :id="detail_info.employee_id" class="fl" width="50px" height="50px" fontSize="15"></userImage>
+                <userImage v-if="detail_info.employee_info" :id="detail_info.employee_id" :user_name="detail_info.employee_info.name" :img_url="detail_info.employee_info.img_url" class="fl" width="50px" height="50px" fontSize="15"></userImage>
               </template>
               <template>
-                <span style="line-height:50px; margin-left:10px;margin-right:4px;"><wwOpenDAta type="userName" :openid="getEmployeeName(detail_info.employee_id)"></wwOpenDAta></span>
+                <span v-if="detail_info.employee_info" style="line-height:50px; margin-left:10px;margin-right:4px;"><WWOpenData type="userName" :openid="detail_info.employee_info.name"></WWOpenData></span>
                 <span class="color_red point" v-show="detail_info.point >= 0 && detail_info.point">
                   <span v-if="(detail_info.review_point == 0 ? detail_info.point : detail_info.review_point) >= 0">+</span>
-                  {{ detail_info.review_point == 0 ? detail_info.point : detail_info.review_point }}
+                  {{ detail_info.review_point == 0 ? detail_info.point : detail_info.review_point }} {{ $getTypsName(detail_info.pt_id) }}
                 </span>
-                <span class="color_green point" v-show="detail_info.point < 0 && detail_info.point">{{ detail_info.point }}</span>
+                <span class="color_green point" v-show="detail_info.point < 0 && detail_info.point">{{ detail_info.point }} {{ $getTypsName(detail_info.pt_id) }}</span>
               </template>
               <br />
               <template>
@@ -43,13 +43,13 @@
               <el-image v-for="(items, indexs) in item.value" :key="indexs" style="width: 100px; height: 100px;margin:2px;" :src="items" :preview-src-list="item.value"></el-image>
             </el-col>
             <el-col :span="20" v-else-if="item.key == '奖扣目标'">
-              <wwOpenDAta type="userName" :openid="item.value"></wwOpenDAta>
+              <WWOpenData type="userName" :openid="item.value"></WWOpenData>
             </el-col>
             <el-col :span="20" v-else-if="item.key == '申请人'">
-              <wwOpenDAta type="userName" :openid="item.value"></wwOpenDAta>
+              <WWOpenData type="userName" :openid="item.value"></WWOpenData>
             </el-col>
             <el-col :span="20" v-else-if="item.key == '收益人'">
-              <wwOpenDAta type="userName" :openid="item.value"></wwOpenDAta>
+              <WWOpenData type="userName" :openid="item.value"></WWOpenData>
             </el-col>
             <el-col :span="20" v-else>{{ item.value }}</el-col>
           </el-row>
@@ -65,7 +65,7 @@
               <span class="row_tips" style="font-size:12px;color:#909399">此事件打分参考以下积分规则</span>
             </p>
             <el-row>
-              <el-col :span="4">事件分类</el-col>
+              <el-col :span="4">积分分类</el-col>
               <el-col :span="20">{{ detail_info.rule_name }}</el-col>
             </el-row>
             <el-row>
@@ -73,43 +73,17 @@
               <el-col :span="20">{{ detail_info.item_name }}</el-col>
             </el-row>
             <el-row>
-              <el-col :span="4">规则积分</el-col>
+              <el-col :span="4">积分分数</el-col>
               <el-col :span="20">
-                <span v-show="detail_info.point > 0">+</span>
-                {{ detail_info.point }} {{ detail_info.pt_id == 3 ? 'B分' : detail_info.pt_id == 2 ? 'A分' : detail_info.pt_id == 1 ? '绩效分' : '' }}
+                <span v-if="detail_info.item_range_type == 2">
+                  {{ detail_info.item_min_point + ' ~ ' + detail_info.item_max_point }}
+                </span>
+                <span v-else><span v-show="detail_info.point > 0">+</span>{{ detail_info.point }}</span>
+                {{ detail_info.pt_id == 3 ? 'B分' : detail_info.pt_id == 2 ? 'A分' : detail_info.pt_id == 1 ? '绩效分' : '' }}
               </el-col>
             </el-row>
           </div>
-
-          <div v-show="detail_info.process != null && detail_info.process.length > 0">
-            <p class="row_title">
-              审批人 &nbsp;
-              <span class="row_tips" style="font-size:12px;color:#909399">多人审批时,以最后一人为准</span>
-            </p>
-
-            <div class="examine_steps">
-              <el-steps direction="vertical" :space="50">
-                <el-step v-for="(item, index) in detail_info.process" :key="index" style="display:flex;">
-                  <template slot="icon">
-                    <userImage width="36px" height="36px" :img_url="item.img_url" :user_name="item.name"></userImage>
-                  </template>
-                  <template slot="title">
-                    <div style="color: #303133;font-size:14px;margin-top:-2px;">
-                      <wwOpenDAta type="userName" :openid="item.name"></wwOpenDAta>&nbsp;
-                      <span v-if="item.remark == '待审核'" style="color:#E6A23C;font-size:13px">待审批</span>
-                      <span v-else-if="item.remark == '审核通过'" style="color:#67C23A;font-size:13px">审批通过</span>
-                      <span v-else-if="item.remark == '审核驳回'" style="color:#F56C6C;font-size:13px">审批驳回</span>
-                      <span v-else>{{ item.remark }}</span>
-                      <span style="color: #909399;font-size:12px;float:right">{{ item.time }}</span>
-                    </div>
-                  </template>
-                  <template slot="description">
-                    <div style="word-break:break-all;">{{ item.review_remark }}</div>
-                  </template>
-                </el-step>
-              </el-steps>
-            </div>
-          </div>
+          <div v-show="detail_info.process && detail_info.process.length > 0"><Steps :process="detail_info.process"></Steps></div>
 
           <el-row style="border-top: 1px #f8f8f8 solid;">
             <el-col :span="24" style="text-align: right;padding-top:20px" v-if="detail_info.status == 0">
@@ -117,7 +91,7 @@
               <el-button v-else @click="rejectBtn">驳回</el-button>
               <el-button type="primary" @click="adoptBtn">通过</el-button>
             </el-col>
-            <el-col :span="24" style="text-align: right;padding-top:20px" v-else>
+            <el-col :span="24" style="text-align: right;padding-top:20px" v-if="detail_info.can_refuse==1">
               <span style="color:#909399;font-size:12px;padding-right:20px">撤回后需重新审批</span>
               <el-button type="primary" @click="revokeApproval">撤回审批</el-button>
             </el-col>
@@ -144,8 +118,8 @@
           <el-input type="textarea" :rows="4" v-model="rejectForm.remark" placeholder="请输入审批意见(限50字)"></el-input>
         </el-form-item>
         <el-form-item>
-          <el-button type="primary" @click="confirmReject('rejectForm')">确认驳回</el-button>
           <el-button @click="cancelReject('rejectForm')">取消</el-button>
+          <el-button type="primary" @click="confirmReject('rejectForm')">确认驳回</el-button>
         </el-form-item>
       </el-form>
     </el-dialog>
@@ -287,18 +261,33 @@
         <div style="padding-left: 80px">奖票用于优秀表现和重要事项的表彰</div>
         <el-form-item label="发放奖票"><el-switch v-model="adoptForm.switch" active-color="#13ce66"></el-switch></el-form-item>
         <el-form-item label="递交审批">
-          <el-row>
+
+          <!-- <el-row>
             <el-col :span="18">
               <el-input auto-complete="off" v-model="manager" placeholder="请选择上级递交审批"></el-input>
               <div @click="show_employee_selector = true" style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"></div>
             </el-col>
+          </el-row> -->
+
+          
+          <el-row>
+            <el-col :span="18">
+              <el-input v-show="manager=='' || manager== null" auto-complete="off" v-model="manager" placeholder="请选择审批人"></el-input>
+              <div @click="show_employee_selector = true" style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"></div>
+              <div v-if="manager!='' && manager!= null"  @click="show_employee_selector = true" class="zindexName">
+                  <WWOpenData type="userName" :openid="manager"></WWOpenData>
+              </div>
+            </el-col>
           </el-row>
+
           <EmployeeSelector
-            :employee_not_select="employee_not_select"
-            :can_select_employee="true"
-            :can_select_dept="false"
+            :is_filtration_creator="false"
+            :is_superior="true"
+            :user_employee_list="true"
             :employee_list="employee_lists"
             :multi="false"
+            :isChecKedAll="false"
+            :include_self="false"
             :selected="manager_selected"
             :visible.sync="show_employee_selector"
             @confirm="employee_confirm"
@@ -325,6 +314,7 @@
 <script>
 // import request from '@/utils/request'
 import EmployeeSelector from '@/views/common/EmployeeSelector';
+import Steps from '@/components/Steps.vue';
 
 export default {
   name: 'examinePopup',
@@ -417,11 +407,17 @@ export default {
       }
     }
   },
-  components: { EmployeeSelector },
+  components: { EmployeeSelector, Steps },
   mounted() {
     this.getRuleItem();
     this.getRuleItemTree();
     this.employee_lists = this.$store.getters.user_info.employee_detail.superior_list
+    //刷新当前角色上级
+    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) {
@@ -792,4 +788,18 @@ export default {
   padding: 20px;
   border-bottom: 1px #efefef solid;
 }
+
+.zindexName{
+    position: absolute;
+    top: 0;
+    right: 0;
+    left: 0;
+    bottom: 0;
+    z-index: 9;
+    border:1px solid rgb(224, 224, 224);
+    width:360px;
+    border-radius:3px;
+    padding-left:15px;
+    overflow: hidden;
+}
 </style>

+ 1 - 1
src/views/common/pastDue.vue

@@ -2,7 +2,7 @@
     <el-dialog :visible.sync="$store.state.user.pastDue" width="400px" append-to-body class="pastDue" @close="pastDueclose">
         <p style="font-size:21px;">系统已到期</p>
         <p style="margin:0;">请在功道云积分服务群中联系专属客服或微信扫码添加功道云客服进行续费</p>
-        <img src="/static/images/lADPBG1Q6uyvMTLNAa7NAa4_430_430.jpg" style="width:100%">
+        <img src="static/images/lADPBG1Q6uyvMTLNAa7NAa4_430_430.jpg" style="width:100%">
         <p style="font-size:20px;">电话咨询:400-6877-880</p>
     </el-dialog>
 </template>

+ 3 - 3
src/views/common/repeatTaskDetailsPopup.vue

@@ -23,7 +23,7 @@
           </li>
           <li class="flex-box" v-if="workDetailData.point_config">
             <div class="label">任务积分</div>
-            <div class="content_text yellow">{{workDetailData.point_config.base_point}}</div>
+            <div class="content_text yellow">{{workDetailData.point_config.base_point}} {{$getTypsName(workDetailData.pt_id)}}</div>
           </li>
           <li class="flex-box">
             <div class="label">任务附件</div>
@@ -42,7 +42,7 @@
           <el-col :span="24">
             <div>
               <userImage class="fl" :id="workDetailData.reviewer_id" :user_name="workDetailData.reviewer_name" width="50px" height="50px" style=" margin-right: 15px;"></userImage>
-              <p style="margin: 0; line-height: 50px;"><wwOpenDAta type="userName" :openid="workDetailData.reviewer_name"></wwOpenDAta></p>
+              <p style="margin: 0; line-height: 50px;"><WWOpenData type="userName" :openid="workDetailData.reviewer_name"></WWOpenData></p>
             </div>
           </el-col>
         </el-row>
@@ -51,7 +51,7 @@
           <el-col :span="24">
             <div v-for="(item,index) in workDetailData.target_info" style="margin-bottom: 10px;">
               <userImage class="fl" :id="item.id" :user_name="item.name" width="50px" height="50px" style=" margin-right: 15px;"></userImage>
-              <p style="margin: 0; line-height: 50px;"><wwOpenDAta type="userName" :openid="item.name"></wwOpenDAta></p>
+              <p style="margin: 0; line-height: 50px;"><WWOpenData type="userName" :openid="item.name"></WWOpenData></p>
             </div>
           </el-col>
         </el-row>

+ 21 - 5
src/views/common/rewardTask.vue

@@ -41,11 +41,11 @@
                 <el-input v-show="reviewerName=='' || reviewerName== null" auto-complete="off" v-model="reviewerName" placeholder="请选择审批人"></el-input>
                 <div @click="show_reviewer_selector = true" style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"></div>
                 <div v-if="reviewerName!='' && reviewerName!= null"  @click="show_reviewer_selector = true" class="zindexName">
-                    <wwOpenDAta type="userName" :openid="reviewerName"></wwOpenDAta>
+                    <WWOpenData type="userName" :openid="reviewerName"></WWOpenData>
                 </div>
               </el-col>
             </el-row>
-            <EmployeeSelector
+            <!-- <EmployeeSelector
               :employee_not_select="reviewer_not_select"
               :employee_list="reviewer_employee_list"
               :can_select_employee="true"
@@ -53,6 +53,14 @@
               :multi="false"
               :selected="reviewer_selected"
               :visible.sync="show_reviewer_selector"
+              @confirm="reviewer_confirm"/> -->
+            <EmployeeSelector
+              :isChecKedAll="false"
+              :multi="false"
+              :is_manager_only="true"
+              :selected="reviewer_selected"
+              :visible.sync="show_reviewer_selector"
+              :is_filtration_creator="false"
               @confirm="reviewer_confirm"/>
           </el-form-item>
 
@@ -122,12 +130,12 @@
                 <div @click="show_dept_selector = true" style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"></div>
                 <div v-if="deptVisibleNames.length>0"  @click="show_dept_selector = true" class="zindexName">
                   <span v-for="(item,index) in deptVisibleNames" :key="index">
-                    <wwOpenDAta type="departmentName" :openid="item.dept_name"></wwOpenDAta><span v-if="(deptVisibleNames.length-index)>1">,</span>
+                    <WWOpenData type="departmentName" :openid="item.dept_name"></WWOpenData><span v-if="(deptVisibleNames.length-index)>1">,</span>
                   </span>
                 </div>
               </el-col>
             </el-row>
-            <EmployeeSelector
+            <!-- <EmployeeSelector
               :employee_not_select="dept_not_select"
               :employee_list="dept_employee_list"
               :isChecKedAll="false"
@@ -136,6 +144,14 @@
               :multi="true"
               :selected="dept_selected"
               :visible.sync="show_dept_selector"
+              @confirm="dept_confirm"/> -->
+            <EmployeeSelector
+              :isChecKedAll="false"
+              :multi="true"
+              :can_select_employee="false"
+              :can_select_dept="true"
+              :selected="dept_selected"
+              :visible.sync="show_dept_selector"
               @confirm="dept_confirm"/>
           </el-form-item>
 
@@ -181,7 +197,7 @@
         forTheTaskLoading:false,
         formData: {
           task_type: '1',
-          pt_id: 2,
+          pt_id: 3,
           task_name: '',
           task_remark: '',
           base_point: '',

+ 20 - 4
src/views/common/rewardTaskAmend.vue

@@ -41,11 +41,11 @@
                 <el-input v-show="reviewerName=='' || reviewerName== null" auto-complete="off" v-model="reviewerName" placeholder="请选择审批人"></el-input>
                 <div @click="show_reviewer_selector = true" style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"></div>
                 <div v-if="reviewerName!='' && reviewerName!= null"  @click="show_reviewer_selector = true" class="zindexName">
-                    <wwOpenDAta type="userName" :openid="reviewerName"></wwOpenDAta>
+                    <WWOpenData type="userName" :openid="reviewerName"></WWOpenData>
                 </div>
               </el-col>
             </el-row>
-            <EmployeeSelector
+            <!-- <EmployeeSelector
               :employee_not_select="reviewer_not_select"
               :employee_list="reviewer_employee_list"
               :can_select_employee="true"
@@ -53,6 +53,14 @@
               :multi="false"
               :selected="reviewer_selected"
               :visible.sync="show_reviewer_selector"
+              @confirm="reviewer_confirm"/> -->
+            <EmployeeSelector
+              :isChecKedAll="false"
+              :multi="false"
+              :is_manager_only="true"
+              :is_filtration_creator="false"
+              :selected="reviewer_selected"
+              :visible.sync="show_reviewer_selector"
               @confirm="reviewer_confirm"/>
           </el-form-item>
 
@@ -122,14 +130,22 @@
                 <div @click="show_dept_selector = true" style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"></div>
                 <div v-if="deptVisibleNames.length>0"  @click="show_dept_selector = true" class="zindexName">
                   <span v-for="(item,index) in deptVisibleNames" :key="index">
-                    <wwOpenDAta type="departmentName" :openid="item.dept_name"></wwOpenDAta><span v-if="(deptVisibleNames.length-index)>1">,</span>
+                    <WWOpenData type="departmentName" :openid="item.dept_name"></WWOpenData><span v-if="(deptVisibleNames.length-index)>1">,</span>
                   </span>
                 </div>
               </el-col>
             </el-row>
-            <EmployeeSelector
+            <!-- <EmployeeSelector
               :employee_not_select="dept_not_select"
               :employee_list="dept_employee_list"
+              :isChecKedAll="false"
+              :can_select_employee="false"
+              :can_select_dept="true"
+              :multi="true"
+              :selected="dept_selected"
+              :visible.sync="show_dept_selector"
+              @confirm="dept_confirm"/> -->
+            <EmployeeSelector
               :isChecKedAll="false"
               :can_select_employee="false"
               :can_select_dept="true"

+ 3 - 3
src/views/common/rewardTaskDetailsPopup.vue

@@ -10,7 +10,7 @@
               <userImage style="margin-right: 15px;" width="50px" height="50px" class="fl" :id="workDetailData.owner_id" :user_name="workDetailData.owner_name" :img_url="workDetailData.owner_img_url"></userImage>
               <div>
                 <div style="line-height: 25px;">我悬赏的{{get_point_name(workDetailData.pt_id)}}任务    {{workDetailData.point_config.base_point}}{{get_point_name(workDetailData.pt_id)}}</div>
-                <div style="color: #909399; line-height: 25px;"><b>{{workDetailData.receiver_name}}</b> {{workDetailData.status_mark}}</div>
+                <div style="color: #909399; line-height: 25px;"><b><WWOpenData type="userName" :openid="workDetailData.receiver_name"></WWOpenData></b> {{workDetailData.status_mark}}</div>
               </div>
             </div>
           </el-col>
@@ -23,7 +23,7 @@
           </li>
           <li class="flex-box" v-if="workDetailData.status==2 && workDetailData.receiver_id != 0 ">
             <div class="label">领取人</div>
-            <div class="content_text">{{workDetailData.receiver_name}}</div>
+            <div class="content_text"><WWOpenData type="userName" :openid="workDetailData.receiver_name"></WWOpenData></div>
           </li>
           <li class="flex-box" v-if="workDetailData.status==3 && workDetailData.receiver_id != 0">
             <div class="label">完成人</div>
@@ -49,7 +49,7 @@
             <div class="label">可见范围</div>
             <div class="content_text">
               <span v-for="(item,index) in workDetailData.department_info" :key="index">
-                <wwOpenDAta type="departmentName" :openid="item.name"></wwOpenDAta><span v-if="(workDetailData.department_info.length-index)>1">,</span>
+                <WWOpenData type="departmentName" :openid="item.name"></WWOpenData><span v-if="(workDetailData.department_info.length-index)>1">,</span>
               </span>
             </div>
           </li>

+ 11 - 4
src/views/common/taskDetailsPopup.vue

@@ -7,7 +7,14 @@
         <div class="flex-box flex-v-ce">
           <userImage class="user_img person_imghead" width="46px" height="46px" :user_name="workDetailData.employee_name" :img_url="workDetailData.img_url"></userImage>
           <div class="d_userMessage">
-            <div><wwOpenDAta type="userName" :openid="workDetailData.employee_name"></wwOpenDAta></div>
+            <div class="flex-box">
+              <div><WWOpenData type="userName" :openid="workDetailData.employee_name"></WWOpenData></div>
+              <div v-if="workDetailData.review_status" style="margin-left: 8px;">
+                <div class="yellow" v-if="workDetailData.review_status == 0">待处理</div>
+                <div class="green" v-if="workDetailData.review_status ==1">已通过</div>
+                <div class="red" v-if="workDetailData.review_status == 2">已驳回</div>
+              </div>
+            </div>
             <div v-if="detailType != 2 && workDetailData.dept_list[0]">{{workDetailData.dept_list[0].dept_name}}</div>
           </div>
           <!-- 为了在抽屉打开之后获取焦点 -->
@@ -44,7 +51,7 @@
           </li>
           <li class="flex-box">
             <div class="label">审批人</div>
-            <div class="content_text"><wwOpenDAta type="userName" :openid="workDetailData.reviewer_name"></wwOpenDAta></div>
+            <div class="content_text"><WWOpenData type="userName" :openid="workDetailData.reviewer_name"></WWOpenData></div>
           </li>
           <li class="flex-box">
             <div class="label">积分种类</div>
@@ -71,7 +78,7 @@
                     <userImage class="user_img person_imghead" width="40px" height="40px" :user_name="item.recorder" :img_url="item.img_url"></userImage>
                     <div class="work_right flex-1">
                       <div class="flex-box">
-                        <div class="d_name flex-1"><wwOpenDAta type="userName" :openid="item.recorder"></wwOpenDAta></div>
+                        <div class="d_name flex-1"><WWOpenData type="userName" :openid="item.recorder"></WWOpenData></div>
                         <div class="d_date">{{item.time}}</div>
                       </div>
                       <div class="d_content">{{item.remark}}</div>
@@ -93,7 +100,7 @@
                     <userImage class="user_img person_imghead" width="40px" height="40px" :user_name="item.recorder" :img_url="item.img_url"></userImage>
                     <div class="work_right flex-1">
                       <div class="flex-box">
-                        <div class="d_name flex-1"><wwOpenDAta type="userName" :openid="item.recorder"></wwOpenDAta>
+                        <div class="d_name flex-1"><WWOpenData type="userName" :openid="item.recorder"></WWOpenData>
                         <span class="blue" v-if="item.point>0">+{{item.point}}</span>
                         <span class="green" v-if="item.point<0">{{item.point}}</span>
                         </div>

+ 26 - 7
src/views/common/temporaryTask.vue

@@ -1,5 +1,5 @@
 <template>
-  <div>
+  <div class="dialog-shake">
     <!-- 临时任务弹窗 -->
     <el-dialog
       :title="showTitle"
@@ -24,12 +24,12 @@
                 <div @click="show_approval_selector = true" style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"></div>
                 <div v-if="executorNames.length>0"  @click="show_approval_selector = true" class="zindexName">
                   <span v-for="(item,index) in executorNames" :key="index">
-                    <wwOpenDAta type="userName" :openid="item.name"></wwOpenDAta><span v-if="(executorNames.length-index)>1">,</span>
+                    <WWOpenData type="userName" :openid="item.name"></WWOpenData><span v-if="(executorNames.length-index)>1">,</span>
                   </span>
                 </div>
               </el-col>
             </el-row>
-            <EmployeeSelector
+            <!-- <EmployeeSelector
               :employee_not_select="approval_not_select"
               :employee_list="employee_list"
               :isChecKedAll="true"
@@ -38,7 +38,7 @@
               :multi="true"
               :selected="approval_selected"
               :visible.sync="show_approval_selector"
-              @confirm="approval_confirm"/>
+              @confirm="approval_confirm"/> -->
           </el-form-item>
           <el-form-item label="审批人" prop="reviewer_id" :rules="[{ required: true, message: '请选择审批人', trigger: 'change' }]">
             <el-row>
@@ -46,11 +46,11 @@
                 <el-input v-show="reviewerName=='' || reviewerName== null" auto-complete="off" v-model="reviewerName" placeholder="请选择审批人"></el-input>
                 <div @click="show_reviewer_selector = true" style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"></div>
                 <div v-if="reviewerName!='' && reviewerName!= null"  @click="show_reviewer_selector = true" class="zindexName">
-                    <wwOpenDAta type="userName" :openid="reviewerName"></wwOpenDAta>
+                    <WWOpenData type="userName" :openid="reviewerName"></WWOpenData>
                 </div>
               </el-col>
             </el-row>
-            <EmployeeSelector
+            <!-- <EmployeeSelector
               :employee_not_select="reviewer_not_select"
               :employee_list="reviewer_employee_list"
               :can_select_employee="true"
@@ -59,7 +59,7 @@
               :use_employee_list="true"
               :selected="reviewer_selected"
               :visible.sync="show_reviewer_selector"
-              @confirm="reviewer_confirm"/>
+              @confirm="reviewer_confirm"/> -->
           </el-form-item>
 
           <el-form-item label="规则积分" prop="pt_id" :rules="[{ required: true, message: '请选择规则积分', trigger: 'blur' }]">
@@ -136,6 +136,25 @@
         </el-form>
       </div>
     </el-dialog>
+    
+    <!-- 执行人 -->
+    <EmployeeSelector
+      :employee_list="employee_list"
+      :user_employee_list="true"
+      :multi="true"
+      :selected="approval_selected"
+      :visible.sync="show_approval_selector"
+      @confirm="approval_confirm"/>
+
+    <!-- 审批人 -->
+    <EmployeeSelector
+      :multi="false"
+      :isChecKedAll="false"
+      :is_manager_only="true"
+      :is_filtration_creator="false"
+      :selected="reviewer_selected"
+      :visible.sync="show_reviewer_selector"
+      @confirm="reviewer_confirm"/>
   </div>
 </template>
 

+ 25 - 7
src/views/common/temporaryTaskAmend.vue

@@ -23,11 +23,11 @@
                 <el-input v-show="executorName=='' || executorName== null" auto-complete="off" v-model="executorName" placeholder="请选择执行人"></el-input>
                 <div @click="show_approval_selector = true" style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"></div>
                 <div v-if="executorName!='' && executorName!= null"  @click="show_approval_selector = true" class="zindexName">
-                    <wwOpenDAta type="userName" :openid="executorName"></wwOpenDAta>
+                    <WWOpenData type="userName" :openid="executorName"></WWOpenData>
                 </div>
               </el-col>
             </el-row>
-            <EmployeeSelector
+            <!-- <EmployeeSelector
               :employee_not_select="approval_not_select"
               :employee_list="employee_list"
               :isChecKedAll="false"
@@ -36,7 +36,16 @@
               :multi="false"
               :selected="approval_selected"
               :visible.sync="show_approval_selector"
-              @confirm="approval_confirm"/>
+              @confirm="approval_confirm"/> -->
+            <EmployeeSelector
+              :employee_list="employee_list"
+			        :user_employee_list="true"
+              :isChecKedAll="false"
+              :multi="false"
+              :selected="approval_selected"
+              :visible.sync="show_approval_selector"
+              @confirm="approval_confirm"
+            />
           </el-form-item>
           <el-form-item label="审批人" prop="reviewer_id" :rules="[{ required: true, message: '请选择审批人', trigger: 'blur' }]">
             <el-row>
@@ -44,11 +53,11 @@
                 <el-input v-show="reviewerName=='' || reviewerName== null" auto-complete="off" v-model="reviewerName" placeholder="请选择审批人"></el-input>
                 <div @click="show_reviewer_selector = true" style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"></div>
                 <div v-if="reviewerName!='' && reviewerName!= null"  @click="show_reviewer_selector = true" class="zindexName">
-                    <wwOpenDAta type="userName" :openid="reviewerName"></wwOpenDAta>
+                    <WWOpenData type="userName" :openid="reviewerName"></WWOpenData>
                 </div>
               </el-col>
             </el-row>
-            <EmployeeSelector
+            <!-- <EmployeeSelector
               :employee_not_select="reviewer_not_select"
               :employee_list="reviewer_employee_list"
               :can_select_employee="true"
@@ -57,12 +66,21 @@
               :use_employee_list="true"
               :selected="reviewer_selected"
               :visible.sync="show_reviewer_selector"
-              @confirm="reviewer_confirm"/>
+              @confirm="reviewer_confirm"/> -->
+            <EmployeeSelector
+              :multi="false"
+			        :isChecKedAll="false"
+              :is_manager_only="true"
+              :is_filtration_creator="false"
+              :selected="reviewer_selected"
+              :visible.sync="show_reviewer_selector"
+              @confirm="reviewer_confirm"
+            />
           </el-form-item>
 
           <el-form-item label="规则积分" prop="pt_id" :rules="[{ required: true, message: '请选择规则积分', trigger: 'blur' }]">
             <el-radio-group v-model="formData.pt_id" >
-              <el-radio v-for="(item,index) in point_types" :key="index" v-show="item.code !== 'JX'" :label="item.id">{{item.name}}</el-radio>
+              <el-radio v-for="(item,index) in point_types" disabled :key="index" v-show="item.code !== 'JX'" :label="item.id">{{item.name}}</el-radio>
             </el-radio-group>            
           </el-form-item>
 

+ 1 - 1
src/views/dashboard/components/DepartmentPointAll.vue

@@ -50,7 +50,7 @@
     >
       <img
         v-if="tableData.length == 0"
-        src="/static/images/nodata.png"
+        src="static/images/nodata.png"
         style="display: block; margin:0 auto;"
       >
       <p style="color:#ccc; text-align: center">暂无数据</p>

+ 1 - 1
src/views/dashboard/components/IntegralCreateApplicationBtn.vue

@@ -784,7 +784,7 @@ export default {
   margin: 0 auto;
   width: 40px;
   height: 40px;
-  background-image: url(/static/images/jfsq.png);
+  background-image: url(/images/jfsq.png);
   background-size: 100%;
 }
 .integral-create-application-btn .card-panel-description {

+ 2 - 2
src/views/dashboard/components/IntegralCreateReviewBtn.vue

@@ -264,7 +264,7 @@
                         >
                         <img
                           v-if="scope.row.img_url == null"
-                          src="/static/images/head_default.png"
+                          src="static/images/head_default.png"
                           width="42px"
                           height="42px"
                         >
@@ -1412,7 +1412,7 @@
     margin: 0 auto;
     width: 40px;
     height: 40px;
-    background-image: url(/static/images/jflr.png);
+    background-image: url(/images/jflr.png);
     background-size: 100%;
   }
   .integral-create-review-btn .card-panel-description {

+ 1 - 1
src/views/dashboard/components/PointAutoCom.vue

@@ -92,7 +92,7 @@
     margin: 0 auto;
     width: 40px;
     height: 40px;
-    background-image: url(/static/images/jfsq.png);
+    background-image: url(/images/jfsq.png);
     background-size: 100%;
   }
   .integral-create-application-btn .card-panel-description {

+ 1 - 1
src/views/dashboard/components/TaskCreateBtn.vue

@@ -721,7 +721,7 @@
     margin: 0 auto;
     width: 40px;
     height: 40px;
-    background-image: url(/static/images/fbrw.png);
+    background-image: url(/images/fbrw.png);
     background-size: 100%;
   }
   .integral-create-task-btn .card-panel-description {

+ 10 - 10
src/views/dashboard/components/anniu.vue

@@ -296,7 +296,7 @@
       margin: 0 auto;
       width: 40px;
       height: 40px;
-      background-image: url(/static/images/sqtb.png);
+      background-image: url(/images/sqtb.png);
       background-size: 100%;
     }
 
@@ -304,7 +304,7 @@
       margin: 0 auto;
       width: 40px;
       height: 40px;
-      background-image: url(/static/images/jfsq.png);
+      background-image: url(/images/jfsq.png);
       background-size: 100%;
     }
 
@@ -312,7 +312,7 @@
       margin: 0 auto;
       width: 40px;
       height: 40px;
-      background-image: url(/static/images/jflr.png);
+      background-image: url(/images/jflr.png);
       background-size: 100%;
     }
 
@@ -320,7 +320,7 @@
       margin: 0 auto;
       width: 40px;
       height: 40px;
-      background-image: url(/static/images/xsrw.png);
+      background-image: url(/images/xsrw.png);
       background-size: 100%;
     }
 
@@ -328,7 +328,7 @@
       margin: 0 auto;
       width: 40px;
       height: 40px;
-      background-image: url(/static/images/pkjz.png);
+      background-image: url(/images/pkjz.png);
       background-size: 100%;
     }
 
@@ -336,7 +336,7 @@
       margin: 0 auto;
       width: 40px;
       height: 40px;
-      background-image: url(/static/images/fbrw.png);
+      background-image: url(/images/fbrw.png);
       background-size: 100%;
     }
 
@@ -344,14 +344,14 @@
       margin: 0 auto;
       width: 40px;
       height: 40px;
-      background-image: url(/static/images/setting.png);
+      background-image: url(/images/setting.png);
       background-size: 100%;
     }
     .tpzs9 {
       margin: 0 auto;
       width: 40px;
       height: 40px;
-      background-image: url(/static/images/review.png);
+      background-image: url(/images/review.png);
       background-size: 100%;
     }
 
@@ -360,14 +360,14 @@
       margin: 0 auto;
       width: 40px;
       height: 40px;
-      background-image: url(/static/images/iny.png);
+      background-image: url(/images/iny.png);
       background-size: 100%;
     }
     .tpzs11 {
       margin: 0 auto;
       width: 40px;
       height: 40px;
-      background-image: url(/static/images/data.png);
+      background-image: url(/images/data.png);
       background-size: 100%;
     }
     .card-panel-icon-wrapper {

+ 1 - 1
src/views/dashboard/components/fuli.vue

@@ -125,7 +125,7 @@
 "
         >
           <img
-            src="/static/images/nodata.png"
+            src="static/images/nodata.png"
             style="display: block; margin:0 auto;"
           >
           <p style="color:#ccc; text-align: center">暂无内容</p>

+ 5 - 5
src/views/dashboard/components/jcnr.vue

@@ -7,7 +7,7 @@
           @click="play_video('https://cnmwth.oss-cn-shenzhen.aliyuncs.com/Video/WhyThePointManagement.mp4')"
         >
           <div class="display-cell">
-            <img src="/static/images/img_PointDesign.png">
+            <img src="static/images/img_PointDesign.png">
           </div>
           <div class="display-cell textbox">
             <div class="v-text" style="text-overflow: ellipsis; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2;">
@@ -24,7 +24,7 @@
           @click="play_video('https://cnmwth.oss-cn-shenzhen.aliyuncs.com/Video/PointManagement.mp4')"
         >
           <div class="display-cell">
-            <img src="/static/images/img_Integral_management_landing.png">
+            <img src="static/images/img_Integral_management_landing.png">
           </div>
           <div class="display-cell textbox">
             <div class="v-text" style="text-overflow: ellipsis; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2;">
@@ -41,7 +41,7 @@
           @click="play_video('https://cnmwth.oss-cn-shenzhen.aliyuncs.com/Video/HowtoPoint1.mp4')"
         >
           <div class="display-cell">
-            <img src="/static/images/img_Integral_management_implementation.png">
+            <img src="static/images/img_Integral_management_implementation.png">
           </div>
           <div class="display-cell textbox">
             <div class="v-text" style="text-overflow: ellipsis; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2;">
@@ -115,7 +115,7 @@
             style="width:30px; height: 30px; -webkit-border-radius: 20px; display: none; position:fixed; right:-10px; top:-15px; line-height: 30px; text-align: center; z-index:9;background-color:#f00; color:#fff;-moz-border-radius: 20px;border-radius: 20px;"
             @click="adv_box_mark_show1 = false"
           >✕</a>
-          <img src="/static/images/adv_top.png">
+          <img src="static/images/adv_top.png">
 
           <div
             @click="adv_box_mark_show = true"
@@ -139,7 +139,7 @@
             @click="adv_box_mark_show = false"
           >✕</a>
           
-          <img width="880" style="display: block;" src="/static/images/adv_center.png">
+          <img width="880" style="display: block;" src="static/images/adv_center.png">
         </div>
       </div>
     </div>

+ 1 - 1
src/views/dashboard/components/jfsjlb.vue

@@ -46,7 +46,7 @@
     top: 50%;
     margin-top: -115px;
 ">
-      <img v-if="tableData.length == 0" src="/static/images/nodata.png" style="display: block; margin:0 auto;">
+      <img v-if="tableData.length == 0" src="static/images/nodata.png" style="display: block; margin:0 auto;">
       <p style="color:#ccc; text-align: center">暂无积分事件</p>
     </div>
 

+ 1 - 1
src/views/dashboard/components/notice.vue

@@ -127,7 +127,7 @@
         >
           <img
             v-if="datalist.length == 0"
-            src="/static/images/nodata.png"
+            src="static/images/nodata.png"
             style="display: block; margin:0 auto;"
           >
           <div style="color:#ccc; text-align: center">暂无内容</div>

+ 6 - 6
src/views/dashboard/components/paiming.vue

@@ -22,7 +22,7 @@
             >
             <img
               v-if="scope.row.target_img == null"
-              src="/static/images/head_default.png"
+              src="static/images/head_default.png"
               width="42px"
               height="42px"
             >
@@ -33,9 +33,9 @@
       <el-table-column label="排行">
         <template slot-scope="scope">
           <div style="float:left" class="table-font-number" v-if="scope.row.index <= 3">
-            <img src="/static/images/rank_01.png" width="20" v-if="scope.row.index == 1">
-            <img src="/static/images/rank_02.png" width="20" v-if="scope.row.index == 2">
-            <img src="/static/images/rank_03.png" width="20" v-if="scope.row.index == 3">
+            <img src="static/images/rank_01.png" width="20" v-if="scope.row.index == 1">
+            <img src="static/images/rank_02.png" width="20" v-if="scope.row.index == 2">
+            <img src="static/images/rank_03.png" width="20" v-if="scope.row.index == 3">
           </div>
 
           <div
@@ -46,7 +46,7 @@
           <div style="float:left" v-if="scope.row.status > 0">
             <img
               style="width:9px; height:17px; margin:3px 5px 0 8px;"
-              src="/static/images/up_small.png"
+              src="static/images/up_small.png"
               alt
             >
             <span
@@ -56,7 +56,7 @@
           <div style="float:left" v-if="scope.row.status < 0">
             <img
               style="width:9px; height:17px; margin:3px 5px 0 8px;"
-              src="/static/images/down_small.png"
+              src="static/images/down_small.png"
               alt
             >
             <span

+ 6 - 6
src/views/dashboard/components/paiming2.vue

@@ -21,7 +21,7 @@
             >
             <img
               v-if="scope.row.target_img == null"
-              src="/static/images/head_default.png"
+              src="static/images/head_default.png"
               width="42px"
               height="42px"
             >
@@ -32,9 +32,9 @@
       <el-table-column label="排行">
         <template slot-scope="scope">
           <div style="float:left" class="table-font-number" v-if="scope.row.index <= 3">
-            <img src="/static/images/rank_01.png" width="20" v-if="scope.row.index == 1">
-            <img src="/static/images/rank_02.png" width="20" v-if="scope.row.index == 2">
-            <img src="/static/images/rank_03.png" width="20" v-if="scope.row.index == 3">
+            <img src="static/images/rank_01.png" width="20" v-if="scope.row.index == 1">
+            <img src="static/images/rank_02.png" width="20" v-if="scope.row.index == 2">
+            <img src="static/images/rank_03.png" width="20" v-if="scope.row.index == 3">
           </div>
 
           <div
@@ -45,7 +45,7 @@
           <div style="float:left" v-if="scope.row.status > 0">
             <img
               style="width:9px; height:17px; margin:3px 5px 0 8px;"
-              src="/static/images/up_small.png"
+              src="static/images/up_small.png"
               alt
             >
             <span
@@ -55,7 +55,7 @@
           <div style="float:left" v-if="scope.row.status < 0">
             <img
               style="width:9px; height:17px; margin:3px 5px 0 8px;"
-              src="/static/images/down_small.png"
+              src="static/images/down_small.png"
               alt
             >
             <span

+ 4 - 4
src/views/dashboard/components/paiming_all.vue

@@ -14,14 +14,14 @@
 
       <el-table-column label="姓名" prop="target_name" width="120px"><template slot-scope="scope">
         <div class="rank_head"><img v-if="scope.row.target_img != null" v-bind:src="scope.row.target_img" width="42px" height="42px"/>
-          <img v-if="scope.row.target_img == null" src="/static/images/head_default.png" width="42px" height="42px"/>
+          <img v-if="scope.row.target_img == null" src="static/images/head_default.png" width="42px" height="42px"/>
           {{scope.row.target_name}}</div>
       </template></el-table-column>  <el-table-column label="排行">
       <template slot-scope="scope">
         <div class="table-font-number" v-if="scope.row.index <= 3">
-          <img src="/static/images/rank_01.png" width="20" v-if="scope.row.index == 1">
-          <img src="/static/images/rank_02.png" width="20" v-if="scope.row.index == 2">
-          <img src="/static/images/rank_03.png" width="20" v-if="scope.row.index == 3">
+          <img src="static/images/rank_01.png" width="20" v-if="scope.row.index == 1">
+          <img src="static/images/rank_02.png" width="20" v-if="scope.row.index == 2">
+          <img src="static/images/rank_03.png" width="20" v-if="scope.row.index == 3">
         </div>
 
 

+ 4 - 4
src/views/dashboard/components/paiming_department.vue

@@ -15,16 +15,16 @@
 
       <el-table-column label="姓名" prop="target_name" width="120px"><template slot-scope="scope">
         <div class="rank_head"><img v-if="scope.row.target_img != null" v-bind:src="scope.row.target_img" width="42px" height="42px"/>
-          <img v-if="scope.row.target_img == null" src="/static/images/head_default.png" width="42px" height="42px"/>
+          <img v-if="scope.row.target_img == null" src="static/images/head_default.png" width="42px" height="42px"/>
           {{scope.row.target_name}}</div>
       </template></el-table-column>
 
       <el-table-column label="排行">
         <template slot-scope="scope">
           <div class="table-font-number" v-if="scope.row.index <= 3">
-            <img src="/static/images/rank_01.png" width="20" v-if="scope.row.index == 1">
-            <img src="/static/images/rank_02.png" width="20" v-if="scope.row.index == 2">
-            <img src="/static/images/rank_03.png" width="20" v-if="scope.row.index == 3">
+            <img src="static/images/rank_01.png" width="20" v-if="scope.row.index == 1">
+            <img src="static/images/rank_02.png" width="20" v-if="scope.row.index == 2">
+            <img src="static/images/rank_03.png" width="20" v-if="scope.row.index == 3">
           </div>
 
 

+ 4 - 4
src/views/dashboard/components/tubiao.vue

@@ -17,7 +17,7 @@
           >
           <img
             v-if="profile.img_url == null"
-            src="/static/images/head_default.png"
+            src="static/images/head_default.png"
             width="50"
             height="50"
             style="border-radius: 30px;"
@@ -218,9 +218,9 @@ export default {
       },
 
       profile: this.$store.getters.user_info,
-      imgUrl_01: "/static/images/rank1.png",
-      imgUrl_02: "/static/images/up.png",
-      imgUrl_down: "/static/images/down.png",
+      imgUrl_01: "static/images/rank1.png",
+      imgUrl_02: "static/images/up.png",
+      imgUrl_down: "static/images/down.png",
 
       pieLegend: {
         type: "scroll",

+ 4 - 4
src/views/dashboard/components/tubiaoAdmin.vue

@@ -17,7 +17,7 @@
           >
           <img
             v-if="profile.img_url == null"
-            src="/static/images/head_default.png"
+            src="static/images/head_default.png"
             width="50"
             height="50"
             style="border-radius: 30px;"
@@ -204,9 +204,9 @@ export default {
       },
 
       profile: this.$store.getters.user_info,
-      imgUrl_01: "/static/images/rank1.png",
-      imgUrl_02: "/static/images/up.png",
-      imgUrl_down: "/static/images/down.png",
+      imgUrl_01: "static/images/rank1.png",
+      imgUrl_02: "static/images/up.png",
+      imgUrl_down: "static/images/down.png",
 
       pieLegend: {
         type: "scroll",

+ 4 - 4
src/views/dashboard/components/tubiaoEmployee.vue

@@ -6,7 +6,7 @@
         <div class="card-panel-icon-wrapper icon-people"  @click="ProfileShow" style="cursor: pointer;">
 
           <img v-if="profile.img_url != null" :src="profile.img_url" width="50" height="50" style="border-radius: 30px;">
-          <img v-if="profile.img_url == null" src="/static/images/head_default.png" width="50" height="50" style="border-radius: 30px;">
+          <img v-if="profile.img_url == null" src="static/images/head_default.png" width="50" height="50" style="border-radius: 30px;">
 
         </div>
         <div class="card-panel-description">
@@ -150,9 +150,9 @@
           },
 
         profile: this.$store.getters.user_info,
-        imgUrl_01: '/static/images/rank1.png',
-        imgUrl_02: '/static/images/up.png',
-        imgUrl_down: '/static/images/down.png',
+        imgUrl_01: 'static/images/rank1.png',
+        imgUrl_02: 'static/images/up.png',
+        imgUrl_down: 'static/images/down.png',
 
         pieLegend: {
           type: 'scroll',

File diff suppressed because it is too large
+ 1057 - 1157
src/views/dashboard/index.vue


+ 2 - 2
src/views/integral/ChartDept.vue

@@ -83,7 +83,7 @@
           >
             <img
               v-if="tableData.length == 0"
-              src="/static/images/nodata.png"
+              src="static/images/nodata.png"
               style="display: block; margin:0 auto;"
             >
             <p style="color:#ccc; text-align: center">暂无积分事件</p>
@@ -298,7 +298,7 @@
     </el-tabs>
     <div v-if="dept_list.department_data">
       <div v-if="dept_list.department_data.length == 0" style="background-color: #fff; padding-top:50px; height:750px;">
-          <img src="/static/images/nodata.png" style="display: block; margin:0 auto;" class="no-data-img">
+          <img src="static/images/nodata.png" style="display: block; margin:0 auto;" class="no-data-img">
           <p style="color: rgb(204, 204, 204); text-align: center;">暂无数据</p>
         </div>
     </div>

+ 6 - 6
src/views/integral/ChartPersonal.vue

@@ -63,7 +63,7 @@
             margin-top: -115px;"
         >
           <img
-            src="/static/images/nodata.png"
+            src="static/images/nodata.png"
             style="display: block; margin:0 auto;"
           >
           <p style="color:#ccc; text-align: center">暂无数据</p>
@@ -84,7 +84,7 @@
                 >
                 <img
                   v-if="rank_info.employee.img_url == null"
-                  src="/static/images/head_default.png"
+                  src="static/images/head_default.png"
                   width="50"
                   height="50"
                   style="border-radius: 30px;"
@@ -273,7 +273,7 @@
             >
               <img
                 v-if="tableData.length == 0"
-                src="/static/images/nodata.png"
+                src="static/images/nodata.png"
                 style="display: block; margin:0 auto;"
               >
               <p style="color:#ccc; text-align: center">暂无积分事件</p>
@@ -331,9 +331,9 @@ export default {
       },
       pageLimit: 5,
       rank_info: { employee: null },
-      imgUrl_01: '/static/images/rank1.png',
-      imgUrl_02: '/static/images/up.png',
-      imgUrl_down: '/static/images/down.png',
+      imgUrl_01: 'static/images/rank1.png',
+      imgUrl_02: 'static/images/up.png',
+      imgUrl_down: 'static/images/down.png',
       time_range: [startDate, endDate],
       profile: this.$store.getters.user_info,
       categoryTree: [],

+ 3 - 3
src/views/integral/DepartmentDataDetal.vue

@@ -113,9 +113,9 @@
               class="table-font-number"
               v-if="(currentPage - 1) * 10 + scope.$index <= 2"
             >
-              <img src="/static/images/rank_01.png" width="20" v-if="scope.$index == 0">
-              <img src="/static/images/rank_02.png" width="20" v-if="scope.$index == 1">
-              <img src="/static/images/rank_03.png" width="20" v-if="scope.$index == 2">
+              <img src="static/images/rank_01.png" width="20" v-if="scope.$index == 0">
+              <img src="static/images/rank_02.png" width="20" v-if="scope.$index == 1">
+              <img src="static/images/rank_03.png" width="20" v-if="scope.$index == 2">
             </div>
 
             <div

+ 12 - 2
src/views/integral/EmploeAdd.vue

@@ -28,8 +28,18 @@
       <el-form-item label="部门" prop="dept_id" :label-width="formLabelWidth">
         <el-input auto-complete="off" v-model="name" :disabled="detailData.status == 2 && managerId != 0" placeholder="请选择上级部门"></el-input>
         <div @click="show_dept_selector = true" :disabled="detailData.status == 2 && managerId != 0" style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"></div>
-        <EmployeeSelector :employee_not_select="employee_not_select" :can_select_employee="false" :can_select_dept="true"
-          :selected.sync="dept_selected" :close_clear_data="false" :visible.sync="show_dept_selector" @confirm="move_confirm" />
+        <!-- <EmployeeSelector :employee_not_select="employee_not_select" :can_select_employee="false" :can_select_dept="true"
+          :selected.sync="dept_selected" :close_clear_data="false" :visible.sync="show_dept_selector" @confirm="move_confirm" /> -->
+          
+        <EmployeeSelector
+          :employee_not_select="employee_not_select"
+          :can_select_employee="false"
+          :can_select_dept="true"
+          :dept_children="false"
+          :selected="dept_selected"
+          :visible.sync="show_dept_selector"
+          @confirm="move_confirm"
+        />
 
       </el-form-item>
       <el-form-item label="职位" prop="post" :label-width="formLabelWidth">

+ 5 - 5
src/views/integral/EmployeeSelector.vue

@@ -30,7 +30,7 @@
               :class="{on:filter.dept_id.length == 0}"
               style="display: block; padding:7px;"
             >
-            <img src="/static/images/two.png" style="width: 16px;height: 16px;vertical-align: text-bottom;margin-right: 8px;" />
+            <img src="static/images/two.png" style="width: 16px;height: 16px;vertical-align: text-bottom;margin-right: 8px;" />
             所有部门
             </a>
             <!-- <el-tree
@@ -39,7 +39,7 @@
               :default-expand-all="true"
               :expand-on-click-node="false"
               :data="deptTree"
-              img="/static/images/one.jpg"
+              img="static/images/one.jpg"
               @node-click="handleNodeClick"
             ></el-tree> -->
 
@@ -48,7 +48,7 @@
               <span class="custom-tree-node" slot-scope="{ node, data }">
                
                   <span >
-                      <img v-if="data.children.length!=0" src="/static/images/one.png" style="width: 16px;height: 216x;vertical-align: text-bottom;margin-right: 8px;" />
+                      <img v-if="data.children.length!=0" src="static/images/one.png" style="width: 16px;height: 216x;vertical-align: text-bottom;margin-right: 8px;" />
                      
                       {{data.label}}
                   </span>              
@@ -89,7 +89,7 @@
                       >
                       <img
                         v-if="scope.row.img_url == null"
-                        src="/static/images/head_default.png"
+                        src="static/images/head_default.png"
                         width="42px"
                         height="42px"
                       >
@@ -132,7 +132,7 @@
                       >
                       <img
                         v-if="scope.row.img_url == null"
-                        src="/static/images/head_default.png"
+                        src="static/images/head_default.png"
                         width="42px"
                         height="42px"
                       >

+ 142 - 163
src/views/integral/EmployeeTable.vue

@@ -1,7 +1,11 @@
 <template>
   <div>
     <el-alert class="diy-tip"  title="温馨提示:" @close="tips_close" v-show="tips_show" type="success" description show-icon>
-		  当前组织架构成员通过微信通讯录同步,员工开启积分管理后才能正式启用并进入“功道云积分制”,如果您的微信通讯录有变动,点击立即同步
+		  当前组织架构成员通过微信通讯录同步,员工开启积分管理后才能正式启用并进入“功道云积分制”,如果您的微信通讯录有变动,点击
+      <span class="blue" style="margin-left: 10px;cursor: pointer;" @click="tb()" v-loading="tbLoading">
+					<i class="el-icon-refresh"></i>
+					立即同步
+				</span>
 		</el-alert>
 
     <el-row class="architecture">
@@ -9,7 +13,7 @@
         <div>
           <div v-loading="ruleDeprt">
             <div class="company_name">
-              <img src="/static/images/two.png" />
+              <img src="static/images/two.png" />
               <span>组织架构</span>
             </div>
             <div ref="ruletree" class="department_box">
@@ -22,7 +26,7 @@
                 :props="{ children: 'children', label: 'name' , value: 'id'}"
                 @node-click="handleNodeClick"
                 :accordion="true"
-                empty-text="您暂无部门数据,请同步钉钉通讯录"
+                empty-text="您暂无部门数据,请同步微信通讯录"
               >
                 <div
                   content="tree"
@@ -31,13 +35,12 @@
                   slot-scope="{ node, data }"
                   style="font-size: 14px;color: #606266; width:100%; text-align: left;"
                 >
-								  <img src="/static/images/one.png" style="width: 20px;margin-right: 5px;" />
-                  <!-- <span class="name" style="width:100%;overflow:hidden">{{data.label}}</span> -->
+								  <img src="static/images/one.png" style="width: 20px;margin-right: 5px;" />
                   <span class="name"
-                    ><wwOpenDAta
+                    ><WWOpenData
                       type="departmentName"
                       :openid="data.name"
-                    ></wwOpenDAta
+                    ></WWOpenData
                   ></span>
                 </div>
               </el-tree>
@@ -45,141 +48,32 @@
           </div>
         </div>
       </el-col>
-
       <el-col :span="18" class="RuleRight">
-        
 				<el-button @click="participation()" :loading="enable_loading" size="medium" type="primary" style="margin-right: 10px;">批量启用积分管理</el-button>
         <el-input placeholder="输入同事姓名" size="medium" style="width: 230px;"  v-model="keywords" clearable @input="searchUser()">
-          <!-- <el-button slot="append" icon="el-icon-search" @click="getEmployee()"></el-button> -->
         </el-input>
         <div
           style="color: #303133;font-size: 14px;padding:10px 0 0 0; line-height: 32px; overflow: hidden;"
         >
         </div>
-
         <div class="list_box">
           <div
             style="margin-bottom:10px;margin-top:30px;"
             class="inline-block-btn-list"
           >
-            <!-- <el-select
-              v-model="filter.status"
-              @change="onFilterChanged"
-              class="gap-right-8"
-              style="width:90px;display:none;"
-            >
-              <el-option
-                v-for="item in employeeStatus"
-                :key="item.value"
-                :label="item.label"
-                :value="item.value"
-              ></el-option>
-            </el-select> -->
-
             <div
               class="gap-right-8 fr"
               style="display:inline-block; width:180px;"
             >
-              <!-- <el-input
-                placeholder="输入关键词"
-                ref="search-bar"
-                v-model="filter.keywords"
-                class="input-with-select"
-                @keyup.enter.native="onFilterChanged"
-              >
-                <el-button
-                  slot="append"
-                  icon="el-icon-search"
-                  @click="onFilterChanged"
-                ></el-button>
-              </el-input> -->
             </div>
           </div>
-          <!-- <el-table
-            class="list_box_table"
-            @filter-change="filterHandler"
-            ref="multipleTable"
-            :data="tableData"
-            tooltip-effect="dark"
-            @selection-change="handleSelectionChange"
-            @row-click="toDetailPage"
-          >
-            <el-table-column
-              type="selection"
-              width="50"
-              :selectable="isSelectable"
-            ></el-table-column>
-            <el-table-column prop="name" label="姓名" width="180px">
-              <template slot-scope="scope">
-                <userImage
-                  class="fl"
-                  :id="scope.row.id"
-                  :user_name="scope.row.name"
-                  :img_url="scope.row.img_url"
-                  fontSize="16"
-                  width="50px"
-                  height="50px"
-                ></userImage>
-                <span
-                  style="margin-left: 10px; line-height: 50px; display: inline-block;"
-                  >{{ scope.row.name }}</span
-                >
-                <span
-                  class="administration"
-                  v-if="scope.row.employee_detail.manage_dept_ids.length != 0"
-                  >主管</span
-                >
-              </template>
-            </el-table-column>
-            <el-table-column prop="tel" label="电话"></el-table-column>
-            <el-table-column
-              prop="company_id"
-              label="工号"
-              width="100px"
-            ></el-table-column>
-            <el-table-column prop="status" label="状态" width="80px">
-              <template slot-scope="scope">
-                <div
-                  v-if="scope.row.status == 0"
-                  style="color: rgb(255 168 90);"
-                >
-                  待加入
-                </div>
-                <div v-if="scope.row.status == 1" style="color: #409eff;">
-                  在职
-                </div>
-                <div v-if="scope.row.status == 2" style="color: #f56c6c;">
-                  离职
-                </div>
-                <div
-                  v-if="scope.row.status == 3"
-                  style="color: rgb(107 204 131);cursor:pointer"
-                  @click.stop="againInvite(scope.row)"
-                >
-                  再次邀请
-                </div>
-              </template>
-            </el-table-column>
-            <el-table-column
-              prop="accedence_time"
-              label="入职日期"
-              width="100px"
-            ></el-table-column>
-            <template slot="empty">
-              <div class="nopoint_box">
-                <div class="noimg noperson"></div>
-                <span class="title">没有对应的数据</span>
-              </div>
-            </template>
-          </el-table> -->
-
 					<el-table :data="userList" @selection-change="handleSelectionChange" v-loading="tableToading">
-						<el-table-column type="selection" width="50"></el-table-column>
+						<el-table-column type="selection" width="50" :selectable="isSelectable"></el-table-column>
 						<el-table-column label="姓名">
 							<template slot-scope="scope">
 								<div class="flex-box flex-v-ce">
 									<userImage :user_name="scope.row.name" :img_url="scope.row.img_url" width="44px" height="44px"></userImage>
-									<div style="margin-left: 10px;"><wwOpenDAta type="userName" :openid="scope.row.name"></wwOpenDAta></div>
+									<div style="margin-left: 10px;"><WWOpenData type="userName" :openid="scope.row.name"></WWOpenData></div>
 								</div>
 							</template>
 						</el-table-column>
@@ -187,17 +81,28 @@
 							<template slot-scope="scope">
 								<div class="" style="">
 									<span v-for="(item, index) in scope.row.employee_detail.dept_list" :key="index">
-                    <wwOpenDAta type="departmentName" :openid="item.depart_name"></wwOpenDAta><span v-if="(scope.row.employee_detail.dept_list.length-index)>1">,</span>
+                    <div v-if="item.depart_id !== 1"><WWOpenData type="departmentName" :openid="item.depart_name"></WWOpenData><span v-if="(scope.row.employee_detail.dept_list.length-index)>1">,</span></div>
                   </span>
 								</div>
 							</template>
 						</el-table-column>
-						<el-table-column prop="accedence_time" label="入职时间"></el-table-column>
-						<!-- <el-table-column prop="accedence_time" label="是否参与排名" align="center">
+						<el-table-column prop="accedence_time" label="入职时间">
 							<template slot-scope="scope">
-								<span class="participateRank" :style="scope.row.is_ranking==1?'color:#409eff':'color:rgb(255 83 70)'" @click="rankingtakePartIn(scope.row.id,scope.row.is_ranking)">{{ scope.row.is_ranking==1?'参与':'不参与' }}</span>
+								<div class="tabaccTIme" v-loading="scope.row.entryIf">
+                  <el-date-picker
+                    @change="entryclick(scope.row)"
+                    clear-icon="el-icon-circle-close"
+                    v-model="scope.row.accedence_time"
+                    type="date"
+                    format="yyyy-MM-dd"
+                    value-format="timestamp"
+                    placeholder="选择日期时间"
+                    :clearable="false"
+                    :picker-options="assistantOptions">
+                  </el-date-picker>
+                </div>
 							</template>
-						</el-table-column> -->
+            </el-table-column>
 						<el-table-column label="启用积分管理">
 							<template slot="header" slot-scope="scope">
 								  <el-popover
@@ -220,27 +125,12 @@
 								<div :class="[scope.row.is_official==1? 'switch-box':'']" @click="changeIs(scope.row.is_official, scope.row.id)">
 									<div class="switch"></div>
 								</div>
-								<!-- <el-switch @change="changeIs($event, scope.row.id)" v-model="scope.row.is_official" :active-value="is" :inactive-value="no"></el-switch> -->
 							</template>
 						</el-table-column>
 						<template slot="empty">
 							<noData></noData>
 						</template>
 					</el-table>
-          
-          <!-- <el-pagination
-            background
-            layout="total,sizes, prev, pager, next"
-            @size-change="handleSizeChange"
-            :page-size="pageLimit"
-            :page-sizes="[10, 20, 50, 100]"
-            :total="totalCount"
-            :current-page.sync="currentPage"
-            @current-change="changePage"
-          >
-          
-          </el-pagination> -->
-          
           <el-pagination
             @size-change="handleSizeChange"
             @current-change="handleCurrentChange"
@@ -250,12 +140,10 @@
             layout="total,sizes, prev, pager, next"
             :total="total"
           ></el-pagination>
-
         </div>
       </el-col>
     </el-row>
 
-    
 		<el-dialog
 		title="设置是否参与排名"
 		:visible.sync="dialogVisible"
@@ -278,6 +166,7 @@
 <script>
 
 import noData from '@/components/noData';
+import { _debounce } from '@/api/auth';
 export default {
   components: {
     noData
@@ -285,6 +174,10 @@ export default {
 
   data() {
     return {
+      entryData: {
+        userId: 0,
+        accedence_time: '',
+      },
 			is: 1,
 			no: 0,
 			page: 1,
@@ -315,13 +208,50 @@ export default {
 			radioLi:[
 				{id:'1',name:'参与排名',kam:'在排名中展示此人'},
 				{id:'0',name:'不参与排名',kam:'排名不展示此人(自定义排名除外)'},
-			],
+      ],
+      assistantOptions: {
+        // disabledDate(time) {
+        //   let date = new Date();
+        //   var lastDayOfThisMonth = new Date(
+        //     date.getFullYear(),
+        //     date.getMonth() + 1,
+        //     0
+        //   );
+        //   return time.getTime() > lastDayOfThisMonth;
+        // },
+        // shortcuts: [
+        //   {
+        //     text: "今天",
+        //     onClick(picker) {
+        //       picker.$emit("pick", new Date());
+        //     }
+        //   },
+        //   {
+        //     text: "昨天",
+        //     onClick(picker) {
+        //       const date = new Date();
+        //       date.setTime(date.getTime() - 3600 * 1000 * 24);
+        //       picker.$emit("pick", date);
+        //     }
+        //   },
+        //   {
+        //     text: "本周一",
+        //     onClick(picker) {
+        //       const date = new Date();
+        //       date.setTime(
+        //         date.getTime() + 3600 * 1000 * 24 * (1 - date.getDay())
+        //       );
+        //       picker.$emit("pick", date);
+        //     }
+        //   }
+        // ]
+      },
     };
   },
 	watch: {
 		dept_id(val) {
 			this.getEmployee();
-		}
+    },
 	},
   mounted() {
 		this.$nextTick(function() {
@@ -339,6 +269,26 @@ export default {
   },
   
 	methods: {
+    entryclick(row){
+      console.log(row)
+      let data = {
+        employee_id: row.id,
+        accedence_time: row.accedence_time/1000
+      }
+      row.entryIf = true
+      this.$http('post','/api/employee/accedence_time',data).then((res)=>{
+        if(res.data.code == 1){
+          
+        }
+      }).finally(()=>{
+        row.entryIf = false
+      })
+    },
+    entryTime(row){
+      console.log(row)
+      row.entryIf = true
+    },
+
 		setRanking(){
 			this.rangLoad = true
 			let data = {
@@ -367,27 +317,34 @@ export default {
 		},
 		//同步信息
 		tb() {
-			this.$confirm('下次同步时间需在10分钟之后,是否同步?', '提示', {
-			  confirmButtonText: '确定',
-			  cancelButtonText: '取消',
-			  type: 'warning'
-			}).then(() => {
-				this.tbLoading = true;
-				this.$http('post','/api/ding/department_sync').then(res => {
-					this.$message.success({ message: '同步成功' });
-					this.dept_id=0;
-					this.getInfo();
-					this.getEmployee();
-				}).finally(()=>{
-					this.tbLoading = false;
-				});
-			});
+      this.$http('get','/api/sync').then(res => {
+        if(res.data.code == 1){
+          this.$message.success({ message: '正在同步,请稍候刷新页面查看同步结果' });
+		      // this.getEmployee();
+		      // this.getInfo();
+        }
+      })
+			// this.$confirm('下次同步时间需在10分钟之后,是否同步?', '提示', {
+			//   confirmButtonText: '确定',
+			//   cancelButtonText: '取消',
+			//   type: 'warning'
+			// }).then(() => {
+			// 	this.tbLoading = true;
+			// 	this.$http('post','/api/ding/department_sync').then(res => {
+			// 		this.$message.success({ message: '同步成功' });
+			// 		this.dept_id=0;
+			// 		this.getInfo();
+			// 		this.getEmployee();
+			// 	}).finally(()=>{
+			// 		this.tbLoading = false;
+			// 	});
+			// });
 		},
 		//搜索
-		searchUser(){
-			this.page = 1;
-			this.getEmployee();
-		},
+		searchUser: _debounce(function() {
+      this.page = 1;
+      this.getEmployee();
+    }),
 		//是否开通
 		changeIs(e, id) {
 			var url = e == 1 ? '/api/employee/disable' : '/api/employee/enable';
@@ -436,6 +393,9 @@ export default {
 			}
 			this.selectIds = arr;
 		},
+    isSelectable: function(row, index) {
+      return row.is_official != 1;
+    },
 		//点击部门
 		handleNodeClick(e) {
 			this.page = 1;
@@ -470,8 +430,13 @@ export default {
         params.page = this.page - 1
       }
 			this.$http('get','/api/employee/index', params).then(res => {
-				this.total = res.data.data.pageInfo.count;
-				this.userList = res.data.data.list;
+        this.total = res.data.data.pageInfo.count;
+        let list = res.data.data.list
+        list.forEach((item)=>{
+          item.entryIf = false
+          item.accedence_time *= 1000
+        })
+        this.userList = list;
 				var visible=localStorage.getItem('visible');
 				if(!visible){
 					this.visible=true;
@@ -798,4 +763,18 @@ el-tooltip {
     left: 100%;
     margin-left: -17px;
 }
+
+/deep/ .tabaccTIme{
+  width: 100px;
+  .el-input__inner{
+    border: 0;
+    background-color: transparent;
+    cursor: pointer;
+    padding: 0;
+    width: 100px;
+  }
+  .el-input__prefix{
+    display: none;
+  }
+}
 </style>

+ 5 - 5
src/views/integral/PkRankLeader.vue

@@ -16,16 +16,16 @@
           <div class="rank_head"><img v-if="scope.row.img_url != null" v-bind:src="scope.row.img_url" width="42px" height="42px"/>
 
 
-            <img v-if="scope.row.img_url == null" src="/static/images/head_default.png" width="42px" height="42px"/>
+            <img v-if="scope.row.img_url == null" src="static/images/head_default.png" width="42px" height="42px"/>
             {{scope.row.employee_name}}</div>
         </template>
       </el-table-column>
       <el-table-column label="">
         <template slot-scope="scope">
           <div class="table-font-number" v-if="scope.row.rank <= 3">
-            <img src="/static/images/rank_01.png" width="20" v-if="scope.row.rank == 1">
-            <img src="/static/images/rank_02.png" width="20" v-if="scope.row.rank == 2">
-            <img src="/static/images/rank_03.png" width="20" v-if="scope.row.rank == 3">
+            <img src="static/images/rank_01.png" width="20" v-if="scope.row.rank == 1">
+            <img src="static/images/rank_02.png" width="20" v-if="scope.row.rank == 2">
+            <img src="static/images/rank_03.png" width="20" v-if="scope.row.rank == 3">
           </div>
 
 
@@ -55,7 +55,7 @@
     top: 50%;
     margin-top: -115px;
 ">
-      <img src="/static/images/nodata.png" style="display: block; margin:0 auto;" class="no-data-img">
+      <img src="static/images/nodata.png" style="display: block; margin:0 auto;" class="no-data-img">
       <p style="color:#ccc; text-align: center">暂无队长排名</p>
     </div>
 

+ 5 - 5
src/views/integral/PkRankMember.vue

@@ -19,7 +19,7 @@
             <img v-if="scope.row.img_url != null" v-bind:src="scope.row.img_url" width="42px" height="42px"/>
 
 
-            <img v-if="scope.row.img_url == null" src="/static/images/head_default.png" width="42px" height="42px"/>
+            <img v-if="scope.row.img_url == null" src="static/images/head_default.png" width="42px" height="42px"/>
 
             {{scope.row.employee_name}}</div>
         </template>
@@ -27,9 +27,9 @@
       <el-table-column label="">
         <template slot-scope="scope">
           <div class="table-font-number" v-if="scope.row.rank <= 3">
-            <img src="/static/images/rank_01.png" width="20" v-if="scope.row.rank == 1">
-            <img src="/static/images/rank_02.png" width="20" v-if="scope.row.rank == 2">
-            <img src="/static/images/rank_03.png" width="20" v-if="scope.row.rank == 3">
+            <img src="static/images/rank_01.png" width="20" v-if="scope.row.rank == 1">
+            <img src="static/images/rank_02.png" width="20" v-if="scope.row.rank == 2">
+            <img src="static/images/rank_03.png" width="20" v-if="scope.row.rank == 3">
           </div>
 
 
@@ -59,7 +59,7 @@
     top: 50%;
     margin-top: -115px;
 ">
-      <img src="/static/images/nodata.png" style="display: block; margin:0 auto;" class="no-data-img">
+      <img src="static/images/nodata.png" style="display: block; margin:0 auto;" class="no-data-img">
       <p style="color:#ccc; text-align: center">暂无全员排名</p>
     </div>
 

+ 4 - 4
src/views/integral/PkRankTeam.vue

@@ -18,9 +18,9 @@
       <el-table-column label="">
         <template slot-scope="scope">
           <div class="table-font-number" v-if="scope.row.rank <= 3">
-            <img src="/static/images/rank_01.png" width="20" v-if="scope.row.rank == 1">
-            <img src="/static/images/rank_02.png" width="20" v-if="scope.row.rank == 2">
-            <img src="/static/images/rank_03.png" width="20" v-if="scope.row.rank == 3">
+            <img src="static/images/rank_01.png" width="20" v-if="scope.row.rank == 1">
+            <img src="static/images/rank_02.png" width="20" v-if="scope.row.rank == 2">
+            <img src="static/images/rank_03.png" width="20" v-if="scope.row.rank == 3">
           </div>
 
 
@@ -50,7 +50,7 @@
     top: 50%;
     margin-top: -115px;
 ">
-      <img src="/static/images/nodata.png" style="display: block; margin:0 auto;" class="no-data-img">
+      <img src="static/images/nodata.png" style="display: block; margin:0 auto;" class="no-data-img">
       <p style="color:#ccc; text-align: center">暂无团队排名</p>
     </div>
 

+ 2 - 2
src/views/integral/PointAutoCreateBtn.vue

@@ -177,7 +177,7 @@
                         >
                         <img
                           v-if="scope.row.img_url == null"
-                          src="/static/images/head_default.png"
+                          src="static/images/head_default.png"
                           width="42px"
                           height="42px"
                         >
@@ -1146,7 +1146,7 @@ export default {
   margin: 0 auto;
   width: 40px;
   height: 40px;
-  background-image: url(/static/images/jflr.png);
+  background-image: url(/images/jflr.png);
   background-size: 100%;
 }
 .integral-create-review-btn .card-panel-description {

+ 1 - 1
src/views/integral/PointAutoSetting.vue

@@ -75,7 +75,7 @@
                         >
                         <img
                           v-if="scope.row.img_url == null"
-                          src="/static/images/head_default.png"
+                          src="static/images/head_default.png"
                           width="42px"
                           height="42px"
                         >

+ 4 - 4
src/views/integral/PointRankDepartment.vue

@@ -79,7 +79,7 @@ v-show="false"
         <template slot-scope="scope">
           <div class="rank_head">
             <img v-if="scope.row.target_img != null" v-bind:src="scope.row.target_img" width="42px" height="42px"/>
-            <img v-if="scope.row.target_img == null" src="/static/images/head_default.png" width="42px" height="42px"/>
+            <img v-if="scope.row.target_img == null" src="static/images/head_default.png" width="42px" height="42px"/>
             {{scope.row.target_name}}</div>
         </template>
       </el-table-column>
@@ -87,9 +87,9 @@ v-show="false"
       <el-table-column label="排行">
         <template slot-scope="scope">
           <div class="table-font-number" v-if="(currentPage - 1) * 10 + scope.row.index <= 3">
-            <img src="/static/images/rank_01.png" width="20" v-if="scope.row.index == 1">
-            <img src="/static/images/rank_02.png" width="20" v-if="scope.row.index == 2">
-            <img src="/static/images/rank_03.png" width="20" v-if="scope.row.index == 3">
+            <img src="static/images/rank_01.png" width="20" v-if="scope.row.index == 1">
+            <img src="static/images/rank_02.png" width="20" v-if="scope.row.index == 2">
+            <img src="static/images/rank_03.png" width="20" v-if="scope.row.index == 3">
           </div>
           <div style="" class="table-font-number" v-if="(currentPage - 1) * 10 + scope.row.index > 3">
             NO.{{ (currentPage - 1) * 10 + scope.row.index }}

+ 7 - 7
src/views/integral/RankEntire.vue

@@ -221,7 +221,7 @@
             >
             <img
               v-if="scope.row.target_img == null"
-              src="/static/images/head_default.png"
+              src="static/images/head_default.png"
               width="42px"
               height="42px"
             >
@@ -237,9 +237,9 @@
             class="table-font-number"
             v-if="(currentPage - 1) * 10 + scope.row.index <= 3"
           >
-            <img src="/static/images/rank_01.png" width="20" v-if="scope.row.index == 1">
-            <img src="/static/images/rank_02.png" width="20" v-if="scope.row.index == 2">
-            <img src="/static/images/rank_03.png" width="20" v-if="scope.row.index == 3">
+            <img src="static/images/rank_01.png" width="20" v-if="scope.row.index == 1">
+            <img src="static/images/rank_02.png" width="20" v-if="scope.row.index == 2">
+            <img src="static/images/rank_03.png" width="20" v-if="scope.row.index == 3">
           </div>
 
           <div
@@ -250,7 +250,7 @@
           <div style="float:left" v-if="scope.row.status > 0">
             <img
               style="width:9px; height:17px; margin:3px 5px 0 8px;"
-              src="/static/images/up_small.png"
+              src="static/images/up_small.png"
               alt
             >
             <span
@@ -260,14 +260,14 @@
           <div style="float:left" v-if="scope.row.status < 0">
             <img
               style="width:9px; height:17px; margin:3px 5px 0 8px;"
-              src="/static/images/down_small.png"
+              src="static/images/down_small.png"
               alt
             >
             <span
               style="display:block; float:right; color:rgb(103,194,58)"
             >{{scope.row.rank_change}}</span>
           </div>
-          <!-- <div style="float:left; color:rgb(204,204,204);" v-if="scope.row.status === 0"><img style="width:9px; height:3px; margin:0 5px 3px 8px;" src="/static/images/equal.png" alt=""></div> -->
+          <!-- <div style="float:left; color:rgb(204,204,204);" v-if="scope.row.status === 0"><img style="width:9px; height:3px; margin:0 5px 3px 8px;" src="static/images/equal.png" alt=""></div> -->
         </template>
       </el-table-column>
       <el-table-column label="总分">

+ 6 - 6
src/views/integral/RankJob.vue

@@ -105,7 +105,7 @@
             >
             <img
               v-if="scope.row.target_img == null"
-              src="/static/images/head_default.png"
+              src="static/images/head_default.png"
               width="42px"
               height="42px"
             >
@@ -117,9 +117,9 @@
       <el-table-column label="排行">
         <template slot-scope="scope">
           <div style="float:left" class="table-font-number" v-if="(currentPage - 1) * 10 + scope.row.index <= 3">
-            <img src="/static/images/rank_01.png" width="20" v-if="scope.row.index == 1">
-            <img src="/static/images/rank_02.png" width="20" v-if="scope.row.index == 2">
-            <img src="/static/images/rank_03.png" width="20" v-if="scope.row.index == 3">
+            <img src="static/images/rank_01.png" width="20" v-if="scope.row.index == 1">
+            <img src="static/images/rank_02.png" width="20" v-if="scope.row.index == 2">
+            <img src="static/images/rank_03.png" width="20" v-if="scope.row.index == 3">
           </div>
 
           <div
@@ -130,7 +130,7 @@
           <div style="float:left" v-if="scope.row.status > 0">
             <img
               style="width:9px; height:17px; margin:3px 5px 0 8px;"
-              src="/static/images/up_small.png"
+              src="static/images/up_small.png"
               alt
             >
             <span
@@ -140,7 +140,7 @@
           <div style="float:left" v-if="scope.row.status < 0">
             <img
               style="width:9px; height:17px; margin:3px 5px 0 8px;"
-              src="/static/images/down_small.png"
+              src="static/images/down_small.png"
               alt
             >
             <span

+ 6 - 6
src/views/integral/RankManager.vue

@@ -112,7 +112,7 @@
             >
             <img
               v-if="scope.row.target_img == null"
-              src="/static/images/head_default.png"
+              src="static/images/head_default.png"
               width="42px"
               height="42px"
             >
@@ -130,9 +130,9 @@
       <el-table-column label="排行">
         <template slot-scope="scope">
           <div style="float:left" class="table-font-number" v-if="(currentPage - 1) * 10 + scope.row.index <= 3">
-            <img src="/static/images/rank_01.png" width="20" v-if="scope.row.index == 1">
-            <img src="/static/images/rank_02.png" width="20" v-if="scope.row.index == 2">
-            <img src="/static/images/rank_03.png" width="20" v-if="scope.row.index == 3">
+            <img src="static/images/rank_01.png" width="20" v-if="scope.row.index == 1">
+            <img src="static/images/rank_02.png" width="20" v-if="scope.row.index == 2">
+            <img src="static/images/rank_03.png" width="20" v-if="scope.row.index == 3">
           </div>
 
           <div
@@ -143,7 +143,7 @@
           <div style="float:left" v-if="scope.row.status > 0">
             <img
               style="width:9px; height:17px; margin:3px 5px 0 8px;"
-              src="/static/images/up_small.png"
+              src="static/images/up_small.png"
               alt
             >
             <span
@@ -153,7 +153,7 @@
           <div style="float:left" v-if="scope.row.status < 0">
             <img
               style="width:9px; height:17px; margin:3px 5px 0 8px;"
-              src="/static/images/down_small.png"
+              src="static/images/down_small.png"
               alt
             >
             <span

+ 1 - 1
src/views/integral/avatarUpload.vue

@@ -25,7 +25,7 @@ export default {
   name: 'avatarUpload-demo',
   components: { ImageCropper, PanThumb },
   data() {
-    let image = this.$store.getters.user_info.img_url?this.$store.getters.user_info.img_url:this.serverdomain+'/static/images/head_default.png'
+    let image = this.$store.getters.user_info.img_url?this.$store.getters.user_info.img_url:this.serverdomain+'static/images/head_default.png'
     return {
       imagecropperShow: false,
       imagecropperKey: 0,

+ 4 - 4
src/views/integral/commonDepartment.vue

@@ -65,7 +65,7 @@
                       >
                       <img
                         v-if="scope.row.img_url == null"
-                        src="/static/images/head_default.png"
+                        src="static/images/head_default.png"
                         width="42px"
                         height="42px"
                       >
@@ -75,7 +75,7 @@
                 </el-table-column>
               </el-table> -->
               <div class="department_tree" @click="handleNodeClick({value: 0})">
-                 <img src="/static/images/two.png" style="width: 16px;height: 16px;vertical-align: text-bottom;margin-right: 8px;" />
+                 <img src="static/images/two.png" style="width: 16px;height: 16px;vertical-align: text-bottom;margin-right: 8px;" />
                   {{company.name}}
               </div>
                <!-- <el-tree
@@ -99,7 +99,7 @@
                     @check="handleSelectionChange"
                     >
                       <span class="custom-tree-node" slot-scope="{ node, data }">
-                        <img src="/static/images/one.png" style="width: 20px;height:16px;vertical-align: text-top;margin-right: 4px;" />
+                        <img src="static/images/one.png" style="width: 20px;height:16px;vertical-align: text-top;margin-right: 4px;" />
                         <span>{{data.name}}</span>
                       </span>
 
@@ -140,7 +140,7 @@
               <el-table-column prop="label">
                   <template slot-scope="scope">
                     <div class="rank_head" style="cursor: pointer;">
-                      <img src="/static/images/one.png" style="width: 20px;height: 16x;vertical-align: text-bottom;margin-right: 4px;" />
+                      <img src="static/images/one.png" style="width: 20px;height: 16x;vertical-align: text-bottom;margin-right: 4px;" />
                       {{scope.row.label}}
                     </div>
                   </template>

+ 2 - 2
src/views/integral/commonManager.vue

@@ -63,7 +63,7 @@
                       >
                       <img
                         v-if="scope.row.img_url == null || scope.row.img_url == ''"
-                        src="/static/images/head_default.png"
+                        src="static/images/head_default.png"
                         width="20px"
                         height="20px"
                       >
@@ -114,7 +114,7 @@
                       >
                       <img
                         v-if="scope.row.img_url == null || scope.row.img_url == ''"
-                        src="/static/images/head_default.png"
+                        src="static/images/head_default.png"
                         width="42px"
                         height="42px"
                       >

+ 2 - 2
src/views/integral/framework.vue

@@ -23,7 +23,7 @@
 				<div class="terr-left">
 					<div class="rule_class_box" v-loading="ruleDeprt">
 							<div class="company_name">
-								<img src="/static/images/two.png" />
+								<img src="static/images/two.png" />
 								<span>组织架构</span>
 							</div>
 						<el-tree
@@ -42,7 +42,7 @@
 								slot-scope="{ node, data }"
 								style="font-size: 14px;color: #606266; width:100%; text-align: left;"
 							>
-								<img src="/static/images/one.png" style="width: 20px;margin-right: 5px;" />
+								<img src="static/images/one.png" style="width: 20px;margin-right: 5px;" />
 								<span class="name">{{ data.name }}</span>
 							</div>
 						</el-tree>

+ 96 - 21
src/views/integral/rule/rule_category.vue

@@ -14,7 +14,7 @@
             @node-click="dept_click" :expand-on-click-node="false" :highlight-current="true" class="cate-tree"></el-tree>
           <div v-show="!dept_loading && dept_list !== null && dept_list.length == 0" class="" style="margin-top: 100px;">
             <div style="padding: 0 10px">
-              <img src="/static/images/nodata_default.png" width="100%" alt="">
+              <img src="static/images/nodata_default.png" width="100%" alt="">
             </div>
             <div style="text-align: center; line-height:34px">还没有规则分类</div>
             <div style="text-align: center; color: #26A2FF;" @click="add_class">添加规则分类</div>
@@ -40,11 +40,11 @@
               plain
               @click="theImportRules"
             >导入规则</el-button>
-            <el-button
+<!--            <el-button
               type="primary"
               plain
               @click="derivedRule"
-            >导出规则</el-button>
+            >导出规则</el-button> -->
             <div class="gap-right-8 fr" style="display:inline-block; width:180px;">
               <el-input
                 placeholder="搜索规则内容"
@@ -64,8 +64,8 @@
             <el-table-column prop="remark" label="内容" width="500" style="padding-right:30px;"></el-table-column>
             <el-table-column label="分值">
               <template slot-scope="scope">
-                <div v-if="scope.row.range_type == 1"><span :class="scope.row.min_point > 0?'color_red':'color_green'"> {{scope.row.min_point}} </span> {{types_list[scope.row.pt_id]}} </div>
-                <div v-if="scope.row.range_type == 2"><span :class="scope.row.min_point > 0?'color_red':'color_green'"> {{scope.row.min_point}} </span> 至 <span :class="scope.row.max_point > 0?'color_red':'color_green'"> {{scope.row.max_point}} </span> {{types_list[scope.row.pt_id]}} </div>
+                <div v-if="scope.row.range_type == 1"><span :class="scope.row.min_point > 0?'color_green':'color_red'"> {{scope.row.min_point}} </span> {{types_list[scope.row.pt_id]}} </div>
+                <div v-if="scope.row.range_type == 2"><span :class="scope.row.min_point > 0?'color_green':'color_red'"> {{scope.row.min_point}} </span> 至 <span :class="scope.row.max_point > 0?'color_green':'color_red'"> {{scope.row.max_point}} </span> {{types_list[scope.row.pt_id]}} </div>
               </template>
             </el-table-column>
           </el-table>
@@ -102,8 +102,12 @@
           <div style="position: relative;">
             <div style="position: absolute; top: 0; left: 0; right: 0; bottom: 0; z-index: 9;" @click="not_data"
               v-show="dept_list !==null && dept_list.length == 0"></div>
-            <el-cascader placeholder="请选择分类" v-model="rules_detail_form.rule_id" @visible-change="select_rule" @change="cascader_close"
-              :options="dept_list" ref="cascaderHandle" :props="{ checkStrictly: true, label: 'name', value: 'id', children: 'child'}"></el-cascader>
+              
+          <el-cascader placeholder="请选择分类" v-model="rules_detail_form.rule_id" :options="dept_list" :props="{ checkStrictly: true, label: 'name', value: 'id', children: 'child'}"  @change="cascader_close" ref="cascaderHandle"
+            clearable></el-cascader>
+
+            <!-- <el-cascader placeholder="请选择分类" v-model="rules_detail_form.rule_id" @visible-change="select_rule" @change="cascader_close"
+              :options="dept_list" ref="cascaderHandle" :props="{ checkStrictly: true, label: 'name', value: 'id', children: 'child'}"></el-cascader> -->
           </div>
         </el-form-item>
         <el-form-item label="规则类型" prop="pt_id">
@@ -156,7 +160,7 @@
           <div class="text-center">
             <p>1、下载规则模版,填写好规则</p>
             <p>
-              <img src="/static/images/rules_mould.png" alt="">
+              <img src="static/images/rules_mould.png" alt="">
             </p>
             <p>规则表</p>
             <p><a target="_blank" :href="publicBASE_API+'/api/download/rule_item'" ><el-button type="primary">下载模板</el-button></a></p>
@@ -166,7 +170,7 @@
           <div class="text-center">
             <p>2、上传填好的规则表</p>
             <p>
-              <img src="/static/images/rules_mould1.png" alt="">
+              <img src="static/images/rules_mould1.png" alt="">
             </p>
             <p>仅支持xls、xlsx格式文件</p>
           <el-upload
@@ -210,6 +214,7 @@
 
 <script>
   import { getToken } from '@/utils/auth'
+  import Vue from 'vue'
   let PerformTheNumber = true;//五秒执行一次变量
   export default {
     name: "rule_category",
@@ -352,7 +357,11 @@
         save_loading: false,
         import_btn_show: false,
         fileList: [],
-        file: null
+        file: null,
+
+        ruleTreeList: [],//规则分类列表
+        ruleTree_pid: [],//上级分类Pid
+        itemRule_id: [],//所属分类rule_id
       }
     },
     watch: {
@@ -390,7 +399,7 @@
     methods: {
       //导出规则按钮
       derivedRule(){
-        let token = this.$getToken?this.$getToken:getToken()
+        let token = getToken()?getToken():this.$getToken
         window.open(this.publicBASE_API+'/api/download/rule_item/item?employee_id='+this.$store.getters.user_info.id +'&token='+token)
       },
       //规则为空时点击 导入规则按钮
@@ -796,7 +805,7 @@
               if(self.dept_formdata.pid.length>0){
                 self.dept_formdata.pid = self.dept_formdata.pid[self.dept_formdata.pid.length - 1] || 0
               }else{
-                self.dept_formdata.pid = self.dept_formdata.pid || 0
+                self.dept_formdata.pid = 0;
               }
               self.dept_formdata.rule_id = self.dept_formdata.id
               this.$http('put','/api/integral/rule', self.dept_formdata).then((res) => {
@@ -831,12 +840,29 @@
         this.class_show = false
         this.$refs[form].resetFields()
       },
+      ruleTree_list(rule){
+        rule.forEach((item)=>{
+          this.ruleTreeList.push({
+            id: item.id,
+            pid: item.pid
+          })
+          if(item.child.length > 0){
+            this.ruleTree_list(item.child)
+          }
+        })
+      },
       get_department_list(done) {
         this.dept_loading = true
         this.$http('get','/api/integral/rule/trees',{cycle_type: '1',keyword:this.keyword}).then((res) => {
           this.dept_list = res.data.data.rule_tree
+          //展开多维数组分类rule_tree。
+          this.ruleTreeList = []
+          this.ruleTree_list(res.data.data.rule_tree)
+
           this.rule_category_list = []
           this.item_list = res.data.data.item_list
+
+
           this.parse_tree(this.dept_list, this.pid)
           if (this.pid > 0) {
             this.list = this.cur_item_list
@@ -908,10 +934,36 @@
           cycle_type: '1'
         }
       },
+      //递归寻找当前点击的所有上级id。
+      ruleTree_data(id,ifs){
+        let that = ifs ? this.ruleTree_pid : this.itemRule_id
+        let list = this.ruleTreeList
+        that.unshift(id)
+        list.some((item)=>{
+          if(item.id == id){
+            if(item.pid > 0){
+              this.ruleTree_data(item.pid,ifs)
+            }else{
+              if(ifs){
+                this.dept_formdata.pid = that
+              }else{
+                this.rules_detail_form.rule_id = that
+              }
+              return true
+            }
+          }
+        })
+      },
       edit_class() {
+        this.dept_formdata = JSON.parse(JSON.stringify(this.class_item))
+        //整合上级分类格式变为可选中状态 Pid。让上级分类变为选中
+        this.ruleTree_pid = []
+        if(this.dept_formdata.pid > 0){
+          this.ruleTree_data(this.dept_formdata.pid,true)
+        }
+
         this.class_show = true
         this.class_type = 'edit'
-        this.dept_formdata = JSON.parse(JSON.stringify(this.class_item))
       },
       handleSelectionChange(val) {
         this.del_item_id = []
@@ -972,11 +1024,11 @@
         }).catch(() => {});
       },
       cascader_close(val){
-        let rule_ids = '';
-        for(let i in val){
-          rule_ids = val[i]
-        }
-        this.rules_detail_form.rule_id = rule_ids
+        // let rule_ids = '';
+        // for(let i in val){
+        //   rule_ids = val[i]
+        // }
+        // this.rules_detail_form.rule_id = rule_ids
         this.$refs.cascaderHandle.dropDownVisible = false; //监听值发生变化就关闭它
       },
       cascader_closeSJ(val){
@@ -1043,6 +1095,7 @@
                 let data = {
                   items: [self.rules_detail_form]
                 }
+                if(typeof data.items[0].rule_id == 'object') data.items[0].rule_id = data.items[0].rule_id[data.items[0].rule_id.length - 1]
                 this.$http('post','/api/integral/rule/items', data).then((res) => {
                   if (res.data.code == 1) {
                     self.$message.success(res.data.msg)
@@ -1065,6 +1118,7 @@
               let data = {
                 items: [self.rules_detail_form]
               }
+              if(typeof data.items[0].rule_id == 'object') data.items[0].rule_id = data.items[0].rule_id[data.items[0].rule_id.length - 1]
               this.$http('post','/api/integral/rule/items', data).then((res) => {
                 if (res.data.code == 1) {
                   self.$message.success(res.data.msg)
@@ -1107,12 +1161,18 @@
                 let min_point = self.rules_detail_form.min_point
                 self.rules_detail_form.min_point = self.rules_detail_form.max_point
                 self.rules_detail_form.max_point = min_point
-                let data = self.rules_detail_form
+                // let data = self.rules_detail_form
+                let datas = self.rules_detail_form
+                let data = {}
+                for(let key in datas){
+                  data[key] = datas[key]
+                }
                 data.item_id = self.rules_detail_form.id
                 if(self.rules_detail_form.min_point == 0 && self.rules_detail_form.range_type == 1){
                   self.$message.error('积分不能为零')
                   return false
                 }
+                if(typeof datas.rule_id == 'object') data.rule_id = datas.rule_id[datas.rule_id.length - 1]
                 this.$http('put','/api/integral/rule/items', data).then((res) => {
                   if (res.data.code == 1) {
                     self.$message.success(res.data.msg)
@@ -1128,12 +1188,19 @@
               }).catch(() => {});
             } else {
               self.rules_detail_form.item_id=self.rules_detail_form.id
-              let data = self.rules_detail_form
+              // let data = self.rules_detail_form
+              
+              let datas = self.rules_detail_form
+              let data = {}
+              for(let key in datas){
+                data[key] = datas[key]
+              }
               data.item_id = self.rules_detail_form.id
               if(self.rules_detail_form.min_point == 0 && self.rules_detail_form.range_type == 1){
                 self.$message.error('积分不能为零')
                 return false
               }
+              if(typeof datas.rule_id == 'object') data.rule_id = datas.rule_id[datas.rule_id.length - 1]
               this.$http('put','/api/integral/rule/items', data).then((res) => {
                 if (res.data.code == 1) {
                   self.$message.success(res.data.msg)
@@ -1153,10 +1220,18 @@
         })
       },
 
+
       editDetails(val) {
+        this.rules_detail_form = JSON.parse(JSON.stringify(val))
+        //整合上级分类格式变为可选中状态 rule_id。让所属分类变为选中
+        this.itemRule_id = []
+        if(this.rules_detail_form.rule_id > 0){
+          this.ruleTree_data(this.rules_detail_form.rule_id)
+        }
+
+
         this.rule_show = true
         this.rule_type = 'edit'
-        this.rules_detail_form = JSON.parse(JSON.stringify(val))
         if(this.rules_detail_form.min_point == this.rules_detail_form.max_point){
           this.rules_detail_form.range_type = '1'
         }else{

+ 1 - 1
src/views/layout/Layout.vue

@@ -86,7 +86,7 @@
 <style rel="stylesheet/scss" lang="scss" scoped>
   @import "src/styles/mixin.scss";
   .app-content{
-    width: 1200px;
+    width: 1225px;
     margin: 0 auto;
     // height: calc(100% - 60px);
     position: relative;

+ 100 - 29
src/views/layout/components/Navbar.vue

@@ -72,7 +72,22 @@
         </div>
       </div>
     </el-dialog> -->
-    <el-dialog
+    
+		<el-dialog title="设置向导" :visible.sync="usingTheStrategy" width="600px">
+      <div v-for="(item,index) in routers_one" :key="index">
+				<div class="wn-title fontColorF">{{item.name}}</div>
+				<div class="flex-box flex-v-ce wn-box">
+					<div v-for="(arr,att) in item.item" :key="att" class="flex-1 flex-box-v flex-v-ce"  @click="usingTheStrategy= false;$router.push({ path: arr.push })">
+						<!-- <div><span class="iconfont " :class="arr.icon"></span></div> -->
+						<div><svg-icon slot="reference" :icon-class="arr.icon" /></div>
+						<div>{{arr.name}}</div>
+					</div>
+				</div>
+			</div>
+		</el-dialog>
+
+  <!-- 老-导航 -->
+    <!-- <el-dialog
       title="轻松四步落地积分+绩效管理体系"
       :visible.sync="usingTheStrategy"
       width="680px">
@@ -80,7 +95,6 @@
             <el-col :span="8" style="padding:20px 0 20px 0;">
               <el-menu default-active="0" class="el-menu-vertical-demo" style="border: none">
                 <el-menu-item :index="index.toString()" v-for="(item,index) in activeName" :key="index" @click="open_right(item)" style="margin-bottom:20px;position: relative;height:40px;line-height:40px;">
-                  <!-- <b style="display: inline-block;font-size:16px;border-radius:50%;width:23px;height:23px;line-height:23px;border:1px solid rgb(234 234 234);text-align:center;">{{index+1}}</b> -->
                   <b style="display: inline-block;font-size:16px;text-align:center;">{{index+1}}&nbsp;&nbsp;</b>
                   <span slot="title">{{item.name}}</span>
                   <span v-if="index<activeName.length-1" style="width:1px;height:15px;border:1px solid rgb(224 224 224);position: absolute;bottom:-17px;left:23px;"></span>
@@ -88,13 +102,11 @@
               </el-menu>
             </el-col>
             <el-col :span="1" style="height:370px;border-right:1px solid rgb(234 234 234);">
-               
             </el-col>
             <el-col :span="15" style="padding:20px 0 20px 0;">
               <div>
                 <el-row>
                   <div style="text-align:center;margin-top:25px;color: #35353a;font-size:16px;">{{activeNameRig.name}}</div>
-
                   <div v-if="activeNameRig.code=='0'|| activeNameRig.code=='1'" :style="'display:flex;justify-content: space-around;margin:75px auto 0;width:'+usingwidth+'px;flex-wrap:wrap;'">
                     <div v-for="(item,index) in activeNameRig.item" :key="index" >
                       <div style="text-align:center;display:flex;">
@@ -107,7 +119,6 @@
                       </div>
                     </div>
                   </div>
-
                   <div v-if="activeNameRig.code=='2' || activeNameRig.code=='3'" :style="'display:flex;justify-content: space-around;margin:20px auto 0;width:'+usingwidth+'px;flex-wrap:wrap;'">
                     <el-col :span="activeNameRig.code=='2'?14:24" style="display:flex;flex-wrap:wrap;justify-content: space-around;text-align:center;margin-left:20px;position: relative;">
                       <svg-icon icon-class="add" style="font-size:30px;position: absolute;top:45%;" />
@@ -136,7 +147,7 @@
               </div>
             </el-col>
           </el-row>
-    </el-dialog>
+    </el-dialog> -->
 
     <el-dialog
       title="创建新企业"
@@ -256,6 +267,24 @@
       // let companeyListMap = {}
       // companeyListMap[site_id.toString()] = ''
       return {
+        routers_one: [
+          {
+            name: '三步轻松搭建积分管理体系:定人员、分责权、建制度',
+            item: [
+              {icon: 'employee_table_icon',name: '1、确定组织架构',push: '/employee_table'},
+              {icon: 'set_role_icon',name: '2、分配角色权限',push: '/set_role'},
+              {icon: 'rule_manage_icon',name: '3、建立积分规则',push: '/rule_manage'},
+            ],
+          },
+          {
+            name: '更有效地做好积分激励和认可,你还可以设置以下2项',
+            item: [
+              {icon: 'set_basics_icon',name: '基础设置',push: '/set_basics'},
+              // {icon: '',name: '考勤积分',push: ''},
+              {icon: 'fixed_integral_icon',name: '自动积分',push: '/fixed_integral'},
+            ],
+          }
+        ],
         tutorialsvisible:false,
         usingmarginL:'26',
         usingwidth:'220',
@@ -263,8 +292,8 @@
           name:'员工积极参与,管理者权责分明',
           code:'0',
           item:[
-            {image:'/static/images/guild_dept_pic.png',name:'组织架构',conf:'去配置',push:'/employee_table'},
-            {image:'/static/images/role_manage.png',name:'角色权限',conf:'去配置',push:'/set_role'}
+            {image:'static/images/guild_dept_pic.png',name:'组织架构',conf:'去配置',push:'/employee_table'},
+            {image:'static/images/role_manage.png',name:'角色权限',conf:'去配置',push:'/set_role'}
           ]
         },
         activeName: [{name:'完善部门人员信息及授权',code:'0',},{name:'建立积分奖扣制度',code:'1',},{name:'积分执行与实施',code:'2',},{name:'积分排名统计与分析',code:'3',}],
@@ -361,8 +390,8 @@
           id: 1,
           name: '退出账号'
         }],
-        logoImgUrl: '/static/images/logo.png',
-        logoImgUrlMini: '/static/images/logo_icon.png',
+        logoImgUrl: 'static/images/logo.png',
+        logoImgUrlMini: 'static/images/logo_icon.png',
         menu: [],
         activeIndex:'',//默认头部导航点击
         //权限
@@ -684,8 +713,8 @@
             name:'员工积极参与,管理者权责分明',
             code:'0',
             item:[
-              {image:'/static/images/guild_dept_pic.png',name:'组织架构',conf:'去配置',push:'/employee_table'},
-              {image:'/static/images/role_manage.png',name:'角色权限',conf:'去配置',push:'/set_role'}
+              {image:'static/images/guild_dept_pic.png',name:'组织架构',conf:'去配置',push:'/employee_table'},
+              {image:'static/images/role_manage.png',name:'角色权限',conf:'去配置',push:'/set_role'}
             ]
           }
         }else if(item.code=='1'){
@@ -695,9 +724,9 @@
             name:'健全企业规章制度,建立公平的奖扣分体系',
             code:'1',
             item:[
-              {image:'/static/images/rule.png',name:'积分规则',conf:'去配置',push:'/rule_manage'},
-              {image:'/static/images/length_point.png',name:'基础设置',conf:'去配置',push:'/set_basics'},
-              {image:'/static/images/base_point.png',name:'自动积分',conf:'去配置',push:'/fixed_integral'},
+              {image:'static/images/rule.png',name:'积分规则',conf:'去配置',push:'/rule_manage'},
+              {image:'static/images/length_point.png',name:'基础设置',conf:'去配置',push:'/set_basics'},
+              {image:'static/images/base_point.png',name:'自动积分',conf:'去配置',push:'/fixed_integral'},
             ]
           }
         }else if(item.code=='2'){
@@ -706,11 +735,11 @@
             name:'员工积极挣分,管理者奖罚分明',
             code:'2',
             item:[
-              {image:'/static/images/entry_list.png',name:'奖分/扣分',conf:'去奖扣',push:'/award_punish'},
-              {image:'/static/images/my_publish.png',name:'任务',conf:'去发布',push:'/my_issue'},
-              {image:'/static/images/performance1.png',name:'绩效',conf:'去发布',push:'/team_performance'},
-              {image:'/static/images/attendance_application.png',name:'考勤  ',conf:'去配置',push:'/attendancenew'},
-              {image:'/static/images/att_review.png',name:'审批打分',conf:'去审批',push:'/approval_list'}
+              {image:'static/images/entry_list.png',name:'奖分/扣分',conf:'去奖扣',push:'/award_punish'},
+              {image:'static/images/my_publish.png',name:'任务',conf:'去发布',push:'/my_issue'},
+              {image:'static/images/performance1.png',name:'绩效',conf:'去发布',push:'/team_performance'},
+              {image:'static/images/attendance_application.png',name:'考勤  ',conf:'去配置',push:'/attendancenew'},
+              {image:'static/images/att_review.png',name:'审批打分',conf:'去审批',push:'/approval_list'}
             ],
           }
         }else if(item.code=='3'){
@@ -719,10 +748,10 @@
             name:'提高管理执行力,让优秀员工不吃亏',
             code:'3',
             item:[
-              {image:'/static/images/add_ticket.png',name:'积分排名',conf:'去查看',push:'/dept_rank'},
-              {image:'/static/images/role_manage.png',name:'管理者执行力',conf:'去查看',push:'/manager_statistics'},
-              {image:'/static/images/data_team.png',name:'部门分析',conf:'去查看',push:'/department_statistics'},
-              {image:'/static/images/length_point.png',name:'个人分析',conf:'去查看',push:'/individual_statistics'}
+              {image:'static/images/add_ticket.png',name:'积分排名',conf:'去查看',push:'/dept_rank'},
+              {image:'static/images/role_manage.png',name:'管理者执行力',conf:'去查看',push:'/manager_statistics'},
+              {image:'static/images/data_team.png',name:'部门分析',conf:'去查看',push:'/department_statistics'},
+              {image:'static/images/length_point.png',name:'个人分析',conf:'去查看',push:'/individual_statistics'}
             ]
           }
         }
@@ -1104,13 +1133,13 @@
 
   .totalScore {
     padding-left: 25px;
-    background: url('/static/images/totalScore.png') no-repeat left center;
+    background: url(/images/totalScore.png) no-repeat left center;
     background-size: 18px 17px;
   }
 
   .course {
     padding-left: 25px;
-    background: url('/static/images/book.png') no-repeat left center;
+    background: url(/images/book.png) no-repeat left center;
     background-size: 20px 18px;
   }
 
@@ -1129,7 +1158,7 @@
     .commit-comment-btn {
       display: inline-block;
       padding-left: 30px;
-      background-image: url(/static/images/comment.png);
+      background-image: url(/images/comment.png);
       background-repeat: no-repeat;
       background-position: left center;
       color: #fff;
@@ -1139,7 +1168,7 @@
     .logout-btn {
       display: inline-block;
       padding-left: 30px;
-      background-image: url(/static/images/logout.png);
+      background-image: url(/images/logout.png);
       background-repeat: no-repeat;
       background-position: left center;
       color: #fff;
@@ -1274,7 +1303,7 @@
     content: "123";
     width: 12px;
     height: 12px;
-    background: url(/static/images/angle.png) no-repeat center;
+    background: url(/images/angle.png) no-repeat center;
     background-size: 12px;
     color: rgba(0, 0, 0, 0)
   }
@@ -1408,4 +1437,46 @@
     padding-left:8px;
     border-left:2px solid #3caaff;
   }
+  
+  .fontColorF {
+    color: #606266;
+  }
+  
+.wn-box{
+	padding: 20px 0;
+}
+.wn-box .flex-1{
+	cursor: pointer;
+}
+.wn-box .flex-1 div:nth-child(1){
+	width: 55px;
+	height: 55px;
+	border-radius: 50%;
+	text-align: center;
+	line-height: 55px;
+	background-color: #E0F2FF;
+	color: #26A2FF;
+	margin-bottom: 20px;
+}
+.wn-box .flex-1 div:nth-child(2){
+	width: 140px;
+	border-radius: 25px;
+	border: 1px solid #26A2FF;
+	padding:7px 10px;
+	text-align: center;
+	color: #26A2FF;
+}
+.wn-box .flex-1:hover div:nth-child(1){
+	color: #fff;
+	background-color: #26A2FF;
+}
+
+.wn-box .flex-1:hover div:nth-child(2){
+	color: #fff;
+	background-color: #26A2FF;
+}
+.wn-box .svg-icon{
+  font-size: 22px;
+  margin-top: 16px;
+}
 </style>

+ 3 - 3
src/views/layout/components/Sidebar/index.vue

@@ -36,8 +36,8 @@ export default {
       menu: [],
       imageUrl: '',
       isSetLogo: false,
-      logoImgUrl: '/static/images/logo.png',
-      logoImgUrlMini: '/static/images/logo_icon.png',
+      logoImgUrl: 'static/images/logo.png',
+      logoImgUrlMini: 'static/images/logo_icon.png',
       activeIndex: this.$route.path
     };
   },
@@ -130,7 +130,7 @@ export default {
 };
 </script>
 <style rel="stylesheet/scss" lang="scss" scoped>
-$logoUrl: '/static/images/logo.png';
+$logoUrl: 'static/images/logo.png';
 .scrollbar-wrapper .logo {
   width: 100%;
   height: 60px;

+ 1 - 1
src/views/login/autoLogin.vue

@@ -2,7 +2,7 @@
   <div>
     <div class="image">
       <img
-        src="/static/images/init.gif"
+        src="static/images/init.gif"
         alt=""
         style="width:100%;height:100%;"
       />

+ 3 - 3
src/views/login/create_company.vue

@@ -1,12 +1,12 @@
 <template>
   <div class="create-company-container">
     <div class="login_logo">
-      <a href="#" target="_self" title="功道云-积分系统用户登录"><img src="/static/images/login-logo.png" /></a>
+      <a href="#" target="_self" title="功道云-积分系统用户登录"><img src="static/images/login-logo.png" /></a>
     </div>
 
     <div class="login_box">
       <div class="login_ad">
-        <img src="/static/images/login_adpic.png" />
+        <img src="static/images/login_adpic.png" />
         <span>广告语</span>
       </div>
 
@@ -188,7 +188,7 @@ export default {
   width:518px;
   height:614px;
   float:left;
-  background:url(/static/images/login_bg.jpg) no-repeat;
+  background:url(/images/login_bg.jpg) no-repeat;
   background-size:cover;
   overflow:hidden;
 }

+ 6 - 6
src/views/login/forgetPwd.vue

@@ -2,13 +2,13 @@
   <div class="login-container">
     <div class="all">
       <div class="login_logo">
-        <a href="#" target="_self" title="功道云-积分系统用户登录"><img src="/static/images/login-logo_20200603.png"></a>
+        <a href="#" target="_self" title="功道云-积分系统用户登录"><img src="static/images/login-logo_20200603.png"></a>
       </div>
 
       <div class="login_box">
 
         <div class="login_ad fl">
-          <!-- <img src="/static/images/login_adpic.png">
+          <!-- <img src="static/images/login_adpic.png">
           <span>广告语</span> -->
         </div>
 
@@ -86,7 +86,7 @@
       </div>
 
       <div class="footer_copyright">
-        <!-- <span class=""><img src="/static/images/little_line.png">积分制管理 · 员工精细化管理<img src="/static/images/little_line.png"></span> -->
+        <!-- <span class=""><img src="static/images/little_line.png">积分制管理 · 员工精细化管理<img src="static/images/little_line.png"></span> -->
         <span class="copyright">Copyright © 2020 东莞市民之网计算机网络工程有限公司 All Rights Reserved</span>
       </div>
     </div>
@@ -283,7 +283,7 @@
   .login-container .login_box .login_ad{
     width: 482px;
     height: 552px;
-    background: url(/static/images/login_bg_20200603.png) no-repeat;
+    background: url(/images/login_bg_20200603.png) no-repeat;
     background-size: cover;
   }
   .login-container .login_box .login_ad img{
@@ -312,13 +312,13 @@
   .login-container .login_box .login_type_icon .login_default{
     width:96px;
     height:96px;
-    background:url(/static/images/login_default.jpg) no-repeat;
+    background:url(/images/login_default.jpg) no-repeat;
     background-size:cover;
   }
   .login-container .login_box .login_type_icon .login_code{
     width:96px;
     height:96px;
-    background:url(/static/images/login_code.jpg) no-repeat;
+    background:url(/images/login_code.jpg) no-repeat;
     background-size:cover;
   }
   .login-container .login_box .login_input {

+ 8 - 8
src/views/login/index.vue

@@ -2,10 +2,10 @@
   <div class="login-container">
     <div class="all">
       <div class="login_logo">
-        <a href="#" target="_self" title="功道云-积分系统用户登录"><img src="/static/images/login-logo_20200603.png"></a>
+        <a href="#" target="_self" title="功道云-积分系统用户登录"><img src="static/images/login-logo_20200603.png"></a>
       </div>
       <div>
-        <img src="/static/images/src=http___dingyue.nosdn.127.net_SM=WIGOFt0qHbUErqhHznlIUUXEp6vq=5nrCxFOZ3YjCO1506947851488.gif&refer=http___dingyue.nosdn.127.gif" style="" alt="">
+        <img src="static/images/src=http___dingyue.nosdn.127.net_SM=WIGOFt0qHbUErqhHznlIUUXEp6vq=5nrCxFOZ3YjCO1506947851488.gif&refer=http___dingyue.nosdn.127.gif" style="" alt="">
       </div>
       <div class="login_box" style="display:none">
         <div class="flex-box">
@@ -88,7 +88,7 @@
           <!--<span class="title">社交账号登录</span>-->
           <!--<svg-icon icon-class="wechat_green"/>-->
           <!--<div class="download_app">-->
-          <!--<img src="/static/images/logo.png">-->
+          <!--<img src="static/images/logo.png">-->
           <!--<span>下载功道云 App</span></div>-->
           <!--</div>-->
 
@@ -102,12 +102,12 @@
         <!-- <el-dialog :visible.sync="$store.state.user.pastDue" width="400px" append-to-body class="pastDue" @close="pastDueclose">
             <p style="font-size:21px;">系统已到期</p>
             <p style="margin:0;">请在功道云积分服务群中联系专属客服或微信扫码添加功道云客服进行续费</p>
-            <img src="/static/images/statistics_NO1.png" style="width:100%">
+            <img src="static/images/statistics_NO1.png" style="width:100%">
             <p style="font-size:20px;">电话咨询:400-6877-880</p>
         </el-dialog> -->
       </div>
       <div class="footer_copyright">
-        <!-- <span class=""><img src="/static/images/little_line.png">积分制管理 · 员工精细化管理<img src="/static/images/little_line.png"></span> -->
+        <!-- <span class=""><img src="static/images/little_line.png">积分制管理 · 员工精细化管理<img src="static/images/little_line.png"></span> -->
         <span class="copyright">Copyright © 2020 广东功道云数字科技有限公司 All Rights Reserved</span>
       </div>
     </div>
@@ -509,7 +509,7 @@
   .login-container .login_box .login_ad {
     width: 482px;
     height: 552px;
-    background: url(/static/images/login_bg_20200603.png) no-repeat;
+    background: url(/images/login_bg_20200603.png) no-repeat;
     background-size: cover;
   }
 
@@ -542,14 +542,14 @@
   .login-container .login_box .login_type_icon .login_default {
     width: 96px;
     height: 96px;
-    background: url(/static/images/login_default.jpg) no-repeat;
+    background: url(/images/login_default.jpg) no-repeat;
     background-size: cover;
   }
 
   .login-container .login_box .login_type_icon .login_code {
     width: 96px;
     height: 96px;
-    background: url(/static/images/login_code.jpg) no-repeat;
+    background: url(/images/login_code.jpg) no-repeat;
     background-size: cover;
   }
 

+ 113 - 62
src/views/login/index1.vue

@@ -3,19 +3,19 @@
     <div class="all" style="">
       <div class="data-all" style="text-align:center;margin-top:50px;">
         <transition name="fade">
-          <img src="/static/images/login300.png" v-if="logImage" style="margin:48px auto;width:104px;height:104px;" alt="">
-          <img src="/static/images/init.gif" v-if="!logImage" style="margin:0 auto;" alt="">
+          <img src="static/images/login300.png" v-if="logImage" style="margin:48px auto;width:104px;height:104px;" alt="">
+          <img src="static/images/init.gif" v-if="!logImage" style="margin:0 auto;" alt="">
         </transition>
         <div>管理执行难,就用功道云</div>
-        <transition name="fade">
+        <!-- <transition name="fade">
           <el-button class="refresh" type="primary" style="margin-top:10px" @click="LoginBut" v-show="loginButton">{{logButText}}</el-button>
         </transition>
+        
+        <el-button class="refresh" type="primary" style="margin-top:10px" @click="LoginBut1">123</el-button> -->
       </div>
     </div>
+    <pastDue></pastDue>
   </div>
-
-
-
 </template>
 
 <script>
@@ -23,12 +23,7 @@
   import axios from 'axios'
   import pastDue from "@/views/common/pastDue.vue"
   import QRCode  from "qrcodejs2"
-  import {isvalidUsername} from '@/utils/validate'
   import {getToken, setToken, getUser, getPasw, setUser, setPasw,} from '@/utils/auth' // getToken from cookie
-  import requests from '@/utils/request-user'
-  import { constants } from 'fs'
-  import { timestamps } from '@/utils/index'
-  import {allocation} from '@/api/configget'
   import { wxAuth } from '@/utils/wx-auth-two.js'; 
   import {withoutCodeLoad} from '@/utils/wxconfiguration.js'
 
@@ -44,70 +39,126 @@
     watch:{
     },
     created() {
-      if(/Android|webOS|iPhone|iPod|BlackBerry/i.test(navigator.userAgent)) {
-        this.appPC = "手机"
-        window.alert("手机")
-        window.location.href = process.env.BASE_API+'/m'
-      } else {
-        this.appPC = "PC端"
-        // window.alert("PC端")
-      }
-      this.$store.dispatch('setLanguage', 'zh')
-      localStorage.setItem('login_code','0')
-
-      
       var url = window.location.href; //获取url中"?"符后的字串
-      let codesif = false
-      let codes = ''
+      let tokenif = false
+      var token = ''
       if(url){
         if (url.split("?")[1]) {//判断有无?参数
-          var strs = url.split("?")[1].split("&");
-          for (var i = 0; i < strs.length; i++) {
-            if(strs[i].split("=")[0] == 'code'){
-              this.loginButton = false
-              this.logImage = false
-              codesif = true
-              codes = strs[i].split("=")[1]
-            }
+          let str = url.split("?")[1]
+          console.log(str)
+          if(str.split("=")[0] == 'token'){
+            token = str.split("=")[1].split("#")[0]
+            console.log(str.split("=")[1])
+            tokenif = true
           }
-        }else{//没有就清空缓存并放出登录按钮
-          this.clone()
-          this.loginButton = true
-          this.logImage = true
         }
       }
-
-      if(!codesif){//url没有code就放出登录按钮
-        this.logImage = true
-        this.loginButton = true
-      }else{
-        let params = { code: codes }
-        axios.get(process.env.BASE_API+'/api/wechat/minAuth', { params: params })
+      if(tokenif){
+        console.log(token)
+        setToken(token)
+        this.$store.commit('SET_TOKEN', token)
+        localStorage.setItem('Experience_data',JSON.stringify({if:false,name:''}))
+        console.log(getToken())
+        
+        this.$http('get',process.env.BASE_API+'/api/employee/detail')
         .then(res => {
           if(res.data.code == 1){
-            if(res.data.data.user.is_official == 1){
-              setToken(res.data.data.token)
-              this.$store.commit('SET_TOKEN', res.data.data.token)
-              localStorage.setItem('Experience_data',JSON.stringify({if:false,name:''}))
-              console.log(getToken())
-              wxAuth(true)
-            }else if(res.data.data.user.is_official == 0){
-              this.$router.push({path: '/noAccess'})
-            }
-          }else{
-            this.logButText = '重新登录'
-            this.loginButton = true
-            this.logImage = true
+            console.log(res)
           }
         })
+        wxAuth(true)
+      }else{
+        if(this.isPcOrApp() == 'pc'){
+          window.location.href = process.env.BASE_API+'/wechat/authorize?platform='+ this.isPcOrApp() +'#wechat_redirect'
+        }else if(this.isPcOrApp() == 'app'){
+          window.location.href = 'http://wechatgdym.vaiwan.com';
+        }
       }
+      // Cookies.get('Admin-Token')
+      // // if(/Android|webOS|iPhone|iPod|BlackBerry/i.test(navigator.userAgent)) {
+      // //   this.appPC = "手机"
+      // //   window.alert("手机")
+      // //   window.location.href = process.env.BASE_API+'/m'
+      // // } else {
+      // //   this.appPC = "PC端"
+      // //   // window.alert("PC端")
+      // // }
+      // this.$store.dispatch('setLanguage', 'zh')
+      // localStorage.setItem('login_code','0')
+
+      
+      // var url = window.location.href; //获取url中"?"符后的字串
+      // let codesif = false
+      // let codes = ''
+      // if(url){
+      //   if (url.split("?")[1]) {//判断有无?参数
+      //     var strs = url.split("?")[1].split("&");
+      //     for (var i = 0; i < strs.length; i++) {
+      //       if(strs[i].split("=")[0] == 'code'){
+      //         this.loginButton = false
+      //         this.logImage = false
+      //         codesif = true
+      //         codes = strs[i].split("=")[1]
+      //       }
+      //     }
+      //   }else{//没有就清空缓存并放出登录按钮
+      //     this.clone()
+      //     this.loginButton = true
+      //     this.logImage = true
+      //   }
+      // }
+
+      // if(!codesif){
+      //   this.logImage = true
+      //   this.loginButton = true
+      // }else{
+      //   if (/Android|webOS|iPhone|iPod|BlackBerry/i.test(navigator.userAgent)) {
+      //     window.location.href = 'http://wechatgdym.vaiwan.com?code='+codes+'&';
+      //   } else {
+      //     let params = { code: codes }
+      //     axios.get(process.env.BASE_API+'/api/wechat/minAuth', { params: params })
+      //     .then(res => {
+      //       if(res.data.code == 1){
+      //         if(res.data.data.user.is_official == 1){
+      //           setToken(res.data.data.token)
+      //           this.$store.commit('SET_TOKEN', res.data.data.token)
+      //           localStorage.setItem('Experience_data',JSON.stringify({if:false,name:''}))
+      //           console.log(getToken())
+      //           wxAuth(true)
+      //         }else if(res.data.data.user.is_official == 0){
+      //           this.$router.push({path: '/noAccess'})
+      //         }
+      //       }else if(res.data.code == 4444){
+      //         this.$store.state.user.pastDue = true
+      //         this.logButText = '重新登录'
+      //         this.loginButton = true
+      //         this.logImage = true
+      //       }else{
+      //         this.logButText = '重新登录'
+      //         this.loginButton = true
+      //         this.logImage = true
+      //       }
+      //     })
+      //   }
+        
+      // }
     },
     mounted(){
     },
     methods: {
-      LoginBut(){
-        withoutCodeLoad()
+      isPcOrApp(){
+        if(/Android|webOS|iPhone|iPod|BlackBerry/i.test(navigator.userAgent)) {
+          return 'app'
+        } else {
+          return 'pc'
+        }
       },
+      LoginBut1(){
+        window.location.href = 'http://test.qywx.g107.net/wechat/authorize?platform=pc#wechat_redirect'
+      },
+      // LoginBut(){
+      //   withoutCodeLoad()
+      // },
       // withoutCodeLoad(){
       //   console.log(process.env.APPID)
       //   let appid,redirect_uri,response_type,scope,state,wechat,agentid
@@ -193,7 +244,7 @@
   .login-container .login_box .login_ad {
     width: 482px;
     height: 552px;
-    background: url(/static/images/login_bg_20200603.png) no-repeat;
+    background: url(/images/login_bg_20200603.png) no-repeat;
     background-size: cover;
   }
 
@@ -226,14 +277,14 @@
   .login-container .login_box .login_type_icon .login_default {
     width: 96px;
     height: 96px;
-    background: url(/static/images/login_default.jpg) no-repeat;
+    background: url(/images/login_default.jpg) no-repeat;
     background-size: cover;
   }
 
   .login-container .login_box .login_type_icon .login_code {
     width: 96px;
     height: 96px;
-    background: url(/static/images/login_code.jpg) no-repeat;
+    background: url(/images/login_code.jpg) no-repeat;
     background-size: cover;
   }
 

+ 562 - 0
src/views/login/index2.vue

@@ -0,0 +1,562 @@
+<template>
+  <div class="login-container">
+    <div class="all" style="">
+      <div class="data-all" style="text-align:center;margin-top:50px;">
+        <transition name="fade">
+          <img src="static/images/login300.png" v-if="logImage" style="margin:48px auto;width:104px;height:104px;" alt="">
+          <img src="static/images/init.gif" v-if="!logImage" style="margin:0 auto;" alt="">
+        </transition>
+        <div>管理执行难,就用功道云</div>
+        <transition name="fade">
+          <el-button class="refresh" type="primary" style="margin-top:10px" @click="LoginBut" v-show="loginButton">{{logButText}}</el-button>
+        </transition>
+        
+        <el-button class="refresh" type="primary" style="margin-top:10px" @click="LoginBut1">123</el-button>
+      </div>
+    </div>
+    <pastDue></pastDue>
+  </div>
+</template>
+
+<script>
+  import Cookies from 'js-cookie'
+  import axios from 'axios'
+  import pastDue from "@/views/common/pastDue.vue"
+  import QRCode  from "qrcodejs2"
+  import {getToken, setToken, getUser, getPasw, setUser, setPasw,} from '@/utils/auth' // getToken from cookie
+  import { wxAuth } from '@/utils/wx-auth-two.js'; 
+  import {withoutCodeLoad} from '@/utils/wxconfiguration.js'
+
+  export default {
+    data() {
+      return {
+        logImage:true,
+        logButText: '登录',
+        loginButton: true,
+      }
+    },
+    components:{QRCode,pastDue},
+    watch:{
+    },
+    created() {
+      Cookies.get('Admin-Token')
+      // if(/Android|webOS|iPhone|iPod|BlackBerry/i.test(navigator.userAgent)) {
+      //   this.appPC = "手机"
+      //   window.alert("手机")
+      //   window.location.href = process.env.BASE_API+'/m'
+      // } else {
+      //   this.appPC = "PC端"
+      //   // window.alert("PC端")
+      // }
+      this.$store.dispatch('setLanguage', 'zh')
+      localStorage.setItem('login_code','0')
+
+      
+      var url = window.location.href; //获取url中"?"符后的字串
+      let codesif = false
+      let codes = ''
+      if(url){
+        if (url.split("?")[1]) {//判断有无?参数
+          var strs = url.split("?")[1].split("&");
+          for (var i = 0; i < strs.length; i++) {
+            if(strs[i].split("=")[0] == 'code'){
+              this.loginButton = false
+              this.logImage = false
+              codesif = true
+              codes = strs[i].split("=")[1]
+            }
+          }
+        }else{//没有就清空缓存并放出登录按钮
+          this.clone()
+          this.loginButton = true
+          this.logImage = true
+        }
+      }
+
+      if(!codesif){
+        this.logImage = true
+        this.loginButton = true
+      }else{
+        if (/Android|webOS|iPhone|iPod|BlackBerry/i.test(navigator.userAgent)) {
+          window.location.href = 'http://wechatgdym.vaiwan.com?code='+codes+'&';
+        } else {
+          let params = { code: codes }
+          axios.get(process.env.BASE_API+'/api/wechat/minAuth', { params: params })
+          .then(res => {
+            if(res.data.code == 1){
+              if(res.data.data.user.is_official == 1){
+                setToken(res.data.data.token)
+                this.$store.commit('SET_TOKEN', res.data.data.token)
+                localStorage.setItem('Experience_data',JSON.stringify({if:false,name:''}))
+                console.log(getToken())
+                wxAuth(true)
+              }else if(res.data.data.user.is_official == 0){
+                this.$router.push({path: '/noAccess'})
+              }
+            }else if(res.data.code == 4444){
+              this.$store.state.user.pastDue = true
+              this.logButText = '重新登录'
+              this.loginButton = true
+              this.logImage = true
+            }else{
+              this.logButText = '重新登录'
+              this.loginButton = true
+              this.logImage = true
+            }
+          })
+        }
+        
+      }
+    },
+    mounted(){
+    },
+    methods: {
+      LoginBut1(){
+        window.location.href = 'http://test.qywx.g107.net/wechat/authorize?platform=pc#wechat_redirect'
+      },
+      LoginBut(){
+        withoutCodeLoad()
+      },
+      // withoutCodeLoad(){
+      //   console.log(process.env.APPID)
+      //   let appid,redirect_uri,response_type,scope,state,wechat,agentid
+      //   appid = process.env.APPID
+      //   redirect_uri = 'http%3A%2F%2Fwechatdings.vaiwan.com'
+      //   response_type = 'code'
+      //   scope = 'snsapi_privateinfo'
+      //   state = 'a'
+      //   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
+      // },
+
+      clone(){
+        localStorage.clear()
+        sessionStorage.clear()
+	      Cookies.remove('Admin-Token')
+        if(!this.$store.state.user.pastDue){
+          //进入登录界面判断 VueX里是否遗留数据,有就刷新一次页面,清空vuex
+          if (this.$store.getters.addRouters.length > 0) { // 判断是否已经刷新
+            return window.location.reload()
+          }
+        }
+      },
+    },
+    destroyed() {
+      localStorage.setItem('login_code','0')
+    }
+  }
+</script>
+
+<style rel="stylesheet/css" type="text/css" scoped>
+  .left-box {
+    position: relative;
+    top: 50%;
+    margin-top: -25%;
+  }
+
+  .all {
+    /* width: 1000px; */
+    /* height: 675px; */
+    margin: 0 auto;
+    position: relative;
+    top: 50%;
+    margin-top: -325px;
+  }
+
+  .login-container {
+    position: relative;
+    width: 100vw;
+    height: 100vh;
+    overflow: auto;
+    cursor: default;
+    /* background-color: #f5f6f9; */
+    background-color: #FFF;
+  }
+
+  .login-container .login_logo {
+    position: relative;
+    width: 100%;
+    max-width: 1000px;
+    overflow: hidden;
+  }
+  .login-container .login_logo a{
+    display: inline-block;
+  }
+  .login-container .login_logo img {
+    width: 100%;
+    vertical-align: middle;
+  }
+
+  .login-container .login_box {
+    position: relative;
+    display: block;
+    top: 0;
+    width: 100%;
+    /* height: 530px; */
+    max-width: 1000px;
+    box-shadow: 0px 4px 22px #efefef;
+    background: #fff;
+  }
+
+  .login-container .login_box .login_ad {
+    width: 482px;
+    height: 552px;
+    background: url(/images/login_bg_20200603.png) no-repeat;
+    background-size: cover;
+  }
+
+  .login-container .login_box .login_ad img {
+    width: 360px;
+    margin: auto;
+    height: 200px;
+  }
+
+  .login-container .login_box .login_ad span {
+    font-family: "Microsoft YaHei";
+    display: block;
+    text-align: center;
+    font-size: 28px;
+    letter-spacing: 2px;
+    font-weight: bold;
+    color: #fff;
+  }
+
+  .login-container .login_box .login_type_icon {
+    position: absolute;
+    top: 0;
+    right: 0;
+    width: 94px;
+    height: 94px;
+    overflow: hidden;
+    z-index: 10;
+  }
+
+  .login-container .login_box .login_type_icon .login_default {
+    width: 96px;
+    height: 96px;
+    background: url(/images/login_default.jpg) no-repeat;
+    background-size: cover;
+  }
+
+  .login-container .login_box .login_type_icon .login_code {
+    width: 96px;
+    height: 96px;
+    background: url(/images/login_code.jpg) no-repeat;
+    background-size: cover;
+  }
+
+  .login-container .login_box .login_input {
+    position: relative;
+    display: inline-block;
+    text-align: center;
+    width: 508px;
+    height: 552px;
+    background: #FFF;
+    overflow: hidden;
+  }
+
+  .login-container .login_box .login-form {
+    width: 320px;
+    margin: 0 auto;
+    margin-top: 75px;
+  }
+
+  .login-container .login_box .login-form /deep/ input:-webkit-autofill{
+    -webkit-box-shadow:0 0 0 1000px white inset !important;
+  }
+
+  .title-container {
+    font-size: 22px;
+    font-weight: bold;
+    padding: 30px 0;
+    text-align: left;
+  }
+
+  .title-container img {
+    margin-top: 38px;
+    width: 100%;
+    height: auto;
+  }
+
+  .login-container .login_box .login-form .login_tel {
+    display: block;
+    margin-bottom: 24px;
+    border: none;
+    border-bottom: 1px solid #C0C4CC;
+  }
+
+  .login-container .login_box .login-form .login_tel .label {
+    display: inline-block;
+    text-align: left;
+    width: 12%;
+    font-size: 18px;
+    color: #303133;
+    line-height: 26px;
+    padding: 0;
+    margin: 12px 0;
+    float: left;
+  }
+
+  .login-container .login_box .login-form .login_tel .input_tel {
+    display: inline-block;
+    width: 88%;
+    margin: 12px auto;
+    height: 24px;
+    line-height: 24px;
+    border-left: 1px #efefef solid;
+    float: right;
+  }
+
+  .login-container .login_box .login-form .login_tel .input_tel /deep/ input {
+    padding: 0 0% 0 4%;
+    margin: 0;
+    font-size: 18px;
+    height: 24px;
+    line-height: 24px;
+    border: none !important;
+  }
+
+  .login-container .login_box .login-form .login_tel /deep/ .el-input__suffix {
+    top: -6px;
+    right: 0px;
+  }
+
+  .login-container .login_box .login-form .login_pwd {
+    border: none;
+    border-bottom: 1px solid #C0C4CC;
+  }
+
+  .login-container .login_box .login-form .login_pwd .el-input /deep/ input {
+    padding: 0;
+    margin: 0;
+    font-size: 18px;
+    height: 24px;
+    line-height: 24px;
+    border: none;
+  }
+
+  .login-container .login_box .login-form .login_pwd .show-pwd {
+    position: absolute;
+    right: 0;
+    top: 0;
+  }
+
+  .login-container .login_box .login-form .login_pwd /deep/ .el-input__suffix {
+    right: 20px;
+  }
+
+  /*.login-container .login_box .login-form:hover .login_tel{*/
+  /*border-bottom: 1px solid #409EFF;*/
+  /*}*/
+  /*.login-container .login_box .login-form:active .login_tel{*/
+  /*border-bottom: 1px solid #409EFF;*/
+  /*}*/
+  .login-container .login_box .login-form /deep/ input::-webkit-input-placeholder {
+    color: #909399;
+    letter-spacing: 1px;
+  }
+
+  .login-container .login_box .login-form /deep/ input:focus::-webkit-input-placeholder {
+    color: #409EFF;
+  }
+
+  .login-container .login_box .login-form .el-form-item__error {
+    margin: 2px auto;
+  }
+
+  .login-container .login_box .login_keeppwd {
+    float: left;
+  }
+
+  .login-container .login_box .login_keeppwd .el-checkbox__inner {
+    width: 20px;
+    height: 20px;
+    background: #fff;
+  }
+
+  .login-container .login_box .login_keeppwd .el-checkbox__inner::after {
+    height: 12px;
+    left: 6px;
+    border: 2px solid #409EFF;
+    border-top: none;
+    border-left: none;
+  }
+
+  .login-container .login_box .login_keeppwd .el-checkbox__label {
+    padding-left: 8px;
+    font-size: 16px;
+    color: #909399;
+  }
+
+  .login-container .login_box .login_forgepwd {
+    float: right;
+  }
+
+  .login-container .login_box .login_forgepwd span {
+    font-size: 16px;
+    color: #909399;
+  }
+
+  .login-container .login_box .login_code_box {
+    position: relative;
+    display: inline-block;
+    text-align: center;
+    width: 582px;
+    height: 614px;
+    float: right;
+    overflow: hidden;
+  }
+
+  .login-container .login_box .login_code_box .title {
+    display: block;
+    font-size: 24px;
+    color: #1a1a1a;
+    line-height: 33px;
+    margin: 100px auto 30px;
+  }
+
+  .login-container .login_box .login_code_box span {
+    display: block;
+    font-size: 16px;
+    line-height: 32px;
+  }
+
+  .login-container .login_box .login_code_box .code {
+    display: inline-block;
+    width: 200px;
+    height: 200px;
+    margin-bottom: 20px;
+    overflow: hidden;
+    position: relative;
+  }
+
+  .login-container .login_box .login_code_box .code .mack {
+    position: absolute;
+    left: 0;
+    right: 0;
+    top: 0;
+    bottom: 0;
+    background-color: #98989891;
+    padding-top: 60px;
+  }
+
+  .mack i.el-icon-refresh {
+    font-size: 26px
+  }
+
+  .login-container .login_box .login_code_box .code .mack span {
+    line-height: 100%;
+    color: #fff;
+    background: #000;
+    display: inline-block;
+  }
+
+  .login-container .login_box .login_code_box .code img {
+    width: 100%;
+    height: auto;
+  }
+
+  .login-container .login_box .login_code_box .social_soft {
+    display: inline-block;
+    width: 260px;
+    margin: 30px auto;
+    padding: 16px 0;
+    border-top: 1px #efefef dashed;
+  }
+
+  .login-container .login_box .login_code_box .social_soft .title {
+    display: inline-block;
+    vertical-align: top;
+    text-align: left;
+    width: 80%;
+    margin: 0 auto;
+    font-size: 16px;
+  }
+
+  .login-container .login_box .login_code_box .social_soft .svg-icon {
+    display: inline-block;
+    vertical-align: top;
+    width: 18%;
+    font-size: 36px;
+  }
+
+  .login-container .login_box .login_code_box .social_soft .download_app {
+    width: 260px;
+    margin: 30px auto;
+    padding: 16px 0;
+    border: 1px red solid;
+    background: red;
+    border-radius: 8px;
+  }
+
+  .login-container .login_box .login_code_box .social_soft .download_app img {
+    width: 40px;
+  }
+
+  .login-container .login_box button {
+    margin: 0 auto 32px;
+    padding: 0;
+  }
+
+  .login-container .login_box .login_reg {
+    display: inline-block;
+    overflow: hidden;
+  }
+
+  .login-container .login_box .login_reg span {
+    font-size: 16px;
+    letter-spacing: 1px;
+  }
+
+  .footer_copyright {
+    text-align: center;
+    margin: 20px 0;
+  }
+
+  .footer_copyright span {
+    display: block;
+    text-align: center;
+    font-size: 14px;
+    line-height: 18px;
+    color: #606266;
+  }
+
+  .footer_copyright span img {
+    display: inline-block;
+    vertical-align: top;
+    margin-top: 8px;
+    padding: 0 20px;
+  }
+
+  .login-container::-webkit-scrollbar {
+    width: 4px;
+    height: 1px;
+  }
+
+  .login-container::-webkit-scrollbar-thumb {
+    border-radius: 10px;
+    box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
+    background: #535353;
+  }
+
+  .login-container::-webkit-scrollbar-track {
+    box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
+    border-radius: 10px;
+    background: transparent;
+  }
+
+  
+.fade-enter {
+  opacity: 0;
+}
+.fade-enter-active {
+  transition: opacity 1.2s;
+}
+.fade-leave-to {
+  opacity: 0;
+}
+.fade-leave-active {
+  transition: opacity 1s;
+}
+</style>

+ 100 - 0
src/views/login/index3.vue

@@ -0,0 +1,100 @@
+<template>
+  <div class="login-container">
+    <div class="all" style="">
+      <div class="data-all" style="text-align:center;margin-top:50px;">
+        <transition name="fade">
+          <img
+            src="static/images/login300.png"
+            v-if="logImage"
+            style="margin:48px auto;width:104px;height:104px;"
+            alt=""
+          />
+          <img
+            src="static/images/init.gif"
+            v-if="!logImage"
+            style="margin:0 auto;"
+            alt=""
+          />
+        </transition>
+        <div>管理执行难,就用功道云</div>
+        <!-- <transition name="fade">
+          <el-button class="refresh" type="primary" style="margin-top:10px" @click="LoginBut" v-show="loginButton">{{logButText}}</el-button>
+        </transition>
+        
+        <el-button class="refresh" type="primary" style="margin-top:10px" @click="LoginBut1">123</el-button> -->
+      </div>
+    </div>
+    <pastDue></pastDue>
+  </div>
+</template>
+
+<script>
+import pastDue from "@/views/common/pastDue.vue";
+import { getToken, cookGetToken } from "@/utils/auth";
+import { wxAuth } from "@/utils/wx-auth-two.js";
+export default {
+  data() {
+    return { 
+      logImage: true,
+      logButText: "登录",
+      loginButton: true
+    };
+  },
+  components: { pastDue },
+  watch: {},
+  created() {
+     console.log('登录页');
+     console.log(cookGetToken());
+    if (cookGetToken()) {
+      this.$store.commit("SET_TOKEN", cookGetToken());
+      localStorage.setItem(
+        "Experience_data",
+        JSON.stringify({ if: false, name: "" })
+      );
+      console.log(cookGetToken());
+      this.detalext(1)
+    }else{
+      console.log('无Token')
+      window.location.href = process.env.BASE_API;//重新授权
+    }
+  },
+  mounted() {},
+  methods: {
+    detalext(add){
+      this.$http("get", process.env.BASE_API + "/api/employee/detail").then(
+        res => {
+          if (res.data.code == 1) {
+            if(res.data.data.user.is_official == 0){
+              this.$router.push({
+                path: '/noAccess',
+                query: {
+                  msg: '当前用户未授权进入系统,请联系管理员为您【启用积分管理】,<br/>如需咨询客服,请到您企业专属的功道云服务群咨询'
+                }
+              })
+            }else if(add == 1){
+              localStorage.removeItem('SET_EMPLOYEE_MAP')
+              localStorage.removeItem('dept_tree')
+              localStorage.removeItem('site_info')
+              wxAuth(true);
+            }
+          }
+        }
+      );
+    },
+  },
+  destroyed() {
+    localStorage.setItem("login_code", "0");
+  }
+};
+</script>
+
+<style rel="stylesheet/css" type="text/css" scoped>
+.all {
+  /* width: 1000px; */
+  /* height: 675px; */
+  margin: 0 auto;
+  position: relative;
+  top: 50%;
+  margin-top: -325px;
+}
+</style>

+ 7 - 7
src/views/login/invite_new_company.vue

@@ -2,20 +2,20 @@
   <div class="login-container">
 
     <div class="login_logo">
-      <a href="#" target="_self" title="功道云-积分系统用户登录"><img src="/static/images/login-logo.png"></a>
+      <a href="#" target="_self" title="功道云-积分系统用户登录"><img src="static/images/login-logo.png"></a>
     </div>
 
     <div class="login_box">
 
       <div class="login_ad">
-        <img src="/static/images/login_adpic.png">
+        <img src="static/images/login_adpic.png">
         <span>广告语</span>
       </div>
 
       <div class="create_company_box">
 
         <div class="company_img">
-          <img src="/static/images/invite_new_company.png">
+          <img src="static/images/invite_new_company.png">
         </div>
 
         <div class="create_company_title">
@@ -35,7 +35,7 @@
     </div>
 
     <div class="footer_copyright">
-      <span class=""><img src="/static/images/little_line.png">积分制管理 · 员工精细化管理<img src="/static/images/little_line.png"></span>
+      <span class=""><img src="static/images/little_line.png">积分制管理 · 员工精细化管理<img src="static/images/little_line.png"></span>
       <span class="copyright">Copyright © 2020 东莞市民之网计算机网络工程有限公司 All Rights Reserved</span>
     </div>
   </div>
@@ -93,7 +93,7 @@
     width:518px;
     height:614px;
     float:left;
-    background:url(/static/images/login_bg.jpg) no-repeat;
+    background:url(/images/login_bg.jpg) no-repeat;
     background-size:cover;
     overflow:hidden;
   }
@@ -123,13 +123,13 @@
   .login-container .login_box .login_type_icon .login_default{
     width:96px;
     height:96px;
-    background:url(/static/images/login_default.jpg) no-repeat;
+    background:url(/images/login_default.jpg) no-repeat;
     background-size:cover;
   }
   .login-container .login_box .login_type_icon .login_code{
     width:96px;
     height:96px;
-    background:url(/static/images/login_code.jpg) no-repeat;
+    background:url(/images/login_code.jpg) no-repeat;
     background-size:cover;
   }
   .login-container .login_box .login_input{

+ 35 - 0
src/views/login/loginTransfer.vue

@@ -0,0 +1,35 @@
+<template>
+  <div class="">
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {};
+  },
+  created() {
+    // window.location.href = 'http://wechatgdym.vaiwan.com';
+    // let url = window.location.href
+    // alert(url)
+    // if(url.split('#')[0] == 'http://wechatgdym.vaiwan.com/'){
+    //   this.$router.push({path: '/login'})
+    // }else{
+    //   window.location.href = 'http://wechatgdym.vaiwan.com';
+    // }
+    if (/Android|webOS|iPhone|iPod|BlackBerry/i.test(navigator.userAgent)) {
+      window.alert("手机"+process.env.BASE_API+":8082");
+      // window.location.href = process.env.BASE_API;
+      // window.location.href = process.env.BASE_API+":8082";
+      window.location.href = 'http://wechatgdym.vaiwan.com';
+    } else {
+    //   window.alert("PC");
+      this.$router.push({path: '/login'})
+    }
+  },
+  mounted() {},
+  methods: {}
+};
+</script>
+
+<style type="text/css" scoped></style>

+ 5 - 5
src/views/login/reg.vue

@@ -2,7 +2,7 @@
   <div class="login-container">
     <div class="all">
       <div class="login_logo">
-        <a href="#" target="_self" title="功道云-积分系统用户登录"><img src="/static/images/login-logo_20200603.png"></a>
+        <a href="#" target="_self" title="功道云-积分系统用户登录"><img src="static/images/login-logo_20200603.png"></a>
       </div>
 
       <div class="login_box">
@@ -100,7 +100,7 @@
 
       </div>
       <div class="footer_copyright">
-        <!-- <span class=""><img src="/static/images/little_line.png">积分制管理 · 员工精细化管理<img src="/static/images/little_line.png"></span> -->
+        <!-- <span class=""><img src="static/images/little_line.png">积分制管理 · 员工精细化管理<img src="static/images/little_line.png"></span> -->
         <span class="copyright">Copyright © 2020 广东功道云数字科技有限公司 All Rights Reserved</span>
       </div>
 
@@ -368,7 +368,7 @@
   .login-container .login_box .login_ad {
     width: 482px;
     height: 552px;
-    background: url(/static/images/login_bg_20200603.png) no-repeat;
+    background: url(/images/login_bg_20200603.png) no-repeat;
     background-size: cover;
   }
 
@@ -399,13 +399,13 @@
   .login-container .login_box .login_type_icon .login_default{
     width:96px;
     height:96px;
-    background:url(/static/images/login_default.jpg) no-repeat;
+    background:url(/images/login_default.jpg) no-repeat;
     background-size:cover;
   }
   .login-container .login_box .login_type_icon .login_code{
     width:96px;
     height:96px;
-    background:url(/static/images/login_code.jpg) no-repeat;
+    background:url(/images/login_code.jpg) no-repeat;
     background-size:cover;
   }
   .login-container .login_box .login_input{

+ 2 - 2
src/views/login/resetPwd.vue

@@ -10,7 +10,7 @@
     >
       <div class="form-box-login">
         <div class="title-container" style="padding-bottom:20px;">
-          <img src="/static/images/login-logo.png" width style="margin:0 auto; display: block;">
+          <img src="static/images/login-logo.png" width style="margin:0 auto; display: block;">
         </div>
 
         <el-form-item prop="password">
@@ -171,7 +171,7 @@ $cursor: #fff;
 
 /* reset element-ui css */
 .login-container {
-  background-image: url(/static/images/login-bg.jpg);
+  background-image: url(/images/login-bg.jpg);
   background-repeat: no-repeat;
   background-size: 100% 100%;
 

+ 15 - 2
src/views/noAccess.vue

@@ -1,13 +1,26 @@
 <template>
 	<div class="noData flex-box flex-center-center">
-		<img  src="/static/images/APP.png" class="appImg"/>
+		<img  src="static/images/APP.png" class="appImg"/>
 		<div>
-			<div>当前用户未授权进入系统,请联系管理员为您【启用积分管理】,<br/>如需咨询客服,请到您企业专属的功道云服务群咨询</div>
+			<!-- <div>当前用户未授权进入系统,请联系管理员为您【启用积分管理】,<br/>如需咨询客服,请到您企业专属的功道云服务群咨询</div> -->
+			<div v-if="$route.query.msg" v-html="$route.query.msg"></div>
 		</div>
 	</div>
 </template>
 
 <script>
+	import Cookies from 'js-cookie'
+	export default {
+		data() {
+			
+		},
+		created(){
+			console.log('错误页:noAccess')
+			localStorage.clear()
+			sessionStorage.clear()
+			Cookies.remove('Admin-Token')
+		},
+	}
 </script>
 
 <style scoped="scoped">

Some files were not shown because too many files changed in this diff