ソースを参照

Merge branch 'dev'

guojy 1 年間 前
コミット
706ed2dab9
49 ファイル変更3488 行追加1549 行削除
  1. 53 3
      package-lock.json
  2. 1 0
      package.json
  3. 1 1
      public/index.html
  4. 3 1
      src/assets/css/reset.css
  5. 0 2
      src/components/EmployeeSelector.vue
  6. 77 0
      src/components/FormBox.vue
  7. 296 0
      src/components/SelectRule.vue
  8. 51 0
      src/components/Tooltip.vue
  9. 94 26
      src/home.vue
  10. 60 5
      src/index.vue
  11. 22 3
      src/init.vue
  12. 3 1
      src/main.js
  13. 6 0
      src/router/index.js
  14. 1 1
      src/screen.vue
  15. 1295 0
      src/screenSan.vue
  16. 23 13
      src/views/abPoint/apply_list.vue
  17. 28 21
      src/views/abPoint/award_punish.vue
  18. 51 44
      src/views/award/grantAward.vue
  19. 31 27
      src/views/award/lotteryTicket_statistics.vue
  20. 25 17
      src/views/award/myAward.vue
  21. 17 16
      src/views/award/myGrantAward.vue
  22. 55 54
      src/views/award/print.vue
  23. 72 65
      src/views/ranking/attendance_rating.vue
  24. 37 33
      src/views/ranking/balanceA.vue
  25. 74 59
      src/views/ranking/custom_rank.vue
  26. 50 47
      src/views/ranking/department_statistics.vue
  27. 149 161
      src/views/ranking/dept_rank.vue
  28. 40 34
      src/views/ranking/individual_statistics.vue
  29. 111 121
      src/views/ranking/integral_event.vue
  30. 94 139
      src/views/ranking/log_rank.vue
  31. 96 99
      src/views/ranking/manager_statistics.vue
  32. 36 71
      src/views/ranking/task_rank.vue
  33. 64 68
      src/views/ranking/total_rank.vue
  34. 18 15
      src/views/set/framework.vue
  35. 10 7
      src/views/set/jurisdiction.vue
  36. 21 9
      src/views/set/screenSet.vue
  37. 5 5
      src/views/set/voluntarilyPoint.vue
  38. 29 49
      src/views/task/allTask.vue
  39. 34 30
      src/views/task/myExamine.vue
  40. 61 54
      src/views/task/my_issue.vue
  41. 31 26
      src/views/task/my_task.vue
  42. 39 40
      src/views/welfare/conversion.vue
  43. 29 26
      src/views/welfare/flManagement.vue
  44. 11 7
      src/views/welfare/operatingRecord.vue
  45. 21 12
      src/views/welfare/prize.vue
  46. 24 16
      src/views/workbench/alreadySp.vue
  47. 17 13
      src/views/workbench/approval_batch.vue
  48. 25 17
      src/views/workbench/approval_list.vue
  49. 97 91
      src/views/workbench/review.vue

+ 53 - 3
package-lock.json

@@ -5229,6 +5229,53 @@
         "promise-polyfill": "^7.1.0"
       }
     },
+    "dingtalk-service-window-libs": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/dingtalk-service-window-libs/-/dingtalk-service-window-libs-0.3.0.tgz",
+      "integrity": "sha512-y0ahqCn3sXkIzu0FMgRtLRxyxKMUUv/2A13hCNHzhnAAVe5i6SO4fGGi1um7babEh6Vrx1+8bXedHPJVRBOEDA==",
+      "requires": {
+        "ajv": "^8.12.0",
+        "dingtalk-jsapi": "^3.0.20",
+        "eventemitter2": "^6.4.9",
+        "nanoid": "^4.0.2"
+      },
+      "dependencies": {
+        "ajv": {
+          "version": "8.12.0",
+          "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
+          "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
+          "requires": {
+            "fast-deep-equal": "^3.1.1",
+            "json-schema-traverse": "^1.0.0",
+            "require-from-string": "^2.0.2",
+            "uri-js": "^4.2.2"
+          }
+        },
+        "dingtalk-jsapi": {
+          "version": "3.0.22",
+          "resolved": "https://registry.npmjs.org/dingtalk-jsapi/-/dingtalk-jsapi-3.0.22.tgz",
+          "integrity": "sha512-WN6S1soQauzUWtueMIhxBtBsr3xLsCPN2AnspvJU+Ihd+/BWSi6eMWzaoTafRxZ0JX2J0wz/TjTQbITVuYv+uQ==",
+          "requires": {
+            "promise-polyfill": "^7.1.0"
+          }
+        },
+        "eventemitter2": {
+          "version": "6.4.9",
+          "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz",
+          "integrity": "sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg=="
+        },
+        "json-schema-traverse": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+          "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
+        },
+        "nanoid": {
+          "version": "4.0.2",
+          "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-4.0.2.tgz",
+          "integrity": "sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw=="
+        }
+      }
+    },
     "dir-glob": {
       "version": "2.2.2",
       "resolved": "https://registry.npm.taobao.org/dir-glob/download/dir-glob-2.2.2.tgz",
@@ -11692,8 +11739,7 @@
     "punycode": {
       "version": "2.1.1",
       "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz",
-      "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew=",
-      "dev": true
+      "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew="
     },
     "q": {
       "version": "1.5.1",
@@ -12100,6 +12146,11 @@
       "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
       "dev": true
     },
+    "require-from-string": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
+      "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="
+    },
     "require-main-filename": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
@@ -14487,7 +14538,6 @@
       "version": "4.4.1",
       "resolved": "https://registry.npm.taobao.org/uri-js/download/uri-js-4.4.1.tgz?cache=0&sync_timestamp=1610237624359&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Furi-js%2Fdownload%2Furi-js-4.4.1.tgz",
       "integrity": "sha1-mxpSWVIlhZ5V9mnZKPiMbFfyp34=",
-      "dev": true,
       "requires": {
         "punycode": "^2.1.0"
       }

+ 1 - 0
package.json

@@ -17,6 +17,7 @@
     "cross-env": "^7.0.3",
     "dingtalk-design-libs": "0.0.14-alpha.3",
     "dingtalk-jsapi": "^2.13.51",
+    "dingtalk-service-window-libs": "^0.3.0",
     "echarts": "^4.9.0",
     "element-ui": "^2.13.2",
     "file-saver": "^2.0.5",

+ 1 - 1
public/index.html

@@ -4,7 +4,7 @@
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
     <!-- <meta name="viewport" content="width=device-width,initial-scale=1.0"> -->
-	  <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no,viewport-fit=cover">
+	<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no,viewport-fit=cover">
     <link rel="icon" href="<%= BASE_URL %>favicon.ico">
 <!-- 	<link rel="Bookmark" type="image/x-icon" href="b/img/icon/favicon.ico" />
 	<link rel="icon" type="image/x-icon" href="b/img/icon/favicon.ico" />

+ 3 - 1
src/assets/css/reset.css

@@ -36,7 +36,9 @@ label {
 .boxMinHeight {
 	min-height: calc(100vh - 110px);
 }
-
+.cursor{
+	cursor: pointer;
+}
 
 .el-form-item__content {
 	line-height: 36px !important;

+ 0 - 2
src/components/EmployeeSelector.vue

@@ -70,8 +70,6 @@
 </template>
 
 <script>
-// import Item  from './Item'
-// import VirtualList from 'vue-virtual-scroll-list'
 export default {
 	props: {
 		can_select_dept: {

+ 77 - 0
src/components/FormBox.vue

@@ -0,0 +1,77 @@
+<template>
+	<div style="border: 1px solid #EBEEF5;border-radius: 5px;">
+		<div style="padding: 10px;" v-if="isShowHeader">
+			 <slot name="header"></slot>	
+		</div>
+		<div class="form-box" :class="!isShowMore? 'auto':''" :style="{height:isShowGd?'auto':'49px'}">
+			<slot name="footer"></slot>	
+			<el-tooltip  effect="dark" :content="isShowGd?'收起':'更多'" placement="top">
+				<div v-if="isShowMore" class="gd" :class="isShowGd? 'gd2':''" @click="isShowGd=!isShowGd"><i class="el-icon-d-arrow-left fontColorC"></i></div>
+			</el-tooltip>
+		</div>
+	</div>
+</template>
+
+<script>
+ import Tooltip from '@/components/Tooltip';
+  export default {
+    name:'FormBox',
+	components:{Tooltip},
+    props:{
+		isShowMore:{
+			type:Boolean,
+			default:false,
+		},
+		isShowHeader:{
+			type:Boolean,
+			default:true,
+		},
+    },
+    data(){
+      return{
+		str:'更多',
+		isShowGd:false,
+      }
+    },
+    methods:{
+
+    }
+  }
+</script>
+
+<style scoped="scoped">
+.form-box{
+	padding: 10px;
+	background-color: rgb(250, 251, 252);
+	border-radius: 5px;
+	padding-bottom: 0;
+	position: relative;
+	height: auto;
+	padding-right: 30px;
+	transition: all 1s; 
+	/* overflow: hidden; */
+}	
+.form-box ::v-deep .el-form-item{
+	margin-bottom: 10px;
+}
+.gd{
+	position: absolute;
+	width: 20px;
+	right: 10px;
+	top: 20px;
+	z-index: 999;
+	font-size: 20px;
+	cursor: pointer;
+	transform: rotate(-90deg);
+	transition: all 0.1s;  
+}
+.gd2{
+	transform: rotate(90deg);
+}
+.gd :hover{
+	background-color: #f1f1f1;
+}
+.auto{
+	height: auto !important;
+}
+</style>

+ 296 - 0
src/components/SelectRule.vue

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

+ 51 - 0
src/components/Tooltip.vue

@@ -0,0 +1,51 @@
+<template>
+  <!-- <div> -->
+      <el-tooltip :placement="direction">
+        <pre slot="content">{{preHtml}}</pre>
+        <slot></slot>
+      </el-tooltip>
+  <!-- </div> -->
+</template>
+
+<script>
+export default {
+    name:'Tooltip',
+    props:{
+        preHtml:{
+            type: String,
+            default: '',
+        },
+        direction:{
+          type: String,
+          default: 'top',
+        }
+    },
+  data() {
+    return {
+
+    };
+  },
+  watch: {
+
+  },
+  created() {
+  },
+  mounted() {},
+  methods: {
+
+  }
+};
+</script>
+
+<style scoped="scoped" lang="scss">
+  pre{
+    margin: 0 !important;
+    white-space: pre-wrap;
+    white-space: -moz-pre-wrap;
+    white-space: -pre-wrap;
+    white-space: -o-pre-wrap;
+    word-wrap: break-word;
+    max-width: 600px;
+    color: #fff;
+  }
+</style>

+ 94 - 26
src/home.vue

@@ -1,6 +1,17 @@
 <template>
-	<div class="">
-		
+	<div>
+		<!-- 过去提醒 -->
+		<div class="diy-tip2 flex-box-ce" style="min-width: 1100px;" v-if="isShowDate">
+			<div class="flex-1">
+				<div class="font-flex-word" style="max-width: 1000px;overflow:hidden">
+					尊敬的【{{ corpMessage.name }}】用户!距离贵司开通的“功道云积分制”使用结束只剩下<span class="red">{{day}}</span>天,到期时间 {{ corpMessage.expire_time}} 00:00。
+					为避免使用期结束给您带来不便,请及时续费升级。
+				</div>
+			</div>
+			<span class="blue cursor" @click="isTz=true">续费/升级</span>
+			<i class="el-icon-close fontColorC cursor" style="position: relative;right: -20px;" @click="isShowDate=false"></i>
+		</div>
+		<!-- 预约 -->
 		<div v-if="$supremeAuthority()!='dept_manager'&&$supremeAuthority()!='employee'&&user_info.is_only_try_order"  @click="bundleOfServices" :style="{ backgroundImage: 'url(' + loginBg + ')' }"  style="position: relative;margin-bottom: 10px;height: 77px;" class="headerImg">
 			<div style="position: absolute;width: 440px;font-size: 26px;color: #fff;font-weight: 600;top: 20px;text-align: center;left: 50%;margin-left: -220px;">
 				免费预约演示 获取行业管理方案
@@ -18,7 +29,7 @@
 					<el-col :span="7" class="hlheader-user">
 						<el-row :gutter="40">
 							<el-col :span="24" class="hlheader-user-info">
-								<div class="headimg" style=" margin-right: 0px;cursor:pointer;">
+								<div class="headimg" style=" margin-right: 0px;cursor:pointer;" @click="goToSubscribe">
 									<userImage :user_name="user_info.name" :img_url="user_info.img_url" fontSize="1.1" width="60px" height="60px"></userImage>
 								</div>
 								<div class="headtext">
@@ -454,6 +465,7 @@
 				<span slot="footer" class="dialog-footer"><el-button @click="$router.push({ path: '/update_notice' })" type="primary" round>查看详情</el-button></span>
 			</el-dialog>
 		</div>
+		
 		<el-dialog @close="closeCode"  :visible.sync="innerVisible" width="444px">
 			<div style="border-radius: 15px;border: 1px solid #f1f1f1;padding: 10px; width: 346px;box-sizing: border-box;margin: 0 auto;">
 				<div id="qrcode" ref="qrcode"></div>
@@ -462,9 +474,9 @@
 		</el-dialog>
 		
 		<examinePopup :title="'审核详情'" :id="detail_id" :show.sync="detailShow"></examinePopup>
-		<el-dialog class="dialog" :show-close="false" :visible.sync="dialogVisible" width="400px" >
-			<div style="height: 80px;background-image: linear-gradient(180deg, #01A2FE 0%, #0067FF 100%);
-			border-top-left-radius: 25px;border-top-right-radius: 25px;padding-top: 20px;">
+		
+		<el-dialog class="dialog" :show-close="false" :visible.sync="dialogVisible" width="400px">
+			<div style="height: 80px;background-image: linear-gradient(180deg, #01A2FE 0%, #0067FF 100%);border-top-left-radius: 25px;border-top-right-radius: 25px;padding-top: 20px;">
 				<div style="font-weight: 600;font-size: 24px;color: #fff;text-align: center;">预约演示功道云积分制</div>
 				<div style="font-weight: 600;font-size: 24px;color: #fff;text-align: center;">积分制专家一对一服务</div>
 			</div>
@@ -483,11 +495,18 @@
 				</el-form>
 			</div>
 			<div class="fa">预约赠送积分制考核方案</div>
-			<div  style="text-align: center;padding: 20px 0;">
+			<div style="text-align: center;padding: 20px 0;">
 				<el-button style="border-radius: 25px;font-size: 16px;padding:7px 20px;" size="mini" type="primary" @click="submitForm('ruleForm')">立即申请</el-button>
 			</div>
 		</el-dialog>
 	
+		<!-- 续费升级 -->
+		<el-dialog title="续费升级" :visible.sync="isTz" width="400px">
+			<div style="border-radius: 15px;border: 1px solid #f1f1f1;padding: 10px; width: 276px;box-sizing: border-box;margin: 0 auto;">
+				<img src="./assets/image/code.png" />
+			</div>
+			<div class="fontColorC" style="text-align: center;margin-top: 15px;font-size: 18px;">手机钉钉扫码,付费升级</div>
+		</el-dialog>
 	</div>
 </template>
 
@@ -495,6 +514,7 @@
 var bool = true; // 五秒执行一次变量
 import QRCode from 'qrcodejs2';
 import examinePopup from '@/components/examinePopup';
+import { openSubscribeApp } from "dingtalk-service-window-libs"
 import { contactAdminToUseApp } from 'dingtalk-design-libs';
 export default {
 	components: { examinePopup },
@@ -618,7 +638,19 @@ export default {
 			detail_id: 0,
 			detailShow: false,
 			thisweek:'',
-			innerVisible:false
+			innerVisible:false,
+			corpMessage:{},
+			info: {},
+			isShowDate:false,
+			isTz:false,
+			dateArr:[
+				{dateIndex:1,max:60,min:31,},
+				{dateIndex:2,max:30,min:8},
+				{dateIndex:3,max:7,min:4},
+				{dateIndex:4,max:3,min:0},
+			],
+			day:0,
+			dateIndex:0,
 		};
 	},
 	watch: {
@@ -632,8 +664,16 @@ export default {
 		},
 		exclusiveMonthChecked() {
 			this.monthlyIntegral();
+		},
+		isShowDate(val){
+			if(!val){
+				this.$setCache('dateIndex',this.dateIndex)
+			}
 		}
 	},
+	created() {
+		this.getCorp();
+	},
 	mounted() {
 		this.thisweek=this.getTime(7)+'~'+this.getTime(1)
 		if (this.employeeRout) {
@@ -663,6 +703,41 @@ export default {
 		});
 	},
 	methods: {
+		 goToSubscribe(){
+		  openSubscribeApp('v00dfd6ff9ca66a4ae187dab8a5b6004495',{floatHeight: 'percent50'}).then((res) => {
+		    // PC 环境下会有回调,可用于区分用户是否操作成功
+		      if (res.action === 'OK') {
+		        // 关注成功
+		        console.log({ content: '关注成功' })
+		      } else {
+		        console.log({ content: '用户未关注' })
+		      }
+		  }).catch((e) => {
+		  })
+		},
+		//获取套餐信息
+		getCorp() {
+			if(!this.$getCache('corpId')||this.$supremeAuthority()=='dept_manager'||this.$supremeAuthority()=='employee'){
+				return false
+			}
+			this.$axios('get', 'api/order/corp', { corp_id: this.$getCache('corpId') }).then(res => {
+				this.corpMessage = res.data.data;
+				const startDate = this.$moment(this.corpMessage.expire_time).format('YYYY-MM-DD');
+				const endDate = this.$moment().format('YYYY-MM-DD');
+				this.day=this.$moment(startDate).diff(endDate, 'day');
+				this.dateArr.forEach(item=>{
+					if(item.max>=this.day&&item.min<=this.day){
+						this.dateIndex=item.dateIndex
+						let dateIndex=this.$getCache('dateIndex')
+						if(!dateIndex){
+							this.isShowDate=true;
+						}else if(dateIndex!=item.dateIndex){
+							this.isShowDate=true;
+						}
+					}
+				})
+			});
+		},
 		bundleOfServices(){
 			this.$dd.biz.util.openSlidePanel({
 				url:"https://page.dingtalk.com/wow/dingtalk/act/serviceconversation?wh_biz=tm&showmenu=false&goodsCode=DT_GOODS_881607043109331&corpId="+this.$getCache('corpId')+"&token=5784a3e6b5e025ee891517ea814180f4",
@@ -856,23 +931,6 @@ export default {
 		openGzd(val) {
 			val ? this.$router.push({ path: val }) : '';
 		},
-		popout() {
-			if (bool) {
-				const h = this.$createElement;
-				this.$notify({
-					message: h('b', { style: 'color:rgb(38, 162, 255)' }, '任务功能将在近期开放,敬请期待')
-				});
-				bool = false;
-				setTimeout(() => {
-					bool = true;
-				}, 5000);
-			} else {
-			}
-		},
-		Administrator() {
-			this.popout();
-		},
-
 		//管理员头部
 		authorityManagerHeader() {
 			this.authorityManagerHeaderLoad = true;
@@ -1471,7 +1529,6 @@ export default {
 					this.highestPrizeBuckleloading = false;
 				});
 		},
-
 		//获取部门
 		getDepartment() {
 			this.$axios('get', '/api/department/tree').then(res => {
@@ -1500,6 +1557,17 @@ export default {
 </script>
 
 <style scoped="scoped" lang="scss">
+	.diy-tip2 {
+		font-size: 14px;
+		margin-bottom: 10px;
+		border: 1px solid #67c23a;
+		padding: 10px;
+		border-radius: 3px;
+		background-color: #f0f9eb;
+		color: #67c23a;
+		padding-right: 30px;
+		position: relative;
+	}
 	.fa{
 	  background-color: #f0a020;
 	  color: #fff;

+ 60 - 5
src/index.vue

@@ -48,13 +48,9 @@
 							<div style="text-align: center;">这里再次打开</div>
 							<div slot="reference" @click="showWn" class="flex-box-ce btnWn">
 								<i class="el-icon-tickets" style="font-size: 18px;margin-right: 5px;"></i>
-								<!-- <img slot="reference" src="./assets/image/wn.png" class="wn"/> -->
 								<span>新手引导</span>
 							</div>
 						  </el-popover>
-<!-- 						<el-tooltip v-model="wn_show" class="item" effect="dark" content="设置向导" placement="bottom" v-if="!this.$authoritys('employee') && !this.$authoritys('dept_manager')">
-							<img src="./assets/image/wn.png" class="wn" @click="showWn" />
-						</el-tooltip> -->
 						<userImage :user_name="userData.name" :img_url="userData.img_url" width="44px" height="44px"></userImage>
 					</div>
 				</div>
@@ -105,7 +101,7 @@
 			</el-main>
 		</el-container>
 		<!-- 续费升级 -->
-		<el-dialog class="续费升级" :visible.sync="isTz" width="400px">
+		<el-dialog title="续费升级" :visible.sync="isTz" width="400px">
 			<div style="border-radius: 15px;border: 1px solid #f1f1f1;padding: 10px; width: 276px;box-sizing: border-box;margin: 0 auto;">
 				<img src="./assets/image/code.png" />
 			</div>
@@ -209,6 +205,27 @@
 		    </el-col>
 		  </el-row>
 		</el-dialog>
+	
+		<el-dialog title="温馨提示" :visible.sync="isShowDate" width="400px" top="30vh">
+			<template #title>
+				<div style="font-weight: 600;font-size: 18px;margin-bottom: 10px;" class="black"><i class="el-icon-warning orange"></i> 系统即将到期</div>
+			</template>
+			<div style="margin-bottom: 20px;position: relative;top:-20px">
+				<!-- <div style="font-weight: 600;font-size: 18px;margin-bottom: 10px;" class="black"><i class="el-icon-warning orange"></i> 系统即将到期</div> -->
+				<div>
+					尊敬的【{{ info.name }}】用户!距离贵司开通的“功道云积分制”使用结束只剩下<span class="red">90</span>天,到期时间 {{ corpMessage.expire_time}} 00:00。
+					为避免使用期结束给您带来不便,请在钉钉手机端应用市场或点击下方【续费/升级】按钮进行续费升级。
+					如有任何问题,请联系客服或拨打电话400-6877-880进行咨询
+				</div>
+			</div>
+			<div class="flex-box-ce flex-d-center">
+				<div class="blue" @click="bundleOfServices">联系客服</div>
+				<div class="flex-box-ce">
+					<el-button size="small" @click="isShowDate=false">取消</el-button>
+					<el-button size="small" @click="isTz = true" class="upgrade" type="primary" icon="el-icon-upload">续费升级</el-button>
+				</div>
+			</div>
+		</el-dialog>
 	</el-container>
 </template>
 
@@ -249,6 +266,7 @@ export default {
 			visible:false,
 			keepAliveView:['dept_rank','total_rank','custom_rank','manager_statistics'],  //需要缓存的组件名称列表,用逗号分隔
 			keepAliveView2:['dept_rank','total_rank','custom_rank','manager_statistics'],  //需要缓存的组件名称列表,用逗号分隔
+			isShowDate:false,
 		};
 	},
 	watch: {
@@ -322,6 +340,28 @@ export default {
 		});
 	},
 	methods: {
+		subscribe() {
+		  openSubscribeMiniApp({
+		     panelHeight: 'percent40',
+		     path: 'pages/index/index',
+		     float: true,
+		     extraData: {
+		            clientId: '<!-- 小程序的appId -->',
+		            authToken: ' <!--  通过前述获取授权ID方式获取 -->',
+		          },
+		    options:{}
+		 });
+		},
+		bundleOfServices(){
+			this.$dd.biz.util.openSlidePanel({
+				url:"https://page.dingtalk.com/wow/dingtalk/act/serviceconversation?wh_biz=tm&showmenu=false&goodsCode=DT_GOODS_881607043109331&corpId="+this.$getCache('corpId')+"&token=5784a3e6b5e025ee891517ea814180f4",
+				title: '客服群',
+				onSuccess : function(result) {},
+				onFail : function(err) {
+					console.log('onFail')
+				}
+			})
+		},
 		returnArr(str){
 		  this.keepAliveView=this.keepAliveView.filter(item=>{
 		    return item!=str;
@@ -528,6 +568,21 @@ export default {
 </script>
 
 <style scoped="scoped" lang="scss">
+.diy_tip_bg2 {
+	background: #f5f6f9;
+	overflow: hidden;
+	.diy-tip2 {
+		margin-bottom: 15px;
+		border: 1px solid #67c23a;
+		padding: 20px 16px;
+		p {
+			color: #67c23a !important;
+			font-size: 14px;
+			margin: 0 !important;
+			padding: 4px 0;
+		}
+	}
+}	
 .popoverText span{
 	width: 100px;
 	display: block;

+ 22 - 3
src/init.vue

@@ -1,12 +1,17 @@
 <template>
 	<div>
 		<div class="noData flex-box-v flex-center-center">
-			<div class="data-all">
+			<div class="data-all" v-if="isPCa">
 				<img src="./assets/image/init.gif" class="appImg" />
 				<div>管理执行难,就用功道云</div>
 				<el-button class="refresh" type="primary" :loading="disabled" :disabled="disabled" v-if="isRefresh" @click="openLogin()">{{ text }}</el-button>
 			</div>
+			<div class="data-all" v-else>
+				<img src="./assets/image/init.gif" class="appImg" />
+				<div>此页面暂不支持在手机端访问,<br/>请前往电脑端“工作通知”查看</div>
+			</div>
 		</div>
+		
 		<el-dialog title="通知" :visible.sync="dialogFormVisible" width="480px" :show-close="false" :close-on-click-modal="false">
 			<div>
 				<div style="font-size: 18px;">尊敬的用户:</div>
@@ -29,10 +34,12 @@ export default {
 			isRefresh: false,
 			disabled: false,
 			showBtnCunt: 0,
-			dialogFormVisible:false
+			dialogFormVisible:false,
+			isPCa:true,
 		};
 	},
 	created() {
+		this.isPCa=this.IsPC();
 		this.getTypes();
 	},
 	mounted() {
@@ -40,11 +47,23 @@ export default {
 		var str = this.GetRequest(url).corpId || '123';
 		var corpId = str.split('#')[0];
 		this.corpId = corpId;
-		if (corpId) {
+		if (corpId&&this.isPCa) {
 			this.login(corpId);
 		}
 	},
 	methods: {
+		IsPC() {
+		    var userAgentInfo = navigator.userAgent;
+		    var Agents = ["Android", "iPhone","SymbianOS", "Windows Phone","iPad", "iPod"];
+		    var flag = true;
+		    for (var v = 0; v < Agents.length; v++) {
+		        if (userAgentInfo.indexOf(Agents[v]) > 0) {
+		            flag = false;
+		            break;
+		        }
+		    }
+		    return flag;
+		},
 		getTypes() {
 			var that = this;
 			this.$axios('get', '/api/integral/types').then(res => {

+ 3 - 1
src/main.js

@@ -23,9 +23,11 @@ Vue.use(print)
 import userImage from '@/components/UserImage'
 import NoData from '@/components/NoData'
 import BrawerBox from '@/components/BrawerBox';
+import FormBox from '@/components/FormBox';
 Vue.component('BrawerBox', BrawerBox)
 Vue.component('userImage', userImage)
 Vue.component('noData', NoData)
+Vue.component('FormBox', FormBox)
 Vue.use(ElementUI);
 if (process.env.NODE_ENV === 'development') {
   new VConsole()
@@ -65,7 +67,7 @@ Vue.prototype.$http = service;
 var CancelToken = axios.CancelToken;
 Vue.$httpRequestList = [];
 Vue.prototype.$axios = (type, url, data,heaStr) => {
-	if(url!='/api/ding/login'&&url!='/api/integral/types'&&url!='/api/screen/ranking'){
+	if(url!='/api/ding/login'&&url!='/api/integral/types'&&url!='/api/screen/ranking'&&url!='/api/auth/qr'){
 	    var Accept='';
 		switch(heaStr){
 		   case 'v2':

+ 6 - 0
src/router/index.js

@@ -504,6 +504,12 @@ const routes = [{
 		title: '数据大屏展示',
 		component: () => import( /* webpackChunkName: "screen" */ '@/screen'),
 	},
+	{
+		path: '/screenSan',
+		name: 'screenSan',
+		title: '数据大屏展示',
+		component: () => import( /* webpackChunkName: "screenSan" */ '@/screenSan'),
+	},
 	{
 		path: '/deptRankSwiper',
 		name: 'deptRankSwiper',

+ 1 - 1
src/screen.vue

@@ -1177,4 +1177,4 @@ export default {
 	transform: rotate(180deg);
 	border-color: transparent transparent #021D3B transparent;
 }
-</style>
+</style>

+ 1295 - 0
src/screenSan.vue

@@ -0,0 +1,1295 @@
+<template>
+	<div style="height: 100%;width: 100%;">
+		
+		<div class="screenBox back" v-if="isPCa">
+			<el-alert v-if="isShowError" :title="errorMsg"  type="error"></el-alert>
+			<div v-if="result.company" style="height: 100%;">
+				<header>
+					<div style="height: 3rem;padding: 0  2rem;font-size: 20px;" class="zhuColor flex-box-ce">
+						<div class="flex-1 flex-box-ce">
+							<img :src="result.company.logo" class="logo" />
+							<div>{{ result.company.name }}</div>
+						</div>
+						<div style="width: 400px;"></div>
+						<div class="flex-1 flex-box-end flex-box-ce">
+							<div>{{ nowTime }}</div>
+							<el-tooltip class="item" effect="dark" content="切换大屏" placement="bottom">
+								<i class="el-icon-sort"  style="margin:0 10px;cursor: pointer;transform: rotate(90deg);" @click="isShowlists"></i>
+							</el-tooltip>
+							<el-tooltip class="item" effect="dark" content="全屏" placement="bottom">
+								<img src="./assets/image/qp.png" class="logo" style="width: 24px;height: 24px;margin-left: 10px;cursor: pointer;" @click="fullScreen"/>
+							</el-tooltip>
+							<el-tooltip class="item" effect="dark" content="退出" placement="bottom">
+								<img src="./assets/image/quit.png" class="logo" style="width: 24px;height: 24px;margin-left: 10px;cursor: pointer;" @click="quit"/>
+							</el-tooltip>
+						</div>
+					</div>
+					<div class="zhuColor title" style="width: 400px;margin: 0 auto;height: 20px;text-align: center;">
+						<span>{{ result.title }}</span>
+					</div>
+				</header>
+				<div style="height: 10px;"></div>
+				<div class="flex-box" style="height: calc(100% - 128px);padding: 16px;padding-bottom: 0;">
+					<div class="flex-2 box" id="left">
+						<div class="boxTitle">
+							<span v-if="result.config.ranking_type">
+								{{result.config.ranking_type=='ranking'? result.config.ranking.name:result.config.ranking_total.name }}
+							</span>
+							<span v-else>
+								{{result.config.ranking.name}}
+							</span>
+						</div>
+						<div class="ranking" style="border-radius: 8px;margin: 16px;margin-top: 0px;">
+							<template v-if="rankingList.length>0">
+								<template v-if="rankingList.length==4">
+									<div style="margin-bottom: 8px;border-radius: 8px;box-shadow: 0 8px 8px #191E48;margin-top: 16px;">
+										<div v-for="(item, index) in result.ranking.list" :key="index" class="flex-box-ce rankingItem">
+											<div class="flex-1 flex-box-ce">
+												<template v-if="item.rank < 4">
+													<div v-if="item.rank == 1" class="index"><img src="./assets/image/1.png" /></div>
+													<div v-if="item.rank == 2" class="index"><img src="./assets/image/2.png" /></div>
+													<div v-if="item.rank == 3" class="index"><img src="./assets/image/3.png" /></div>
+												</template>
+												<div style="font-size: 20px;width: 36px;text-align: center;" v-else>{{ item.rank }}</div>
+												<userImage :user_name="item.employee.name" :img_url="item.employee.img_url" width="54px" height="54px" style="margin: 0 18px;"></userImage>
+												<div>
+													<div style="font-size: 20px;margin-bottom: 5px;">{{ item.employee.name }}</div>
+													<div class="fontColorD" style="font-size: 14px;" v-if="item.dept_list.length>0">
+														{{item.dept_list[0].dept_name}} <span v-if="item.dept_list.length>1">...</span>
+													</div>
+												</div>
+											</div>
+											<div class="num">{{ item.s_point }}</div>
+										</div>
+									</div>
+								</template>
+								<template v-else>
+									<div style="margin-bottom: 8px;border-radius: 8px;box-shadow: 0 8px 8px #191E48;margin-top: 16px;">
+										<div v-for="(item, index) in ranking(rankingList, 1)" :key="index" class="flex-box-ce rankingItem">
+											<div class="flex-1 flex-box-ce">
+												<template v-if="item.rank < 4">
+													<div v-if="item.rank == 1" class="index"><img src="./assets/image/1.png" /></div>
+													<div v-if="item.rank == 2" class="index"><img src="./assets/image/2.png" /></div>
+													<div v-if="item.rank == 3" class="index"><img src="./assets/image/3.png" /></div>
+												</template>
+												<userImage :user_name="item.employee_name" :img_url="item.employee_img_url" width="54px" height="54px" style="margin: 0 18px;"></userImage>
+												<div>
+													<div style="font-size: 20px;margin-bottom: 5px;">{{ item.employee_name }}</div>
+													<div class="fontColorD" style="font-size: 14px;" v-if="item.dept_list.length>0">
+														{{item.dept_list[0].dept_name}} <span v-if="item.dept_list.length>1">...</span>
+													</div>
+												</div>
+											</div>
+											<div class="num">{{ item.point }}</div>
+										</div>
+									</div>
+									<vue-seamless-scroll :data="rankingList" class="seamless-warp" :style="{height:h1+'px'}" :class-option="classOption">
+										<div v-for="(item, index) in ranking(rankingList,2)" :key="index" class="flex-box-ce rankingItem">
+											<div class="flex-1 flex-box-ce">
+												<div style="font-size: 20px;width: 36px;text-align: center;">{{ item.rank }}</div>
+												<userImage :user_name="item.employee_name" :img_url="item.employee_img_url" width="54px" height="54px" style="margin: 0 18px;"></userImage>
+												<div>
+													<div style="font-size: 20px;margin-bottom: 5px;">{{ item.employee_name }}</div>
+													<div class="fontColorD" style="font-size: 14px;" v-if="item.dept_list.length>0">
+														{{item.dept_list[0].dept_name}}<span v-if="item.dept_list.length>1">...</span>
+													</div>
+												</div>
+											</div>
+											<div class="num">{{ item.point }}</div>
+										</div>
+									</vue-seamless-scroll>
+								</template>
+							</template>
+							<div v-else style="height: 200px;text-align: center;line-height: 200px;color: #fff;">暂无数据</div>
+						</div>
+					</div>
+					<div class="flex-3" style="margin: 0 16px;height: 100%;">
+						<div class="flex-box-ce numBox" style="margin-bottom: 16px;">
+							<div class="flex-1 flex-box-v flex-center-center" style="border-radius: 12px;margin-right: 16px;background-image: linear-gradient(to top, #2537F7 0%, #258CF6 100%);" @click="endVal = 5123">
+								<div style="font-size: 2rem;margin-bottom: 1rem;">今日奖分</div>
+								<div style="font-size: 4.2rem;font-weight: 600;letter-spacing:8px;position: relative;">
+									<countTo :startVal="startVal" separator="" :endVal="result.center.all_add_point" :duration="3000"></countTo>
+								</div>
+							</div>
+							<div class="flex-1 flex-box-v flex-center-center" style="border-radius: 12px;background-image: linear-gradient(to top, #6342E9 0%, #8468F3 100%);">
+								<div style="font-size: 2rem;margin-bottom: 1rem;">今日人次</div>
+								<div style="font-size: 4.2rem;font-weight: 600;letter-spacing:8px">
+									<countTo :startVal="startVal" separator="" :endVal="result.center.count" :duration="3000"></countTo>
+								</div>
+							</div>
+						</div>
+						<div style="background-color: rgba(23, 30, 72, 0.3); border-radius: 8px;position: relative;">
+							<div class="boxTitle" style="margin-bottom: 30px;">积分制运用活跃度</div>
+							<div class="flex-box-ce" style="position: absolute;color:#fff;font-size:16px;right: 20px;top:108px">
+								<span style="height: 2px;width: 30px;background-color: #E6A23C;"></span>
+							基准标尺</div>
+							<div ref="ManagerSAwardChart" class="chart" :style="{height:h2+'px'}"></div>
+						</div>
+					</div>
+					<div class="flex-2 box">
+						<div class="boxTitle">{{ result.event.name }}</div>
+						<div class="ranking">
+							<template v-if="result.event.list.length">
+								<vue-seamless-scroll :data="returnEvent(result.event.list)" class="seamless-warp" style="margin: 16px;" :style="{height:h3+'px'}" :class-option="classOption">
+									<div v-for="(item, index) in returnEvent(result.event.list)" :key="item.id" class="flex-box rankingItem" style="margin-bottom: 10px;background-color: #1B3A70">
+										<div class="main-right flex-1">
+											<div class="context">{{ $moment.unix(item.event_time).format('YYYY-MM-DD') }}-{{ item.remark.customize ? item.remark.customize : item.remark.rule }}</div>
+											<div class="flex-box flex-v-ce">
+												<div class="name flex-1">{{ item.employee_name}}</div>
+												<div class="da" v-if="item.point > 0">+{{ item.point }}  <span style="color: #01EEFE;">{{ item.pt_id == 3 ? 'B分' : 'A分' }}</span></div>
+												<div class="red da" v-else>{{ item.point }}  <span style="color: #01EEFE;">{{ item.pt_id == 3 ? 'B分' : 'A分' }}</span></div>
+											</div>
+										</div>
+									</div>
+								</vue-seamless-scroll>
+							</template>
+							<div v-else style="height: 200px;text-align: center;line-height: 200px;color: #fff;">暂无数据</div>
+						</div>
+					</div>
+				</div>
+				<div  style="text-align: center;padding: 6px 0;font-size: 16px;color: #ccc;">@功道云积分制-提供技术支持</div>
+			</div>
+			<div class="data-all" v-else style="height: 100%;">
+				<i class="el-icon-loading" style="margin-top: 15%;width: 150px;margin-bottom: 10px;color: #fff;font-size: 64px;"></i>
+				<div style="color: #fff;">管理执行难,就用功道云</div>
+			</div>
+		</div>
+		<div v-else style="height: 100%;" class="back">
+			<el-alert v-if="isShowError" :title="errorMsg"  type="error"></el-alert>
+			<div v-if="result.company" style="height: 100%;">
+				<header>
+					<div style="height: 2.4rem;padding: 0 1rem;font-size: 14px;" class="zhuColor flex-box-ce">
+						<div class="flex-1 flex-box-ce">
+							<img :src="result.company.logo" class="logo" style="width: 1.4rem;height: 1.4rem;" />
+							<div>{{ result.company.name }}</div>
+						</div>
+						<div style="width: 260px;"></div>
+						<div class="flex-1 flex-box-end flex-box-ce">
+							<div>{{ nowTime }}</div>
+							<el-tooltip class="item" effect="dark" content="切换大屏" placement="bottom">
+								<i class="el-icon-sort"  style="margin:0 10px;cursor: pointer;transform: rotate(90deg);" @click="isShowlists"></i>
+							</el-tooltip>
+							<el-tooltip class="item" effect="dark" content="全屏" placement="bottom">
+								<img src="./assets/image/qp.png" class="logo" style="width: 24px;height: 24px;margin-left: 10px;cursor: pointer;" @click="fullScreen"/>
+							</el-tooltip>
+							<el-tooltip class="item" effect="dark" content="退出" placement="bottom">
+								<img src="./assets/image/quit.png" class="logo" style="width: 24px;height: 24px;margin-left: 10px;cursor: pointer;" @click="quit"/>
+							</el-tooltip>
+						</div>
+					</div>
+					<div class="zhuColor title2" style="width: 260px;margin: 0 auto;height: 14px;text-align: center;">
+						<span style="font-size: 20px;top: -1rem;">{{ result.title }}</span>
+					</div>
+				</header>
+				<div style="height: 10px;"></div>
+				<div class="flex-box" style="height: calc(100% - 92px);padding: 0 10px;">
+					<div class="flex-2 box" id="left">
+						<div class="boxTitle2">
+							<span v-if="result.config.ranking_type">
+								{{result.config.ranking_type=='ranking'? result.config.ranking.name:result.config.ranking_total.name }}
+							</span>
+							<span v-else>
+								{{result.config.ranking.name}}
+							</span>
+						</div>
+						<div class="ranking" style="border-radius: 8px;margin: 10px;">
+							<template v-if="rankingList.length>0">
+								<template v-if="rankingList.length==4">
+										<div style="box-shadow: 0 5px 5px #1d2242;margin-bottom: 5px;border-radius: 8px;">
+											<div v-for="(item, index) in rankingList" :key="index" class="flex-box-ce rankingItem">
+												<div class="flex-1 flex-box-ce">
+													<template v-if="item.rank < 4">
+														<div v-if="item.rank == 1" class="index2"><img src="./assets/image/1.png" /></div>
+														<div v-if="item.rank == 2" class="index2"><img src="./assets/image/2.png" /></div>
+														<div v-if="item.rank == 3" class="index2"><img src="./assets/image/3.png" /></div>
+													</template>
+													<div v-else style="font-size: 14px;width: 1.4rem;text-align: center;">{{ item.rank }}</div>
+													<userImage :user_name="item.employee_name" :img_url="item.employee_img_url" width="30px" height="30px" style="margin: 0 6px;"></userImage>
+													<div>
+														<div style="font-size: 14px;">{{ item.employee_name }}</div>
+														<div class="fontColorD" style="font-size: 12px;margin-top: 5px;" v-if="item.dept_list.length>0">
+															{{item.dept_list[0].dept_name}} <span v-if="item.dept_list.length>1">...</span>
+														</div>
+													</div>
+												</div>
+												<div class="num" style="font-size: 14px;">{{ item.s_point }}</div>
+											</div>
+										</div>
+								</template>
+								<template v-else>
+									<div style="box-shadow: 0 5px 5px #1d2242;margin-bottom: 5px;border-radius: 8px;">
+										<div v-for="(item, index) in ranking(rankingList, 1)" :key="index" class="flex-box-ce rankingItem">
+											<div class="flex-1 flex-box-ce">
+												<template v-if="item.rank < 4">
+													<div v-if="item.rank == 1" class="index2"><img src="./assets/image/1.png" /></div>
+													<div v-if="item.rank == 2" class="index2"><img src="./assets/image/2.png" /></div>
+													<div v-if="item.rank == 3" class="index2"><img src="./assets/image/3.png" /></div>
+												</template>
+												<userImage :user_name="item.employee_name" :img_url="item.employee_img_url" width="30px" height="30px" style="margin: 0 6px;"></userImage>
+												<div>
+													<div style="font-size: 14px;">{{ item.employee_name }}</div>
+													<div class="fontColorD" style="font-size: 12px;margin-top: 5px;" v-if="item.dept_list.length>0">
+														{{item.dept_list[0].dept_name}} <span v-if="item.dept_list.length>1">...</span>
+													</div>
+												</div>
+											</div>
+											<div class="num" style="font-size: 14px;">{{ item.point }}</div>
+										</div>
+									</div>
+									<vue-seamless-scroll :data="rankingList" class="seamless-warp" :style="{height:h4+'px'}" :class-option="classOption">
+										<div v-for="(item, index) in ranking(rankingList, 2)" :key="index" class="flex-box-ce rankingItem">
+											<div class="flex-1 flex-box-ce">
+												<div style="font-size: 14px;width: 1.4rem;text-align: center;">{{ item.rank }}</div>
+												<userImage :user_name="item.employee_name" :img_url="item.employee_img_url" width="30px" height="30px" style="margin: 0 6px;"></userImage>
+												<div>
+													<div style="font-size: 14px;">{{ item.employee_name }}</div>
+													<div class="fontColorD" style="font-size: 12px;margin-top: 5px;" v-if="item.dept_list.length>0">
+														{{item.dept_list[0].dept_name}} <span v-if="item.dept_list.length>1">...</span>
+													</div>
+												</div>
+											</div>
+											<div class="num" style="font-size: 14px;">{{ item.point }}</div>
+										</div>
+									</vue-seamless-scroll>			
+								</template>
+							</template>
+							<div v-else style="height: 200px;text-align: center;line-height: 200px;color: #fff;">
+								暂无数据
+							</div>
+						</div>
+					</div>
+					<div class="flex-3" style="margin: 0 10px;height: 100%;">
+						<div class="flex-box-ce numBox" style="margin-bottom: 10px">
+							<div class="flex-1 flex-box-v flex-center-center" style="border-radius: 12px;margin-right: 16px;background-image: linear-gradient(to top, #2537F7 0%, #258CF6 100%);height: 5rem;" @click="endVal = 5123">
+								<div style="font-size: 0.9rem;margin-bottom: 0.4rem;">今日奖分</div>
+								<div style="font-size: 2rem;font-weight: 600;letter-spacing:8px;position: relative;">
+									<countTo :startVal="startVal" separator="" :endVal="result.center.all_add_point" :duration="3000"></countTo>
+								</div>
+							</div>
+							<div class="flex-1 flex-box-v flex-center-center" style="border-radius: 12px;background-image: linear-gradient(to top, #6342E9 0%, #8468F3 100%);height: 5rem;">
+								<div style="font-size: 0.9rem;margin-bottom: 0.4rem;">今日人次</div>
+								<div style="font-size: 2rem;font-weight: 600;letter-spacing:8px">
+									<countTo :startVal="startVal" separator="" :endVal="result.center.count" :duration="3000"></countTo>
+								</div>
+							</div>
+						</div>
+						<div style="background-color: rgba(23, 30, 72, 0.3); border-radius: 8px;position: relative;">
+							<div class="boxTitle2" >积分制运用活跃度</div>
+							<div class="flex-box-ce" style="position: absolute;color:#fff;font-size:12px;right: 10px;top:72px">
+								<span style="height: 2px;width: 20px;background-color: #E6A23C;"></span>
+							基准标尺</div>
+							<div ref="ManagerSAwardChart" class="chart" style="position: relative;top: 20px;" :style="{height:h5+'px'}"></div>
+						</div>
+					</div>
+					<div class="flex-2 box">
+						<div class="boxTitle2">{{ result.event.name }}</div>
+						<div class="ranking">
+							<template v-if="result.event.list.length">
+								<vue-seamless-scroll :data="returnEvent(result.event.list)" style="margin: 10px;" class="seamless-warp" :style="{height:h6+'px'}" :class-option="classOption">
+									<div v-for="(item, index) in returnEvent(result.event.list)" :key="item.id" class="flex-box rankingItem" style="margin-bottom: 10px;background-color: #1B3A70">
+										<div class="main-right2 flex-1">
+											<div class="context">{{ $moment.unix(item.event_time).format('YYYY-MM-DD') }}-{{ item.remark.customize ? item.remark.customize : item.remark.rule }}</div>
+											<div class="flex-box flex-v-ce">
+												<div class="name flex-1">{{ item.employee_name }}</div>
+												<div style="font-size: 16px;" v-if="item.point > 0">+{{ item.point }}  <span style="color: #01EEFE;">{{ item.pt_id == 3 ? 'B分' : 'A分' }}</span></div>
+												<div style="font-size: 16px;" class="red " v-else>{{ item.point }}  <span style="color: #01EEFE;">{{ item.pt_id == 3 ? 'B分' : 'A分' }}</span></div>
+											</div>
+										</div>
+									</div>
+								</vue-seamless-scroll>
+							</template>
+							<div v-else style="height: 200px;text-align: center;line-height: 200px;color: #fff;">暂无数据</div>
+						</div>
+					</div>
+				</div>
+				<div  style="text-align: center;padding: 6px 0;font-size: 8px;color:#C0C4CC;">@功道云积分制-提供技术支持</div>
+			</div>
+			<div class="data-all" v-else style="height: 100%;">
+				<i class="el-icon-loading" style="margin-top: 15%;width: 150px;margin-bottom: 10px;color: #fff;font-size: 64px;"></i>
+				<div style="color: #fff;">管理执行难,就用功道云</div>
+			</div>
+		</div>
+		
+		<el-dialog  title="扫码登录" :close-on-click-modal="false" :close-on-press-escape="false" :show-close="false" :visible.sync="innerVisible" width="444px">
+			<div style="border-radius: 15px;border: 1px solid #f1f1f1;padding: 10px; width: 346px;box-sizing: border-box;margin: 0 auto;">
+				<div id="qrcode" ref="qrcode"></div>
+			</div>
+			<div style="margin-top: 10px;text-align: center;color: #666;">请使用钉钉APP扫描二维码,如刷新二维码请重新扫码</div>
+		</el-dialog>
+		
+		<!-- 弹窗 -->
+		<el-dialog title="选择需要展示的数据大屏" top="10vh" :visible.sync="isShowList" width="700px" :show-close="false" :close-on-click-modal="false" :close-on-press-escape="false">
+			<div>
+				<div class="flex-box-ce" style="color: #909399;font-weight: 600;padding: 12px 0;border-bottom: 1px solid #EBEEF5;">
+					<div style="width: 40px"></div>
+					<div class="flex-2">大屏名称</div>
+					<div class="flex-3">备注</div>
+				</div>
+				<div style="height: 430px;overflow-y: scroll;" class="scroll-bar">
+					<div class="flex-box-ce list-item" :class="item.code==selectCode? 'bjs':''" @click="handleSelectionChange(item)" v-for="(item,index) in screenList" :key="index">
+						<div style="width: 40px;text-align: center;position: relative;">
+						  <el-checkbox :key="item.id" v-model="item.code==selectCode"></el-checkbox>
+						  <div style="width: 40px;height: 40px;position: absolute;top: -10px;z-index: 999;"></div>
+						</div>
+						<div class="flex-2">{{item.name}}</div>
+						<div class="flex-3">{{item.remark}}</div>
+					</div>
+					<noData v-if="screenList.length==0"></noData>
+				</div>
+			</div>
+			<div class="flex-box-end" style="margin-top: 20px;position: sticky; bottom: 0; z-index: 9999;background-color: #fff;">
+				<!-- <el-button @click="isShowList = false" v-if="isShowBtn">取消</el-button> -->
+				<el-button type="primary" :disabled="isShowlog" :loading="isShowlog" @click="opneWebSocket()">确定</el-button>
+			</div>
+		</el-dialog>
+		
+	</div>
+</template>
+
+<script>
+import vueSeamlessScroll from 'vue-seamless-scroll';
+import ScaleBox from '@/components/ScaleBox.vue';
+import countTo from 'vue-count-to';
+import moment from 'moment' // 时间库
+import {setToken,generateUUID} from '@/api/auth';
+import QRCode from 'qrcodejs2';
+export default {
+	name: 'screen',
+	components: { vueSeamlessScroll, ScaleBox, countTo },
+	data() {
+		return {
+			startVal: 0,
+			endVal: 321,
+			nowTime: '',
+
+			// 长连接结果
+			result: {}, //提交的返回结果集合
+			code: '',
+			isDp:false,
+			isShowlog:false,
+			
+			h1:'',
+			h2:'',
+			h3:'',
+			errorMsg:'',
+			isShowError:false,
+			isPCa:true,
+			h4:'',
+			h5:'',
+			h6:'',
+			preview:false,
+			
+			isSetInterval:'',
+			rankingList:[],
+			
+			innerVisible:false,
+			generateId:'',//唯一标识
+			corpId:'',//企业ID
+			screenList:[],//
+			isShowList:false,
+			isShowBtn:false,
+			selectCode:'',
+		};
+	},
+	watch:{
+		innerVisible(val){
+			if(!val){
+				this.closeCode();
+			}
+		}
+	},
+	computed: {
+		classOption() {
+			return {
+				step: 0.5, // 数值越大速度滚动越快
+				limitMoveNum: 2, // 开始无缝滚动的数据量 this.dataList.length
+				hoverStop: true, // 是否开启鼠标悬停stop
+				direction: 1, // 0向下 1向上 2向左 3向右
+				openWatch: true, // 开启数据实时监控刷新dom
+				singleHeight: 0, // 单步运动停止的高度(默认值0是无缝不停止的滚动) direction => 0/1
+				singleWidth: 0, // 单步运动停止的宽度(默认值0是无缝不停止的滚动) direction => 2/3
+				waitTime: 1000 // 单步运动停止的时间(默认值1000ms)
+			};
+		}
+	},
+	created() {
+		this.isPCa=this.IsPC()
+	},
+	mounted() {
+		if(this.$route.query.corpId){ //扫码登录
+			this.corpId=window.atob(this.$route.query.corpId);
+			if(this.$getCache('codeSan')){
+				this.code=this.$getCache('codeSan')
+				this.selectCode=this.$getCache('codeSan')
+				this.getScreenList(true);
+				this.opneWebSocket();
+			}else{
+				this.ruleQRcode();
+			}
+		}
+		this.timeFormate();
+		window.addEventListener('resize', this.selfAdaption);
+	},
+	methods: {
+		isShowlists(){
+			this.isShowBtn=true;
+			this.selectCode=this.code
+			this.isShowList=true;
+		},
+		handleSelectionChange(item) {
+			this.selectCode=item.code
+		},
+		getInfo(){
+			let setLT=setInterval(()=>{
+				this.$axios('get', '/api/auth/qr',{code:this.generateId}).then(res => {
+					let info=res.data.data.info
+					if(info&&info.token){
+						this.$message.success('登录成功');
+						this.innerVisible = false;
+						setToken(info.token)
+						this.getScreenList(false);
+						clearInterval(setLT)
+					}
+				});
+			},5000)
+		},
+		getScreenList(is) {
+			this.$axios('get', '/api/integral/site/screen').then(res => {
+				let list=res.data.data.list;
+				this.screenList = res.data.data.list;
+				if(!is){
+					if(this.screenList.length==1){
+						this.selectCode=this.screenList[0].code
+						this.opneWebSocket();
+					}else{
+						this.isShowList=true;
+					}
+				}
+			})
+		},
+		// 关闭弹框,清除已经生成的二维码
+		closeCode() {
+			setTimeout(() => {
+				this.$refs.qrcode.innerHTML = '';
+			}, 150);
+		},
+		ruleQRcode() {
+			this.innerVisible = true;
+			this.generateId=generateUUID()
+			// 使用$nextTick确保数据渲染
+			this.$nextTick(() => {
+				this.getInfo();
+				this.payOrder();
+			});
+		},
+		payOrder () {// 展示二维码
+			let url = 'dingtalk://dingtalkclient/action/open_micro_app'
+			let appid = '?appId='+this.$appId
+			let corpId = '&corpId='+this.corpId
+			let page = '&page='+encodeURIComponent(`pages/arLogin/arLogin?code=${encodeURIComponent(this.generateId)}`)//encodeURIComponent('小米')
+			let urls = url+appid+corpId+page
+			var qrcode = new QRCode('qrcode', {
+				text: urls, // 二维码内容
+				width: 325,
+				height: 325,
+				render: 'table', // 设置渲染方式(有两种方式 table和canvas,默认是canvas)
+				colorDark: '#34373e', // 二维码色
+				colorLight: '#ffffff', // 背景色
+				correctLevel: QRCode.CorrectLevel.H // 容错等级,H是heigh,最高,所以二维码看起来很密
+			})
+		},
+		IsPC() {
+		    var userAgentInfo = navigator.userAgent;
+		    var Agents = ["Android", "iPhone","SymbianOS", "Windows Phone","iPad", "iPod"];
+		    var flag = true;
+		    for (var v = 0; v < Agents.length; v++) {
+		        if (userAgentInfo.indexOf(Agents[v]) > 0) {
+		            flag = false;
+		            break;
+		        }
+		    }
+		    return flag;
+		},
+		quit(){
+			this.result={};
+			this.code='';
+			this.selectCode='';
+			this.isShowBtn=false;
+			this.$removeCache('A-Token');
+			this.$removeCache('codeSan');
+			this.$socketApiTow.closewebsocket()
+			this.ruleQRcode();
+		},
+		opneWebSocket() {
+			this.isShowlog=true;
+			this.code=this.selectCode
+			this.$socketApiTow.closewebsocket()
+			if (!this.code) {
+				this.$message.error('请选择需要展示的大屏');
+				this.isShowlog=false;
+				return false;
+			}
+			this.$setCache('codeSan', this.code);
+			this.$socketApiTow.sendData({ type: 'screen', code: this.code }, this.onmessageWS);
+		},
+		onmessageWS(e) {
+			this.isShowlog=false;
+			if (e.type == 'screen') {
+				if (e.code != 1) {
+					this.result={};
+					if(e.code=='-2'||e.code=='-3'){
+						this.isShowList=false;
+						this.$alert('大屏配置已被修改或过期,请重新扫码登录', '扫码登录', {
+						  confirmButtonText: '确定',
+						  callback: action => {
+							this.quit();
+						  }
+						});
+					}
+					if(e.code=='-4'){
+						this.$message.warning('窗口链接数量超过限制,请选择其他大屏');
+						this.isShowList=true;
+					}
+				} else {
+					this.result = e.result;
+					if(!this.result.config.ranking_type||this.result.config.ranking_type=='ranking'){
+						this.getList();
+					}else{
+						this.getListTotal();
+					}
+					this.isShowList=false;
+					this.isShowError=false;
+					this.$nextTick(()=>{
+						this.isPCa? this.ManagerSAwardCharts2():this.ManagerSAwardCharts()
+						this.selfAdaption();
+					})
+				}
+			}
+			// 中途断开
+			if (e.type == 'break') {
+				this.isShowError=true;
+				this.errorMsg='网络连接失败,正在尝试重连...';
+				let setT=setTimeout(()=>{
+					this.opneWebSocket()
+					clearTimeout(setT)
+				},120000)
+			}
+		},
+		// 阶段排名
+		getList() {
+			let item=this.result.config.ranking.condition
+			let data={
+				code:this.code,
+				page: 1,
+				page_size: 10000,
+				dept_id: item.dept.toString(),
+				sort:'DESC',
+				pt_id:item.point_id,
+				exclusion:  item.exclusion.toString(),
+				position: item.position,
+			};
+			if(item.date==-1){
+				data.start_date=this.$moment().format('YYYY-MM-DD')
+				data.end_date=this.$moment().format('YYYY-MM-DD')
+			}else if(item.date==-2){
+			    let weekOfDay = parseInt(moment().format('E'));//计算今天是这周第几天
+	            data.start_date = moment().startOf('day').subtract(weekOfDay - 1, 'days').format('YYYY-MM-DD');//周一日期
+	            data.end_date=  moment().startOf('day').subtract(weekOfDay - 7, 'days').format('YYYY-MM-DD');//周日日期
+			}else if(item.date==-3){
+			    data.month=moment().format('YYYY-MM')
+			}else if(item.date==-4){
+				data.quarter=moment().format('YYYY')+moment().quarter();
+			}else if(item.date==-5){
+				data.year=moment().format('YYYY')
+			}else if(item.date==1){
+				data.start_date= moment(item.time[0]).format('YYYY-MM-DD')
+				data.end_date=moment(item.time[1]).format('YYYY-MM-DD')
+			}
+			this.$axios('get', '/api/screen/ranking', data).then(res => {
+				this.rankingList =this.$returnDeptName(res.data.data.list);
+			})
+		},
+		// 累计排名
+		getListTotal() {
+			let item=this.result.config.ranking_total.condition
+			let data={
+				code:this.code,
+				page: 1,
+				page_size: 10000,
+				dept_id: item.dept.toString(),
+				sort:'DESC',
+				pt_id:3,
+				type: 'all',
+			};
+			this.$axios('get','/api/screen/ranking',data).then(res => {
+				this.rankingList =this.$returnDeptName(res.data.data.list);
+			})
+		},
+		//管理者奖扣统计
+		ManagerSAwardCharts() {
+			//管理着奖扣统计表
+			const chart = this.$refs.ManagerSAwardChart;
+			let ratio_date=this.result.active.list.ratio_date;
+			let ratio_get=this.result.active.list.ratio_get;
+			let ratio_set=this.result.active.list.ratio_set;
+			if (chart) {
+				const myChart = this.$echarts.init(chart);
+				let option = {
+					tooltip: {
+						trigger: 'axis',
+						axisPointer: {
+							type: 'shadow'
+						},
+						formatter: function(a) {
+						  let list = [];
+						  let listItem = '';
+						  for (var i = 0; i < a.length; i++) {
+							list.push(
+							  '<i style="display: inline-block;width: 10px;height: 10px;background: ' +
+								a[i].color +
+								';margin-right: 5px;border-radius: 50%;}"></i><span style=" display:inline-block;">' +
+								a[i].seriesName +
+								'</span>&nbsp:' +
+								a[i].value+'%'
+							);
+						  }
+						  listItem = list.join('<br>');
+						  return '<div class="showBox"><div>' + a[0].name + '</div>' + listItem + '</div>';
+						}
+					},
+					legend: {
+						textStyle: {
+							color: '#fff',
+							fontSize: '12',
+							
+						},
+						left: '0%',
+						// data:['上上周','上周','本周'],
+						data: ratio_date
+					},
+					color: [
+						{
+							type: 'linear',
+							x: 0,
+							y: 0,
+							x2: 0,
+							y2: 1,
+							colorStops: [{ offset: 0, color: '#F8E908' },{ offset: 1, color: '#19286D' }
+							]
+						},
+						{
+							type: 'linear',
+							x: 0,
+							y: 0,
+							x2: 0,
+							y2: 1,
+							colorStops: [{ offset: 0, color: '#00F8FF' }, { offset: 1, color: '#19286D' }]
+						},
+						{
+							type: 'linear',
+							x: 0,
+							y: 0,
+							x2: 0,
+							y2: 1,
+							colorStops: [{ offset: 0, color: '#B117F1' }, { offset: 1, color: '#19286D' }]
+						}
+					],
+					xAxis: {
+						type: 'category',
+						axisLabel: {
+							show: true,
+							textStyle: {
+								color: '#fff',
+								fontSize: '12'
+							}
+						},
+						data: ['获得积分的人员占比', '执行奖扣的管理者占比']
+					},
+					yAxis: {
+						type: 'value',
+						max: 100, //取100为最大刻度
+						axisLabel: {
+							show: true,
+							formatter: '{value}%',
+							textStyle: {
+								color: '#fff'
+							}
+						}
+					},
+
+					series: [
+						{
+							type: 'bar',
+							name: ratio_date[0],
+							stack: 'Total',
+							label: {
+								show: true,
+								position: 'top',
+								color:'#fff',
+								formatter: '{c}%',
+								fontSize: '12'
+							},
+							data: [ratio_get[0], ratio_set[0]]
+						},
+						{
+							type: 'bar',
+							label: {
+								show: true,
+								position: 'top',
+								color:'#fff',
+								formatter: '{c}%',
+								fontSize: '12'
+							},
+							name: ratio_date[1],
+							data: [ratio_get[1], ratio_set[1]]
+						},
+						{
+							type: 'bar',
+							label: {
+								show: true,
+								position: 'top',
+								color:'#fff',
+								formatter: '{c}%',
+								fontSize: '12'
+							},
+							name: ratio_date[2],
+							data: [ratio_get[2], ratio_set[2]],
+						},
+						{
+							type: 'bar',
+							name: '大啊',
+							data: [],
+							markLine: {
+								silent: true,
+								data: [
+									{
+										silent: false, //鼠标悬停事件  true没有,false有
+										lineStyle: {
+											//警戒线的样式  ,虚实  颜色
+											type: 'solid',
+											color: '#E6A23C'
+										},
+										label: {
+											position: 'end',
+											formatter: '标尺',
+											fontSize: '10'
+										},
+										// yAxis: 80
+										yAxis: this.result.active.base_ratio // 警戒线的标注值,可以有多个yAxis,多条警示线   或者采用   {type : 'average', name: '平均值'},type值有  max  min  average,分为最大,最小,平均值
+									}
+								]
+							}
+						},
+					]
+				};
+				myChart.setOption(option);
+			}
+		},
+		//管理者奖扣统计
+		ManagerSAwardCharts2() {
+			//管理着奖扣统计表
+			const chart = this.$refs.ManagerSAwardChart;
+			let ratio_date=this.result.active.list.ratio_date;
+			let ratio_get=this.result.active.list.ratio_get;
+			let ratio_set=this.result.active.list.ratio_set;
+			if (chart) {
+				const myChart = this.$echarts.init(chart);
+				let option = {
+					tooltip: {
+						trigger: 'axis',
+						axisPointer: {
+							type: 'shadow'
+						},
+						formatter: function(a) {
+						  let list = [];
+						  let listItem = '';
+						  for (var i = 0; i < a.length; i++) {
+							list.push(
+							  '<i style="display: inline-block;width: 10px;height: 10px;background: ' +
+								a[i].color +
+								';margin-right: 5px;border-radius: 50%;}"></i><span style=" display:inline-block;">' +
+								a[i].seriesName +
+								'</span>&nbsp:' +
+								a[i].value+'%'
+							);
+						  }
+						  listItem = list.join('<br>');
+						  return '<div class="showBox"><div>' + a[0].name + '</div>' + listItem + '</div>';
+						}
+					},
+					legend: {
+						textStyle: {
+							color: '#fff',
+							fontSize: '16',
+						},
+						left: '3%',
+						// data:['上上周','上周','本周'],
+						data: ratio_date
+					},
+					color: [
+						{
+							type: 'linear',
+							x: 0,
+							y: 0,
+							x2: 0,
+							y2: 1,
+							colorStops: [{ offset: 0, color: '#F8E908' },{ offset: 1, color: '#19286D' }
+							]
+						},
+						{
+							type: 'linear',
+							x: 0,
+							y: 0,
+							x2: 0,
+							y2: 1,
+							colorStops: [{ offset: 0, color: '#00F8FF' }, { offset: 1, color: '#19286D' }]
+						},
+						{
+							type: 'linear',
+							x: 0,
+							y: 0,
+							x2: 0,
+							y2: 1,
+							colorStops: [{ offset: 0, color: '#B117F1' }, { offset: 1, color: '#19286D' }]
+						}
+					],
+					xAxis: {
+						type: 'category',
+						axisLabel: {
+							show: true,
+							textStyle: {
+								color: '#fff',
+								fontSize: '16'
+							}
+						},
+						data: ['获得积分的人员占比', '执行奖扣的管理者占比']
+					},
+					yAxis: {
+						type: 'value',
+						max: 100, //取100为最大刻度
+						axisLabel: {
+							show: true,
+							formatter: '{value}%',
+							textStyle: {
+								color: '#fff'
+							}
+						}
+					},
+		
+					series: [
+						{
+							type: 'bar',
+							name: ratio_date[0],
+							label: {
+								show: true,
+								position: 'top',
+								formatter: '{c}%',
+								color:'#fff',
+								fontSize: '14'
+							},
+							data: [ratio_get[0], ratio_set[0]]
+						},
+						{
+							type: 'bar',
+							name: ratio_date[1],
+							label: {
+								show: true,
+								position: 'top',
+								formatter: '{c}%',
+								color:'#fff',
+								fontSize: '14'
+							},
+							data: [ratio_get[1], ratio_set[1]]
+						},
+						{
+							type: 'bar',
+							name: ratio_date[2],
+							label: {
+								show: true,
+								position: 'top',
+								formatter: '{c}%',
+								color:'#fff',
+								fontSize: '14'
+							},
+							data: [ratio_get[2], ratio_set[2]],
+						},
+						{
+							type: 'bar',
+							name: '大啊',
+							data: [],
+							markLine: {
+								silent: true,
+								data: [
+									{
+										silent: false, //鼠标悬停事件  true没有,false有
+										lineStyle: {
+											//警戒线的样式  ,虚实  颜色
+											type: 'solid',
+											color: '#E6A23C'
+										},
+										label: {
+											position: 'end',
+											formatter: '标尺',
+											fontSize: '14'
+										},
+										// yAxis: 80
+										yAxis: this.result.active.base_ratio // 警戒线的标注值,可以有多个yAxis,多条警示线   或者采用   {type : 'average', name: '平均值'},type值有  max  min  average,分为最大,最小,平均值
+									}
+								]
+							}
+						},
+					]
+				};
+				myChart.setOption(option);
+			}
+		},
+		//echarts自适应
+		selfAdaption() {
+			if(document.getElementById('left')){
+				let height=document.getElementById('left').offsetHeight;
+				this.h1=height-344;
+				this.h2=height-358;
+				this.h3=height-108;
+				this.h4=height-234;
+				this.h5=height-168;
+				this.h6=height-72;
+				this.$nextTick(()=>{
+					var myChart1 = this.$echarts.init(this.$refs.ManagerSAwardChart);
+					myChart1.resize();
+				})
+			}
+		},
+		timeFormate() {
+			let timeStamp=new Date();
+			let year = new Date(timeStamp).getFullYear();
+			let month = new Date(timeStamp).getMonth() + 1 < 10 ? '0' + (new Date(timeStamp).getMonth() + 1) : new Date(timeStamp).getMonth() + 1;
+			let date = new Date(timeStamp).getDate() < 10 ? '0' + new Date(timeStamp).getDate() : new Date(timeStamp).getDate();
+			let hh = new Date(timeStamp).getHours() < 10 ? '0' + new Date(timeStamp).getHours() : new Date(timeStamp).getHours();
+			let mm = new Date(timeStamp).getMinutes() < 10 ? '0' + new Date(timeStamp).getMinutes() : new Date(timeStamp).getMinutes();
+			let ss = new Date(timeStamp).getSeconds() < 10 ? '0' + new Date(timeStamp).getSeconds() : new Date(timeStamp).getSeconds();
+			let week = new Date(timeStamp).getDay();
+			let weeks = ['日', '一', '二', '三', '四', '五', '六'];
+			let getWeek = '星期' + weeks[week];
+			this.nowTime = year + '年' + month + '月' + date + '日'+' '+getWeek;
+			// this.nowTime = year + '年' + month + '月' + date + '日' + ' ' + hh + ':' + mm + ':' + ss + ' ' + getWeek;
+		}, // 实时刷新当前时间,格式化
+		nowTimes() {
+			this.isSetInterval=setInterval(this.timeFormate, 1000);
+		},
+		clear() {
+			clearInterval(this.isSetInterval);
+			this.nowTimes = null;
+		},
+		fullScreen(){
+			if(this.isDp){
+				this.exitScreen();
+				this.isDp=false;
+				return false
+			}
+			this.isDp=true;
+			var el = document.documentElement;
+			var rfs = el.requestFullScreen || el.webkitRequestFullScreen || el.mozRequestFullScreen || el.msRequestFullscreen;      
+				if(typeof rfs != "undefined" && rfs) {
+					rfs.call(el);
+				};
+			  return;
+		},
+		exitScreen(){
+			if (document.exitFullscreen) {  
+				document.exitFullscreen();  
+			}  
+			else if (document.mozCancelFullScreen) {  
+				document.mozCancelFullScreen();  
+			}  
+			else if (document.webkitCancelFullScreen) {  
+				document.webkitCancelFullScreen();  
+			}  
+			else if (document.msExitFullscreen) {  
+				document.msExitFullscreen();  
+			} 
+			if(typeof cfs != "undefined" && cfs) {
+				cfs.call(el);
+			}
+		},
+		returnEvent(list) {
+			return list;
+		},
+		ranking(arr, index) {
+			if (index == 1) {
+				return arr.filter(item => {
+					return item.rank < 4;
+				});
+			} else {
+				return arr.filter(item => {
+					return item.rank >= 4;
+				});
+			}
+		},
+	},
+	beforeDestroy() {
+		window.removeEventListener('resize', this.selfAdaption); //取消echarts自适应
+		this.clear();
+	}
+};
+</script>
+
+<style scoped>
+.list-item{
+	padding: 12px 0;
+	border-bottom: 1px solid #EBEEF5;
+	cursor: pointer;
+}
+.list-item:hover{
+	background-color: #F5F7FA;
+}
+.back{
+	background-image: url('assets/image/shuju.jpg');
+	background-position: center center;
+	background-size: cover;
+	background-repeat: no-repeat;
+}
+.bjs{
+	background-color: #F5F7FA;
+}
+.da{
+	font-size: 20px;
+	font-weight: 700;
+}	
+.index2 img{
+	width: 1.4rem !important;
+	height: 1.4rem !important;
+}	
+.data-all{
+	text-align: center;
+}	
+ html,body{
+	  height: 100%;
+ }
+.barg {
+	position: absolute;
+}
+.barg div {
+	width: 1.4rem;
+	height: 2.8rem;
+	background-color: #1d2242;
+	margin: 0 1rem;
+	top: ;
+}
+.boxTitle {
+	padding: 0.6rem 1.4rem;
+	color: #fff;
+	font-size: 22px;
+	position: relative;
+	background-color: #16215F;
+	display: inline-block;
+	border-radius: 25px;
+	margin-left: 16px;
+	padding-left: 50px;
+	margin-top: 30px;
+	box-shadow: 2px 0px 2px #ccc;
+}
+.boxTitle::before {
+	content: ' ';
+	position: absolute;
+	height: 18px;
+	width: 18px;
+	background-color: #F8E908;
+	border-radius: 25px;
+	top: 16px;
+	left: 20px;
+}
+.boxTitle::after {
+	content: ' ';
+	position: absolute;
+	height: 3px;
+	width: 150px;
+	background-color: #03F4FD;
+	top: -20px;
+	left: 0px;
+	border-radius: 2px;
+}
+
+.boxTitle2 {
+	padding:0.4rem 0.8rem;
+	color: #fff;
+	font-size: 14px;
+	position: relative;
+	background-color: #16215F;
+	display: inline-block;
+	border-radius: 25px;
+	margin-left: 10px;
+	padding-left: 30px;
+	margin-top: 20px;
+	box-shadow: 2px 0px 2px #ccc;
+}
+.boxTitle2::before {
+	content: ' ';
+	position: absolute;
+	height: 12px;
+	width: 12px;
+	background-color: #F8E908;
+	border-radius: 25px;
+	top: 10px;
+	left: 10px;
+}
+.boxTitle2::after {
+	content: ' ';
+	position: absolute;
+	height: 3px;
+	width: 120px;
+	background-color: #03F4FD;
+	top: -14px;
+	left: 0px;
+	border-radius: 2px;
+}
+.chart {
+	height: 480px;
+}
+.main-right {
+	margin-left: 5px;
+}
+.main-right .name {
+	font-size: 18px;
+	color: #0DD3DB;
+}
+.main-right .context {
+	overflow: hidden;
+	text-overflow: ellipsis;
+	display: -webkit-box;
+	-webkit-line-clamp: 2;
+	-webkit-box-orient: vertical;
+	font-size: 20px;
+	height: 50px;
+	margin-bottom: 6px;
+}
+.main-right2 .date {
+	color: #909399;
+}
+.main-right2 {
+	margin-left: 5px;
+}
+.main-right2 .name {
+	font-size: 14px;
+	color: #0DD3DB;
+}
+.main-right2 .context {
+	overflow: hidden;
+	text-overflow: ellipsis;
+	display: -webkit-box;
+	-webkit-line-clamp: 2;
+	-webkit-box-orient: vertical;
+	height: 40px;
+	font-size: 16px;
+	margin-bottom: 5px;
+}
+.main-right .date {
+	color: #909399;
+}
+.numBox .flex-1 {
+	height: 13rem;
+	text-align: center;
+	color: #fff;
+	padding: 0.8rem;
+}
+.seamless-warp {
+	/* padding: 10px; */
+	overflow: hidden;
+}
+.num {
+	font-size: 24px;
+	font-weight: 700;
+	color: #9ecef8;
+}
+.ranking {
+	/* height: 100%; */
+}
+.rankingItem {
+	color: #fff;
+	border-radius: 8px;
+	padding: 10px;
+}
+.rankingItem img {
+	width: 30px;
+	height: 30px;
+}
+.el-icon-help {
+	font-size: 26px;
+	margin-left: 10px;
+}
+.logo {
+	width: 2.1rem;
+	height: 2.1rem;
+	margin-right: 10px;
+	border-radius: 3px;
+}
+.box {
+	background-color: rgba(23, 30, 72, 0.6);
+	border-radius: 8px;
+	height: 100%;
+}
+.screenBox {
+	width: 100%;
+	height: 100%;
+	min-width: 1000px;
+}
+.zhuColor {
+	background-color: #021D3B;
+	box-shadow: 0px 2px 2px #01EEFE;
+	position: relative;
+	color: #fff;
+}
+.title span {
+	color: #fff;
+	font-size: 1.8rem;
+	font-weight: 550;
+	position: relative;
+	top: -1.8rem;
+}
+.title::after {
+	content: ' ';
+	position: absolute;
+	top: 0px;
+	right: -15px;
+	border-width: 20px 15px;
+	border-style: solid;
+	border-color: transparent transparent #021D3B transparent;
+	transform: rotate(180deg);
+}
+.title::before {
+	content: ' ';
+	position: absolute;
+	top: 0px;
+	left: -15px;
+	border-width: 20px 15px;
+	border-style: solid;
+	transform: rotate(180deg);
+	border-color: transparent transparent #021D3B transparent;
+}
+.title2 span {
+	color: #fff;
+	font-size: 2rem;
+	font-weight: 550;
+	position: relative;
+	top: -2.1rem;
+}
+.title2::after {
+	content: ' ';
+	position: absolute;
+	top: 0px;
+	right: -7px;
+	border-width: 14px 7px;
+	border-style: solid;
+	border-color: transparent transparent #021D3B transparent;
+	transform: rotate(180deg);
+}
+.title2::before {
+	content: ' ';
+	position: absolute;
+	top: 0px;
+	left: -7px;
+	border-width: 14px 7px;
+	border-style: solid;
+	transform: rotate(180deg);
+	border-color: transparent transparent #021D3B transparent;
+}
+</style>

+ 23 - 13
src/views/abPoint/apply_list.vue

@@ -6,20 +6,24 @@
 			<el-tab-pane :disabled="table_loading" label="被驳回" name="refuse"></el-tab-pane>
 			<el-tab-pane :disabled="table_loading" label="已复核" name="review"></el-tab-pane>
 		</el-tabs>
-
-		<div class="flex-box-ce" style="margin-bottom: 15px;">
-			<div class="flex-1">
+		<FormBox>
+			<template slot="header">
 				<el-button type="primary" @click="dialogVisible = true">申请积分</el-button>
 				<span class="orange" style="padding-left: 10px;" v-if="config.event_review_status&&config.event_apply_review">复核开启后,积分需管理员复核后才计入排名和统计</span>
-			</div>
-			<el-select v-if="tabs == 'review'" style="width: 100px;margin-right: 10px;" size="medium" v-model="dc_status"  placeholder="请选择复核状态">
-				<el-option v-for="item in dcArr" :key="item.name" :label="item.name" :value="item.id"></el-option>
-			</el-select>
-			<el-input style="width: 250px;" v-model="formData.keyword" size="medium" placeholder="输入申请内容" @keyup.enter.native="searchFun">
-				<el-button slot="append" @click="searchFun" size="medium" icon="el-icon-search"></el-button>
-			</el-input>
-		</div>
-
+			</template>
+			<template slot="footer">
+				<el-form ref="formData" :inline="true" :model="formData" label-width="70px">
+					<el-form-item v-if="tabs == 'review'" label="复核状态">
+						<el-select style="width: 100px;" size="medium" v-model="dc_status" placeholder="请选择复核状态">
+							<el-option v-for="item in dcArr" :key="item.name" :label="item.name" :value="item.id"></el-option>
+						</el-select>
+					</el-form-item>
+					<el-form-item  label="内容搜索">
+						<el-input style="width: 217px;" v-model="formData.keyword" clearable size="medium" placeholder="输入申请内容"></el-input>
+					</el-form-item>
+				</el-form>
+			</template>
+		</FormBox>
 		<el-table :data="dataList" stripe fit v-loading="table_loading" v-if="tabs == 'complete'" @row-click="openDetail">
 			<el-table-column label="申请内容" prop="remark">
 				<template slot-scope="scope">
@@ -202,7 +206,6 @@
 			</div>
 		</el-drawer>
 		
-		
 		<el-drawer title="事件详情" :visible.sync="detail_popup" ref="drawer" :with-header="false" :width="'500px'" direction="rtl">
 			<div class="drawer_title flex-box-ce">
 				<span class="flex-1">事件详情</span>
@@ -341,6 +344,7 @@
 
 <script>
 import moment from 'moment';
+import {_debounce} from '@/api/auth';
 import Review from '@/components/Review';
 import EmployeeSelector from '@/components/EmployeeSelector.vue';
 import applicationIntegrationPopup from '@/components/applicationIntegrationPopup';
@@ -411,6 +415,12 @@ export default {
 		dc_status(){
 			this.searchFun();
 		},
+		'formData.keyword':{
+			deep: true,
+			handler: _debounce(function(val) {
+				this.searchFun();
+			}, 1000)
+		}
 	},
 	mounted() {
 		this.cheakAx()

+ 28 - 21
src/views/abPoint/award_punish.vue

@@ -6,25 +6,32 @@
 			<el-tab-pane :disabled="table_loading"  label="被驳回" name="refuse"></el-tab-pane>
 			<el-tab-pane :disabled="table_loading" label="已复核" name="review"></el-tab-pane>
 		</el-tabs>
-		<div class="flex-box-ce" style="margin-bottom: 15px;">
-			<div class="flex-1">
-				<el-button type="primary" @click="point_b">奖扣B分</el-button>
-				<el-button type="primary" @click="point_a" plain>奖扣A分</el-button>
-				<span class="orange" style="padding-left: 10px;" v-if="config.event_review_status&&config.event_entry_review">复核开启后,积分需管理员复核后才计入排名和统计</span>
-			</div>
-			<div class="flex-box-ce">
-				<el-select  v-if="tabs=='success'" size="medium" v-model="select_employee_id" filterable clearable placeholder="请输入或选择人员" style="width: 200px;margin-right: 10px;">
-					<el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
-				</el-select>
-				<el-select v-if="tabs == 'review'" style="width: 100px;margin-right: 10px;" size="medium" v-model="dc_status"  placeholder="请选择复核状态">
-					<el-option v-for="item in dcArr" :key="item.name" :label="item.name" :value="item.id"></el-option>
-				</el-select>
-				<el-input v-model="keyword" style="width: 200px;" size="medium" :placeholder="tabs=='success'||tabs == 'review'?'输入内容':'输入员工姓名/事件内容'" ></el-input>
-			</div>
-		</div>
-
+		<FormBox >
+			<template slot="header">
+					<el-button type="primary" @click="point_b">奖扣B分</el-button>
+					<el-button type="primary" @click="point_a" plain>奖扣A分</el-button>
+					<span class="orange" style="padding-left: 10px;" v-if="config.event_review_status&&config.event_entry_review">复核开启后,积分需管理员复核后才计入排名和统计</span>
+			</template>
+			<template slot="footer">
+				<el-form ref="formData" :inline="true" :model="formData" label-width="70px">
+					<el-form-item label="复核状态" v-if="tabs == 'review'">
+						<el-select style="width: 100px;" size="medium" v-model="dc_status"  placeholder="请选择复核状态">
+							<el-option v-for="item in dcArr" :key="item.name" :label="item.name" :value="item.id"></el-option>
+						</el-select>
+					</el-form-item>
+					<el-form-item label="人员" v-if="tabs=='success'">
+						<el-select  size="medium" v-model="select_employee_id" filterable clearable placeholder="请输入或选择人员" style="width: 200px;">
+							<el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
+						</el-select>
+					</el-form-item>
+					<el-form-item label="搜索">
+						<el-input v-model="keyword" style="width: 200px;" clearable size="medium" :placeholder="tabs=='success'||tabs == 'review'?'输入内容':'输入人员姓名/事件内容'" ></el-input>
+					</el-form-item>
+				</el-form>
+			</template>
+		</FormBox>
 		<el-table v-if="tabs == 'success'||tabs == 'review'" res="table1" :data="dataList" stripe fit v-loading="table_loading" @row-click="open_detail">
-			<el-table-column label="姓名" prop="employee_id" align="left" width="250">
+			<el-table-column label="人员" prop="employee_id" align="left" width="250">
 				<template slot-scope="scope">
 					<div class="flex-box flex-contet-conter" >
 						<userImage :img_url="scope.row.employee_img_url" :user_name="scope.row.employee_name" width="50px" height="50px"></userImage>
@@ -68,7 +75,7 @@
 		</el-table>
 
 		<el-table v-else :data="dataList2" res="table2" stripe fit v-loading="table_loading" @row-click="open_detail1">
-			<el-table-column label="姓名" prop="employee_id" align="left">
+			<el-table-column label="人员" prop="employee_id" align="left">
 				<template slot-scope="scope">
 					<div class="flex-box flex-contet-conter">
 						<userImage :img_url="scope.row.employee_img_url" :user_name="scope.row.employee_name" width="50px" height="50px"></userImage>
@@ -188,7 +195,7 @@
 					<div v-if="detail_info.dc_remark"><Review :process="detail_info.dc_remark.flow" :status="detail_info.dc_status"></Review></div>
 				</template>
 				<template v-if="tabs != 'review'">
-					<div class="btn_danger flex-box flex-center-center" v-if="detail_info.process.length==1&&(detail_info.event_type==3||detail_info.event_type==4)">
+					<div class="btn_danger flex-box flex-center-center" v-if="detail_info.recorder_id==userId&&(detail_info.event_type==3||detail_info.event_type==4)">
 					  <el-button type="danger" class="danger" @click="revocation" :loading="cx_loading">撤销</el-button>
 					</div>
 				</template>
@@ -268,7 +275,7 @@
 				</div>
 			</div>
 		</el-drawer>
-
+		
 		<bonusPointsPopup :isBreak="isBreak" :title="popuTitle" :visible.sync="popupVisible" :ruleOnoff="ruleOnoff" :refresh.sync="refreshData" :integralType.sync="integralType">
 			<div style=" position: absolute;top: 0px;right: 0;" class="orange">最多只能选择30人</div>
 		</bonusPointsPopup>

+ 51 - 44
src/views/award/grantAward.vue

@@ -1,50 +1,53 @@
 <template>
 	<div>
 		<div class="all padding-20">
-			<el-form ref="form" :inline="true">
-				<el-form-item label="人员">
-					<el-select size="medium" multiple v-model="formData.employee_ids"  filterable clearable placeholder="请输入或选择人员" style="width: 200px;">
-						<el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
-					</el-select>
-				</el-form-item>
-				<el-form-item label="发放状态">
-					<el-select class="date-picker-width" size="medium" v-model="formData.has_ticket">
-						<el-option v-for="item in dcArr" :key="item.name" :label="item.name" :value="item.id"></el-option>
-					</el-select>
-				</el-form-item>
-				<el-form-item label="相关性" v-if="employeeOrdept">
-					<el-select class="date-picker-width" size="medium" v-model="formData.iSrecorder">
-						<el-option v-for="item in source_type" :key="item.name" :label="item.name" :value="item.id"></el-option>
-					</el-select>
-				</el-form-item>
-				<el-form-item label="时间">
-					<el-date-picker
-						v-model="time_slot"
-						type="daterange"
-						size="medium"
-						value-format="yyyy-MM-dd"
-						range-separator="至"
-						start-placeholder="开始日期"
-						end-placeholder="结束日期"
-					></el-date-picker>
-				</el-form-item>
-				<el-form-item>
-					<el-input size="medium" v-model="formData.keyword" placeholder="输入关键字查找" maxlength="20" clearable></el-input>
-				</el-form-item>
-				<el-form-item>
-					<el-button size="medium" :disabled="selectionID.length==0? true:false" @click="deleteInBatches()" type="primary">批量发放奖票</el-button>
-				</el-form-item>
-
-				<div class="diy-tip1" style="margin-bottom: 10px;">
-					<div>当前数据:{{ total }}条</div>
-				</div>
-			</el-form>
-
+			<FormBox  :isShowHeader="false">
+				<template #footer>
+					<el-form ref="form" :inline="true" label-width="70PX">
+						<el-form-item label="发生时间">
+							<el-date-picker
+								v-model="time_slot"
+								type="daterange"
+								size="medium"
+								value-format="yyyy-MM-dd"
+								range-separator="至"
+								start-placeholder="开始日期"
+								end-placeholder="结束日期"
+							></el-date-picker>
+						</el-form-item>
+						<el-form-item label="发放状态">
+							<el-select class="date-picker-width" size="medium" v-model="formData.has_ticket">
+								<el-option v-for="item in dcArr" :key="item.name" :label="item.name" :value="item.id"></el-option>
+							</el-select>
+						</el-form-item>
+						<el-form-item label="相关性" v-if="employeeOrdept">
+							<el-select class="date-picker-width" size="medium" v-model="formData.iSrecorder">
+								<el-option v-for="item in source_type" :key="item.name" :label="item.name" :value="item.id"></el-option>
+							</el-select>
+						</el-form-item>
+						<el-form-item label="人员">
+							<el-select size="medium" multiple v-model="formData.employee_ids"  filterable clearable placeholder="请输入或选择人员" style="width: 200px;">
+								<el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
+							</el-select>
+						</el-form-item>
+						<el-form-item label="内容搜索">
+							<el-input size="medium" v-model="formData.keyword" placeholder="输入关键字查找" maxlength="20" clearable></el-input>
+						</el-form-item>
+					</el-form>
+				</template>
+			</FormBox>
+			<div style="margin: 10px 0;">
+				<el-button size="medium" :disabled="selectionID.length==0? true:false" @click="deleteInBatches()" type="primary">批量发放奖票</el-button>
+			</div>
+			
+			<div class="diy-tip1" style="margin-bottom: 10px;">
+				<div>当前数据:{{ total }}条</div>
+			</div>
 			<!-- 表格 -->
 			<div>
 				<el-table :data="list" style="width: 100%;" v-loading="loading"  @selection-change="deleteEvents">
 					<el-table-column  type="selection" width="55" :selectable="selectable"></el-table-column>
-					<el-table-column prop="employee_name" label="姓名" align="left" min-width="150px">
+					<el-table-column prop="employee_name" label="人员" align="left" min-width="150px">
 						<template slot-scope="scope">
 							<div class="flex-box">
 								<userImage :user_name="scope.row.employee_name" :img_url="scope.row.employee_img_url" width="50px" height="50px"></userImage>
@@ -68,7 +71,7 @@
 							<span :class="scope.row.point < 0 ? 'green' : 'red'">{{ scope.row.point }} {{ point_name(scope.row.pt_id) }}</span>
 						</template>
 					</el-table-column>
-					<el-table-column prop="create_time" label="事件发生时间" align="left" min-width="140px">
+					<el-table-column prop="create_time" label="发生时间" align="left" min-width="140px">
 						<template slot-scope="scope">
 							{{ scope.row.event_time }}
 						</template>
@@ -278,6 +281,7 @@
 import Steps from '@/components/Steps';
 import Review from '@/components/Review';
 import toLead from '@/components/toLead';
+import {_debounce} from '@/api/auth';
 export default {
 	data() {
 		return {
@@ -330,9 +334,12 @@ export default {
 			this.formData.page = 1;
 			this.get_integral_list();
 		},
-		'formData.keyword'(val) {
-			this.formData.page = 1;
-			this.get_integral_list();
+		'formData.keyword': {
+			deep: true,
+			handler: _debounce(function(val) {
+				this.formData.page = 1;
+				this.get_integral_list();
+			}, 1000)
 		},
 		'formData.status'(val) {
 			this.formData.page = 1;

+ 31 - 27
src/views/award/lotteryTicket_statistics.vue

@@ -1,32 +1,33 @@
 <template>
   <div>
-    <div class="flex-box flex-d-center">
-	  <div class="flex-box-ce">
-		  <div><el-date-picker v-model="formData.month" :clearable="false" :disabled="checked" type="month" placeholder="请选择月份" value-format="yyyy-MM"></el-date-picker></div>
-		  <div style="width:200px;margin: 0 10px;">
-		    <el-cascader
-		      v-model="dept_name"
-		      :options="dept_tree"
-		      :props="{
-		        multiple: true,
-		        value: 'id',
-		        label: 'name',
-		        children: '_child',
-		      }"
-		      ref="deptRef"
-		      filterable
-		      collapse-tags
-		      placeholder="全公司"
-		      clearable
-		    ></el-cascader>
-		  </div>
-		  <div class="search">
-		    <el-input v-model="formData.keyword" clearable placeholder="姓名" maxlength="20"></el-input>
-		  </div>
-		  <div style="margin: 0 10px;"><el-checkbox v-model="checked">查看所有累计奖票</el-checkbox></div>
-	  </div>
-	  <!-- <div><el-button type="primary" plain size="medium" style="margin-left:20px" @click="$router.push({path:'print'})">打印奖票</el-button></div> -->
-    </div>
+	<FormBox  :isShowHeader="false">
+		<template #footer>
+			<el-form ref="form" :inline="true" label-width="70PX">
+				<el-form-item label="时间">
+					<el-date-picker size="medium" v-model="formData.month" :clearable="false" :disabled="checked" type="month" placeholder="请选择月份" value-format="yyyy-MM"></el-date-picker>
+				</el-form-item>
+				<el-form-item label="部门">
+					<el-cascader
+					size="medium"
+					  v-model="dept_name"
+					  :options="dept_tree"
+					  :props="{ multiple: true, value: 'id', label: 'name', children: '_child'}"
+					  ref="deptRef"
+					  filterable
+					  collapse-tags
+					  placeholder="全公司"
+					  clearable
+					></el-cascader>
+				</el-form-item>
+				<el-form-item label="人员搜索">
+					<el-input size="medium" v-model="formData.keyword" clearable placeholder="请输入人员姓名" maxlength="20"></el-input>
+				</el-form-item>
+				<el-form-item>
+					<el-checkbox v-model="checked" border size="medium">查看所有累计奖票</el-checkbox>
+				</el-form-item>
+			</el-form>
+		</template>
+	</FormBox>  
 
     <div class="all">
       <div>
@@ -510,6 +511,9 @@ export default {
 .search ::v-deep .el-input-group__append:active {
   background: #26a2ff;
 }
+.el-checkbox.is-bordered.el-checkbox--medium {
+	padding: 9px 20px 7px 10px;
+}
 .search ::v-deep .el-input-group__append:active .el-icon-search {
   color: #fff;
 }

+ 25 - 17
src/views/award/myAward.vue

@@ -1,12 +1,20 @@
 <template>
   <div>
-    <div class="flex-box flex-d-center">
-	  <div class="flex-box-ce">
-		  <div><el-date-picker v-model="month" :disabled="checked" type="month" :clearable="false" placeholder="请选择月份" value-format="yyyy-MM"></el-date-picker></div>
-		  <div class="search"><el-input v-model="keyword" clearable  placeholder="内容搜索" maxlength="20"></el-input></div>
-		  <div><el-checkbox v-model="checked">查看所有累计奖票</el-checkbox></div>
-	  </div>
-    </div>
+	  <FormBox  :isShowHeader="false">
+	  	<template #footer>
+	  		<el-form ref="form" :inline="true" label-width="70PX">
+	  			<el-form-item label="时间">
+					<el-date-picker size="medium" v-model="month" :disabled="checked" type="month" :clearable="false" placeholder="请选择月份" value-format="yyyy-MM"></el-date-picker>
+	  			</el-form-item>
+	  			<el-form-item label="内容搜索">
+	  				<el-input size="medium" v-model="keyword" clearable placeholder="内容搜索"  maxlength="20"></el-input>
+	  			</el-form-item>
+				<el-form-item>
+					<el-checkbox v-model="checked" border size="medium">查看所有累计奖票</el-checkbox>
+				</el-form-item>
+	  		</el-form>
+	  	</template>
+	  </FormBox>
 
     <div class="all">
       <div>
@@ -302,6 +310,12 @@ export default {
 </script>
 
 <style scoped lang="scss">
+	.all{
+	  margin-top:10px;
+	  padding:10px 20px 0px 20px;
+	  min-height: calc(100vh - 204px);
+	  
+	}
 	.drawer_title {
 		font-size: 18px;
 		padding: 20px;
@@ -364,13 +378,7 @@ export default {
 .search ::v-deep .el-input-group__append:active .el-icon-search {
   color: #fff;
 }
-</style>
-<style scoped="scoped" lang="scss">
-
-  .all{
-    margin-top:10px;
-    padding:10px 20px 0px 20px;
-    min-height: calc(100vh - 204px);
-    
-  }
-</style>
+.el-checkbox.is-bordered.el-checkbox--medium {
+	padding: 9px 20px 7px 10px;
+}
+</style>

+ 17 - 16
src/views/award/myGrantAward.vue

@@ -1,16 +1,22 @@
 <template>
   <div>
-    <div class="flex-box flex-d-center">
-	  <div class="flex-box-ce">
-		  <div>
-			  <el-date-picker  value-format="yyyy-MM-dd" :picker-options="pickerOptions" v-model="date" type="daterange" range-separator="至" start-placeholder="开始日期"	end-placeholder="结束日期"> </el-date-picker>
-		  </div>
-		  <el-select style="margin: 0 10px;" v-model="formData.employee_id" size="medium" filterable placeholder="请输入或选择人员" clearable>
-		  	<el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
-		  </el-select>
-		  <div class="search"><el-input v-model="formData.keyword" clearable placeholder="内容搜索"  maxlength="20"></el-input></div>
-	  </div>
-    </div>
+	  <FormBox  :isShowHeader="false">
+	  	<template #footer>
+	  		<el-form ref="form" :inline="true" label-width="70PX">
+	  			<el-form-item label="时间">
+					<el-date-picker size="medium" value-format="yyyy-MM-dd" :picker-options="pickerOptions" v-model="date" type="daterange" range-separator="至" start-placeholder="开始日期"	end-placeholder="结束日期"> </el-date-picker>
+	  			</el-form-item>
+	  			<el-form-item label="人员">
+					  <el-select style="margin: 0 10px;" v-model="formData.employee_id" size="medium" filterable placeholder="请输入或选择人员" clearable>
+						<el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
+					  </el-select>
+	  			</el-form-item>
+	  			<el-form-item label="内容搜索">
+	  				<el-input size="medium" v-model="formData.keyword" clearable placeholder="内容搜索"  maxlength="20"></el-input>
+	  			</el-form-item>
+	  		</el-form>
+	  	</template>
+	  </FormBox>
 
     <div class="all">
       <div>
@@ -21,11 +27,6 @@
 						<userImage :img_url="scope.row.employee_img_url" :user_name="scope.row.employee_name" width="50px" height="50px"></userImage>
 						<div style="height: 50px;padding-left: 10px;" class="flex-box-v flex-h-zhu">
 							<span>{{scope.row.employee_name}}</span>
-<!-- 							<div class="fontColorD" style="font-size: 12px;" v-if="scope.row.userInfo.employee_detail.dept_list.length>0">
-								<span v-for="(item, index) in scope.row.userInfo.employee_detail.dept_list" :key="index">
-									{{ item.dept_name }}<span v-if="scope.row.userInfo.employee_detail.dept_list.length - index > 1">,</span>
-								</span>
-							</div> -->
 						</div>
 					</div>
 				  </template>

+ 55 - 54
src/views/award/print.vue

@@ -23,61 +23,64 @@
 			</div>
 		</div>
 		<div class="all padding-20">
-			<el-form :inline="true" label-width="80px">
-				<el-form-item>
-					<el-select size="medium" v-model="selectType" placeholder="请选择分类" style="width: 100px;">
-						<el-option label="部门" :value="1"></el-option>
-						<el-option label="人员" :value="2"></el-option>
-					</el-select>
-				</el-form-item>
-				<el-form-item>
-					<el-cascader
-						v-if="selectType==1"
-						size="medium"
-						style="width: 300px;"
-						v-model="dept_name"
-						:options="dept_tree"
-						:props="{ multiple: true,value: 'id', label: 'name', children: '_child' }"
-						ref="dept"
-						collapse-tags
-						clearable
-						filterable
-						placeholder="全公司"
-					></el-cascader>
-					<el-select v-else size="medium" style="width: 300px;" filterable multiple clearable  v-model="formData.employee_id" placeholder="请输入或选择人员">
-						<el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
-					</el-select>
-				</el-form-item>
-				<el-form-item label="时间">
-					<el-date-picker
-						size="medium"
-						v-model="time_range"
-						type="daterange"
-						value-format="yyyy-MM-dd"
-						range-separator="至"
-						start-placeholder="开始日期"
-						end-placeholder="结束日期"
-						:picker-options="instantPickerOptions"
-					></el-date-picker>
-				</el-form-item>
-				<el-form-item label="打印状态">
-					<el-select size="medium" v-model="formData.has_print">
-						<el-option v-for="item in source_type" :key="item.id" :label="item.name" :value="item.id"></el-option>
-					</el-select>
-				</el-form-item>
-				<el-form-item>
-					<el-input v-model="formData.keyword" size="medium" clearable placeholder="内容搜索" maxlength="20"></el-input>
-				</el-form-item>
-			</el-form>
-			<div class="flex-box-ce">
-				<el-button size="small" @click="printFn"  type="primary">打印当前已选中的奖票</el-button>
+			  <FormBox  :isShowHeader="false">
+				<template #footer>
+					<el-form :inline="true" label-width="70px">
+						<el-form-item label="筛选">
+							<el-select size="medium" v-model="selectType" placeholder="请选择分类" style="width: 100px;">
+								<el-option label="部门" :value="1"></el-option>
+								<el-option label="人员" :value="2"></el-option>
+							</el-select>
+						</el-form-item>
+						<el-form-item>
+							<el-cascader
+								v-if="selectType==1"
+								size="medium"
+								v-model="dept_name"
+								:options="dept_tree"
+								:props="{ multiple: true,value: 'id', label: 'name', children: '_child' }"
+								ref="dept"
+								collapse-tags
+								clearable
+								filterable
+								placeholder="全公司"
+							></el-cascader>
+							<el-select v-else size="medium"  filterable multiple clearable  v-model="formData.employee_id" placeholder="请输入或选择人员">
+								<el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
+							</el-select>
+						</el-form-item>
+						<el-form-item label="事件时间">
+							<el-date-picker
+								size="medium"
+								v-model="time_range"
+								type="daterange"
+								value-format="yyyy-MM-dd"
+								range-separator="至"
+								start-placeholder="开始日期"
+								end-placeholder="结束日期"
+								:picker-options="instantPickerOptions"
+							></el-date-picker>
+						</el-form-item>
+						<el-form-item label="打印状态">
+							<el-select size="medium" v-model="formData.has_print">
+								<el-option v-for="item in source_type" :key="item.id" :label="item.name" :value="item.id"></el-option>
+							</el-select>
+						</el-form-item>
+						<el-form-item label="内容搜索">
+							<el-input v-model="formData.keyword" size="medium" clearable placeholder="内容搜索" maxlength="20"></el-input>
+						</el-form-item>
+					</el-form>
+				</template>
+			  </FormBox>
+			<div class="flex-box-ce" style="margin: 10px 0;">
+				<el-button size="small" @click="printFn" plain type="primary">打印当前已选中的奖票</el-button>
 				<div class="flex-1"></div>
 				<el-popover placement="top-end" width="640" trigger="click">
 				  <div><img src="@/assets/image/09.png" style="width: 100%;"/></div>
 				  <div class="blue cursor" slot="reference"  style="margin-right: 10px;cursor: pointer;">奖票示例</div>
 				</el-popover>
-				<el-button size="small"  type="primary" plain @click="dialogVisible=true">打印配置</el-button>
-				<el-button size="small"  type="primary" plain @click="openPrint">批量修改状态</el-button>
+				<el-button size="small"  type="primary"  @click="dialogVisible=true">打印配置</el-button>
+				<el-button size="small"  type="primary"  @click="openPrint">批量修改状态</el-button>
 			</div>
 			<el-table :data="list" style="width: 100%;cursor: pointer;" v-loading="loading" @selection-change="deleteEvents">
 				<el-table-column width="50" type="selection"></el-table-column>
@@ -96,10 +99,8 @@
 					</template>
 				</el-table-column>
 				<el-table-column label="事件时间" align="left" prop="dateStr"  width="130"></el-table-column>
-				<el-table-column label="发放人" align="left" prop="publisher_name"  width="130">
-					
-				</el-table-column>
-				<el-table-column label="状态" width="160">
+				<el-table-column label="发放人" align="left" prop="publisher_name"  width="130"></el-table-column>
+				<el-table-column label="打印状态" width="160">
 					<template slot-scope="scope">
 						<span  class="green" v-if="scope.row.has_print">已打印</span>
 						<span  class="fontColorC"  v-else>未打印</span>

+ 72 - 65
src/views/ranking/attendance_rating.vue

@@ -1,38 +1,41 @@
 <template>
 	<div>
 		<div class="all" v-loading="attendload">
-			<div>
-				<el-form :inline="true">
-					<el-form-item label="考勤组">
-						<el-select v-model="formData.group_id" @change="selectgroupId" filterable :clearable="false" placeholder="请选择考勤组">
-							<el-option v-for="item in checkingInGroup" :key="item.id" :label="item.name" :value="item.id"></el-option>
-						</el-select>
-					</el-form-item>
-					<el-form-item label="排名类型">
-						<el-select v-model="formData.event_type" @change="selectgroupId" style="width:110px" placeholder="请选择">
-							<el-option v-for="(item, index) in event_type" :key="index" :label="item.name" :value="item.id"></el-option>
-						</el-select>
-					</el-form-item>
-					<el-form-item label="时间">
-						<el-date-picker
-							style="width:290px"
-							class="first-element-btn"
-							:clearable="false"
-							v-model="time_range"
-							type="daterange"
-							value-format="yyyy-MM-dd"
-							range-separator="至"
-							start-placeholder="开始日期"
-							end-placeholder="结束日期"
-							:picker-options="instantPickerOptions"
-							@change="onFilterChanged"
-						></el-date-picker>
-					</el-form-item>
-					<el-form-item>
-						<el-button type="primary" plain @click="exportRanking">导出排名</el-button>
-						<el-button type="primary" plain @click="isUpdate=true">更新考勤数据</el-button>
-					</el-form-item>
-				</el-form>
+			<FormBox :isShowHeader="false">
+				<template #footer>
+					<el-form :inline="true" label-width="70px">
+						<el-form-item label="考勤组">
+							<el-select  size="medium" v-model="formData.group_id" @change="selectgroupId" filterable :clearable="false" placeholder="请选择考勤组">
+								<el-option v-for="item in checkingInGroup" :key="item.id" :label="item.name" :value="item.id"></el-option>
+							</el-select>
+						</el-form-item>
+						<el-form-item label="排名类型">
+							<el-select  size="medium" v-model="formData.event_type" @change="selectgroupId" style="width:110px" placeholder="请选择">
+								<el-option v-for="(item, index) in event_type" :key="index" :label="item.name" :value="item.id"></el-option>
+							</el-select>
+						</el-form-item>
+						<el-form-item label="时间">
+							<el-date-picker
+								style="width:290px"
+								class="first-element-btn"
+								:clearable="false"
+								v-model="time_range"
+								type="daterange"
+								 size="medium"
+								value-format="yyyy-MM-dd"
+								range-separator="至"
+								start-placeholder="开始日期"
+								end-placeholder="结束日期"
+								:picker-options="instantPickerOptions"
+								@change="onFilterChanged"
+							></el-date-picker>
+						</el-form-item>
+					</el-form>
+				</template>
+			</FormBox>
+			<div style="margin: 10px 0;">
+				<el-button type="primary"  size="medium" plain @click="exportRanking">导出排名</el-button>
+				<el-button type="primary"  size="medium" plain @click="isUpdate=true">更新考勤数据</el-button>
 			</div>
 			<el-table :data="all_integral_list" style="width: 100%" v-loading="loading">
 				<el-table-column label="名次" width="100" align="center">
@@ -109,40 +112,42 @@
 		</el-dialog>
 		<!-- 导出弹窗 -->
 		<el-dialog title="导出排名" :visible.sync="dialogVisible" width="730px">
-			<div style="font-size:15px;margin:20px 0 20px 0;">系统将按以下已选条件导出对应的排名报表</div>
-			<div v-loading="exportLoad">
-				<el-form :inline="true">
-					<el-form-item label="考勤组">
-						<el-select v-model="exportData.group_id" @change="selectgroupId" filterable :clearable="false" placeholder="请选择考勤组">
-							<el-option v-for="item in checkingInGroup" :key="item.id" :label="item.name" :value="item.id"></el-option>
-						</el-select>
-					</el-form-item>
+			<div style="font-size:15px;margin-bottom:10px;font-weight: 600;">系统将按以下已选条件导出对应的排名报表</div>
+			<FormBox :isShowHeader="false">
+				<template slot="footer">
+					<el-form :inline="true" label-width="70px">
+						<el-form-item label="考勤组">
+							<el-select v-model="exportData.group_id" @change="selectgroupId" filterable :clearable="false" placeholder="请选择考勤组">
+								<el-option v-for="item in checkingInGroup" :key="item.id" :label="item.name" :value="item.id"></el-option>
+							</el-select>
+						</el-form-item>
 
-					<el-form-item label="排名类型">
-						<el-select v-model="exportData.event_type" style="width:150px" placeholder="请选择">
-							<el-option v-for="(item, index) in event_type" :key="index" :label="item.name" :value="item.id"></el-option>
-						</el-select>
-					</el-form-item>
+						<el-form-item label="排名类型">
+							<el-select v-model="exportData.event_type" style="width:150px" placeholder="请选择">
+								<el-option v-for="(item, index) in event_type" :key="index" :label="item.name" :value="item.id"></el-option>
+							</el-select>
+						</el-form-item>
 
-					<el-form-item label="时间">
-						<el-date-picker
-							class="first-element-btn"
-							:clearable="false"
-							v-model="exportTime_range"
-							type="daterange"
-							value-format="yyyy-MM-dd"
-							range-separator="至"
-							start-placeholder="开始日期"
-							end-placeholder="结束日期"
-							:picker-options="instantPickerOptions"
-						></el-date-picker>
-					</el-form-item>
-				</el-form>
-				<span class="dialog-footer" style="display:flex;justify-content: flex-end;">
-					<el-button @click="dialogVisible = false">取 消</el-button>
-					<el-button type="primary" @click="exportExcel">导 出</el-button>
-				</span>
-			</div>
+						<el-form-item label="时间">
+							<el-date-picker
+								class="first-element-btn"
+								:clearable="false"
+								v-model="exportTime_range"
+								type="daterange"
+								value-format="yyyy-MM-dd"
+								range-separator="至"
+								start-placeholder="开始日期"
+								end-placeholder="结束日期"
+								:picker-options="instantPickerOptions"
+							></el-date-picker>
+						</el-form-item>
+					</el-form>
+				</template>
+			</FormBox>
+			<span slot="footer" class="dialog-footer">
+				<el-button @click="dialogVisible = false" size="medium">取 消</el-button>
+				<el-button type="primary" @click="exportExcel" size="medium">导 出</el-button>
+			</span>
 		</el-dialog>
 	</div>
 </template>
@@ -358,7 +363,9 @@ export default {
 							datas.push(obj);
 						}
 						this.checkingInGroup = datas;
-						this.formData.group_id = datas[0].id;
+						if(datas.length>0){
+							this.formData.group_id = datas[0].id;
+						}
 					}
 				})
 				.finally(() => {

+ 37 - 33
src/views/ranking/balanceA.vue

@@ -11,33 +11,33 @@
 				<el-tab-pane :disabled="loading" label="A分余额" name="balanceA"></el-tab-pane>
 				<el-tab-pane :disabled="loading" label="清空记录" name="clearLog"></el-tab-pane>
 			</el-tabs>
-
-			<el-form :inline="true" v-if="active == 'balanceA'">
-				<el-form-item label="部门">
-					<el-cascader
-						size="medium"
-						class="date-picker-width"
-						v-model="dept_name"
-						:options="dept_tree"
-						ref="dept"
-						:props="{ checkStrictly: true, value: 'id', label: 'name', children: '_child' }"
-						clearable
-						filterable
-						placeholder="全公司"
-					></el-cascader>
-				</el-form-item>
-
-				<el-form-item>
-					<el-input size="medium" v-model="formData.keyword" placeholder="输入同事姓名" max="200" @keyup.enter.native="getList()" class="persons_name">
-						<el-button size="medium" slot="append" icon="el-icon-search" @click="getList()"></el-button>
-					</el-input>
-				</el-form-item>
-
-				<el-form-item style="float: right;"><el-button size="medium" type="primary" @click="clearAPointShow = true">清空A分余额</el-button></el-form-item>
-			</el-form>
-
+			<FormBox  :isShowHeader="false" v-if="active == 'balanceA'">
+				<template #footer>
+					<el-form :inline="true" label-width="70px">
+						<el-form-item label="部门">
+							<el-cascader
+								size="medium"
+								class="date-picker-width"
+								v-model="dept_name"
+								:options="dept_tree"
+								ref="dept"
+								:props="{ checkStrictly: true, value: 'id', label: 'name', children: '_child' }"
+								clearable
+								filterable
+								placeholder="全公司"
+							></el-cascader>
+						</el-form-item>
+						<el-form-item label="人员搜索">
+							<el-input size="medium" clearable v-model="formData.keyword" placeholder="输入人员姓名" max="200" />
+						</el-form-item>
+					</el-form>
+				</template>
+			</FormBox>
+			<div style="margin: 10px 0;" v-if="active == 'balanceA'">
+				<el-button size="medium" plain type="primary" @click="clearAPointShow = true">清空A分余额</el-button>
+			</div>
 			<el-table :data="list" style="width: 100%" v-if="active == 'balanceA'" v-loading="loading">
-				<el-table-column label="姓名" prop="name" width="250">
+				<el-table-column label="人员" prop="name" width="250">
 					<template slot-scope="scope">
 						<div class="flex-box-ce">
 							<userImage class="fl" :id="scope.row.id" :user_name="scope.row.name" :img_url="scope.row.img_url" width="50px" height="50px"></userImage>
@@ -100,7 +100,9 @@
 	</div>
 </template>
 <script>
+import {_debounce} from '@/api/auth';
 export default {
+	name:'balanceA',
 	data() {
 		return {
 			active: 'balanceA',
@@ -130,14 +132,16 @@ export default {
 		},
 		active(val) {
 			this.list = [];
-			this.formData = {
-				keyword: '',
-				dept_id: '0',
-				page: 1,
-				page_size: 10
-			};
+			this.formData.page=1;	
 			val == 'balanceA' ? this.getList() : this.getLog();
-		}
+		},
+		'formData.keyword': {
+			deep: true,
+			handler: _debounce(function(val) {
+				this.formData.page = 1;
+				this.getList();
+			}, 1000)
+		},
 	},
 	methods: {
 		resetForm(formName) {

+ 74 - 59
src/views/ranking/custom_rank.vue

@@ -31,29 +31,39 @@
 							</div>
 						</div>
 					</div>
-					<el-form :model="params" :inline="true" ref="params">
-						<el-form-item label="月份" label-width="40px" v-if="newGroupForm.date_interval == 1">
-							<el-date-picker v-model="time.month" type="month" :clearable="false" placeholder="请选择月份" value-format="yyyy-MM"></el-date-picker>
-						</el-form-item>
-						<el-form-item label="年份" label-width="40px" v-if="newGroupForm.date_interval == 3">
-							<el-date-picker v-model="time.year" type="year" :clearable="false" placeholder="请选择年份" value-format="yyyy"></el-date-picker>
-						</el-form-item>
-						<el-form-item label="季度" label-width="40px" v-if="newGroupForm.date_interval == 2">
-							<Season ref="Seasons" :defaultHint="true" :isActive="true" class="date-picker-width" @confirm="export_quarter_confirm"></Season>
-						</el-form-item>
-						<el-form-item><el-checkbox v-model="sort" size="medium" label="由低到高" border></el-checkbox></el-form-item>
-						<el-button type="primary" @click="exportExcel" v-if="table_list.length > 0"  size="medium">导 出</el-button>
-						<el-alert
-							v-if="lastUpdateTime != undefined || lastUpdateTime"
-							:title="
-								'温馨提醒:排名会在积分产生后自动更新,最近更新时间:' +
-									(lastUpdateTime != undefined ? (lastUpdateTime == '' ? '正在更新,请稍候' : lastUpdateTime) : '正在更新,请稍候')
-							"
-							type="success"
-							:closable="false"
-							show-icon
-						></el-alert>
-					</el-form>
+					<FormBox :isShowHeader="false">
+						<template #footer>
+							<el-form :model="params" :inline="true" ref="params">
+								<el-form-item label="月份" label-width="40px" v-if="newGroupForm.date_interval == 1">
+									<el-date-picker size="medium" v-model="time.month" type="month" :clearable="false" placeholder="请选择月份" value-format="yyyy-MM"></el-date-picker>
+								</el-form-item>
+								<el-form-item label="年份" label-width="40px" v-if="newGroupForm.date_interval == 3">
+									<el-date-picker size="medium" v-model="time.year" type="year" :clearable="false" placeholder="请选择年份" value-format="yyyy"></el-date-picker>
+								</el-form-item>
+								<el-form-item label="季度" label-width="40px" v-if="newGroupForm.date_interval == 2">
+									<Season ref="Seasons" :defaultHint="true" :isActive="true" class="date-picker-width" @confirm="export_quarter_confirm"></Season>
+								</el-form-item>
+								<el-form-item>
+									<el-checkbox v-model="sort" size="medium" label="由低到高" border></el-checkbox>
+								</el-form-item>
+								<el-form-item>
+									<el-button type="primary" @click="exportExcel" v-if="table_list.length > 0"  size="medium">导 出</el-button>
+								</el-form-item>
+								
+							</el-form>
+						</template>
+					</FormBox>	
+					<div style="height: 10px;"></div>	
+					<el-alert
+						v-if="lastUpdateTime != undefined || lastUpdateTime"
+						:title="
+							'温馨提醒:排名会在积分产生后自动更新,最近更新时间:' +
+								(lastUpdateTime != undefined ? (lastUpdateTime == '' ? '正在更新,请稍候' : lastUpdateTime) : '正在更新,请稍候')
+						"
+						type="success"
+						:closable="false"
+						show-icon
+					></el-alert>
 
 					<el-table :data="table_list" style="cursor: pointer;" @row-click="open_detail">
 						<el-table-column label="名次" width="80" align="center" >
@@ -104,42 +114,44 @@
 
 		
 		<!-- 新增分组 -->
-		<el-dialog :title="popupType ? '新增分组' : '编辑分组'" width="460px" :visible.sync="groupShow" :close-on-click-modal="false">
-			<el-form ref="newGroupForm" v-loading="loading" :model="newGroupForm" :rules="rules" label-width="85px" @submit.native.prevent>
-				<el-form-item label="分组名称" prop="group_name">
-					<el-input v-model="newGroupForm.group_name" placeholder="请输入分组名称" auto-complete="off"></el-input>
-				</el-form-item>
-				<el-form-item label="分组成员" :required="true">
-					<el-input auto-complete="off" v-model="employees" placeholder="请选择分组成员"></el-input>
-					<div @click="isEmployeeShow = true" style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"></div>
-					<el-dialog title="选择人员" width="700px" :visible.sync="isEmployeeShow" append-to-body :before-close="handleClose">
-						<EmployeeSelector
-							v-if="isEmployeeShow"
-							ref="Employee"
-							:user_no_select="false"
-							:selected="employees_selected"
-							:close_clear_data="true"
-							@confirm="move_employee_confirm"
-						/>
-						<span slot="footer" class="dialog-footer">
-							<el-button @click="isEmployeeShow = false">取 消</el-button>
-							<el-button type="primary" @click="submitEmployee()">确 定</el-button>
-						</span>
-					</el-dialog>
-				</el-form-item>
-				<el-form-item label="积分规则" :required="true">
-					<el-input auto-complete="off" v-model="newGroupFormRules" placeholder="全部规则分类"></el-input>
-					<div @click="ruleDialogTableVisibles" style="height:36px; position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;cursor:pointer"></div>
-					<div style="margin-bottom:12px;">
-						<span style="font-size:13px;color:#8a8a8a;position: absolute; top: 30px; left: 0;">{{ ruleHint }}</span>
-					</div>
-				</el-form-item>
-				<el-form-item label="统计周期" label-width="85px" :required="true" :show-message="false">
-					<el-select v-model="options_time_value" placeholder="月度" @change="options_times">
-						<el-option v-for="item in options_time" :key="item.value" :label="item.label" :value="item.value"></el-option>
-					</el-select>
-				</el-form-item>
-			</el-form>
+		<el-dialog :title="popupType ? '新增分组' : '编辑分组'" width="500px" :visible.sync="groupShow" :close-on-click-modal="false">
+			<div style="width: 400px;margin: 0 auto;">
+				<el-form ref="newGroupForm" v-loading="loading" :model="newGroupForm" :rules="rules" label-width="85px" @submit.native.prevent>
+					<el-form-item label="分组名称" prop="group_name">
+						<el-input v-model="newGroupForm.group_name" placeholder="请输入分组名称" auto-complete="off"></el-input>
+					</el-form-item>
+					<el-form-item label="分组成员" :required="true">
+						<el-input auto-complete="off" v-model="employees" placeholder="请选择分组成员"></el-input>
+						<div @click="isEmployeeShow = true" style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"></div>
+						<el-dialog title="选择人员" width="700px" :visible.sync="isEmployeeShow" append-to-body :before-close="handleClose">
+							<EmployeeSelector
+								v-if="isEmployeeShow"
+								ref="Employee"
+								:user_no_select="false"
+								:selected="employees_selected"
+								:close_clear_data="true"
+								@confirm="move_employee_confirm"
+							/>
+							<span slot="footer" class="dialog-footer">
+								<el-button @click="isEmployeeShow = false">取 消</el-button>
+								<el-button type="primary" @click="submitEmployee()">确 定</el-button>
+							</span>
+						</el-dialog>
+					</el-form-item>
+					<el-form-item label="积分规则" :required="true">
+						<el-input auto-complete="off" v-model="newGroupFormRules" placeholder="全部规则分类"></el-input>
+						<div @click="ruleDialogTableVisibles" style="height:36px; position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;cursor:pointer"></div>
+						<div style="margin-bottom:12px;">
+							<span style="font-size:13px;color:#8a8a8a;position: absolute; top: 30px; left: 0;">{{ ruleHint }}</span>
+						</div>
+					</el-form-item>
+					<el-form-item label="统计周期" label-width="85px" :required="true" :show-message="false">
+						<el-select v-model="options_time_value" placeholder="月度" @change="options_times">
+							<el-option v-for="item in options_time" :key="item.value" :label="item.label" :value="item.value"></el-option>
+						</el-select>
+					</el-form-item>
+				</el-form>
+			</div>
 			<div slot="footer" class="dialog-footer flex-v-ce flex-box">
 				<el-button type="danger" v-if="!popupType" :loading="delLoad" @click="delItem">删除</el-button>
 				<div class="flex-1"></div>
@@ -952,6 +964,9 @@ export default {
 };
 </script>
 <style scoped lang="scss">
+.el-checkbox.is-bordered.el-checkbox--medium {
+	padding: 9px 20px 7px 10px;
+}	
 ::v-deep .itemClass .el-cascader-menu .el-cascader-menu__wrap li.el-cascader-node {
 	height: auto;
 	max-width: 500px;

+ 50 - 47
src/views/ranking/department_statistics.vue

@@ -1,53 +1,56 @@
 <template>
 	<div>
 		<el-row style="min-width:1160px;">
-			<div class="flex-box-ce">
-<!-- 				<div v-if="$supremeAuthority()=='dept_manager'">
-					<el-select v-model="formData.dept_id" placeholder="请选择部门" style="width: 100px;">
-						<el-option v-for="item in depts" :key="item.dept_name" :label="item.dept_name" :value="item.dept_id"></el-option>
-					</el-select>
-				</div> -->
-				<div>
-					<el-cascader
-						v-model="dept_name"
-						:options="dept_tree"
-						@change="dept1_null"
-						:props="{checkStrictly: true,value: 'id',label: 'name',children: '_child'}"
-						ref="dept1"
-						filterable
-						change-on-select
-						placeholder="全公司"
-						clearable
-					></el-cascader>
-				</div>
-				<div style="margin:0 10px;">
-					<el-select v-model="time_type" placeholder="请选择分类" style="width: 100px;">
-						<el-option v-for="item in time_types" :key="item.label" :label="item.label" :value="item.value"></el-option>
-					</el-select>
-				</div>
-				<div>
-					<el-date-picker
-						v-show="time_type == '2'"
-						v-model="export_from.year"
-						class="date-picker-width"
-						type="year"
-						value-format="yyyy"
-						:clearable="false"
-						:editable="false"
-						placeholder="选择年份排名"
-					></el-date-picker>
-					<el-date-picker
-						v-show="time_type == '1' || time_type == '月份'"
-						v-model="export_from.month"
-						class="date-picker-width"
-						type="month"
-						value-format="yyyy-MM"
-						:clearable="false"
-						:editable="false"
-						placeholder="选择月份排名"
-					></el-date-picker>
-				</div>
-			</div>
+			<FormBox  :isShowHeader="false">
+				<template #footer>
+					<el-form ref="form" :inline="true" label-width="60px">
+						<el-form-item label="人员">
+								<el-cascader
+									v-model="dept_name"
+									:options="dept_tree"
+									@change="dept1_null"
+									:props="{checkStrictly: true,value: 'id',label: 'name',children: '_child'}"
+									ref="dept1"
+									filterable
+									size="medium"
+									change-on-select
+									placeholder="全公司"
+									clearable
+								></el-cascader>
+						</el-form-item>
+						<el-form-item label="时间">
+							<div class="flex-box-ce">
+								<div style="margin-right: 10px;">
+									<el-select size="medium" v-model="time_type" placeholder="请选择分类" style="width: 100px;">
+										<el-option v-for="item in time_types" :key="item.label" :label="item.label" :value="item.value"></el-option>
+									</el-select>
+								</div>
+								<el-date-picker
+									v-show="time_type == '2'"
+									v-model="export_from.year"
+									type="year"
+									size="medium"
+									value-format="yyyy"
+									:clearable="false"
+									:editable="false"
+									placeholder="选择年份排名"
+								></el-date-picker>
+								<el-date-picker
+									v-show="time_type == '1' || time_type == '月份'"
+									v-model="export_from.month"
+									type="month"
+									size="medium"
+									value-format="yyyy-MM"
+									:clearable="false"
+									:editable="false"
+									placeholder="选择月份排名"
+								></el-date-picker>
+							</div>
+						</el-form-item>
+					</el-form>
+				</template>
+			</FormBox>	
+			
 
 			<el-col :span="24" style="min-width:1160px;">
 				<el-col :span="18" style="min-width:780px;">

+ 149 - 161
src/views/ranking/dept_rank.vue

@@ -4,107 +4,97 @@
 			<el-alert class="diy-tip" @close="tips_close" type="success" description><p>排名不包含初始分和工龄分</p></el-alert>
 		</div>
 		<div class="all padding-20">
-			<el-form :inline="true">
-				<el-form-item label="时间">
-					<el-select size="medium" v-model="time_type" placeholder="请选择分类" style="width: 100px;">
-						<el-option v-for="item in time_types" :key="item.label" :label="item.label" :value="item.value"></el-option>
-					</el-select>
-				</el-form-item>
-				<el-form-item>
-					<el-date-picker
-						size="medium"
-						v-show="time_type == '1'"
-						v-model="formData.month"
-						class="date-picker-width"
-						type="month"
-						:clearable="false"
-						value-format="yyyy-MM"
-						placeholder="选择月份排名"
-					></el-date-picker>
-					<el-date-picker
-						size="medium"
-						v-show="time_type == '2'"
-						v-model="formData.year"
-						class="date-picker-width"
-						type="year"
-						:clearable="false"
-						value-format="yyyy"
-						placeholder="选择年份排名"
-					></el-date-picker>
-					<season v-if="time_type == '3'" class="date-picker-width" @confirm="export_quarter_confirm"></season>
-					<el-date-picker
-						size="medium"
-						v-show="time_type == '4'"
-						class="date-picker-width"
-						v-model="formData.time_range"
-						type="daterange"
-						value-format="yyyy-MM-dd"
-						range-separator="至"
-						:clearable="false"
-						start-placeholder="开始日期"
-						end-placeholder="结束日期"
-						:picker-options="instantPickerOptions"
-					></el-date-picker>
-				</el-form-item>
-				<el-form-item label="部门">
-					<el-cascader
-						size="medium"
-						class="date-picker-width"
-						v-model="dept_name"
-						:options="dept_tree"
-						:props="{ checkStrictly: true, value: 'id', label: 'name', children: '_child' }"
-						ref="dept"
-						clearable
-						filterable
-						placeholder="全公司"
-					></el-cascader>
-					<!-- 这是选部门多选。如果更改需求用这个: -->
-					<!-- <el-cascader
-						v-model="dept_name"
-						:options="dept_tree"
-						:props="{ multiple: true, checkStrictly: true }"
-						class="date-picker-width"
-						ref="dept"
-						clearable
-						collapse-tags
-						placeholder="全公司"
-					  ></el-cascader>-->
-				</el-form-item>
-				<el-form-item label="谁不参与排名">
-					<el-select v-model="formData.exclusion" size="medium" clearable multiple filterable collapse-tags placeholder="请选择员工">
-						<el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
-					</el-select>
-				</el-form-item>
-				<el-form-item label="规则分类">
-					<el-cascader
-					   size="medium"
-						class="date-picker-width"
-						v-model="rule_id"
-						:options="rule_trees"
-						:props="props2"
-						ref="rule_id"
-						clearable
-						placeholder="请选择规则分类"
-					></el-cascader>
-				</el-form-item>
-				<el-form-item label="积分分类">
-					<el-select class="date-picker-width" size="medium" v-model="formData.pt_id" placeholder="请选择积分分类">
-						<el-option v-for="item in point_types" :key="item.name" :label="item.name" :value="item.id"></el-option>
-					</el-select>
-				</el-form-item>
-				<el-form-item label="人员">
-					<el-select size="medium" v-model="formData.position" style="width:150px" placeholder="请选择">
-						<el-option v-for="item in positions" :key="item.id" :label="item.name" :value="item.id"></el-option>
-					</el-select>
-				</el-form-item>
-				<el-form-item>
-					<el-checkbox v-model="sort" size="medium" label="排名由低到高" border></el-checkbox>
-				</el-form-item>
-				<el-form-item>
-					<el-button type="primary" size="medium" plain @click="dialogVisible = true">导出排名</el-button>
-					<!-- <el-button type="primary"  size="medium" plain @click="byRanking('byRankingData')">轮播排名</el-button> -->
-				</el-form-item>
-			</el-form>
+			<FormBox :isShowHeader="false" :isShowMore="true">
+				<template slot="footer">
+					<el-form :inline="true" label-width="70px">
+						<el-form-item label="时间">
+							<el-select size="medium" v-model="time_type" placeholder="请选择分类" style="width: 100px;">
+								<el-option v-for="item in time_types" :key="item.label" :label="item.label" :value="item.value"></el-option>
+							</el-select>
+						</el-form-item>
+						<el-form-item>
+							<el-date-picker
+								size="medium"
+								v-show="time_type == '1'"
+								v-model="formData.month"
+								class="date-picker-width"
+								type="month"
+								:clearable="false"
+								value-format="yyyy-MM"
+								placeholder="选择月份排名"
+							></el-date-picker>
+							<el-date-picker
+								size="medium"
+								v-show="time_type == '2'"
+								v-model="formData.year"
+								class="date-picker-width"
+								type="year"
+								:clearable="false"
+								value-format="yyyy"
+								placeholder="选择年份排名"
+							></el-date-picker>
+							<season v-if="time_type == '3'" class="date-picker-width" @confirm="export_quarter_confirm"></season>
+							<el-date-picker
+								size="medium"
+								v-show="time_type == '4'"
+								class="date-picker-width"
+								v-model="formData.time_range"
+								type="daterange"
+								value-format="yyyy-MM-dd"
+								range-separator="至"
+								:clearable="false"
+								start-placeholder="开始日期"
+								end-placeholder="结束日期"
+								:picker-options="instantPickerOptions"
+							></el-date-picker>
+						</el-form-item>
+						<el-form-item label="部门">
+							<el-cascader
+								size="medium"
+								class="date-picker-width"
+								v-model="dept_name"
+								:options="dept_tree"
+								:props="{ checkStrictly: true, value: 'id', label: 'name', children: '_child' }"
+								ref="dept"
+								clearable
+								filterable
+								placeholder="全公司"
+							></el-cascader>
+						</el-form-item>
+						<el-form-item label="谁不参与排名" label-width="100px">
+							<el-select v-model="formData.exclusion" size="medium" clearable multiple filterable collapse-tags placeholder="请选择员工">
+								<el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
+							</el-select>
+						</el-form-item>
+						<el-form-item label="规则分类">
+							<el-cascader
+							   size="medium"
+								class="date-picker-width"
+								v-model="rule_id"
+								:options="rule_trees"
+								:props="props2"
+								ref="rule_id"
+								clearable
+								placeholder="请选择规则分类"
+							></el-cascader>
+						</el-form-item>
+						<el-form-item label="积分分类">
+							<el-select class="date-picker-width" size="medium" v-model="formData.pt_id" placeholder="请选择积分分类">
+								<el-option v-for="item in point_types" :key="item.name" :label="item.name" :value="item.id"></el-option>
+							</el-select>
+						</el-form-item>
+						<el-form-item label="人员">
+							<el-select size="medium" v-model="formData.position"  placeholder="请选择">
+								<el-option v-for="item in positions" :key="item.id" :label="item.name" :value="item.id"></el-option>
+							</el-select>
+						</el-form-item>
+					</el-form>
+				</template>
+			</FormBox>
+			<div style="padding: 10px 0;position: relative;z-index: 1;background-color: #fff;">
+				<el-button type="primary" style="margin-right: 10px;" size="medium" plain @click="dialogVisible = true">导出排名</el-button>
+				<el-checkbox v-model="sort" size="medium" label="排名由低到高" border></el-checkbox>
+			</div>
 			<el-table :data="list" style="width: 100%;cursor: pointer;" v-loading="loading" @row-click="open_detail">
 				<el-table-column label="名次" width="80" align="center">
 					<template slot-scope="scope">
@@ -150,62 +140,63 @@
 			</center>
 		</div>
 		<!-- 导出弹窗 -->
-		<el-dialog title="导出排名" :visible.sync="dialogVisible" width="730px" top="10%">
-			<span style="font-size:15px">系统将按以下已选条件导出对应的排名报表</span>
-			<el-form :inline="true">
-				<div class="picker_er">
-					<el-form-item label="时间">
-						<el-date-picker
-							v-model="Dc_Data.value1"
-							type="daterange"
-							size="medium"
-							value-format="yyyy-MM-dd"
-							range-separator="至"
-							start-placeholder="开始日期"
-							end-placeholder="结束日期"
-							:picker-options="instantPickerOptions"
-						></el-date-picker>
-					</el-form-item>
-
-					<el-form-item label="人员" style="margin-left:30px">
-						<el-select size="medium" v-model="Dc_Data.DC_position" style="width:150px" placeholder="请选择">
-							<el-option v-for="item in positions" :key="item.id" :label="item.name" :value="item.id"></el-option>
-						</el-select>
-					</el-form-item>
-				</div>
-				<el-form-item label="部门">
-					<el-cascader
-						class="date-picker-width cascader_bm"
-						v-model="Dc_Data.dept_name"
-						:options="dept_tree"
-						:props="{ checkStrictly: true, value: 'id', label: 'name', children: '_child' }"
-						ref="dept2"
-						size="medium"
-						clearable
-						filterable
-						placeholder="全公司"
-					></el-cascader>
-				</el-form-item>
-				<el-form-item label="积分分类">
-					<el-select  style="width: 80px;" size="medium" v-model="Dc_Data.pt_id" placeholder="请选择积分分类">
-						<el-option v-for="item in point_types" :key="item.name" :label="item.name" :value="item.id"></el-option>
-					</el-select>
-				</el-form-item>
-				<el-form-item label="规则分类" style="margin-left:20px">
-					<el-cascader
-						class="date-picker-width"
-						@change="ruleInquiredialog"
-						v-model="rule_ids"
-						:options="rule_trees"
-						:props="props"
-						size="medium"
-						ref="derive"
-						clearable
-						collapse-tags
-						placeholder="请选择规则分类"
-					></el-cascader>
-				</el-form-item>
-			</el-form>
+		<el-dialog title="导出排名" :visible.sync="dialogVisible" width="730px" top="3%">
+			<div style="font-size:15px;margin-bottom:10px;font-weight: 600;">系统将按以下已选条件导出对应的排名报表</div>
+			<FormBox :isShowHeader="false">
+				<template slot="footer">
+					<el-form :inline="true" label-width="70px">
+						<el-form-item label="时间">
+							<el-date-picker
+								v-model="Dc_Data.value1"
+								type="daterange"
+								size="medium"
+								value-format="yyyy-MM-dd"
+								range-separator="至"
+								start-placeholder="开始日期"
+								end-placeholder="结束日期"
+								:picker-options="instantPickerOptions"
+							></el-date-picker>
+						</el-form-item>
+						<el-form-item label="人员">
+							<el-select size="medium" v-model="Dc_Data.DC_position" style="width:150px" placeholder="请选择">
+								<el-option v-for="item in positions" :key="item.id" :label="item.name" :value="item.id"></el-option>
+							</el-select>
+						</el-form-item>
+						<el-form-item label="部门">
+							<el-cascader
+								class="date-picker-width cascader_bm"
+								v-model="Dc_Data.dept_name"
+								:options="dept_tree"
+								:props="{ checkStrictly: true, value: 'id', label: 'name', children: '_child' }"
+								ref="dept2"
+								size="medium"
+								clearable
+								filterable
+								placeholder="全公司"
+							></el-cascader>
+						</el-form-item>
+						<el-form-item label="规则分类">
+							<el-cascader
+								class="date-picker-width"
+								@change="ruleInquiredialog"
+								v-model="rule_ids"
+								:options="rule_trees"
+								:props="props"
+								size="medium"
+								ref="derive"
+								clearable
+								collapse-tags
+								placeholder="请选择规则分类"
+							></el-cascader>
+						</el-form-item>
+						<el-form-item label="积分分类">
+							<el-select style="width: 80px;" size="medium" v-model="Dc_Data.pt_id" placeholder="请选择积分分类">
+								<el-option v-for="item in point_types" :key="item.name" :label="item.name" :value="item.id"></el-option>
+							</el-select>
+						</el-form-item>
+					</el-form>
+				</template>
+			</FormBox>
 			<span slot="footer" class="dialog-footer">
 				<el-button @click="dialogVisible = false" size="medium">取 消</el-button>
 				<el-button type="primary" @click="exportExcel" size="medium">导 出</el-button>
@@ -744,7 +735,7 @@ export default {
 	}
 }
 .date-picker-width {
-	width: 100% !important;
+	// width: 100% !important;
 }
 .nopoint_box {
 	display: inline-block;
@@ -855,9 +846,6 @@ export default {
 .el-range-editor--medium.el-input__inner {
 	width: 280px;
 }
-::v-deep .el-cascader .el-input .el-input__inner {
-	width: 150px;
-}
 .el-checkbox.is-bordered.el-checkbox--medium {
 	padding: 9px 20px 7px 10px;
 }

+ 40 - 34
src/views/ranking/individual_statistics.vue

@@ -1,40 +1,46 @@
 <template>
 	<div>
 		<el-row style="min-width:1160px;">
-			<div class="flex-box-ce">
-				<div>
-					<el-select v-model="select_employee_id" @change="selectEmployeeChange" filterable placeholder="请输入或选择人员">
-						<el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
-					</el-select>
-				</div>
-				<div style="margin:0px 10px;">
-					<el-select v-model="time_type" placeholder="请选择分类" style="width: 100px;">
-						<el-option v-for="item in time_types" :key="item.label" :label="item.label" :value="item.value"></el-option>
-					</el-select>
-				</div>
-				<div>
-					<el-date-picker
-						v-show="time_type == '2'"
-						v-model="export_from.year"
-						class="date-picker-width"
-						type="year"
-						value-format="yyyy"
-						:clearable="false"
-						:editable="false"
-						placeholder="选择年份排名"
-					></el-date-picker>
-					<el-date-picker
-						v-show="time_type == '1' || time_type == '月份'"
-						v-model="export_from.month"
-						class="date-picker-width"
-						type="month"
-						value-format="yyyy-MM"
-						:clearable="false"
-						:editable="false"
-						placeholder="选择月份排名"
-					></el-date-picker>
-				</div>
-			</div>
+			<FormBox  :isShowHeader="false">
+				<template #footer>
+					<el-form ref="form" :inline="true" label-width="60px">
+						<el-form-item label="人员">
+							<el-select size="medium" v-model="select_employee_id" @change="selectEmployeeChange" filterable placeholder="请输入或选择人员">
+								<el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
+							</el-select>
+						</el-form-item>
+						<el-form-item label="时间">
+							<div class="flex-box-ce">
+								<div style="margin-right: 10px;">
+									<el-select size="medium" v-model="time_type" placeholder="请选择分类" style="width: 100px;">
+										<el-option v-for="item in time_types" :key="item.label" :label="item.label" :value="item.value"></el-option>
+									</el-select>
+								</div>
+								<el-date-picker
+									v-show="time_type == '2'"
+									v-model="export_from.year"
+									size="medium"
+									type="year"
+									value-format="yyyy"
+									:clearable="false"
+									:editable="false"
+									placeholder="选择年份排名"
+								></el-date-picker>
+								<el-date-picker
+									v-show="time_type == '1' || time_type == '月份'"
+									v-model="export_from.month"
+									size="medium"
+									type="month"
+									value-format="yyyy-MM"
+									:clearable="false"
+									:editable="false"
+									placeholder="选择月份排名"
+								></el-date-picker>
+							</div>
+						</el-form-item>
+					</el-form>
+				</template>
+			</FormBox>			
 
 			<el-col :span="24" style="min-width:1160px;margin-top:10px;">
 				<el-col :span="18" style="min-width:780px;">

+ 111 - 121
src/views/ranking/integral_event.vue

@@ -1,112 +1,111 @@
 <template>
 	<div>
 		<div class="all padding-20">
-			<el-form ref="form" :inline="true" label-width="90px">
-				<el-form-item label="规则分类">
-					<el-cascader
-						class="date-picker-width"
-						v-model="rule"
-						:options="rule_trees"
-						:props="props"
-						@change="rule_null"
-						size="medium"
-						ref="rule"
-						clearable
-						placeholder="全部规则分类"
-					></el-cascader>
-				</el-form-item>
-				<el-form-item label="积分类型">
-					<el-select class="date-picker-width" size="medium" v-model="formData.pt_id" clearable placeholder="请选择积分类型">
-						<el-option v-for="item in getTypes()" :key="item.name" :label="item.name" :value="item.id"></el-option>
-					</el-select>
-				</el-form-item>
-				<el-form-item label="部门">
-					<el-cascader
-						size="medium"
-						class="date-picker-width"
-						v-model="dept_name"
-						:options="dept_tree"
-						:props="{checkStrictly: true, multiple: true, value: 'id', label: 'name', children: '_child'}"
-						ref="dept"
-						clearable
-						collapse-tags
-						filterable
-						placeholder="全公司"
-					></el-cascader>
-				</el-form-item>
-				<el-form-item label="事件来源">
-					<el-select class="date-picker-width" size="medium" v-model="formData.source_type" clearable placeholder="全部">
-						<el-option v-for="item in source_type" :key="item.id" :label="item.name" :value="item.id"></el-option>
-					</el-select>
-				</el-form-item>
-				<el-form-item label="复核状态">
-					<el-select class="date-picker-width" size="medium" v-model="formData.status"  placeholder="请选择复核状态">
-						<el-option v-for="item in dcArr" :key="item.name" :label="item.name" :value="item.id"></el-option>
-					</el-select>
-				</el-form-item>
-				<el-form-item label="人员状态">
-					<template slot="label">
-						<el-tooltip effect="dark" placement="top">
-						  <template slot="content">
-							默认仅显示组织架构中“已启用”人员的积分事件,未启用、已离职等人员的积分事件可以通过“未启用&未授权”筛选查看
-						  </template>
-						  <span>人员状态	<i class="el-icon-warning"></i></span>
-						</el-tooltip>
-					</template>
-					<el-select class="date-picker-width" size="medium" v-model="formData.is_enable">
-						<el-option  label="已启用" :value="1"></el-option>
-						<el-option  label="未授权&未启用" :value="0"></el-option>
-					</el-select>
-				</el-form-item>
-				<el-form-item label="时间">
-					<el-date-picker
-						v-model="time_slot"
-						type="daterange"
-						size="medium"
-						value-format="yyyy-MM-dd"
-						range-separator="至"
-						start-placeholder="开始日期"
-						end-placeholder="结束日期"
-					></el-date-picker>
-				</el-form-item>
-				<el-form-item label="更新时间" v-if="isDevelopment">
-					<el-date-picker
-						v-model="u_start"
-						type="daterange"
-						size="medium"
-						value-format="yyyy-MM-dd"
-						range-separator="至"
-						start-placeholder="开始日期"
-						end-placeholder="结束日期"
-					></el-date-picker>
-				</el-form-item>
-				<el-form-item>
-					<div class="flex-box-ce">
-						<el-select size="medium" v-model="select_employee_id" filterable clearable placeholder="请输入或选择人员" style="width: 250px;margin-right: 10px;">
-							<el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
-						</el-select>
-						<el-input size="medium" v-model="formData.keyword" placeholder="输入关键字查找" max="200" @keyup.enter.native="keyWordSelect">
-							<el-button size="medium" slot="append" icon="el-icon-search" @click="keyWordSelect"></el-button>
-						</el-input>
-					</div>
-				</el-form-item>
-				<el-form-item>
-					<el-button v-if="employeeOrdept" type="success" size="medium" @click="toleadShw = true" plain>导入数据</el-button>
-					<el-button type="primary" size="medium" @click="exportExcel" plain>导出当前数据</el-button>
-					<el-button class="first-element-btn" size="medium" v-if="employeeOrdept" :disabled="deleteDisabled" @click="deleteInBatches" type="danger">批量删除</el-button>
-					<!-- <el-button type="primary" size="medium" plain @click="swiperShow = true">轮播事件</el-button> -->
-				</el-form-item>
-
-				<div class="diy-tip1" style="margin-bottom: 10px;">
-					<div>当前数据:{{ total }}条</div>
-				</div>
-			</el-form>
-
-			<!-- 表格 -->
+			<FormBox :isShowMore="true" :isShowHeader="false">
+				<template #footer>
+					<el-form ref="form" :inline="true" label-width="90px" label-position="right">
+						<el-form-item label="规则分类">
+							<el-cascader
+								class="date-picker-width"
+								v-model="rule"
+								:options="rule_trees"
+								:props="props"
+								@change="rule_null"
+								size="medium"
+								ref="rule"
+								clearable
+								placeholder="全部规则分类"
+							></el-cascader>
+						</el-form-item>
+						<el-form-item label="积分类型">
+							<el-select class="date-picker-width" size="medium" v-model="formData.pt_id" clearable placeholder="请选择积分类型">
+								<el-option v-for="item in getTypes()" :key="item.name" :label="item.name" :value="item.id"></el-option>
+							</el-select>
+						</el-form-item>
+						<el-form-item label="部门">
+							<el-cascader
+								size="medium"
+								class="date-picker-width"
+								v-model="dept_name"
+								:options="dept_tree"
+								:props="{checkStrictly: true, multiple: true, value: 'id', label: 'name', children: '_child'}"
+								ref="dept"
+								clearable
+								collapse-tags
+								filterable
+								placeholder="全公司"
+							></el-cascader>
+						</el-form-item>
+						<el-form-item label="事件来源">
+							<el-select class="date-picker-width" size="medium" v-model="formData.source_type" clearable placeholder="全部">
+								<el-option v-for="item in source_type" :key="item.id" :label="item.name" :value="item.id"></el-option>
+							</el-select>
+						</el-form-item>
+						<el-form-item label="复核状态">
+							<el-select class="date-picker-width" size="medium" v-model="formData.status"  placeholder="请选择复核状态">
+								<el-option v-for="item in dcArr" :key="item.name" :label="item.name" :value="item.id"></el-option>
+							</el-select>
+						</el-form-item>
+						<el-form-item label="人员状态">
+							<template slot="label">
+								<el-tooltip effect="dark" placement="top">
+								  <template slot="content">
+									默认仅显示组织架构中“已启用”人员的积分事件,未启用、已离职等人员的积分事件可以通过“未启用&未授权”筛选查看
+								  </template>
+								  <span>人员状态	<i class="el-icon-warning"></i></span>
+								</el-tooltip>
+							</template>
+							<el-select class="date-picker-width" size="medium" v-model="formData.is_enable">
+								<el-option  label="已启用" :value="1"></el-option>
+								<el-option  label="未授权&未启用" :value="0"></el-option>
+							</el-select>
+						</el-form-item>
+						<el-form-item label="发生时间">
+							<el-date-picker
+								v-model="time_slot"
+								type="daterange"
+								size="medium"
+								value-format="yyyy-MM-dd"
+								range-separator="至"
+								start-placeholder="开始日期"
+								end-placeholder="结束日期"
+							></el-date-picker>
+						</el-form-item>
+						<el-form-item label="更新时间" v-if="isDevelopment">
+							<el-date-picker
+								v-model="u_start"
+								type="daterange"
+								size="medium"
+								value-format="yyyy-MM-dd"
+								range-separator="至"
+								start-placeholder="开始日期"
+								end-placeholder="结束日期"
+							></el-date-picker>
+						</el-form-item>
+						<el-form-item label="人员搜索">
+							<el-select size="medium" v-model="select_employee_id" filterable clearable placeholder="请输入或选择人员" style="width: 250px;margin-right: 10px;">
+								<el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
+							</el-select>
+						</el-form-item>	
+						<el-form-item label="内容搜索">	
+							<el-input size="medium" v-model="formData.keyword" placeholder="输入关键字查找" max="200"/>
+						</el-form-item>
+					</el-form>
+				</template>
+			</FormBox>
+			
+			<div style="padding: 10px 0;position: relative;z-index: 1;background-color: #fff;">
+				<el-button v-if="employeeOrdept" type="success" size="medium" @click="toleadShw = true" plain>导入数据</el-button>
+				<el-button type="primary" size="medium" @click="exportExcel" plain>导出当前数据</el-button>
+				<el-button class="first-element-btn" size="medium" v-if="employeeOrdept" :disabled="deleteDisabled" @click="deleteInBatches" type="danger">批量删除</el-button>
+			</div>
+			<div style="position: relative;z-index: 1;background-color: #fff;padding-bottom: 10px;">
+				<div class="diy-tip1"><div>当前数据:{{ total }}条</div></div>
+			</div>
 			<div>
 				<el-table :data="list" style="width: 100%;cursor: pointer;" v-loading="loading" @row-click="open_detail" @selection-change="deleteEvents">
 					<el-table-column v-if="employeeOrdept" type="selection" width="55"></el-table-column>
-					<el-table-column prop="employee_name" label="姓名" align="left" min-width="125px">
+					<el-table-column prop="employee_name" label="人员" align="left" min-width="125px">
 						<template slot-scope="scope">
 							<div class="flex-box">
 								<userImage :user_name="scope.row.employee_name" :img_url="scope.row.employee_img_url" width="50px" height="50px"></userImage>
@@ -129,12 +128,12 @@
 						</template>
 					</el-table-column>
 					<el-table-column prop="rule_name" show-overflow-tooltip label="规则分类" align="left" min-width="140px"></el-table-column>
-					<el-table-column prop="create_time" label="事件发生时间" align="left" min-width="140px">
+					<el-table-column prop="create_time" label="发生时间" align="left" min-width="140px">
 						<template slot-scope="scope">
 							{{ scope.row.event_time }}
 						</template>
 					</el-table-column>
-					<el-table-column prop="source_type" label="来源" align="left" min-width="140px">
+					<el-table-column prop="source_type" label="事件来源" align="left" min-width="140px">
 						<template slot-scope="scope">
 							<span v-show="scope.row.source_type == 1">
 								积分奖扣
@@ -367,7 +366,6 @@
 							:headers="ATOKEN"
 							ref="upload"
 							:action="action"
-							:on-remove="handleRemove"
 							:on-success="handlePictureCardPrediv"
 							:file-list="fileList"
 							:before-upload="beforeFilesUpload"
@@ -388,6 +386,7 @@
 import Steps from '@/components/Steps';
 import Review from '@/components/Review';
 import toLead from '@/components/toLead';
+import {_debounce} from '@/api/auth';
 export default {
 	data() {
 		return {
@@ -476,6 +475,12 @@ export default {
 		this.point_types = this.getTypes();
 	},
 	watch: {
+		'formData.keyword': {
+			deep: true,
+			handler: _debounce(function(val) {
+				this.keyWordSelect();
+			}, 1000)
+		},
 		toleadShw(val) {
 			if (val) this.nowIndex = 1;
 		},
@@ -502,13 +507,6 @@ export default {
 		},
 		'formData.status'(val) {
 			this.formData.dc_status=JSON.stringify([val]);
-			// if(val==0){
-			// 	this.formData.dc_status=JSON.stringify([1,2]);
-			// }else if(val==1){
-			// 	this.formData.dc_status=JSON.stringify([1]);
-			// }else{
-			// 	this.formData.dc_status=JSON.stringify([2]);
-			// }
 			this.formData.page = 1;
 			this.get_integral_list(this.formData);
 		},
@@ -583,13 +581,6 @@ export default {
 				return item.code != 'JX';
 			});
 		},
-		handleRemove(file, fileList) {
-			// if (fileList !== null && fileList.length != 0) {
-			// 	this.import_btn_show = true;
-			// } else {
-			// 	this.import_btn_show = false;
-			// }
-		},
 		// 导入相关
 		close_import() {
 			this.excelImportShow = false;
@@ -993,7 +984,6 @@ span.point {
 }
 
 .diy-tip1 {
-	margin-bottom: 10px !important;
 	background: #f0f9eb !important;
 	color: #67c23a !important;
 	border: 1px solid #67c23a !important;

+ 94 - 139
src/views/ranking/log_rank.vue

@@ -1,92 +1,66 @@
 <template>
 	<div>
 		<div class="all">
-			<div>
-				<el-form :inline="true">
-					<el-form-item label="时间">
-						<el-select size="medium" v-model="time_type" placeholder="请选择分类" style="width: 100px;">
-							<el-option v-for="item in time_types" :key="item.label" :label="item.label" :value="item.value"></el-option>
-						</el-select>
-					</el-form-item>
-					<el-form-item>
-						<el-date-picker
-							size="medium"
-							v-show="time_type == '1' || time_type == '月份'"
-							v-model="formData.month"
-							class="date-picker-width"
-							type="month"
-							value-format="yyyy-MM"
-							placeholder="选择月份排名"
-						></el-date-picker>
-						<el-date-picker
-							size="medium"
-							v-show="time_type == '2'"
-							v-model="formData.year"
-							class="date-picker-width"
-							type="year"
-							value-format="yyyy"
-							placeholder="选择年份排名"
-						></el-date-picker>
-						<season v-if="time_type == '3'" :isActive="true" class="date-picker-width" @confirm="export_quarter_confirm"></season>
-						<el-date-picker
-							size="medium"
-							v-show="time_type == '4'"
-							class="date-picker-width"
-							v-model="formData.time_range"
-							type="daterange"
-							format="yyyy 年 MM 月 dd 日"
-							value-format="yyyy-MM-dd"
-							range-separator="至"
-							start-placeholder="开始日期"
-							end-placeholder="结束日期"
-						></el-date-picker>
-					</el-form-item>
-					<el-form-item label="部门">
-						<el-cascader
-							size="medium"
-							class="date-picker-width"
-							v-model="dept_name"
-							:options="dept_tree"
-							:props="{ checkStrictly: true, value: 'id', label: 'name', children: '_child' }"
-							ref="dept"
-							clearable
-							filterable
-							placeholder="全公司"
-						></el-cascader>
-					</el-form-item>
-<!-- 					<el-form-item label="谁不参与排名">
-						<el-select v-model="formData.exclusion" size="medium" multiple filterable clearable collapse-tags placeholder="请选择员工">
-							<el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
-						</el-select>
-					</el-form-item> -->
-<!-- 					<el-form-item label="规则分类">
-						<el-cascader
-							size="medium"
-							class="date-picker-width"
-							v-model="rule_id"
-							:options="rule_trees"
-							:props="props2"
-							ref="rule_id"
-							clearable
-							placeholder="请选择规则分类"
-						></el-cascader>
-					</el-form-item>
-					<el-form-item label="积分分类">
-						<el-select class="date-picker-width" size="medium" v-model="formData.pt_id" placeholder="请选择积分分类">
-							<el-option v-for="item in point_types" :key="item.name" :label="item.name" :value="item.id"></el-option>
-						</el-select>
-					</el-form-item> -->
-	<!-- 				<el-form-item label="人员">
-						<el-select size="medium" v-model="formData.position" style="width:150px" placeholder="请选择">
-							<el-option v-for="item in positions" :key="item.age" :label="item.name" :value="item.age"></el-option>
-						</el-select>
-					</el-form-item> -->
-					<el-form-item>
-						<el-checkbox v-model="sort" size="medium" label="排名由低到高" border></el-checkbox>
-						<!-- <el-button type="primary" size="medium" @click="selectBtn" style="margin-left:20px">查询</el-button> -->
-					</el-form-item>
-					<el-form-item><el-button type="primary" size="medium" plain @click="dialogVisible = true">导出排名</el-button></el-form-item>
-				</el-form>
+			<FormBox  :isShowHeader="false">
+				<template #footer>
+					<el-form :inline="true" label-width="70px">
+						<el-form-item label="时间">
+							<el-select size="medium" v-model="time_type" placeholder="请选择分类" style="width: 100px;">
+								<el-option v-for="item in time_types" :key="item.label" :label="item.label" :value="item.value"></el-option>
+							</el-select>
+						</el-form-item>
+						<el-form-item>
+							<el-date-picker
+								size="medium"
+								v-show="time_type == '1' || time_type == '月份'"
+								v-model="formData.month"
+								class="date-picker-width"
+								type="month"
+								value-format="yyyy-MM"
+								placeholder="选择月份排名"
+							></el-date-picker>
+							<el-date-picker
+								size="medium"
+								v-show="time_type == '2'"
+								v-model="formData.year"
+								class="date-picker-width"
+								type="year"
+								value-format="yyyy"
+								placeholder="选择年份排名"
+							></el-date-picker>
+							<season v-if="time_type == '3'" :isActive="true" class="date-picker-width" @confirm="export_quarter_confirm"></season>
+							<el-date-picker
+								size="medium"
+								v-show="time_type == '4'"
+								class="date-picker-width"
+								v-model="formData.time_range"
+								type="daterange"
+								format="yyyy 年 MM 月 dd 日"
+								value-format="yyyy-MM-dd"
+								range-separator="至"
+								start-placeholder="开始日期"
+								end-placeholder="结束日期"
+							></el-date-picker>
+						</el-form-item>
+						<el-form-item label="部门">
+							<el-cascader
+								size="medium"
+								class="date-picker-width"
+								v-model="dept_name"
+								:options="dept_tree"
+								:props="{ checkStrictly: true, value: 'id', label: 'name', children: '_child' }"
+								ref="dept"
+								clearable
+								filterable
+								placeholder="全公司"
+							></el-cascader>
+						</el-form-item>
+					</el-form>
+				</template>
+			</FormBox>
+			<div style="margin: 10px 0;">
+				<el-button style="margin-right: 10px;" type="primary" size="medium" plain @click="dialogVisible = true">导出排名</el-button>
+				<el-checkbox v-model="sort" size="medium" label="排名由低到高" border></el-checkbox>
 			</div>
 			<el-table :data="list" style="width: 100%" v-loading="loading">
 				<el-table-column label="名次" width="100" align="center">
@@ -130,59 +104,37 @@
 		
 		<!-- 导出弹窗 -->
 		<el-dialog title="导出排名" :visible.sync="dialogVisible" width="730px" top="10%">
-			<div style="font-size:15px;margin-bottom: 20px;">系统将按以下已选条件导出对应的排名报表</div>
-			<el-form :inline="true">
-				<div class="picker_er">
-					<el-form-item label="时间">
-						<el-date-picker
-							v-model="Dc_Data.value1"
-							type="daterange"
-							size="medium"
-							value-format="timestamp"
-							range-separator="至"
-							start-placeholder="开始日期"
-							end-placeholder="结束日期"
-						></el-date-picker>
-					</el-form-item>
-<!-- 					<el-form-item label="人员" style="margin-left:30px">
-						<el-select size="medium" v-model="Dc_Data.DC_position" style="width:150px" placeholder="请选择">
-							<el-option v-for="item in positions" :key="item.id" :label="item.name" :value="item.age"></el-option>
-						</el-select>
-					</el-form-item> -->
-				</div>
-				<el-form-item label="部门">
-					<el-cascader
-						class="date-picker-width cascader_bm"
-						v-model="Dc_Data.dept_name"
-						:options="dept_tree"
-						:props="{ checkStrictly: true, value: 'id', label: 'name', children: '_child' }"
-						ref="dept2"
-						size="medium"
-						clearable
-						filterable
-						placeholder="全公司"
-					></el-cascader>
-				</el-form-item>
-<!-- 				<el-form-item label="积分分类">
-					<el-select  style="width: 80px;" size="medium" v-model="Dc_Data.pt_id" placeholder="请选择积分分类">
-						<el-option v-for="item in point_types" :key="item.name" :label="item.name" :value="item.id"></el-option>
-					</el-select>
-				</el-form-item>
-				<el-form-item label="规则分类" style="margin-left:20px">
-					<el-cascader
-						class="date-picker-width"
-						@change="ruleInquiredialog"
-						v-model="rule_ids"
-						:options="rule_trees"
-						:props="props"
-						size="medium"
-						ref="derive"
-						clearable
-						collapse-tags
-						placeholder="请选择规则分类"
-					></el-cascader>
-				</el-form-item> -->
-			</el-form>
+			<div style="font-size:15px;margin-bottom:10px;font-weight: 600;">系统将按以下已选条件导出对应的排名报表</div>
+			<FormBox :isShowHeader="false">
+				<template slot="footer">
+					<el-form :inline="true" label-width="70px">
+						<el-form-item label="时间">
+							<el-date-picker
+								v-model="Dc_Data.value1"
+								type="daterange"
+								size="medium"
+								value-format="timestamp"
+								range-separator="至"
+								start-placeholder="开始日期"
+								end-placeholder="结束日期"
+							></el-date-picker>
+						</el-form-item>
+						<el-form-item label="部门">
+							<el-cascader
+								class="date-picker-width"
+								v-model="Dc_Data.dept_name"
+								:options="dept_tree"
+								:props="{ checkStrictly: true, value: 'id', label: 'name', children: '_child' }"
+								ref="dept2"
+								size="medium"
+								clearable
+								filterable
+								placeholder="全公司"
+							></el-cascader>
+						</el-form-item>
+					</el-form>
+				</template>
+			</FormBox>
 			<span slot="footer" class="dialog-footer">
 				<el-button @click="dialogVisible = false" size="medium">取 消</el-button>
 				<el-button type="primary" @click="exportExcel" size="medium">导 出</el-button>
@@ -473,4 +425,7 @@ export default {
 .search ::v-deep .el-input-group__append:active .el-icon-search {
 	color: #fff;
 }
+.el-checkbox.is-bordered.el-checkbox--medium {
+	padding: 9px 20px 7px 10px;
+}
 </style>

+ 96 - 99
src/views/ranking/manager_statistics.vue

@@ -4,68 +4,59 @@
 			<el-tabs v-model="activeName">
 				<!-- 奖扣完成情况 -->
 				<el-tab-pane label="奖扣完成情况" name="second">
-					<el-form :model="condition" :inline="true" ref="formData">
-						<!-- 部门 -->
-						<el-form-item label="部门">
-							<el-cascader
-								size="medium"
-								class="date-picker-width"
-								v-model="dept_name_xq_xq"
-								:options="dept_tree"
-								@change="get_last_dept_null"
-								:props="{ checkStrictly: true, value: 'id', label: 'name', children: '_child' }"
-								ref="dept"
-								clearable
-								filterable
-								change-on-select
-								placeholder="全公司"
-							></el-cascader>
-						</el-form-item>
+					<FormBox  :isShowHeader="false">
+						<template #footer>
 
-						<!-- 时间 -->
-						<el-form-item label="时间">
-							<el-date-picker
-								class="date-picker-width"
-								v-model="condition.month"
-								:clearable="false"
-								size="medium"
-								width="100%"
-								type="month"
-								placeholder="请选择月份"
-								value-format="yyyy-MM"
-							></el-date-picker>
-						</el-form-item>
+							<el-form :model="condition" :inline="true" ref="formData" label-width="70px">
+								<!-- 部门 -->
+								<el-form-item label="部门">
+									<el-cascader
+										size="medium"
+										class="date-picker-width"
+										v-model="dept_name_xq_xq"
+										:options="dept_tree"
+										@change="get_last_dept_null"
+										:props="{ checkStrictly: true, value: 'id', label: 'name', children: '_child' }"
+										ref="dept"
+										clearable
+										filterable
+										change-on-select
+										placeholder="全公司"
+									></el-cascader>
+								</el-form-item>
 
-						<!-- 搜索框 -->
-						<el-form-item>
-							<el-input
-								v-model="condition.keyword"
-								placeholder="输入同事姓名"
-								max="200"
-								size="medium"
-								@keyup.enter.native="keyWordSelect"
-								class="persons_name"
-								:clearable="true"
-							>
-								<el-button slot="append" size="medium" icon="el-icon-search" @click="search_box"></el-button>
-							</el-input>
-						</el-form-item>
+								<!-- 时间 -->
+								<el-form-item label="时间">
+									<el-date-picker
+										class="date-picker-width"
+										v-model="condition.month"
+										:clearable="false"
+										size="medium"
+										width="100%"
+										type="month"
+										placeholder="请选择月份"
+										value-format="yyyy-MM"
+									></el-date-picker>
+								</el-form-item>
 
-						<!-- 达标选项 -->
-						<br />
-						<el-form-item><el-checkbox v-model="allPass" size="medium" label="只看全部达标的"></el-checkbox></el-form-item>
-						<!-- 导出报表 -->
-						<el-form-item>
-							<downloadexcel
-								v-if="exportExcelArr.length>0"
-								:fetch="returnArr"
-								 name="管理者奖扣列表.xls"
-								:fields="json_fields"
-								>
-								<el-button type="primary" plain size="medium" style="margin-left:20px">导出报表</el-button>
-							</downloadexcel>
-						</el-form-item>
-					</el-form>
+								<!-- 搜索框 -->
+								<el-form-item label="人员搜索">
+									<el-input v-model="condition.keyword" placeholder="输入同事姓名" max="200" size="medium" clearable></el-input>
+								</el-form-item>
+							</el-form>
+					</template>
+					</FormBox>
+					<div style="margin: 10px 0;" class="flex-box-ce">
+						<downloadexcel
+							v-if="exportExcelArr.length>0"
+							:fetch="returnArr"
+							 name="管理者奖扣列表.xls"
+							:fields="json_fields"
+							>
+							<el-button type="primary" plain size="medium" style="margin-right: 10px;">导出报表</el-button>
+						</downloadexcel>
+						<el-checkbox v-model="allPass" size="medium" label="只看全部达标的" border></el-checkbox>
+					</div>
 					<div class="flex-box-end">
 						<span class="orange">*管理者奖扣任务均为B分,对A分不做要求*</span>
 					</div>
@@ -114,7 +105,7 @@
 								<b>{{ scope.row.exec.count }}&nbsp;</b>
 								<span :class="scope.row.exec.status == 1 ? 'green' : ''">{{ scope.row.exec.status == 1 ? '达标' : '' }}</span>
 								<br />
-								<span class="span_h">奖扣人次 {{ scope.row.exec.target }}人次</span>
+								<span class="span_h">人次目标 {{ scope.row.exec.target }}人次</span>
 							</template>
 						</el-table-column>
 						<el-table-column>
@@ -143,34 +134,38 @@
 					</center>
 				</el-tab-pane>
 				<el-tab-pane label="奖扣执行对比" name="first" v-if="false">
-					<el-form :model="formData" :inline="true" ref="formData">
-						<el-form-item label="部门">
-							<el-cascader
-								v-model="dept_name_xq"
-								:options="dept_tree"
-								@change="dept_null"
-								:props="{ checkStrictly: true, value: 'id', label: 'name', children: '_child' }"
-								ref="depts"
-								filterable
-								size="medium"
-								change-on-select
-								placeholder="全公司"
-								clearable
-							></el-cascader>
-						</el-form-item>
-						<el-form-item label="时间">
-							<el-date-picker
-								class="date-picker-width"
-								v-model="formData.month"
-								:clearable="false"
-								width="100%"
-								type="month"
-								size="medium"
-								placeholder="请选择月份"
-								value-format="yyyy-MM"
-							></el-date-picker>
-						</el-form-item>
-					</el-form>
+					<FormBox  :isShowHeader="false">
+						<template #footer>
+							<el-form :model="formData" :inline="true" ref="formData" label-width="70px">
+								<el-form-item label="部门">
+									<el-cascader
+										v-model="dept_name_xq"
+										:options="dept_tree"
+										@change="dept_null"
+										:props="{ checkStrictly: true, value: 'id', label: 'name', children: '_child' }"
+										ref="depts"
+										filterable
+										size="medium"
+										change-on-select
+										placeholder="全公司"
+										clearable
+									></el-cascader>
+								</el-form-item>
+								<el-form-item label="时间">
+									<el-date-picker
+										class="date-picker-width"
+										v-model="formData.month"
+										:clearable="false"
+										width="100%"
+										type="month"
+										size="medium"
+										placeholder="请选择月份"
+										value-format="yyyy-MM"
+									></el-date-picker>
+								</el-form-item>
+							</el-form>
+						</template>
+					</FormBox>
 					<div class="flex-box-end">
 						<span class="orange">*管理者奖扣任务均为B分,对A分不做要求*</span>
 					</div>
@@ -229,11 +224,7 @@
 									<p>扣分</p>
 									<p class="target">目标{{ personalData.task.deduction.target }}</p>
 								</div>
-<!-- 								<div class="dataItem flex-1">
-									<p class="point">{{ personalData.task.ratio.ratio }}:1</p>
-									<p>奖扣比例</p>
-									<p class="target">目标 ≤ {{ personalData.task.ratio.target_ratio }}:1</p>
-								</div> -->
+
 								<div class="dataItem flex-1">
 									<p class="point" v-if="personalData.task.ratio.enable==1">{{ personalData.task.ratio.reward_ratio }}:1</p>
 									<p class="point" v-else>-</p>
@@ -269,6 +260,7 @@
 </template>
 <script>
 import downloadexcel from "vue-json-excel";	
+import {_debounce} from '@/api/auth';
 export default {
 	components:{downloadexcel},
 	name:'manager_statistics',
@@ -345,7 +337,14 @@ export default {
 			}
 			this.condition.page = 1;
 			this.get_last();
-		}
+		},
+		'condition.keyword': {
+			deep: true,
+			handler: _debounce(function(val) {
+				this.condition.page = 1;
+				this.get_last();
+			}, 1000)
+		},
 	},
 	methods: {
 		returnArr(){
@@ -496,11 +495,6 @@ export default {
 				this.get_last();
 			});
 		},
-		//搜索框
-		search_box() {
-			this.condition.page = 1;
-			this.get_last();
-		},
 		//导出报表
 		// opneWebSocket() {
 			// let data = '';
@@ -711,6 +705,9 @@ export default {
 };
 </script>
 <style scoped lang="scss">
+.el-checkbox.is-bordered.el-checkbox--medium {
+	padding: 9px 20px 7px 10px;
+}	
 .search_box {
 	::v-deep button:active {
 		background: #26a2ff;

+ 36 - 71
src/views/ranking/task_rank.vue

@@ -1,8 +1,9 @@
 <template>
 	<div>
 		<div class="all">
-			<div>
-				<el-form :inline="true">
+			<FormBox  :isShowHeader="false">
+				<template #footer>
+					<el-form :inline="true" label-width="70px">
 					<el-form-item label="时间">
 						<el-select size="medium" v-model="time_type" placeholder="请选择分类" style="width: 100px;">
 							<el-option v-for="item in time_types" :key="item.label" :label="item.label" :value="item.value"></el-option>
@@ -54,39 +55,18 @@
 							placeholder="全公司"
 						></el-cascader>
 					</el-form-item>
-<!-- 					<el-form-item label="谁不参与排名">
-						<el-select v-model="formData.exclusion" size="medium" multiple filterable clearable collapse-tags placeholder="请选择员工">
-							<el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
-						</el-select>
-					</el-form-item> -->
-<!-- 					<el-form-item label="规则分类">
-						<el-cascader
-							size="medium"
-							class="date-picker-width"
-							v-model="rule_id"
-							:options="rule_trees"
-							:props="props2"
-							ref="rule_id"
-							clearable
-							placeholder="请选择规则分类"
-						></el-cascader>
-					</el-form-item> -->
+
 					<el-form-item label="积分类型">
 						<el-select class="date-picker-width" size="medium" v-model="formData.pt_id" placeholder="请选择积分类型">
 							<el-option v-for="item in point_types" :key="item.name" :label="item.name" :value="item.id"></el-option>
 						</el-select>
 					</el-form-item>
-<!-- 					<el-form-item label="人员">
-						<el-select size="medium" v-model="formData.position" style="width:150px" placeholder="请选择">
-							<el-option v-for="item in positions" :key="item.age" :label="item.name" :value="item.age"></el-option>
-						</el-select>
-					</el-form-item> -->
-					<el-form-item>
-						<el-checkbox v-model="sort" size="medium" label="排名由低到高" border></el-checkbox>
-						<!-- <el-button type="primary" size="medium" @click="selectBtn" style="margin-left:20px">查询</el-button> -->
-					</el-form-item>
-					<el-form-item><el-button type="primary" size="medium" plain @click="dialogVisible = true">导出排名</el-button></el-form-item>
 				</el-form>
+				</template>
+			</FormBox>
+			<div style="margin: 10px 0;">
+				<el-button style="margin-right: 10px;" type="primary"  size="medium" plain @click="dialogVisible = true">导出排名</el-button>
+				<el-checkbox v-model="sort" size="medium" label="排名由低到高" border></el-checkbox>
 			</div>
 			<el-table :data="list" style="width: 100%" v-loading="loading">
 				<el-table-column label="名次" width="100" align="center">
@@ -130,9 +110,10 @@
 		
 		<!-- 导出弹窗 -->
 		<el-dialog title="导出排名" :visible.sync="dialogVisible" width="730px" top="10%">
-			<div style="font-size:15px;margin-bottom: 20px;">系统将按以下已选条件导出对应的排名报表</div>
-			<el-form :inline="true">
-				<div class="picker_er">
+			<div style="font-size:15px;margin-bottom:10px;font-weight: 600;">系统将按以下已选条件导出对应的排名报表</div>
+			<FormBox :isShowHeader="false">
+				<template slot="footer">
+				<el-form :inline="true" label-width="70px">
 					<el-form-item label="时间">
 						<el-date-picker
 							v-model="Dc_Data.value1"
@@ -144,46 +125,27 @@
 							end-placeholder="结束日期"
 						></el-date-picker>
 					</el-form-item>
-		
-<!-- 					<el-form-item label="人员" style="margin-left:30px">
-						<el-select size="medium" v-model="Dc_Data.DC_position" style="width:150px" placeholder="请选择">
-							<el-option v-for="item in positions" :key="item.id" :label="item.name" :value="item.age"></el-option>
+					<el-form-item label="部门">
+						<el-cascader
+							class="date-picker-width cascader_bm"
+							v-model="Dc_Data.dept_name"
+							:options="dept_tree"
+							:props="{ checkStrictly: true, value: 'id', label: 'name', children: '_child' }"
+							ref="dept2"
+							size="medium"
+							clearable
+							filterable
+							placeholder="全公司"
+						></el-cascader>
+					</el-form-item>
+					<el-form-item label="积分类型">
+						<el-select  style="width: 80px;" size="medium" v-model="Dc_Data.pt_id" placeholder="请选择积分类型">
+							<el-option v-for="item in point_types" :key="item.name" :label="item.name" :value="item.id"></el-option>
 						</el-select>
-					</el-form-item> -->
-				</div>
-				<el-form-item label="部门">
-					<el-cascader
-						class="date-picker-width cascader_bm"
-						v-model="Dc_Data.dept_name"
-						:options="dept_tree"
-						:props="{ checkStrictly: true, value: 'id', label: 'name', children: '_child' }"
-						ref="dept2"
-						size="medium"
-						clearable
-						filterable
-						placeholder="全公司"
-					></el-cascader>
-				</el-form-item>
-				<el-form-item label="积分类型">
-					<el-select  style="width: 80px;" size="medium" v-model="Dc_Data.pt_id" placeholder="请选择积分类型">
-						<el-option v-for="item in point_types" :key="item.name" :label="item.name" :value="item.id"></el-option>
-					</el-select>
-				</el-form-item>
-<!-- 				<el-form-item label="规则分类" style="margin-left:20px">
-					<el-cascader
-						class="date-picker-width"
-						@change="ruleInquiredialog"
-						v-model="rule_ids"
-						:options="rule_trees"
-						:props="props"
-						size="medium"
-						ref="derive"
-						clearable
-						collapse-tags
-						placeholder="请选择规则分类"
-					></el-cascader>
-				</el-form-item> -->
-			</el-form>
+					</el-form-item>
+					</el-form>
+				</template>
+			</FormBox>
 			<span slot="footer" class="dialog-footer">
 				<el-button @click="dialogVisible = false" size="medium">取 消</el-button>
 				<el-button type="primary" @click="exportExcel" size="medium">导 出</el-button>
@@ -479,4 +441,7 @@ export default {
 .search ::v-deep .el-input-group__append:active .el-icon-search {
 	color: #fff;
 }
+.el-checkbox.is-bordered.el-checkbox--medium {
+	padding: 9px 20px 7px 10px;
+}
 </style>

+ 64 - 68
src/views/ranking/total_rank.vue

@@ -5,26 +5,29 @@
 		</div>
 
 		<div class="all padding-20">
-			<el-form :inline="true">
-				<el-form-item label="部门">
-					<el-cascader
-					  size="medium"
-						class="date-picker-width"
-						v-model="dept_name"
-						:options="dept_tree"
-						:props="{ checkStrictly: true,value:'id',label:'name',children:'_child'}"
-						ref="dept"
-						clearable
-						filterable
-						placeholder="全公司"
-					></el-cascader>
-				</el-form-item>
-				<el-form-item>
-					<el-checkbox v-model="sort" size="medium" label="排名由低到高" border></el-checkbox>
-					<el-button type="primary" size="medium" @click="dialogVisible = true" style="margin-left: 10px;" plain>导出排名</el-button>
-				</el-form-item>
-			</el-form>
-
+			<FormBox :isShowHeader="false">
+				<template slot="footer">
+					<el-form :inline="true" label-width="70px">
+						<el-form-item label="部门">
+							<el-cascader
+							  size="medium"
+								class="date-picker-width"
+								v-model="dept_name"
+								:options="dept_tree"
+								:props="{ checkStrictly: true,value:'id',label:'name',children:'_child'}"
+								ref="dept"
+								clearable
+								filterable
+								placeholder="全公司"
+							></el-cascader>
+						</el-form-item>
+					</el-form>
+				</template>
+			</FormBox>
+			<div style="margin: 10px 0;">
+				<el-button type="primary" style="margin-right: 10px;" size="medium" plain @click="dialogVisible = true">导出排名</el-button>
+				<el-checkbox v-model="sort" size="medium" label="排名由低到高" border></el-checkbox>
+			</div>
 			<el-table :data="list" style="width: 100%;cursor: pointer;" v-loading="loading" @row-click="open_detail">
 				<el-table-column label="名次" width="80" align="center">
 					<template slot-scope="scope">
@@ -73,42 +76,44 @@
 		
 		<!-- 导出弹窗 -->
 		<el-dialog title="导出排名" :visible.sync="dialogVisible" width="730px" top="10%">
-			<span style="font-size:15px">系统将按以下已选条件导出对应的排名报表</span>
-			<el-form :inline="true">
-				<div class="picker_er">
-					<el-form-item label="时间">
-						<el-date-picker
-							v-model="Dc_Data.value1"
-							type="daterange"
-							 size="medium"
-							value-format="yyyy-MM-dd"
-							format="yyyy-MM-dd"
-							range-separator="至"
-							start-placeholder="开始日期"
-							end-placeholder="结束日期"
-						></el-date-picker>
-					</el-form-item>
-		
-					<el-form-item label="人员" style="margin-left:30px">
-						<el-select  size="medium" v-model="Dc_Data.DC_position" style="width:150px" placeholder="请选择">
-							<el-option v-for="item in positions" :key="item.id" :label="item.name" :value="item.age"></el-option>
-						</el-select>
-					</el-form-item>
-				</div>
-				<el-form-item label="部门">
-					<el-cascader
-						class="date-picker-width cascader_bm"
-						v-model="Dc_Data.dept_name"
-						:options="dept_tree"
-						:props="{ checkStrictly: true,value:'id',label:'name',children:'_child'}"
-						ref="dept2"
-						size="medium"
-						clearable
-						filterable
-						placeholder="全公司"
-					></el-cascader>
-				</el-form-item>
-			</el-form>
+			<div style="font-size:15px;margin-bottom:10px;font-weight: 600;">系统将按以下已选条件导出对应的排名报表</div>
+			<FormBox :isShowHeader="false">
+				<template slot="footer">
+					<el-form :inline="true"  label-width="70px">
+						<el-form-item label="人员">
+							<el-select  size="medium" v-model="Dc_Data.DC_position" placeholder="请选择">
+								<el-option v-for="item in positions" :key="item.id" :label="item.name" :value="item.age"></el-option>
+							</el-select>
+						</el-form-item>
+						<el-form-item label="部门">
+							<el-cascader
+								class="date-picker-width cascader_bm"
+								v-model="Dc_Data.dept_name"
+								:options="dept_tree"
+								:props="{ checkStrictly: true,value:'id',label:'name',children:'_child'}"
+								ref="dept2"
+								size="medium"
+								clearable
+								filterable
+								placeholder="全公司"
+							></el-cascader>
+						</el-form-item>
+						<el-form-item label="时间">
+							<el-date-picker
+								v-model="Dc_Data.value1"
+								type="daterange"
+								 size="medium"
+								value-format="yyyy-MM-dd"
+								format="yyyy-MM-dd"
+								range-separator="至"
+								start-placeholder="开始日期"
+								end-placeholder="结束日期"
+							></el-date-picker>
+						</el-form-item>
+					</el-form>
+				</template>
+			</FormBox>
+
 			<span slot="footer" class="dialog-footer">
 				<el-button @click="dialogVisible = false"  size="medium">取 消</el-button>
 				<el-button type="primary" @click="exportExcel"  size="medium">导 出</el-button>
@@ -268,6 +273,9 @@ export default {
 };
 </script>
 <style scoped lang="scss">
+.el-checkbox.is-bordered.el-checkbox--medium {
+	padding: 9px 20px 7px 10px;
+}
 .search_box {
 	::v-deep button:active {
 		background: #26a2ff;
@@ -298,7 +306,6 @@ export default {
 	height: 110px;
 	line-height: none;
 	margin: 22px auto 16px;
-	// background: url("@/assets/image/rules_mould.png") no-repeat center;
 	background-size: 99%;
 }
 .title {
@@ -378,15 +385,4 @@ export default {
 		}
 	}
 }
-</style>
-<style lang="scss">
-// .el-cascader-menu .el-cascader-menu__wrap .el-scrollbar__view li.el-cascader-node {
-//   height: auto;
-//   max-width: 500px;
-//   .el-cascader-node__label {
-//     white-space: initial;
-//     overflow: initial;
-//     text-overflow: initial;
-//   }
-// }
 </style>

+ 18 - 15
src/views/set/framework.vue

@@ -41,25 +41,28 @@
 					</div>
 				</div>
 				<div class="terr-right border-right flex-1">
-					<div class="margin-bottom flex-box-ce">
+					<FormBox  :isShowHeader="false">
+						<template #footer>
+							<el-form ref="form" :inline="true" label-width="70PX">
+								<el-form-item label="启用状态">
+									<el-select v-model="status"  size="medium" style="margin-right: 10px;width: 150px;">
+									  <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"></el-option>
+									</el-select>
+								</el-form-item>
+								<el-form-item label="姓名搜索">
+									<el-input placeholder="输入同事姓名" size="medium" style="width: 230px;" v-model="keywords" clearable></el-input>
+								</el-form-item>
+							</el-form>
+						</template>
+					</FormBox>
+					<div style="margin: 10px 0;" class="flex-box-ce">
 						<el-button @click="participation()" :loading="enable_loading" size="medium" type="primary">批量启用</el-button>
-						<el-button @click="forbidden()" :loading="enable_loading" size="medium" type="danger" style="margin-right: 10px;">批量禁用</el-button>
-						<el-select v-model="status"  size="medium" style="margin-right: 10px;width: 150px;">
-						  <el-option
-						    v-for="item in options"
-						    :key="item.value"
-						    :label="item.label"
-						    :value="item.value">
-						  </el-option>
-						</el-select>
-						<el-input placeholder="输入同事姓名" size="medium" style="width: 230px;" v-model="keywords" clearable></el-input>
+						<el-button @click="forbidden()" :loading="enable_loading" size="medium" type="danger">批量禁用</el-button>
+						<el-button  size="medium" type="success" @click="import_rules_show = true" plain>导入人员</el-button>
+						<el-button  size="medium" type="primary" @click="derivedRule" plain>导出人员</el-button>
 						<div class="flex-1"></div>
 						<el-button @click="showDrawerTow=true" plain size="medium" type="primary">未授权人员</el-button>
 					</div>
-					<div>
-						<el-button size="small" type="success" @click="import_rules_show = true" plain>导入人员</el-button>
-						<el-button size="small" type="primary" @click="derivedRule" plain>导出人员</el-button>
-					</div>
 					<el-table :data="userList" @selection-change="handleSelectionChange" v-loading="tableToading">
 						<el-table-column type="selection" width="50" :selectable="selectable"></el-table-column>
 						<el-table-column label="姓名">

+ 10 - 7
src/views/set/jurisdiction.vue

@@ -216,7 +216,7 @@
 									</span>
 								</template>
 							</el-table-column>
-							<el-table-column label="奖扣次数">
+							<el-table-column label="人次目标">
 								<template slot-scope="scope">
 									<div @click="open_bonus_deducted(scope.row)" v-show="scope.row.exec_count == 0" class="cursor_pointer" style="text-decoration:underline">
 										未设置
@@ -232,7 +232,7 @@
 									<div @click="open_bonus_deducted(scope.row)" v-show="scope.row.exec_count_point != 0">{{ scope.row.exec_count_point }}</div>
 								</template>
 							</el-table-column>
-							<el-table-column label="奖扣比例">
+							<el-table-column label="比例目标">
 								<template slot-scope="scope">
 									<div @click="open_bonus_deducted(scope.row)" v-show="scope.row.reward_ratio == 0" class="cursor_pointer" style="text-decoration:underline">
 										未设置
@@ -473,7 +473,7 @@
 			</span>
 		</el-dialog>
 
-		<el-dialog title="设置积分权限" :visible.sync="integral_limit_show" :close-on-click-modal="false" width="700px">
+		<el-dialog :title="'设置积分权限 '+ selectUser" :visible.sync="integral_limit_show" :close-on-click-modal="false" width="700px">
 			<el-form label-width="180px" :model="integral_limit_form" ref="integral_limit_form" v-loading="integral_limit_loading">
 				<span v-for="(item, index) in integral_limit_form.point_limit" :key="index" v-show="item.pt_id !== 1">
 					<el-form-item :label="item.name + '权限(单次奖扣)'" :rules="[{ required: true, message: '分值不能为空' }, { type: 'number', message: '分值必须为数字值' }]">
@@ -523,7 +523,7 @@
 			</span>
 		</el-dialog>
 
-		<el-dialog title="每月奖扣目标 (B分)" :visible.sync="bonus_deducted_show" width="600px">
+		<el-dialog :title="'每月奖扣目标 (B分)  '+  selectUser" :visible.sync="bonus_deducted_show" width="600px">
 			<el-form :model="integral_limit_form" ref="integral_limit_form" :rules="integral_limit_rules" label-width="130px" v-loading="bonus_deducted_loading">
 				<span v-for="(item, index) in integral_limit_form.reward_task_monthly" :key="index" v-show="item.name == 'B分'">
 					<el-form-item>
@@ -574,7 +574,7 @@
 
 				<el-form-item prop="exec_count">
 					<template slot="label">
-						<span>次数要求</span>
+						<span>人次目标</span>
 						<el-tooltip placement="top">
 							<div slot="content" style="width: 300px;">
 								对奖分和扣分的执行次数作任务要求
@@ -600,7 +600,7 @@
 
 				<el-form-item prop="reward_ratio">
 					<template slot="label">
-						<span>比例要求</span>
+						<span>比例目标</span>
 						<el-tooltip placement="top">
 							<div slot="content" style="width: 300px;">
 								对奖分和扣分的比例作任务要求
@@ -879,7 +879,8 @@ export default {
 			//导入相关
 			toleadShw: false,
 			nowIndex: 1,
-			toleadResult: {}
+			toleadResult: {},
+			selectUser:''
 		};
 	},
 	components: { EmployeeSelector, toLead },
@@ -1132,6 +1133,7 @@ export default {
 		},
 		open_bonus_deducted(item) {
 			this.bonus_deducted_show = true;
+			this.selectUser=item.name;
 			this.set_mployee_limit_id = item.id;
 			this.get_employee_limit(item.id);
 		},
@@ -1252,6 +1254,7 @@ export default {
 		},
 		open_integral_limit(item) {
 			this.integral_limit_show = true;
+			this.selectUser=item.name;
 			this.set_mployee_limit_id = item.id;
 			this.get_employee_limit(item.id);
 		},

+ 21 - 9
src/views/set/screenSet.vue

@@ -33,7 +33,7 @@
 					<i class="el-icon-setting el-icon--right"></i>
 				</el-button>
 			</div>
-			<el-alert title="每个链接仅支持3个窗口同时在线访问,超出后无法获取数据" type="warning"></el-alert>
+			<el-alert title="最多创建10个大屏链接,每个链接仅支持3个窗口同时在线访问,超出后无法获取数据" type="warning"></el-alert>
 			<el-table ref="multipleTable" :data="list" tooltip-effect="dark" align="center" v-loading="loading">
 				<el-table-column label="大屏名称" prop="name"></el-table-column>
 				<el-table-column label="备注" min-width="300" prop="remark"></el-table-column>
@@ -82,11 +82,18 @@
 			</div>
 		</el-dialog>
 		
-		<el-dialog title="分享" :visible.sync="isPreview" width="500px" class="dialog">
+		<el-dialog title="打开方式" :visible.sync="isPreview" width="500px" class="dialog">
 			<div>
-				<div>本机以外的其他设备可以通过链接访问数据大屏</div>
+				<div style="margin-bottom: 20px;">{{selectItem.name}}</div>
+				<div>打开方式1:扫码登录(新)</div>
 				<div class="flex-box-ce" style="margin: 10px 0;">
-					<el-input style="width: 300px;" v-model="previewUrl" id="" disabled placeholder="链接"></el-input>
+					<el-input style="width: 300px;" v-model="previewUrl2"  disabled placeholder="链接"></el-input>
+					<div class="blue" style="padding-left: 10px;cursor: pointer;" @click="copy('3')">复制大屏链接</div>
+				</div>
+				<div style="font-size: 12px;position: relative;top: -10px;" class="orange">扫码方式适用于触摸屏和投屏场景,不支持手动输入链接地址及纯遥控选择操作,请根据设备条件选择打开方式</div>
+				<div style="margin-top: 30px;">打开方式2:密码登录(旧)</div>
+				<div class="flex-box-ce" style="margin: 10px 0;">
+					<el-input style="width: 300px;" v-model="previewUrl"  disabled placeholder="链接"></el-input>
 					<div class="blue" style="padding-left: 10px;cursor: pointer;" @click="copy('1')">复制大屏链接</div>
 				</div>
 				<div class="flex-box-ce">
@@ -95,17 +102,17 @@
 					</el-input>
 					<div class="blue" style="padding-left: 10px;cursor: pointer;" @click="copy('2')">复制密码</div>
 				</div>
-				<div class="fontColorB" style="font-size: 12px;margin-bottom: 10px;">刷新后原有的密码将失效</div>
-				<div class="orange">每个链接仅支持3个窗口同时在线访问,超出后无法获取数据</div>
+				<div class="orange" style="font-size: 12px;margin-bottom: 10px;">刷新后原有的密码将失效</div>
+				<!-- <div class="orange">每个链接仅支持3个窗口同时在线访问,超出后无法获取数据</div> -->
 			</div>
 			<div class="flex-box-end" style="margin: 10px 0;">
-				<el-button @click="preview({},1)" type="primary" plain>打开大屏</el-button>
+				<!-- <el-button @click="preview({},1)" type="primary" plain>打开大屏</el-button> -->
 				<div class="flex-1"></div>
 				<el-button @click="isPreview = false" type="">关 闭</el-button>
 			</div>
 		</el-dialog>
 
-		<el-dialog title="设置" :visible.sync="dialogVisible" width="1000px" class="dialog">
+		<el-dialog :title="'设置('+selectItem.name+')'" :visible.sync="dialogVisible" width="1000px" class="dialog">
 			<div class="flex-box">
 				<div class="flex-4" style="padding-top: 50px;">
 					<div  style="color: #222;font-weight: 700;font-size: 16px;padding-left: 8px;">点击下面模块,快速定位到设置项
@@ -524,6 +531,7 @@ export default {
 			
 			isPreview: false,
 			previewUrl:'',
+			previewUrl2:'',
 			code:'',
 			selectItem:{},
 			formData: {
@@ -786,7 +794,7 @@ export default {
 		  //创建input标签
 		  var input = document.createElement('input')
 		  //将input的值设置为需要复制的内容
-		  input.value =index==1? this.previewUrl:this.code;
+		  input.value =index==1? this.previewUrl:index==2? this.code:this.previewUrl2;
 		  //添加input标签
 		  document.body.appendChild(input)
 		  //选中input标签
@@ -824,8 +832,12 @@ export default {
 		preview(item,index){
 			// this.previewUrl='http://localhost:8080/#/screen';
 			this.previewUrl=process.env.VUE_APP_BASE_API+'/pc/#/screen';
+			
+			let corpId=window.btoa(this.$getCache('corpId'))
+			this.previewUrl2=process.env.VUE_APP_BASE_API+'/pc/#/screenSan?corpId='+corpId;
 			if (process.env.NODE_ENV === 'development') {
 				this.previewUrl=process.env.VUE_APP_BASE_API+'#/screen';
+				this.previewUrl2=process.env.VUE_APP_BASE_API+'#/screenSan?corpId='+corpId;
 			}
 			if(index==1){
 				window.open(this.previewUrl+'?preview=1', '_blank');

+ 5 - 5
src/views/set/voluntarilyPoint.vue

@@ -62,13 +62,13 @@
 						</el-row>
 						<div class="flex-box btns flex-v-ce">
 							<div class="flex-1">
-								<el-button size="small" @click="del_item" type="danger" plain>批量移除</el-button>
-								<el-button size="small" type="primary" @click="add_employee_show = true">添加人员</el-button>
-								<el-button size="small" type="primary" plain @click="toleadShw = true">导入自动积分</el-button>
+								<el-button size="medium" @click="del_item" type="danger" plain>批量移除</el-button>
+								<el-button size="medium" type="primary" @click="add_employee_show = true">添加人员</el-button>
+								<el-button size="medium" type="primary" plain @click="toleadShw = true">导入自动积分</el-button>
 							</div>
-							<el-button size="small" type="primary" plain @click="openR">执行当前周期加分</el-button>
+							<el-button size="medium" type="primary" plain @click="openR">执行当前周期加分</el-button>
 							<div style="padding-left: 10px;">
-								<el-select size="small" v-model="employee_id" filterable clearable placeholder="请输入或选择人员">
+								<el-select size="medium" v-model="employee_id" filterable clearable placeholder="请输入或选择人员">
 									<el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
 								</el-select>
 							</div>

+ 29 - 49
src/views/task/allTask.vue

@@ -4,40 +4,35 @@
 			<el-tabs v-model="formData.status">
 				<el-tab-pane :disabled="loading" v-for="(item, index) in tabsOption" :key="index" :label="item.label" :name="item.name"></el-tab-pane>
 			</el-tabs>
-
-			<el-form ref="formData" :inline="true" :model="formData" label-width="80px">
-				<el-form-item label="积分类型">
-					<el-select  v-model="formData.pt_id" clearable placeholder="请选择积分类型">
-						<el-option v-for="item in point_type" :key="item.id" :label="item.name" :value="item.id"></el-option>
-					</el-select>
-				</el-form-item>
-				<el-form-item label="排序" label-width="50px">
-					<el-select v-model="formData.sort_by" placeholder="请选择排序">
-						<el-option v-for="item in sort_by" :key="item.id" :label="item.name" :value="item.code"></el-option>
-					</el-select>
-				</el-form-item>
-				<el-form-item label="执行人" label-width="60px">
-					<el-select  v-model="formData.employee_id" filterable clearable placeholder="请输入执行人">
-					  <el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
-					</el-select>
-				</el-form-item>
-				<el-form-item label="审批人" label-width="60px">
-					<el-select  v-model="formData.reviewer_id" filterable clearable placeholder="请输入审批人">
-					  <el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
-					</el-select>
-				</el-form-item>
-				<el-form-item label="任务内容">
-					<el-input
-						placeholder="搜索任务内容"
-						ref="search-bar"
-						v-model="formData.content"
-						class="input-with-select"
-						@keyup.enter.native="get_list"
-						>
-						<el-button  lot="append" icon="el-icon-search" @click="get_list"></el-button>
-					</el-input>
-				</el-form-item>
-			</el-form>
+			<FormBox :isShowHeader="false">
+				<template #footer>
+					<el-form ref="formData" :inline="true" :model="formData" label-width="70px">
+						<el-form-item label="积分类型">
+							<el-select size="medium" v-model="formData.pt_id" clearable placeholder="请选择积分类型">
+								<el-option v-for="item in point_type" :key="item.id" :label="item.name" :value="item.id"></el-option>
+							</el-select>
+						</el-form-item>
+						<el-form-item label="排序">
+							<el-select size="medium" v-model="formData.sort_by" placeholder="请选择排序">
+								<el-option v-for="item in sort_by" :key="item.id" :label="item.name" :value="item.code"></el-option>
+							</el-select>
+						</el-form-item>
+						<el-form-item label="执行人">
+							<el-select size="medium" v-model="formData.employee_id" filterable clearable placeholder="请输入执行人">
+							  <el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
+							</el-select>
+						</el-form-item>
+						<el-form-item label="审批人">
+							<el-select size="medium" v-model="formData.reviewer_id" filterable clearable placeholder="请输入审批人">
+							  <el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
+							</el-select>
+						</el-form-item>
+						<el-form-item label="任务内容">
+							<el-input size="medium" clearable max="20" placeholder="搜索任务内容" v-model="formData.content"></el-input>
+						</el-form-item>
+					</el-form>
+				</template>
+			</FormBox>	
 
 			<div>
 				<div class="orange" style="padding-left: 10px;" v-if="config.event_review_status&&config.event_task_review">复核开启后,积分需管理员复核后才计入排名和统计</div>
@@ -50,14 +45,6 @@
 					    </div>
 					  </template>
 					</el-table-column>
-<!-- 					<el-table-column label="审批人" prop="reviewer_id">
-					  <template slot-scope="scope">
-					    <div class="flex-box-ce">
-					      <userImage  :id="scope.row.reviewer_id" width="50px" height="50px"  :user_name="scope.row.reviewer_name" ></userImage>
-					      <span style="line-height: 50px; padding-left: 10px;">{{scope.row.reviewer_name}}</span>
-					    </div>
-					  </template>
-					</el-table-column> -->
 					<el-table-column label="任务内容" prop="task_name">
 						<template slot-scope="scope">
 							<span class="font-flex-word" style="max-width: 200px;">{{ scope.row.task_name }}</span>
@@ -71,13 +58,6 @@
 							<span class="green" v-else>
 								{{ scope.row.point_config.base_point }} {{ scope.row.pt_name }}
 							</span>
-							
-<!-- 							<span class="red" v-if="scope.row.point_config.review_point!=0">
-								+{{ scope.row.point_config.review_point }} {{ scope.row.pt_name }}
-							</span>
-							<span class="red" v-else>
-								+{{ scope.row.point_config.base_point }} {{ scope.row.pt_name }}
-							</span> -->
 						</template>
 					</el-table-column>
 					<el-table-column label="截止时间" prop="expire_time" sortable="custom"></el-table-column>

+ 34 - 30
src/views/task/myExamine.vue

@@ -4,29 +4,30 @@
 			<el-tabs v-model="formData.status">
 				<el-tab-pane  :disabled="loading" v-for="(item, index) in tabsOption" :key="index" :label="item.label" :name="item.name"></el-tab-pane>
 			</el-tabs>
-
-			<el-form ref="formData" :inline="true" :model="formData" label-width="80px">
-				<el-form-item label="积分类型">
-					<el-select v-model="formData.pt_id" clearable placeholder="请选择积分类型">
-						<el-option v-for="item in point_type" :key="item.id" :label="item.name" :value="item.id"></el-option>
-					</el-select>
-				</el-form-item>
-				<el-form-item label="执行人" label-width="60px">
-					<el-select  v-model="formData.employee_id" filterable clearable placeholder="请输入执行人">
-					  <el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
-					</el-select>
-				</el-form-item>
-				<el-form-item label="排序" label-width="60px">
-					<el-select v-model="formData.sort" placeholder="请选择排序">
-						<el-option v-for="item in sort" :key="item.id" :label="item.name" :value="item.code"></el-option>
-					</el-select>
-				</el-form-item>
-				<el-form-item>
-					<el-input v-model="formData.content" placeholder="请输入任务内容" max="200" @keyup.enter.native="getContent()" class="persons_name">
-						<el-button slot="append" icon="el-icon-search" @click="getContent()"></el-button>
-					</el-input>
-				</el-form-item>
-			</el-form>
+			<FormBox :isShowHeader="false">
+				<template slot="footer">
+					<el-form ref="formData" :inline="true" :model="formData" label-width="70px">
+						<el-form-item label="积分类型">
+							<el-select size="medium" v-model="formData.pt_id" placeholder="请选择积分类型">
+								<el-option v-for="item in point_type" :key="item.id" :label="item.name" :value="item.id"></el-option>
+							</el-select>
+						</el-form-item>
+						<el-form-item label="执行人" label-width="60px">
+							<el-select size="medium" v-model="formData.employee_id" filterable clearable placeholder="请输入执行人">
+							  <el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
+							</el-select>
+						</el-form-item>
+						<el-form-item label="排序" label-width="60px">
+							<el-select size="medium" v-model="formData.sort" placeholder="请选择排序">
+								<el-option v-for="item in sort" :key="item.id" :label="item.name" :value="item.code"></el-option>
+							</el-select>
+						</el-form-item>
+						<el-form-item label="内容搜索">
+							<el-input size="medium" v-model="formData.content" clearable placeholder="请输入任务内容" max="200"></el-input>
+						</el-form-item>
+					</el-form>
+				</template>
+			</FormBox>
 
 			<div>
 				<div class="orange" style="padding-left: 10px;" v-if="config.event_review_status">复核开启后,积分需管理员复核后才计入排名和统计</div>
@@ -94,7 +95,7 @@
 
 import examinePopup from '@/components/examinePopup.vue';
 import taskDetailsPopup from '@/views/common/taskDetailsPopup'
-
+import {_debounce} from '@/api/auth';
 export default {
 	name: 'my_task',
 	data() {
@@ -157,7 +158,15 @@ export default {
 			this.formData.sort = 'publish';
 			this.list = [];
 			this.getSpList();
-		}
+		},
+		'formData.content': {
+			deep: true,
+			handler: _debounce(function(val) {
+				this.formData.page = 1;
+				this.list = [];
+				this.getSpList();
+			}, 1000)
+		},
 	},
 	created() {
 		this.getEmployee()
@@ -168,11 +177,6 @@ export default {
 		this.point_type = this.getPointType();
 	},
 	methods: {
-		getContent(){
-			this.formData.page = 1
-			this.list = []
-			this.getSpList();
-		},
 		//获取员工列表
 		getEmployee() {
 			this.$axios('get', '/api/employee/index', { dept_id: 0, page: 1, page_size: 3000 }).then(res => {

+ 61 - 54
src/views/task/my_issue.vue

@@ -1,9 +1,11 @@
 <template>
 	<div>
 		<div class="box">
-			<el-tabs v-model="status"><el-tab-pane :disabled="loading" v-for="(item, index) in tabsOption" :key="index" :label="item.label" :name="item.name"></el-tab-pane></el-tabs>
-			<el-form ref="formData" :inline="true" :model="formData" label-width="70px">
-				<el-form-item>
+			<el-tabs v-model="status">
+				<el-tab-pane :disabled="loading" v-for="(item, index) in tabsOption" :key="index" :label="item.label" :name="item.name"></el-tab-pane>
+			</el-tabs>
+			<FormBox>
+				<template slot="header">
 					<el-dropdown @command="downClick">
 						<el-button type="primary">
 							发布任务
@@ -14,48 +16,52 @@
 							<el-dropdown-item command="2">+ 悬赏任务</el-dropdown-item>
 						</el-dropdown-menu>
 					</el-dropdown>
-				</el-form-item>
-				<el-form-item v-if="status == 'assign' || status == 'reward'" label="积分类型">
-					<el-select v-model="formData.pt_id" placeholder="请选择">
-						<el-option v-for="item in point_types" :key="item.id" :label="item.name" :value="item.id"></el-option>
-					</el-select>
-				</el-form-item>
-				<el-form-item v-if="status == 'assign'" label="任务状态">
-					<el-select v-model="formData.status" placeholder="请选择">
-						<el-option v-for="item in task_status" :key="item.id" :label="item.name" :value="item.code"></el-option>
-					</el-select>
-				</el-form-item>
+				</template>
+				<template slot="footer">
+					<el-form ref="formData" :inline="true" :model="formData" label-width="70px">
+						
+						<el-form-item v-if="status == 'assign' || status == 'reward'" label="积分类型">
+							<el-select  size="medium" v-model="formData.pt_id" placeholder="请选择">
+								<el-option v-for="item in point_types" :key="item.id" :label="item.name" :value="item.id"></el-option>
+							</el-select>
+						</el-form-item>
+						
+						<el-form-item v-if="status == 'assign'" label="状态">
+							<el-select  size="medium" v-model="formData.status" placeholder="请选择">
+								<el-option v-for="item in task_status" :key="item.id" :label="item.name" :value="item.code"></el-option>
+							</el-select>
+						</el-form-item>
+					
+						<el-form-item v-if="status == 'assign'" label="排序">
+							<el-select  size="medium" v-model="formData.sort" placeholder="请选择排序">
+								<el-option v-for="item in sort" :key="item.id" :label="item.name" :value="item.code"></el-option>
+							</el-select>
+						</el-form-item>
+					
+						<el-form-item v-if="status == 'assign' || status == 'repetitive'" label="执行人">
+							<el-select  size="medium" v-model="formData.executor_id" clearable filterable placeholder="请输入或选择执行人">
+								<el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
+							</el-select>
+						</el-form-item>
+					
+						<el-form-item label="审批人">
+							<el-select size="medium" v-model="formData.reviewer_id" clearable filterable placeholder="请输入或选择审批人">
+								<el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
+							</el-select>
+						</el-form-item>
 
-				<el-form-item v-if="status == 'assign'" label="排序" label-width="50px">
-					<el-select v-model="formData.sort" placeholder="请选择排序">
-						<el-option v-for="item in sort" :key="item.id" :label="item.name" :value="item.code"></el-option>
-					</el-select>
-				</el-form-item>
-
-				<el-form-item v-if="status == 'reward'" label="排序" label-width="50px">
-					<el-select v-model="formData.order_by" placeholder="请选择排序">
-						<el-option v-for="item in order_by" :key="item.id" :label="item.name" :value="item.code"></el-option>
-					</el-select>
-				</el-form-item>
-
-				<el-form-item label-width="60px">
-					<el-input v-model="formData.content" placeholder="请输入任务内容" max="200" @keyup.enter.native="getContent()" class="persons_name">
-						<el-button slot="append" icon="el-icon-search" @click="getContent()"></el-button>
-					</el-input>
-				</el-form-item>
-
-				<el-form-item v-if="status == 'assign' || status == 'repetitive'" label="执行人" label-width="60px">
-					<el-select v-model="formData.executor_id" clearable filterable placeholder="请输入或选择执行人">
-						<el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
-					</el-select>
-				</el-form-item>
-
-				<el-form-item label="审批人" label-width="60px">
-					<el-select v-model="formData.reviewer_id" clearable filterable placeholder="请输入或选择审批人">
-						<el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
-					</el-select>
-				</el-form-item>
-			</el-form>
+						<el-form-item v-if="status == 'reward'" label="排序">
+							<el-select size="medium" v-model="formData.order_by" placeholder="请选择排序">
+								<el-option v-for="item in order_by" :key="item.id" :label="item.name" :value="item.code"></el-option>
+							</el-select>
+						</el-form-item>
+						
+						<el-form-item label="内容搜索">
+							<el-input  size="medium" clearable style="width: 217px;" v-model="formData.content" placeholder="请输入任务内容" max="200"></el-input>
+						</el-form-item>
+					</el-form>
+				</template>
+			</FormBox>
 
 			<div v-show="status == 'assign'">
 				<el-table :data="list" style="width: 100%" v-loading="loading" @row-click="rowClick">
@@ -240,8 +246,6 @@
 					<el-table-column prop="base_point" label="操作"  width="80px">
 						<template slot-scope="scope">
 							<div class="flex-box-ce">
-<!-- 								<el-switch v-model="scope.row.enable" active-color="#13ce66"   inactive-color="#ff4949" :active-value="1"  :inactive-value="0"></el-switch>
-								<span style="padding-right: 20px;">{{scope.row.enable==1? '已启用':'已暂停'}}</span> -->
 								<el-dropdown placement="bottom" :show-timeout="150" :hide-timeout="150">
 									<span class="el-dropdown-links">···</span>
 									<el-dropdown-menu slot="dropdown">
@@ -256,7 +260,7 @@
 						</template>
 					</el-table-column>
 					<template slot="empty">		
-				<noData></noData>
+						<noData></noData>
 					</template>
 				</el-table>
 			</div>
@@ -301,7 +305,7 @@
 </template>
 
 <script>
-
+import {_debounce} from '@/api/auth';
 import temporaryTask from '@/views/common/temporaryTask';
 import temporaryTaskAmend from '@/views/common/temporaryTaskAmend';
 import rewardTask from '@/views/common/rewardTask';
@@ -425,7 +429,15 @@ export default {
 			this.formData.page = 1;
 			this.list = [];
 			this.get_list();
-		}
+		},
+		'formData.content': {
+			deep: true,
+			handler: _debounce(function(val) {
+				this.formData.page = 1;
+				this.list = [];
+				this.get_list();
+			}, 1000)
+		},
 	},
 	created() {
 		this.getRuleItemData(); //获取AB分细则
@@ -455,11 +467,6 @@ export default {
 		dayTime(item) {
 			return item > 9 ? item + ': 00' : '0' + item + ': 00';
 		},
-		getContent() {
-			this.formData.page = 1;
-			this.list = [];
-			this.get_list();
-		},
 
 		//获取员工列表
 		getEmployee() {

+ 31 - 26
src/views/task/my_task.vue

@@ -4,25 +4,26 @@
 			<el-tabs v-model="formData.status">
 				<el-tab-pane :disabled="loading" v-for="(item, index) in tabsOption" :key="index" :label="item.label" :name="item.name"></el-tab-pane>
 			</el-tabs>
-
-			<el-form ref="formData" :inline="true" :model="formData" label-width="80px">
-				<el-form-item label="积分类型">
-					<el-select v-model="formData.pt_id" clearable placeholder="请选择积分类型">
-						<el-option v-for="item in point_type" :key="item.id" :label="item.name" :value="item.id"></el-option>
-					</el-select>
-				</el-form-item>
-				<el-form-item label="排序">
-					<el-select v-model="formData.sort" placeholder="请选择排序">
-						<el-option v-for="item in sort" :key="item.id" :label="item.name" :value="item.code"></el-option>
-					</el-select>
-				</el-form-item>
-				
-				<el-form-item style="float: right;">
-					<el-input v-model="formData.content" placeholder="请输入任务内容" max="200" @keyup.enter.native="getContent()" class="persons_name">
-						<el-button slot="append" icon="el-icon-search" @click="getContent()"></el-button>
-					</el-input>
-				</el-form-item>
-			</el-form>
+			<FormBox :isShowHeader="false">
+				<template slot="footer">
+					<el-form ref="formData" :inline="true" :model="formData" label-width="70px">
+						<el-form-item label="积分类型">
+							<el-select  size="medium" v-model="formData.pt_id" placeholder="请选择积分类型">
+								<el-option v-for="item in point_type" :key="item.id" :label="item.name" :value="item.id"></el-option>
+							</el-select>
+						</el-form-item>
+						<el-form-item label="排序">
+							<el-select  size="medium" v-model="formData.sort" placeholder="请选择排序">
+								<el-option v-for="item in sort" :key="item.id" :label="item.name" :value="item.code"></el-option>
+							</el-select>
+						</el-form-item>
+						
+						<el-form-item label="内容搜索">
+							<el-input  size="medium" clearable v-model="formData.content" placeholder="请输入任务内容" max="200"></el-input>
+						</el-form-item>
+					</el-form>
+				</template>	
+			</FormBox>	
 
 			<div v-if="formData.status == 'running'">
 				<el-table :data="list" style="width: 100%" v-loading="loading" @row-click="openDetail">
@@ -149,7 +150,7 @@
 
 import taskDetailsPopup from '@/views/common/taskDetailsPopup'
 import upload from '@/components/upload';
-
+import {_debounce} from '@/api/auth';
 export default {
 	name: 'my_task',
 	data() {
@@ -205,7 +206,16 @@ export default {
 			this.formData.sort = 'publish';
 			this.list = [];
 			this.get_list();
-		}
+		},
+		'formData.content': {
+			deep: true,
+			handler: _debounce(function(val) {
+				this.formData.page = 1;
+				this.list = [];
+				this.get_list();
+			}, 1000)
+		},
+		
 	},
 	mounted() {
 		
@@ -214,11 +224,6 @@ export default {
 		this.point_type = this.getPointType();
 	},
 	methods: {
-		getContent(){
-			this.formData.page = 1
-			this.list = []
-			this.get_list()
-		},
 		handleFilesSuccess(response, file, fileList) {
 			let fileListData=fileList.filter(e=>{
 			  return e.url

+ 39 - 40
src/views/welfare/conversion.vue

@@ -1,49 +1,48 @@
 <template>
 	<div>
 		<div class="all" style="padding: 20px;">
-			<div>
-				<el-form :inline="true">
-					<el-form-item label="兑换码">
-						<el-input placeholder="奖品搜索" size="medium" style="width: 200px;margin: 0 10px;" v-model="formData.sn" clearable></el-input>
-					</el-form-item>
-					<el-form-item label="人员">
-						<el-select v-model="formData.employee_id" size="medium" filterable placeholder="请输入或选择人员" clearable>
-							<el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
-						</el-select>
-					</el-form-item>
-					<el-form-item label="状态">
-						<el-select v-model="formData.status" size="medium" style="width:110px" placeholder="请选择" clearable>
-							<el-option v-for="(item, index) in event_type" :key="index" :label="item.name" :value="item.id"></el-option>
-						</el-select>
-					</el-form-item>
-					<el-form-item label="时间">
-						<el-date-picker
-							size="medium"
-							style="width:290px"
-							class="first-element-btn"
-							:clearable="false"
-							v-model="time_range"
-							type="daterange"
-							value-format="yyyy-MM-dd"
-							range-separator="至"
-							start-placeholder="开始日期"
-							end-placeholder="结束日期"
-							:picker-options="instantPickerOptions"
-						></el-date-picker>
-					</el-form-item>
-<!-- 					<el-form-item>
-						<el-button type="primary" size="medium" @click="grants" style="margin-right: 10px;">批量发放</el-button>
-						<el-button type="primary" size="medium" plain @click="exportExcel">导出</el-button>
-					</el-form-item> -->
-				</el-form>
-				<div style="margin-bottom: 10px;">
-					<el-button type="primary" size="medium" @click="grants" style="margin-right: 10px;">批量发放</el-button>
-					<el-button type="primary" size="medium" plain @click="exportExcel">导出</el-button>
-				</div>
+			  <FormBox  :isShowHeader="false">
+				<template #footer>
+					<el-form :inline="true" label-width="70px">
+						<el-form-item label="发放时间">
+							<el-date-picker
+								size="medium"
+								style="width:290px"
+								class="first-element-btn"
+								:clearable="false"
+								v-model="time_range"
+								type="daterange"
+								value-format="yyyy-MM-dd"
+								range-separator="至"
+								start-placeholder="开始日期"
+								end-placeholder="结束日期"
+								:picker-options="instantPickerOptions"
+							></el-date-picker>
+						</el-form-item>
+						<el-form-item label="人员">
+							<el-select v-model="formData.employee_id" size="medium" filterable placeholder="请输入或选择人员" clearable>
+								<el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
+							</el-select>
+						</el-form-item>
+						<el-form-item label="状态">
+							<el-select v-model="formData.status" size="medium" style="width:110px" placeholder="请选择" clearable>
+								<el-option v-for="(item, index) in event_type" :key="index" :label="item.name" :value="item.id"></el-option>
+							</el-select>
+						</el-form-item>
+						<el-form-item label="兑换码">
+							<el-input placeholder="奖品搜索" size="medium" v-model="formData.sn" clearable></el-input>
+						</el-form-item>
+					</el-form>
+				</template>
+			  </FormBox>	
+							
+			<div style="margin: 10px 0;">
+				<el-button type="primary" size="medium" plain	 @click="grants" style="margin-right: 10px;">批量发放</el-button>
+				<el-button type="primary" size="medium" plain @click="exportExcel">导出</el-button>
 			</div>
 			<el-table :data="list" style="width: 100%;cursor: pointer;" v-loading="loading" @row-click="openDetail" @selection-change="handleSelectionChange">
 				<el-table-column type="selection" :selectable="selectable"></el-table-column>
-				<el-table-column label="姓名" align="left">
+				<el-table-column label="人员" align="left">
 					<template slot-scope="scope">
 						<div style="display:flex;">
 							<userImage :user_name="scope.row.employee.name" :id="scope.row.employee.id" width="50px" height="50px"></userImage>

+ 29 - 26
src/views/welfare/flManagement.vue

@@ -1,9 +1,33 @@
 <template>
 	<div>
 		<div class="all">
-			<div class="flex-box-ce flex-d-wrap" style="margin-top: 16px;">
-				<div class="flex-box" style="margin-bottom: 10px;">
-					<el-button type="primary" size="medium" @click="openCz(1)" style="margin-left: 10px;" plain>发放功勋点</el-button>
+			<FormBox :isShowHeader="false">
+				<template #footer>
+					<el-form ref="form" :inline="true" label-width="70PX">
+						<el-form-item label="部门">
+							<el-cascader
+								size="medium"
+								class="date-picker-width"
+								v-model="dept_name"
+								:options="dept_tree"
+								:props="{ checkStrictly: true, value: 'id', label: 'name', children: '_child' }"
+								ref="dept"
+								clearable
+								filterable
+								placeholder="全公司"
+							></el-cascader>
+						</el-form-item>
+						<el-form-item label="人员">
+							<el-select v-model="formData.employee_id" size="medium" filterable placeholder="请输入或选择人员" clearable>
+								<el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
+							</el-select>
+						</el-form-item>
+					</el-form>
+				</template>
+			</FormBox>
+			<div class="flex-box-ce flex-d-wrap" style="margin: 10px 0;">
+				<div class="flex-box">
+					<el-button type="primary" size="medium" @click="openCz(1)"  plain>发放功勋点</el-button>
 					<el-button type="warning" size="medium" @click="openCz(2)" style="margin-left: 10px;" plain>回收功勋点</el-button>
 					<el-button type="success" size="medium" @click="openCz(3)" style="margin-left: 10px;" plain>转换功勋点</el-button>
 				</div>
@@ -12,31 +36,10 @@
 					<span class="blue" style="padding: 0 10px;font-weight: 600;">{{configData.ratio_molecule}} : {{configData.ratio_denominator}}</span>
 					<i class="el-icon-edit" style="font-size: 16px;" @click="isZh = true"></i>
 				</div>
-				<div class="flex-1"></div>
-				<div class="flex-box-ce" style="margin-bottom: 10px;">
-					<div class="label">部门</div>
-					<el-cascader
-						size="medium"
-						class="date-picker-width"
-						v-model="dept_name"
-						:options="dept_tree"
-						:props="{ checkStrictly: true, value: 'id', label: 'name', children: '_child' }"
-						ref="dept"
-						clearable
-						filterable
-						placeholder="全公司"
-					></el-cascader>
-				</div>
-				<div class="flex-box-ce" style="margin-bottom: 10px;">
-					<div class="label">人员</div>
-					<el-select v-model="formData.employee_id" size="medium" filterable placeholder="请输入或选择人员" clearable>
-						<el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
-					</el-select>
-				</div>
 			</div>
 
 			<el-table :data="list" style="width: 100%" v-loading="loading" @selection-change="deleteEvents">
-				<el-table-column label="姓名" align="left" prop="point">
+				<el-table-column label="人员" align="left" prop="point">
 					<template slot-scope="scope">
 						<div class="flex-box">
 							<userImage :user_name="scope.row.name" :img_url="scope.row.img_url" width="50px" height="50px"></userImage>
@@ -126,7 +129,7 @@
 			</div>
 			<div class="flex-box-ce flex-center-center" style="margin-bottom: 10px;font-size: 16px;">
 				<span>转换比例 1:</span>
-			    <el-input type="text" class="width-250" v-model="zhNum" placeholder="请输入比例" @input="[zhNum=zhNum.replace(/[^\d]/g,'')]"/>
+			    <el-input type="text" style="font-size: 16px;position: relative;top: 3px;" class="width-250" v-model="zhNum" placeholder="请输入比例" @input="[zhNum=zhNum.replace(/[^\d]/g,'')]"/>
 			</div>
 			<div style="text-align: center;"><i class="el-icon-d-arrow-left fontColorD" style="font-size: 30px;transform: rotate(-90deg);"></i></div>
 			<div style="text-align: center;font-size: 22px;margin: 10px 0 30px 0;">

+ 11 - 7
src/views/welfare/operatingRecord.vue

@@ -1,19 +1,20 @@
 <template>
 	<div>
 		<div class="all">
-			<div>
-				<el-form :inline="true">
+			<FormBox  :isShowHeader="false">
+			  <template #footer>
+				<el-form :inline="true" label-width="70px">
 					<el-form-item label="操作人">
 						<el-select v-model="formData.operator_id" size="medium" filterable placeholder="请输入或选择操作人" clearable>
 							<el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
 						</el-select>
 					</el-form-item>
-					<el-form-item label="类型">
+					<el-form-item label="操作类型">
 						<el-select v-model="formData.type" size="medium" style="width:110px" placeholder="请选择" clearable>
 							<el-option v-for="(item, index) in event_type" :key="index" :label="item.name" :value="item.id"></el-option>
 						</el-select>
 					</el-form-item>
-					<el-form-item label="时间">
+					<el-form-item label="操作时间">
 						<el-date-picker
 							size="medium"
 							style="width:290px"
@@ -28,13 +29,16 @@
 							:picker-options="instantPickerOptions"
 						></el-date-picker>
 					</el-form-item>
-					<el-form-item label="人员">
+					<el-form-item label="操作对象">
 						<el-select v-model="formData.employee_id" size="medium" filterable placeholder="请输入或选择人员" clearable>
 							<el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
 						</el-select>
 					</el-form-item>
-					<el-form-item><el-button type="primary" size="medium" plain @click="exportRanking">导出</el-button></el-form-item>
 				</el-form>
+			  </template>
+			</FormBox>
+			<div style="margin: 10px 0;">
+				<el-button type="primary" size="medium" plain @click="exportRanking">导出</el-button>
 			</div>
 			<el-table :data="all_integral_list" style="width: 100%" v-loading="loading">
 				<el-table-column label="操作人" align="left" prop="point">
@@ -56,7 +60,7 @@
 						{{ $moment.unix(scope.row.create_time).format('YYYY-MM-DD HH:mm') }}
 					</template>
 				</el-table-column>
-				<el-table-column label="姓名" align="center" prop="point">
+				<el-table-column label="操作对象" align="center" prop="point">
 					<template slot-scope="scope">
 							<!-- <userImage :user_name="scope.row.employee.name" :id="scope.row.employee.id" width="50px" height="50px"></userImage> -->
 							<div>{{ scope.row.employee.name }}</div>

+ 21 - 12
src/views/welfare/prize.vue

@@ -19,19 +19,28 @@
 					<div class="flex-box flex-v-ce margin-bottom" style="height: 40px;">
 						<div class="groupsName" style="font-size: 20px;">{{ params.name }}</div>
 						<el-button @click="Group(2)" size="medium" style="margin-left:15px;" v-show="params.name != '全部分类'">编辑</el-button>
+						<div class="flex-1"></div>
+						<el-button type="primary" @click="isPrizeShow = true" size="medium">新增奖品</el-button>
 					</div>
-					<div class="flex-box-ce" style="margin-bottom: 10px;">
-						<div class="flex-1">
-							<el-button type="primary" @click="isPrizeShow = true" size="medium">新增奖品</el-button>
-							<el-button type="success" plain @click="putaway(1)" size="medium">批量上架</el-button>
-							<el-button type="danger" plain @click="putaway(2)" size="medium">批量下架</el-button>
-							<el-button type="primary" plain @click="exportExcel" size="medium">导 出</el-button>
-						</div>
-						<div style="margin-right: 10px;">状态</div>
-						<el-select v-model="params.status" size="medium"  style="width: 100px;">
-							<el-option v-for="item in statusArr" :key="item.id" :label="item.name" :value="item.id"></el-option>
-						</el-select>
-						<el-input placeholder="奖品搜索" size="medium" style="width: 200px;margin: 0 10px;" v-model="params.keyword" clearable></el-input>
+					<FormBox  :isShowHeader="false">
+						<template #footer>
+							<el-form ref="form" :inline="true" label-width="70px">
+								<el-form-item label="状态">
+										<el-select v-model="params.status" size="medium"  style="width: 100px;">
+											<el-option v-for="item in statusArr" :key="item.id" :label="item.name" :value="item.id"></el-option>
+										</el-select>
+								</el-form-item>
+								<el-form-item label="奖品搜索">
+									<el-input placeholder="奖品搜索" size="medium"  v-model="params.keyword" clearable></el-input>
+								</el-form-item>
+							</el-form>
+						</template>
+					</FormBox>
+					
+					<div style="margin: 10px 0;">
+						<el-button type="success" plain @click="putaway(1)" size="medium">批量上架</el-button>
+						<el-button type="danger" plain @click="putaway(2)" size="medium">批量下架</el-button>
+						<el-button type="primary" plain @click="exportExcel" size="medium">导 出</el-button>
 					</div>
 
 					<el-table :data="table_list" @selection-change="selectionChange">

+ 24 - 16
src/views/workbench/alreadySp.vue

@@ -1,22 +1,30 @@
 <template>
 	<div>
 		<div class="all padding-20">
-			<el-form ref="formData" :inline="true" :model="formData" label-width="80px">
-				<el-form-item label="工作类型">
-				  <el-select v-model="formData.source_type" placeholder="请选择排序">
-				    <el-option v-for="item in sourceList" :key="item.id" :label="item.name" :value="item.id"></el-option>
-				  </el-select>
-				</el-form-item>
-				<el-form-item label="积分类型">
-					<el-select v-model="formData.pt_id" placeholder="请选择排序">
-						<el-option v-for="item in point_types" :key="item.id" :label="item.name" :value="item.id"></el-option>
-					</el-select>
-				</el-form-item>
-				<el-select v-model="formData.target_id" filterable clearable placeholder="请输入或选择人员">
-				  <el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
-				</el-select>
-				<el-form-item style="margin-left: 10px;"><el-input v-model="formData.keyword" placeholder="请输入审批内容" clearable></el-input></el-form-item>
-			</el-form>
+			<FormBox :isShowHeader="false">
+				<template slot="footer">
+					<el-form ref="formData" :inline="true" :model="formData" label-width="70px">
+						<el-form-item label="工作类型">
+						  <el-select size="medium" v-model="formData.source_type" placeholder="请选择排序">
+							<el-option v-for="item in sourceList" :key="item.id" :label="item.name" :value="item.id"></el-option>
+						  </el-select>
+						</el-form-item>
+						<el-form-item label="积分类型">
+							<el-select size="medium" v-model="formData.pt_id" placeholder="请选择排序">
+								<el-option v-for="item in point_types" :key="item.id" :label="item.name" :value="item.id"></el-option>
+							</el-select>
+						</el-form-item>
+						<el-form-item label="人员">
+							<el-select size="medium" v-model="formData.target_id" filterable clearable placeholder="请输入或选择人员">
+							  <el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
+							</el-select>
+						</el-form-item>
+						<el-form-item label="内容搜索">
+							<el-input size="medium" max="20" v-model="formData.keyword" placeholder="请输入审批内容" clearable></el-input>
+						</el-form-item>
+					</el-form>
+				</template>
+			</FormBox>
 			<div>
 				<div class="orange" style="padding-left: 10px;" v-if="config.event_review_status">复核开启后,积分需管理员复核后才计入排名和统计</div>
 				<el-table :data="list" style="cursor: pointer;" v-loading="loading" class="listTable" @row-click="openDetail">

+ 17 - 13
src/views/workbench/approval_batch.vue

@@ -8,19 +8,23 @@
 			</el-alert>
 		</div>
 		<div class="all padding-20">
-			<div>
-				<el-form :inline="true">
-					<el-form-item label="执行人">
-						<el-select v-model="target_id" filterable collapse-tags clearable placeholder="请输入/选择员工">
-							<el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
-						</el-select>
-					</el-form-item>
-					<el-form-item><el-input v-model="formData.keyword" placeholder="请输入审批内容" clearable></el-input></el-form-item>
-				</el-form>
-				<div>
-					<el-button type="primary" plain @click="pass">批量通过</el-button>
-					<el-button type="danger" plain @click="reject">批量驳回</el-button>
-				</div>
+			<FormBox :isShowHeader="false">
+				<template slot="footer">
+					<el-form :inline="true" label-width="70px">
+						<el-form-item label="执行人">
+							<el-select size="medium" v-model="target_id" filterable collapse-tags clearable placeholder="请输入/选择员工">
+								<el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
+							</el-select>
+						</el-form-item>
+						<el-form-item label="内容搜索">
+							<el-input size="medium" max="20" v-model="formData.keyword" placeholder="请输入审批内容" clearable></el-input>
+						</el-form-item>
+					</el-form>
+				</template>
+			</FormBox>		
+			<div style="margin: 10px 0;">
+				<el-button size="medium" type="primary" plain @click="pass">批量通过</el-button>
+				<el-button size="medium" type="danger" plain @click="reject">批量驳回</el-button>
 			</div>
 			<el-table :data="list" style="width: 100%;cursor: pointer;"  v-loading="loading" @selection-change="deleteEvents" @row-click="openDetail">
 				<el-table-column width="50" type="selection"></el-table-column>

+ 25 - 17
src/views/workbench/approval_list.vue

@@ -1,23 +1,31 @@
 <template>
 	<div>
 		<div class="all padding-20">
-
-			<el-form ref="formData" :inline="true" :model="formData" label-width="80px">
-				<el-form-item label="工作类型">
-				  <el-select v-model="formData.source_type" placeholder="请选择排序">
-				    <el-option v-for="item in sourceList" :key="item.id" :label="item.name" :value="item.id"></el-option>
-				  </el-select>
-				</el-form-item>
-				<el-form-item label="积分类型">
-					<el-select v-model="formData.pt_id" placeholder="请选择排序">
-						<el-option v-for="item in point_types" :key="item.id" :label="item.name" :value="item.id"></el-option>
-					</el-select>
-				</el-form-item>
-				<el-select v-model="formData.target_id" filterable clearable placeholder="请输入或选择人员">
-				  <el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
-				</el-select>
-				<el-form-item style="margin-left: 10px;"><el-input v-model="formData.keyword" placeholder="请输入审批内容" clearable></el-input></el-form-item>
-			</el-form>
+			<FormBox :isShowHeader="false">
+				<template slot="footer">
+					<el-form ref="formData" :inline="true" :model="formData" label-width="70px">
+						<el-form-item label="工作类型">
+						  <el-select size="medium" v-model="formData.source_type" placeholder="请选择排序">
+							<el-option v-for="item in sourceList" :key="item.id" :label="item.name" :value="item.id"></el-option>
+						  </el-select>
+						</el-form-item>
+						<el-form-item label="积分类型">
+							<el-select size="medium" v-model="formData.pt_id" placeholder="请选择排序">
+								<el-option v-for="item in point_types" :key="item.id" :label="item.name" :value="item.id"></el-option>
+							</el-select>
+						</el-form-item>
+						<el-form-item label="人员">
+							<el-select v-model="formData.target_id" filterable clearable placeholder="请输入或选择人员">
+							  <el-option size="medium" v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
+							</el-select>
+						</el-form-item>	
+						<el-form-item label="内容搜索">
+							<el-input size="medium" v-model="formData.keyword" max="20" placeholder="请输入审批内容" clearable></el-input>
+						</el-form-item>
+						
+					</el-form>
+				</template>	
+			</FormBox>	
 
 			<div>
 				<el-table :data="list" style="cursor: pointer;" v-loading="loading" class="listTable" @row-click="openDetail">

+ 97 - 91
src/views/workbench/review.vue

@@ -5,88 +5,90 @@
 				<el-tab-pane :disabled="loading" label="待复核" name="review"></el-tab-pane>
 				<el-tab-pane :disabled="loading" label="已复核" name="noreview"></el-tab-pane>
 			</el-tabs>
-			<el-form ref="form" :inline="true" label-width="90px">
-				<el-form-item label="规则分类">
-					<el-cascader
-						class="date-picker-width"
-						v-model="rule"
-						:options="rule_trees"
-						:props="props"
-						@change="rule_null"
-						size="medium"
-						ref="rule"
-						clearable
-						placeholder="全部规则分类"
-					></el-cascader>
-				</el-form-item>
-				<el-form-item label="积分类型">
-					<el-select class="date-picker-width" size="medium" v-model="formData.pt_id" clearable placeholder="请选择积分类型">
-						<el-option v-for="item in getTypes()" :key="item.name" :label="item.name" :value="item.id"></el-option>
-					</el-select>
-				</el-form-item>
-				<el-form-item label="部门">
-					<el-cascader
-						size="medium"
-						class="date-picker-width"
-						v-model="dept_name"
-						:options="dept_tree"
-						:props="{ checkStrictly: true, multiple: true, value: 'id', label: 'name', children: '_child' }"
-						ref="dept"
-					    filterable
-					    collapse-tags
-						clearable
-						placeholder="全公司"
-					></el-cascader>
-				</el-form-item>
-				<el-form-item label="事件来源">
-					<el-select class="date-picker-width" size="medium" v-model="formData.source_type" clearable placeholder="全部">
-						<el-option v-for="item in source_type" :key="item.id" :label="item.name" :value="item.id"></el-option>
-					</el-select>
-				</el-form-item>
-				<el-form-item label="复核状态" v-if="active=='noreview'">
-					<el-select class="date-picker-width" size="medium" v-model="dc_status"  placeholder="全部">
-						<el-option v-for="item in reviewArr" :key="item.id" :label="item.name" :value="item.id"></el-option>
-					</el-select>
-				</el-form-item>
-				<el-form-item label="人员状态">
-					<template slot="label">
-						<el-tooltip effect="dark" placement="top">
-						  <template slot="content">
-							默认仅显示组织架构中“已启用”人员的积分事件,未启用、已离职等人员的积分事件可以通过“未启用&未授权”筛选查看
-						  </template>
-						  <span>人员状态	<i class="el-icon-warning"></i></span>
-						</el-tooltip>
-					</template>
-					<el-select class="date-picker-width" size="medium" v-model="formData.is_enable">
-						<el-option  label="已启用" :value="1"></el-option>
-						<el-option  label="未授权&未启用" :value="0"></el-option>
-					</el-select>
-				</el-form-item>
-				<el-form-item label="时间">
-					<el-date-picker
-						v-model="time_slot"
-						type="daterange"
-						size="medium"
-						value-format="yyyy-MM-dd"
-						range-separator="至"
-						start-placeholder="开始日期"
-						end-placeholder="结束日期"
-					></el-date-picker>
-				</el-form-item>
-				<el-form-item>
-					<div class="flex-box-ce">
-						<el-select size="medium" v-model="select_employee_id" filterable clearable placeholder="请输入或选择人员" style="width: 250px;margin-right: 10px;">
-							<el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
-						</el-select>
-						<el-input size="medium" v-model="formData.keyword" placeholder="输入关键字查找" style="width: 250px;" @keyup.enter.native="keyWordSelect">
-							<el-button size="medium" slot="append" icon="el-icon-search" @click="keyWordSelect"></el-button>
-						</el-input>
-					</div>
-				</el-form-item>
-				<el-form-item v-if="active=='review'">
-					<el-button class="first-element-btn" size="medium" :disabled="deleteDisabled" @click="deleteInBatches" type="primary">批量复核通过</el-button>
-				</el-form-item>
-			</el-form>
+			<FormBox :isShowHeader="false" :isShowMore="true">
+				<template slot="footer">
+					<el-form ref="form" :inline="true" label-width="70px">
+						<el-form-item label="规则分类">
+							<el-cascader
+								class="date-picker-width"
+								v-model="rule"
+								:options="rule_trees"
+								:props="props"
+								@change="rule_null"
+								size="medium"
+								ref="rule"
+								clearable
+								placeholder="全部规则分类"
+							></el-cascader>
+						</el-form-item>
+						<el-form-item label="积分类型">
+							<el-select class="date-picker-width" size="medium" v-model="formData.pt_id" clearable placeholder="请选择积分类型">
+								<el-option v-for="item in getTypes()" :key="item.name" :label="item.name" :value="item.id"></el-option>
+							</el-select>
+						</el-form-item>
+						<el-form-item label="部门">
+							<el-cascader
+								size="medium"
+								class="date-picker-width"
+								v-model="dept_name"
+								:options="dept_tree"
+								:props="{ checkStrictly: true, multiple: true, value: 'id', label: 'name', children: '_child' }"
+								ref="dept"
+							    filterable
+							    collapse-tags
+								clearable
+								placeholder="全公司"
+							></el-cascader>
+						</el-form-item>
+						<el-form-item label="事件来源">
+							<el-select class="date-picker-width" size="medium" v-model="formData.source_type" clearable placeholder="全部">
+								<el-option v-for="item in source_type" :key="item.id" :label="item.name" :value="item.id"></el-option>
+							</el-select>
+						</el-form-item>
+						<el-form-item label="复核状态" v-if="active=='noreview'">
+							<el-select class="date-picker-width" size="medium" v-model="dc_status"  placeholder="全部">
+								<el-option v-for="item in reviewArr" :key="item.id" :label="item.name" :value="item.id"></el-option>
+							</el-select>
+						</el-form-item>
+						<el-form-item label="人员状态" label-width="90px">
+							<template slot="label">
+								<el-tooltip effect="dark" placement="top">
+								  <template slot="content">
+									默认仅显示组织架构中“已启用”人员的积分事件,未启用、已离职等人员的积分事件可以通过“未启用&未授权”筛选查看
+								  </template>
+								  <span>人员状态	<i class="el-icon-warning"></i></span>
+								</el-tooltip>
+							</template>
+							<el-select class="date-picker-width" size="medium" v-model="formData.is_enable">
+								<el-option  label="已启用" :value="1"></el-option>
+								<el-option  label="未授权&未启用" :value="0"></el-option>
+							</el-select>
+						</el-form-item>
+						<el-form-item label="人员">
+							<el-select size="medium" v-model="select_employee_id" filterable clearable placeholder="请输入或选择人员">
+								<el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
+							</el-select>
+						</el-form-item>
+						<el-form-item label="内容搜索">
+							<el-input size="medium" clearable max="20" v-model="formData.keyword" placeholder="输入关键字查找"></el-input>
+						</el-form-item>
+						<el-form-item label="发生时间">
+							<el-date-picker
+								v-model="time_slot"
+								type="daterange"
+								size="medium"
+								value-format="yyyy-MM-dd"
+								range-separator="至"
+								start-placeholder="开始日期"
+								end-placeholder="结束日期"
+							></el-date-picker>
+						</el-form-item>
+					</el-form>
+				</template>	
+			</FormBox>
+			<div style="padding: 10px 0;position: relative;z-index: 1;background-color: #fff;">
+				<el-button plain  size="medium" :disabled="deleteDisabled" @click="deleteInBatches" type="primary">批量复核通过</el-button>
+			</div>
 			<!-- 表格 -->
 			<div>
 				<el-table :data="list" style="width: 100%;cursor: pointer;" v-loading="loading" @row-click="open_detail" @selection-change="deleteEvents">
@@ -114,12 +116,12 @@
 						</template>
 					</el-table-column>
 					<!-- <el-table-column prop="rule_name" show-overflow-tooltip label="规则分类" align="left" min-width="140px"></el-table-column> -->
-					<el-table-column prop="create_time" label="事件发生时间" align="left" min-width="140px">
+					<el-table-column prop="create_time" label="发生时间" align="left" min-width="140px">
 						<template slot-scope="scope">
 							{{ scope.row.event_time }}
 						</template>
 					</el-table-column>
-					<el-table-column prop="source_type" label="来源" align="left" min-width="140px">
+					<el-table-column prop="source_type" label="事件来源" align="left" min-width="140px">
 						<template slot-scope="scope">
 							<span v-show="scope.row.source_type == 1">
 								积分奖扣
@@ -190,7 +192,7 @@
 		
 		<!-- 调整分数 -->
 		<el-dialog title="调整分数" width="480px" top="15vh" :visible.sync="isPrizeShow" :close-on-click-modal="false">
-			<el-form ref="newForm" :rules="rules" :model="newForm" label-width="110px">
+			<el-form ref="newForm2" :rules="rules" :model="newForm" label-width="110px">
 				<el-form-item label="分数" prop="point">
 					<el-input v-model="newForm.point" maxlength="10" placeholder="请输入分数" auto-complete="off" @input="newForm.point=newForm.point.replace(/[^(\-)0-9]/g,'')"></el-input>
 				</el-form-item>
@@ -200,7 +202,7 @@
 			</el-form>
 			<div slot="footer" class="dialog-footer flex-box-end">
 				<el-button @click="isPrizeShow = false">取 消</el-button>
-				<el-button type="primary"  @click="subGroupForm('newForm')">确定并通过</el-button>
+				<el-button type="primary" @click="subGroupForm('newForm2')">确定并通过</el-button>
 			</div>
 		</el-dialog>
 		
@@ -370,6 +372,7 @@
 import Steps from '@/components/Steps';
 import Review from '@/components/Review';
 import toLead from '@/components/toLead';
+import {_debounce} from '@/api/auth';
 export default {
 	data() {
 		return {
@@ -467,6 +470,13 @@ export default {
 		this.point_types = this.getTypes();
 	},
 	watch: {
+		'formData.keyword': {
+			deep: true,
+			handler: _debounce(function(val) {
+				this.formData.page = 1;
+				this.get_integral_list(this.formData);
+			}, 1000)
+		},
 		selectionID() {
 			if (this.selectionID.length == 0) {
 				this.deleteDisabled = true;
@@ -564,6 +574,7 @@ export default {
 				comment:'',
 			}
 			this.newForm.point=item.point;
+			this.newForm.comment='';
 			this.isPrizeShow=true;
 		},
 		// 提交表单
@@ -701,11 +712,6 @@ export default {
 				return item.code != 'JX';
 			});
 		},
-		// keyword
-		keyWordSelect() {
-			this.formData.page = 1;
-			this.get_integral_list(this.formData);
-		},
 		deleteInBatches() {
 			if (this.selectionID.length < 1) {
 				return false;