Browse Source

钉钉1.5.1

347617796@qq.com 4 years ago
parent
commit
4e88322386

+ 3 - 0
src/App.vue

@@ -19,4 +19,7 @@
 	  fill: currentColor;
 	  overflow: hidden;
 	}
+	.el-image-viewer__wrapper{
+	  z-index: 9999 !important;
+	}
 </style>

+ 0 - 2
src/api/axios.js

@@ -22,8 +22,6 @@ service.interceptors.request.use(
 		url=config.url;
 		if (getToken()) {
 			config.headers['A-Token'] = getToken()
-			// config.headers['A-Token'] = ' eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczpcL1wvdGVzdC1kaW5nLmcxMDcuY29tXC9hcGlcL2RpbmdcL2xvZ2luIiwiaWF0IjoxNjA4NTM1Nzc1LCJleHAiOjE2MDkxMzU3NzUsIm5iZiI6MTYwODUzNTc3NSwianRpIjoidWd5NjNHYTNBY1Jid2JFOCIsInN1YiI6MTY3LCJwcnYiOiJjYTY0ODlkNTBmMjQwN2E2NzgzMGU4MDkwZDAxNDg4MzU2ODU5NjJiIiwicm9sZSI6ImVtcGxveWVlIn0.89yfeHMATS4YIhMn3JTUOc3zdX9W1Q_4pPmKHQB5HVY'
-			// config.headers['A-Token'] = ' eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczpcL1wvdGVzdC1kaW5nLmcxMDcuY29tXC9hcGlcL2RpbmdcL2xvZ2luIiwiaWF0IjoxNjA4MTAxMTUwLCJleHAiOjE2MDg3MDExNTAsIm5iZiI6MTYwODEwMTE1MCwianRpIjoiRzd0VURhUmNaYTg4bjF2cyIsInN1YiI6MTY2LCJwcnYiOiJjYTY0ODlkNTBmMjQwN2E2NzgzMGU4MDkwZDAxNDg4MzU2ODU5NjJiIiwicm9sZSI6ImVtcGxveWVlIn0.RIZhoHAsj4Ru_Ap3sKgyfiG1fayG1Hgw7si9aekU8eE'
 		}
 		return config
 	},

+ 95 - 0
src/api/websocket.js

@@ -0,0 +1,95 @@
+let Socket = ''
+let setIntervalWesocketPush = null
+
+/**
+ * 建立websocket连接
+ * @param {string} url ws地址
+ */
+export const createSocket = url => {
+  Socket && Socket.close()
+  if (!Socket) {
+    console.log('建立websocket连接')
+    Socket = new WebSocket(url)
+    Socket.onopen = onopenWS
+    Socket.onmessage = onmessageWS
+    Socket.onerror = onerrorWS
+    Socket.onclose = oncloseWS
+  } else {
+    console.log('websocket已连接')
+  }
+}
+
+/**打开WS之后发送心跳 */
+const onopenWS = () => {
+  sendPing()
+}
+
+/**连接失败重连 */
+const onerrorWS = () => {
+  Socket.close()
+  clearInterval(setIntervalWesocketPush)
+  console.log('连接失败重连中')
+  if (Socket.readyState !== 3) {
+    Socket = null
+    createSocket()
+  }
+}
+
+/**WS数据接收统一处理 */
+const onmessageWS = e => {
+  window.dispatchEvent(new CustomEvent('onmessageWS', {
+    detail: {
+      data: e.data
+    }
+  }))
+}
+
+/**
+ * 发送数据但连接未建立时进行处理等待重发
+ * @param {any} message 需要发送的数据
+ */
+const connecting = message => {
+  setTimeout(() => {
+    if (Socket.readyState === 0) {
+      connecting(message)
+    } else {
+      Socket.send(JSON.stringify(message))
+    }
+  }, 1000)
+}
+
+/**
+ * 发送数据
+ * @param {any} message 需要发送的数据
+ */
+export const sendWSPush = message => {
+  if (Socket !== null && Socket.readyState === 3) {
+    Socket.close()
+    createSocket()
+  } else if (Socket.readyState === 1) {
+    Socket.send(JSON.stringify(message))
+  } else if (Socket.readyState === 0) {
+    connecting(message)
+  }
+}
+
+/**断开重连 */
+const oncloseWS = () => {
+  clearInterval(setIntervalWesocketPush)
+  console.log('websocket已断开....正在尝试重连')
+  if (Socket.readyState !== 2) {
+    Socket = null
+    createSocket()
+  }
+}
+/**发送心跳
+ * @param {number} time 心跳间隔毫秒 默认5000
+ * @param {string} ping 心跳名称 默认字符串ping
+ */
+export const sendPing = (time = 5000, ping = 'ping') => {
+  clearInterval(setIntervalWesocketPush)
+  Socket.send(ping)
+  setIntervalWesocketPush = setInterval(() => {
+    Socket.send(ping)
+  }, time)
+}

BIN
src/assets/image/logo.png


+ 386 - 366
src/components/EmployeeSelector.vue

@@ -4,30 +4,31 @@
 			<el-row :gutter="10">
 				<el-col :xs="11" :sm="11" :md="11" :lg="11" :xl="11" class="scroller-box one">
 					<div class="search-box">
-						<div class="search flex-box" style="margin-bottom: 7px;">
-							<el-input v-model="keyword" placeholder="请输入姓名" clearable></el-input>
-						</div>
+						<div class="search flex-box" style="margin-bottom: 7px;"><el-input v-model="keyword" placeholder="请输入姓名" clearable></el-input></div>
 						<div class="search flex-box" v-if="can_select_dept">
-						    <el-cascader 
-								v-model="dept_id" 
-								ref="dept" 
-								:options="dept_list" 
-								:props="{ checkStrictly: true,value:'id',label:'name',children:'_child'}" 
-								clearable 
-								filterable 
-								placeholder="全公司">
-							</el-cascader>
+							<el-cascader
+								v-model="dept_id"
+								ref="dept"
+								:options="dept_list"
+								:props="{ checkStrictly: true, value: 'id', label: 'name', children: '_child' }"
+								clearable
+								filterable
+								placeholder="全公司"
+							></el-cascader>
 						</div>
 					</div>
-					<div class="flex-box" style="padding: 10px;border-bottom: 1px solid #f1f1f1;">
-						<div class="flex-1"></div>
-						<el-checkbox v-if="isChecKedAll&&multi" v-model="checked" @change="checkedChange" :indeterminate="indeterminate">全选</el-checkbox>
+					<div class="flex-box-end" style="padding: 10px;border-bottom: 1px solid #f1f1f1;height: 40px;box-sizing: border-box;">
+						<el-checkbox v-if="isChecKedAll && multi" v-model="checked" @change="checkedChange" :indeterminate="indeterminate">全选</el-checkbox>
 					</div>
-					<el-scrollbar wrap-class="column-wrapper scrollable-items-container" :style="{height: height}" :native="false" v-loading="table_loading">
+					<el-scrollbar :style="{ height: can_select_dept ? '310px' : '350px' }" :native="false" v-loading="table_loading">
 						<div class="choose_left">
 							<div class="persons_box" style="padding-top:4px;" v-if="list.length > 0">
 								<a class="employee_cell_a" href="javascript:void(0)" v-for="(item, index) in list" :key="index">
-									<div class="employee_cell flex-box flex-v-ce" v-if="can_select_employee&& item.name.indexOf(keyword) >= 0" @click.prevent.stop="select_employee(item)">
+									<div
+										class="employee_cell flex-box flex-v-ce"
+										v-if="can_select_employee && item.name.indexOf(keyword) >= 0"
+										@click.prevent.stop="select_employee(item)"
+									>
 										<div class="employee_checkbox"><el-checkbox v-model="item.checked"></el-checkbox></div>
 										<userImage :user_name="item.name" :img_url="item.img_url" width="30px" height="30px"></userImage>
 										<div class="employee_name">{{ item.name }}</div>
@@ -52,7 +53,6 @@
 								<div class="employee_delete"><el-button type="default" size="mini" @click="dept_cancel(item)" icon="el-icon-close" circle></el-button></div>
 								<div class="employee_cell_clear"></div>
 							</div>
-
 							<div class="employee_cell" v-for="(item, index) in employee_selected_list" :key="index">
 								<userImage :user_name="item.name" :img_url="item.img_url" width="30px" height="30px"></userImage>
 								<div class="employee_name">{{ item.name }}</div>
@@ -70,362 +70,384 @@
 </template>
 
 <script>
-
 export default {
-  props: {
-    can_select_dept: {//指定是否能选择部门
-      type: Boolean,
-      default: true
-    },
-    can_select_employee: {//指定是否能选择员工
-      type: Boolean,
-      default: true
-    },
-    selected: {//已经选择的员工和部门
-      type: Object,
-      default: () => {
-        return {
-          employee: [],
-          dept: []
-        }
-      }
-    },
-    multi: {//指定员工是否能多选
-      type: Boolean,
-      default: true
-    },
-    dept_multi: {//指定部门是否能多选
-      type: Boolean,
-      default: true
-    },
-    employee_list: {//指定显示的员工列表,注意:传值后组件的员工数据将不是统一向服务器获取的,而是指定的员工列表,格式是:[{id: 1, name: “张三”, img_url: “”}]
-      type: Array,
-      default: () => {
-        return []
-      }
-    },
-    close_clear_data: {//关闭时是否清空选择的数据
-      type: Boolean,
-      default: true
-    },
-    max: {//当multi为true时,用来限制选择人数,0不生效
-      type: Number,
-      default: 0
-    },
-    user_no_select:{//是否能选择创始人
-      type: Boolean,
-      default: true
-    },
-    isChecKedAll:{//是否能全人员
-      type: Boolean,
-      default: true
-     },
-	 my_no_select:{//当前设置人的id,过滤某位人员,一般为自己
-		  type: Number,
-		  default: 0
-	 },
-	 isCreatorSelect:{//当employee_list为空时,依然显示空值而不是显示人员列表
-		 type: Boolean,
-		 default: false
-	 },
-	 use_Administrator_list:{//未指定员工并请求人员接口时,保留管理员,过滤员工
-		 type: Boolean,
-		 default: false
-	 }
-	 
-  },
-  name: "EmployeeSelector",
-  data() {
-    let selected = JSON.parse(JSON.stringify(this.selected));
-    let user_no_select = JSON.parse(JSON.stringify(this.user_no_select));
-	let height=this.can_select_dept? '310px':'350px'
-    return {
-      table_loading:false,
-      employee_selected_list: selected.employee,
-      dept_selected_list: selected.dept,
-      employee_selected: [],
-      dept_selected: [],
-      com_height: '100%',
-		
-	  height:height,	
-      list: [],//人员列表
-	  dept_name: '',//部门名称
-	  dept_id: 0,//部门ID
-	  pid:0,//部门ID实传
-      dept_list: [],//部门列表
-	  dept_list_arr: [],//收集的部门
-      keyword: '',//搜索值
-      checked: false,//是否全选
-      indeterminate: false,
-      not_user: user_no_select,
-	  all_list:[],
-    }
-  },
-  watch: {
-	dept_id(val){
-		if(val.length>1){
-			this.pid=val[val.length-1];
-		}else{
-			this.pid=val[0];
+	props: {
+		can_select_dept: {
+			//指定是否能选择部门
+			type: Boolean,
+			default: true
+		},
+		can_select_employee: {
+			//指定是否能选择员工
+			type: Boolean,
+			default: true
+		},
+		selected: {
+			//已经选择的员工和部门
+			type: Object,
+			default: () => {
+				return {
+					employee: [],
+					dept: []
+				};
+			}
+		},
+		multi: {
+			//指定员工是否能多选
+			type: Boolean,
+			default: true
+		},
+		dept_multi: {
+			//指定部门是否能多选
+			type: Boolean,
+			default: true
+		},
+		employee_list: {
+			//指定显示的员工列表,注意:传值后组件的员工数据将不是统一向服务器获取的,而是指定的员工列表,格式是:[{id: 1, name: “张三”, img_url: “”}]
+			type: Array,
+			default: () => {
+				return [];
+			}
+		},
+		close_clear_data: {
+			//关闭时是否清空选择的数据
+			type: Boolean,
+			default: true
+		},
+		max: {
+			//当multi为true时,用来限制选择人数,0不生效
+			type: Number,
+			default: 0
+		},
+		user_no_select: {
+			//是否能选择创始人
+			type: Boolean,
+			default: true
+		},
+		isChecKedAll: {
+			//是否能全人员
+			type: Boolean,
+			default: true
+		},
+		my_no_select: {
+			//当前设置人的id,过滤某位人员,一般为自己
+			type: Number,
+			default: 0
+		},
+		isCreatorSelect: {
+			//当employee_list为空时,依然显示空值而不是显示人员列表
+			type: Boolean,
+			default: false
+		},
+		use_Administrator_list: {
+			//未指定员工并请求人员接口时,保留管理员,过滤员工
+			type: Boolean,
+			default: false
 		}
-		this.$nextTick(() => {
-			this.$refs.dept.dropDownVisible = false;
-			this.get_user_list();
-			this.checked=false;
-		});
 	},
-    selected(val) {
-      let selected = JSON.parse(JSON.stringify(val))
-      this.employee_selected = []
-      this.dept_selected = []
-      this.employee_selected_list = selected.employee
-      this.dept_selected_list = selected.dept
-      for (let i in selected.employee) {
-        this.employee_selected.push(selected.employee[i].id)
-      }
-      for (let i in selected.dept) {
-        this.dept_selected.push(selected.dept[i].dept_id)
-      }
-    },
-    //搜索
-    keyword(val) {
-	  this.checked=false;
-    }
-  },
-  methods: {
-    //全选择
-    checkedChange(val){
-      if (val) {
-        for (let i in this.list) {
-          this.$set(this.list[i], 'checked', true)
-        }
-        this.$nextTick(() => {
-          let employeeSelectedList = JSON.parse(JSON.stringify(this.employee_selected_list))
-          let employeeSelectedIds = [], total = 0
-          employeeSelectedList.forEach(element => {
-            employeeSelectedIds.push(element.id)
-          });
-          for (const i in this.list) {
-            if (employeeSelectedIds.includes(this.list[i].id)) {
-              total += 1
-            }else{
-              this.employee_selected_list.push(this.list[i])
-            }
-          }
-          this.list.length == total?this.indeterminate = true:this.indeterminate = false
-        })
-      }else{
-        this.clear_data()
-      }
-    },
-    //添加或移除已添加的员工
-    employee_cancel(item) {	
-      this.employee_selected_list.map((arr,index)=>{
-          if(arr.id==item.id){
-            this.employee_selected_list.splice(index,1);
-          }
-      })
-      this.list.map((arr,index)=>{
-          if(arr.id==item.id){
-           this.$set(arr, 'checked', false)
-          }
-      })
-    },
-	//获取部门
-	get_dept_list() {
-		this.$axios('get','/api/department/tree').then(res => {
-			this.dept_list =this.getTreeData(res.data.data.list);
-		});
+	name: 'EmployeeSelector',
+	data() {
+		let selected = JSON.parse(JSON.stringify(this.selected));
+		let user_no_select = JSON.parse(JSON.stringify(this.user_no_select));
+		return {
+			table_loading: false,
+			employee_selected_list: selected.employee,
+			dept_selected_list: selected.dept,
+			employee_selected: [],
+			dept_selected: [],
+			com_height: '100%',
+			list: [], //人员列表
+			dept_name: '', //部门名称
+			dept_id: 0, //部门ID
+			pid: 0, //部门ID实传
+			dept_list: [], //部门列表
+			dept_list_arr: [], //收集的部门
+			keyword: '', //搜索值
+			checked: false, //是否全选
+			indeterminate: false,
+			not_user: user_no_select,
+			all_list: []
+		};
 	},
-	 // 递归判断列表,把最后的children设为undefined
-	 getTreeData(data) {
-		for (var i = 0; i < data.length; i++) {
-			if (data[i]._child.length < 1) {
-				// children若为空数组,则将children设为undefined
-				data[i]._child = undefined;
+	watch: {
+		dept_id(val) {
+			if (val.length > 1) {
+				this.pid = val[val.length - 1];
 			} else {
-				// children若不为空数组,则继续 递归调用 本方法
-				this.getTreeData(data[i]._child);
+				this.pid = val[0];
 			}
+			this.$nextTick(() => {
+				this.$refs.dept.dropDownVisible = false;
+				this.get_user_list();
+				this.checked = false;
+			});
+		},
+		selected(val) {
+			let selected = JSON.parse(JSON.stringify(val));
+			this.employee_selected = [];
+			this.dept_selected = [];
+			this.employee_selected_list = selected.employee;
+			this.dept_selected_list = selected.dept;
+			for (let i in selected.employee) {
+				this.employee_selected.push(selected.employee[i].id);
+			}
+			for (let i in selected.dept) {
+				this.dept_selected.push(selected.dept[i].dept_id);
+			}
+		},
+		//搜索
+		keyword(val) {
+			this.checked = false;
 		}
-		return data;
-	 },
-    //选择部门
-    dept_cancel(item) {
-      this.dept_selected.splice(this.dept_selected.indexOf(item.id), 1)
-      let delete_index = -1
-      for (let i in this.dept_selected_list) {
-        if (this.dept_selected.indexOf(this.dept_selected_list[i].id) < 0) {
-          delete_index = i
-        }
-      }
-      if (delete_index >= 0) {
-        this.dept_selected_list.splice(delete_index, 1)
-        for (let i in this.dept_list) {
-          if (this.dept_list[i].dept_id == item.id) {
-            this.$set(this.dept_list[i], 'checked', false)
-          }
-        }
-      }
-    },
-    //选择员工
-    select_employee(item) {
-      if (item.checked) {
-        item.checked = false
-        this.employee_cancel(item)
-      } else {
-        if (!this.multi) {
-          this.employee_selected = []
-          this.employee_selected_list = []
-          for (let i in this.list) {
-            this.$set(this.list[i], 'checked', false)
-          }
-        }
-        if (this.max > 0 && this.employee_selected_list.length == this.max && this.multi) {
-          this.$message.error('最多只能选择' + this.max + '人')
-          return false
-        }
-        this.employee_selected.push(item.id)
-        this.employee_selected_list.push({
-          id: item.id,
-          name: item.name,
-          img_url: item.img_url
-        })
-        item.checked = true
-      }
-    },
-
-    clear_data() {
-      this.employee_selected = []
-      this.employee_selected_list = []
-      this.dept_selected = []
-      this.dept_selected_list = []
-      this.checked = false
-      for (let i in this.list) {
-        this.$set(this.list[i], 'checked', false)
-      }
-      for (let i in this.dept_list) {
-        this.$set(this.dept_list[i], 'checked', false)
-      }
-    },
-
-    close() {
-      if (this.close_clear_data) {
-        this.employee_selected = []
-        this.employee_selected_list = []
-        this.dept_selected = []
-        this.dept_selected_list = []
-        for (let i in this.list) {
-          this.$set(this.list[i], 'checked', false)
-        }
-        for (let i in this.dept_list) {
-          this.$set(this.dept_list[i], 'checked', false)
-        }
-      }
-    },
-    confirm() {
-      this.$emit('confirm', {
-        employee: this.employee_selected_list,
-        dept: this.dept_selected_list
-      })
-      this.close()
 	},
-	filtration(){//获取员工列表,限制已禁用的员工
-      this.$axios('get','/api/employee/index',{ dept_id: 0, page: 0,page_size: 2000}).then((res) => {
-		  if(res.data.code == 1){
-			let list = res.data.data.list
-			let data = []
-			list.forEach((item,index)=>{
-				if(item.is_official == 1){
-					data.push(item)
+	methods: {
+		//全选择
+		checkedChange(val) {
+			if (val) {
+				for (let i in this.list) {
+					this.$set(this.list[i], 'checked', true);
+				}
+				this.$nextTick(() => {
+					let employeeSelectedList = JSON.parse(JSON.stringify(this.employee_selected_list));
+					let employeeSelectedIds = [],
+						total = 0;
+					employeeSelectedList.forEach(element => {
+						employeeSelectedIds.push(element.id);
+					});
+					for (const i in this.list) {
+						if (employeeSelectedIds.includes(this.list[i].id)) {
+							total += 1;
+						} else {
+							this.employee_selected_list.push(this.list[i]);
+						}
+					}
+					this.list.length == total ? (this.indeterminate = true) : (this.indeterminate = false);
+				});
+			} else {
+				this.clear_data();
+			}
+		},
+		//添加或移除已添加的员工
+		employee_cancel(item) {
+			this.employee_selected_list.map((arr, index) => {
+				if (arr.id == item.id) {
+					this.employee_selected_list.splice(index, 1);
+				}
+			});
+			this.list.map((arr, index) => {
+				if (arr.id == item.id) {
+					this.$set(arr, 'checked', false);
+				}
+			});
+		},
+		//获取部门
+		get_dept_list() {
+			this.$axios('get', '/api/department/tree').then(res => {
+				this.dept_list = this.getTreeData(res.data.data.list);
+			});
+		},
+		// 递归判断列表,把最后的children设为undefined
+		getTreeData(data) {
+			for (var i = 0; i < data.length; i++) {
+				if (data[i]._child.length < 1) {
+					// children若为空数组,则将children设为undefined
+					data[i]._child = undefined;
+				} else {
+					// children若不为空数组,则继续 递归调用 本方法
+					this.getTreeData(data[i]._child);
+				}
+			}
+			return data;
+		},
+		//选择部门
+		dept_cancel(item) {
+			this.dept_selected.splice(this.dept_selected.indexOf(item.id), 1);
+			let delete_index = -1;
+			for (let i in this.dept_selected_list) {
+				if (this.dept_selected.indexOf(this.dept_selected_list[i].id) < 0) {
+					delete_index = i;
+				}
+			}
+			if (delete_index >= 0) {
+				this.dept_selected_list.splice(delete_index, 1);
+				for (let i in this.dept_list) {
+					if (this.dept_list[i].dept_id == item.id) {
+						this.$set(this.dept_list[i], 'checked', false);
+					}
 				}
-			})
-			this.userdatars(data)
-		  }else{
-			this.userdatars()
-		  }
-	  }).catch(()=>{
-		this.userdatars()
-	  }).finally(()=>{
-
-	  })
-	},
-	userdatars(userlist){
-	  	var employee_selected_list=this.employee_selected_list;
-		let list = this.employee_list
-		if(userlist){
-			list = [...list].filter(x => [...userlist].some(y => y.id === x.id))
-		}
-	    list.map((item)=>{
-			 item['checked'] = false;
-			 for(var i in employee_selected_list){//判断传进来的员工是否是员工集合里的,是就设为已点击状态
-			   if(employee_selected_list[i].id==item.id){
-				 item['checked'] = true;
-			   }
-			 }
-	    })
-		this.list=list;
-		this.table_loading = false;
-	},
-    //获取员工详情
-    get_user_list() {
-      this.table_loading = true;
-      var that=this;
-	  var employee_selected_list=this.employee_selected_list;
-      if (this.employee_list.length > 0||this.isCreatorSelect) {
-		this.filtration()
-        return false
-      }
-      this.list = []
-      this.$axios('get','/api/employee/index',{ dept_id: this.pid,keywords: this.keyword, page: 0,page_size: 2000}).then((res) => {
-		var employee=res.data.data.list||[];
-		if(this.use_Administrator_list){//使用管理员列表
-			employee = this.useAdministratorList(employee)
-		}
-		var userAll=[];
-        employee.forEach((item,i)=>{
-			if(!this.not_user && item.is_creator == 1){//过滤创始人
-				return null;
-			}else if(this.my_no_select==item.id){//过滤掉当前设置人
-				return null;
-			}else if(item.is_official==1){
-				userAll.push(item);
 			}
-        })
-	    userAll.map((item)=>{
-			 item['checked'] = false;
-			 for(var i in employee_selected_list){//判断传进来的员工是否是员工集合里的,是就设为已点击状态
-			   if(employee_selected_list[i].id==item.id){
-				 item['checked'] = true;
-			   }
-			 }
-	    })
-		that.list = userAll
-	   }).finally(() => {
-		  that.table_loading = false;
-	   })
+		},
+		//选择员工
+		select_employee(item) {
+			if (item.checked) {
+				item.checked = false;
+				this.employee_cancel(item);
+			} else {
+				if (!this.multi) {
+					this.employee_selected = [];
+					this.employee_selected_list = [];
+					for (let i in this.list) {
+						this.$set(this.list[i], 'checked', false);
+					}
+				}
+				if (this.max > 0 && this.employee_selected_list.length == this.max && this.multi) {
+					this.$message.error('最多只能选择' + this.max + '人');
+					return false;
+				}
+				this.employee_selected.push(item.id);
+				this.employee_selected_list.push({
+					id: item.id,
+					name: item.name,
+					img_url: item.img_url
+				});
+				item.checked = true;
+			}
+		},
+
+		clear_data() {
+			this.employee_selected = [];
+			this.employee_selected_list = [];
+			this.dept_selected = [];
+			this.dept_selected_list = [];
+			this.checked = false;
+			for (let i in this.list) {
+				this.$set(this.list[i], 'checked', false);
+			}
+			for (let i in this.dept_list) {
+				this.$set(this.dept_list[i], 'checked', false);
+			}
+		},
+
+		close() {
+			if (this.close_clear_data) {
+				this.employee_selected = [];
+				this.employee_selected_list = [];
+				this.dept_selected = [];
+				this.dept_selected_list = [];
+				for (let i in this.list) {
+					this.$set(this.list[i], 'checked', false);
+				}
+				for (let i in this.dept_list) {
+					this.$set(this.dept_list[i], 'checked', false);
+				}
+			}
+		},
+		confirm() {
+			this.$emit('confirm', {
+				employee: this.employee_selected_list,
+				dept: this.dept_selected_list
+			});
+			this.close();
+		},
+		filtration() {
+			//获取员工列表,限制已禁用的员工
+			this.$axios('get', '/api/employee/index', { dept_id: this.pid, page: 0, page_size: 2000 })
+				.then(res => {
+					if (res.data.code == 1) {
+						let list = res.data.data.list;
+						let data = [];
+						list.forEach((item, index) => {
+							if (item.is_official == 1) {
+								data.push(item);
+							}
+						});
+						this.userdatars(data);
+					} else {
+						this.userdatars();
+					}
+				})
+				.catch(() => {
+					this.userdatars();
+				});
+		},
+		userdatars(userlist) {
+			var employee_selected_list = this.employee_selected_list;
+			let list = this.employee_list;
+			if (userlist) {
+				list = [...userlist].filter(x => [...list].some(y => y.id === x.id));
+			}
+			list.map(item => {
+				item['checked'] = false;
+				for (var i in employee_selected_list) {
+					//判断传进来的员工是否是员工集合里的,是就设为已点击状态
+					if (employee_selected_list[i].id == item.id) {
+						item['checked'] = true;
+					}
+				}
+			});
+			this.list = list;
+			this.table_loading = false;
+		},
+		//获取员工详情
+		get_user_list() {
+			this.table_loading = true;
+			var that = this;
+			var employee_selected_list = this.employee_selected_list;
+			if (this.employee_list.length > 0 || this.isCreatorSelect) {
+				this.filtration();
+				return false;
+			}
+			this.list = [];
+			this.$axios('get', '/api/employee/index', { dept_id: this.pid, keywords: this.keyword, page: 0, page_size: 2000 })
+				.then(res => {
+					var employee = res.data.data.list || [];
+					if (this.use_Administrator_list) {
+						//使用管理员列表
+						employee = this.useAdministratorList(employee);
+					}
+					var userAll = [];
+					employee.forEach((item, i) => {
+						if (!this.not_user && item.is_creator == 1) {
+							//过滤创始人
+							return null;
+						} else if (this.my_no_select == item.id) {
+							//过滤掉当前设置人
+							return null;
+						} else if (item.is_official == 1) {
+							userAll.push(item);
+						}
+					});
+					userAll.map(item => {
+						item['checked'] = false;
+						for (var i in employee_selected_list) {
+							//判断传进来的员工是否是员工集合里的,是就设为已点击状态
+							if (employee_selected_list[i].id == item.id) {
+								item['checked'] = true;
+							}
+						}
+					});
+					that.list = userAll;
+				})
+				.finally(() => {
+					that.table_loading = false;
+				});
+		},
+		useAdministratorList(list) {
+			//过滤掉普通员工,返回管理员
+			let arr = [];
+			list.forEach((item, i) => {
+				if (
+					item.employee_detail.role_list.findIndex(
+						value => value.name == 'dept_manager' || value.name == 'creator' || value.name == 'point_manager' || value.name == 'admin'
+					) >= 0
+				) {
+					arr.push(item);
+				}
+			});
+			return arr;
+		}
 	},
-	useAdministratorList(list){//过滤掉普通员工,返回管理员
-		let arr = []
-		list.forEach((item,i)=>{
-			if (item.employee_detail.role_list.findIndex((value)=>value.name=='dept_manager'||value.name=='creator'||value.name=='point_manager'||value.name=='admin') >= 0) {
-				arr.push(item)
+	created() {
+		var that = this;
+		that.checked = false;
+		setTimeout(() => {
+			that.get_user_list();
+			if (that.can_select_dept) {
+				that.get_dept_list();
 			}
-		})
-		return arr
+		}, 200);
 	}
-  },
-  created() {
-	var that=this;
-	that.checked=false;
-    setTimeout(() => {
-      that.get_user_list();
-	  if(that.can_select_dept){
-		  that.get_dept_list();
-	  }
-    }, 200)
-  }
-}
+};
 </script>
 
 <style scoped>
@@ -447,7 +469,6 @@ a {
 	width: 80%;
 }
 
-
 /* 左边框 */
 .employee_selector_box .choose_left {
 	padding: 8px 10px 8px 10px;
@@ -473,13 +494,11 @@ a {
 	padding-left: 8px;
 }
 
-.employee_selector_box ::v-deep .el-scrollbar__thumb {
+/* .employee_selector_box ::v-deep .el-scrollbar__thumb {
 	width: 2px;
 	margin: 15px 0 0 6px;
 	background: #409eff;
-}
-
-/* 左边框 */
+} */
 
 /* 右边距 */
 .employee_selector_box .option-box {
@@ -532,6 +551,7 @@ a {
 	color: #606266;
 	padding: 8px 0;
 	background-color: transparent;
+	border-bottom: 1px #f1f1f1 solid;
 }
 
 .employee_cell .employee_cell_clear {

+ 31 - 53
src/components/UserImage.vue

@@ -1,6 +1,6 @@
 <template>
   <div style="box-sizing: border-box;">
-    <img v-if="info.img_url" class="logo_img" :src="info.img_url" :width="width" :height="height" />
+    <img v-if="imgUrl" class="logo_img" :src="imgUrl" :width="width" :height="height" />
     <div v-else class="user_name_div" :style="{
 	   width: width,
 	   height: height,
@@ -39,69 +39,47 @@
         default: '0.8'
       }
     },
-    watch:{
-      id: function (val) {
-        this.set_info()
-        this.name_no()
-      },
-      img_url: function (val) {
-        this.set_info()
-        this.name_no()
-      },
-      user_name: function (val) {
-        this.set_info()
-        this.name_no()
-      }
-    },
     // 数据
     data(){
-      let info ={name:'',img_url: '',id:0}
-      if(this.img_url != ''){
-        info.img_url = this.img_url
-      }
-      if(this.user_name != ''){
-        info.name = this.user_name
-      }
       return {
-        info: info,
-        name: '',
+        imgUrl: "",
+        name: "",
+		employeeMap:JSON.parse(localStorage.getItem("userList"))
       }
     },
-    computed:{
-    },
+	watch:{
+		id: function(val) {
+			this.name_no()
+		},
+		img_url: function(val) {
+			this.name_no()
+		},
+		user_name: function(val) {
+			this.name_no()
+		},
+	},
+	// 组件挂载完成
+	mounted() {
+	  this.name_no()
+	},
     // 方法
     methods:{
-      set_info(){
-        let info ={name:'',img_url: '',id:0}
-
-        if(this.img_url != ''){
-          info.img_url = this.img_url
-        }
-        if(this.user_name != ''){
-          info.name = this.user_name
-        }
-        this.info = info
-      },
-      // 加载
       name_no(){
-        if(!this.info.img_url){
-          let pattern = new RegExp("^[\u4E00-\u9FA5]+");
-          if(this.info.name.length > 2){
-            if(pattern.test(this.info.name)){
-              this.name = this.info.name.substring(this.info.name.length-2,this.info.name.length)
-            }else{
-              this.name = this.info.name.substring(0,2)
-            }
-          }else{
-            this.name = this.info.name
-          }
+		 this.imgUrl=this.img_url
+		 this.name=this.user_name
+		let pattern = new RegExp("^[\u4E00-\u9FA5]+");
+		if(this.name.length > 2){
+		  if(pattern.test(this.name)){
+		    this.name = this.name.substring(this.name.length-2,this.name.length)
+		  }else{
+		    this.name = this.name.substring(0,2)
+		  }
+		}  
+        if(!this.imgUrl&&this.id&&this.employeeMap){
+          this.imgUrl=this.employeeMap[this.id].img_url
         }
       }
     },
-    // 组件挂载完成
-    mounted() {
-      this.name_no()
-    },
   }
 </script>
 <style scoped>

+ 156 - 139
src/components/applicationIntegrationPopup.vue

@@ -1,7 +1,7 @@
 <template>
 	<div>
 		<!-- 奖扣ab分弹窗 -->
-		<el-dialog :title="title" :visible.sync="visible"  :close-on-click-modal="false" :before-close="closeDialog" width="600px">
+		<el-dialog :title="title" :visible.sync="visible" :close-on-click-modal="false" :before-close="closeDialog2" width="600px">
 			<div>
 				<el-form :model="dialogData" ref="dialogData" label-width="80px" v-loading="loading">
 					<div v-for="(item, index) in dialogData.items" :key="index" @click="itemIndex = index">
@@ -9,20 +9,20 @@
 							<span style="line-height: 36px;" class="flex-1">申请明细({{ index + 1 }})</span>
 							<el-button type="text" v-show="index > 0 || dialogData.items.length > 1" @click="delItem(index)">删除</el-button>
 						</div>
-						<el-form-item label="录入对象" :prop="'items.'+ index +'.employeeName'" :rules="[{ required: true, message: '请选择录入对象', trigger: 'change' }]">
-						  <el-row>
-							<el-col :span="18">
-							  <el-input auto-complete="off" v-model="item.employeeName" placeholder="请选择录入对象"></el-input>
-							  <div @click="item.show_employee_selector = true" style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"></div>
-							</el-col>
-						  </el-row>
+						<el-form-item label="录入对象" :prop="'items.' + index + '.employeeName'" :rules="[{ required: true, message: '请选择录入对象', trigger: 'change' }]">
+							<el-row>
+								<el-col :span="18">
+									<el-input auto-complete="off" v-model="item.employeeName" placeholder="请选择录入对象"></el-input>
+									<div @click="item.show_employee_selector = true" style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"></div>
+								</el-col>
+							</el-row>
+
 							<el-dialog title="选择人员" width="640px" :visible.sync="item.show_employee_selector" append-to-body :before-close="handleClose">
 								<EmployeeSelector
 									v-if="item.show_employee_selector"
 									ref="employee"
 									:multi="false"
 									:user_no_select="false"
-									:can_select_dept="false"
 									:selected="item.employee_selected"
 									@confirm="employee_confirm"
 								/>
@@ -32,10 +32,8 @@
 								</span>
 							</el-dialog>
 						</el-form-item>
-						<el-form-item label="指定规则">
-							<el-switch v-model="item.rule_switch" @change="switchChange(index, item.rule_switch)"></el-switch>
-						</el-form-item>
-						
+						<el-form-item label="指定规则"><el-switch v-model="item.rule_switch" @change="switchChange(index, item.rule_switch)"></el-switch></el-form-item>
+
 						<el-form-item
 							label="选择规则"
 							v-if="item.rule_switch"
@@ -56,7 +54,7 @@
 						<el-form-item v-if="item.rule_switch && item.rule_id">
 							<div style="line-height: 24px;" v-show="item.rule_item_details.range_type == 1">
 								{{ item.rule_item_details.min_point }}
-								<span class="blue">{{ $getTypsName(item.rule_item_details.pt_id)}}</span>
+								<span class="blue">{{ $getTypsName(item.rule_item_details.pt_id) }}</span>
 							</div>
 							<div style="line-height: 24px;" v-show="item.rule_item_details.range_type == 2">
 								{{ item.rule_item_details.min_point }} ~ {{ item.rule_item_details.max_point }}
@@ -68,7 +66,13 @@
 						<el-form-item label="发生时间" :prop="'items.' + index + '.event_time'" :rules="[{ required: true, message: '请选择时间', trigger: 'blur' }]">
 							<el-row>
 								<el-col :span="18">
-									<el-date-picker v-model="item.event_time" :picker-options="pickerBeginDateBefore" type="date" placeholder="请选择时间" value-format="yyyy-MM-dd"></el-date-picker>
+									<el-date-picker
+										v-model="item.event_time"
+										:picker-options="pickerBeginDateBefore"
+										type="date"
+										placeholder="请选择时间"
+										value-format="yyyy-MM-dd"
+									></el-date-picker>
 								</el-col>
 							</el-row>
 						</el-form-item>
@@ -103,11 +107,16 @@
 							</uploadOss>
 						</el-form-item>
 
-						<el-form-item v-loading.lock="fullscreenLoading" label="审批人" :prop="'items.' + index + '.approvalName'" :rules="[{ required: true, message: '请选择审批人', trigger: 'blur' }]">
+						<el-form-item
+							v-loading.lock="fullscreenLoading"
+							label="审批人"
+							:prop="'items.' + index + '.approvalName'"
+							:rules="[{ required: true, message: '请选择审批人', trigger: 'blur' }]"
+						>
 							<el-row>
 								<el-col :span="18">
 									<el-input auto-complete="off" v-model="item.approvalName" placeholder="请选择审批人"></el-input>
-									<div  @click="approval_selected_null(item)" style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"></div>
+									<div @click="approval_selected_null(item)" style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"></div>
 								</el-col>
 							</el-row>
 							<el-dialog title="选择人员" width="640px" :visible.sync="item.show_approval_selector" append-to-body :before-close="handleClose">
@@ -118,7 +127,7 @@
 									:multi="false"
 									:employee_list="item.approval_employee_list"
 									:user_no_select="false"
-									:can_select_dept="false"
+									:isCreatorSelect="true"
 									:selected="item.approval_selected"
 									@confirm="approval_confirm"
 								/>
@@ -132,23 +141,30 @@
 					<el-form-item style="margin-bottom: 0;"><div>如需录入多条,请点击“增加一条”</div></el-form-item>
 					<el-form-item style="margin-bottom: 0;"><el-button type="primary" plain @click="addItem">+ 增加一条</el-button></el-form-item>
 					<el-form-item style="text-align: right; margin-bottom: 0;">
-						<el-button @click="closeDialog('dialogData')">取 消</el-button>
+						<el-button @click="closeDialog2('dialogData')">取 消</el-button>
 						<el-button :disabled="btn_loading" :loading="btn_loading" type="primary" @click="subData('dialogData')">确 认</el-button>
 					</el-form-item>
 				</el-form>
 			</div>
 		</el-dialog>
 
-		<el-dialog :title="'提交结果'" :visible.sync="error_list_show" :append-to-body="true" width="700px">
+		<el-dialog :title="'提交结果'" :visible.sync="error_list_show" :before-close="closeDialog2" :append-to-body="true" width="700px">
 			<el-table :data="error_list">
 				<el-table-column prop="target" label="员工"></el-table-column>
-				<el-table-column prop="point" label="积分"></el-table-column>
+<!-- 				<el-table-column prop="point" label="积分">
+					<template slot-scope="scope">
+						<span>
+							{{ scope.row.point }}
+							<span>{{ integralType == 2 ? 'A分' : 'B分' }}</span>
+						</span>
+					</template>
+				</el-table-column> -->
 				<el-table-column prop="status" label="处理状态">
 					<template slot-scope="scope">
 						<span :style="'color:' + (scope.row.status == 0 ? '#f70000' : '#47bf47')">{{ scope.row.status == 0 ? '申请失败' : '申请成功' }}</span>
 					</template>
 				</el-table-column>
-				<el-table-column prop="msg" label="备注信息"></el-table-column>
+				<el-table-column prop="remark" label="备注信息"></el-table-column>
 			</el-table>
 		</el-dialog>
 	</div>
@@ -204,14 +220,14 @@ export default {
 						// 录入对象
 						employee_id: getUserData.id,
 						employeeName: getUserData.name,
-						employee_selected: {dept: [],employee:[{id:getUserData.id,name:getUserData.name}]},
+						employee_selected: { dept: [], employee: [{ id: getUserData.id, name: getUserData.name }] },
 						show_employee_selector: false,
 
 						// 审批人信息
 						reviewer_id: '',
 						approvalName: '',
 						approval_selected: { dept: [], employee: [] },
-						approval_employee_list: [],//当前选中人的 上级
+						approval_employee_list: [], //当前选中人的 上级
 						show_approval_selector: false,
 
 						// 附件
@@ -231,34 +247,34 @@ export default {
 			flatteningIntegralRules: null,
 			user_info: null,
 			btn_loading: false,
-			itemIndex:0,
-			fullscreenLoading: false,//选择审批人时需要,获取录入对象的上级
-			LocalValObj:{id:'',name:''},//当前录入的审批人缓存
+			itemIndex: 0,
+			fullscreenLoading: false, //选择审批人时需要,获取录入对象的上级
+			LocalValObj: { id: '', name: '' } //当前录入的审批人缓存
 		};
 	},
 	components: { EmployeeSelector, uploadOss },
 	created() {
 		this.user_info = this.$getUserData();
-		var reviewerObj=this.getLocalVal(this.user_info.id);
-		var reviewerObj=reviewerObj? JSON.parse(reviewerObj):{id:'',name:''};
-		this.LocalValObj=reviewerObj
+		var reviewerObj = this.getLocalVal(this.user_info.id);
+		var reviewerObj = reviewerObj ? JSON.parse(reviewerObj) : { id: '', name: '' };
+		this.LocalValObj = reviewerObj;
 	},
 	mounted() {
 		this.getRuleItemData();
 		// 初始化审批人
-		if(this.LocalValObj.id){
-			this.dialogData.items[0].approval_selected.employee =[this.LocalValObj];
-			this.dialogData.items[0].reviewer_id = this.LocalValObj.id
-			this.dialogData.items[0].approvalName = this.LocalValObj.name
+		if (this.LocalValObj.id) {
+			this.dialogData.items[0].approval_selected.employee = [this.LocalValObj];
+			this.dialogData.items[0].reviewer_id = this.LocalValObj.id;
+			this.dialogData.items[0].approvalName = this.LocalValObj.name;
 		}
 	},
 	methods: {
 		//获取缓存起来的审批人
-		getLocalVal(id){
-		  var obj=localStorage.getItem(id);
-		  return obj
+		getLocalVal(id) {
+			var obj = localStorage.getItem(id);
+			return obj;
 		},
-		submitMembers(name){
+		submitMembers(name) {
 			this.$refs[name][0].confirm(); //调用组件的confirm();
 		},
 		submitApproval(name) {
@@ -300,42 +316,43 @@ export default {
 
 		// 选择审批人前提
 		approval_selected_null(item) {
-			if(!item.employee_id){
+			if (!item.employee_id) {
 				this.$message.error('请先选择录入对象');
-			}else{
-				this.fullscreenLoading=true;
-				this.getEmployeeList(item.employee_id,function(res){
-					if(res.length>0){
-					item.approval_employee_list=res;	
-					item.show_approval_selector = true;
-					}else{
+			} else {
+				this.fullscreenLoading = true;
+				this.getEmployeeList(item.employee_id, function(res) {
+					if (res.length > 0) {
+						item.approval_employee_list = res;
+						item.show_approval_selector = true;
+					} else {
 						this.$message.error('您没有审批人,请联系管理员');
 					}
-				})
+				});
 			}
 		},
-		  //获取人员(上级人员)
-		  getEmployeeList(userIdArr, callBack) {
-			this.$axios('get',"api/employee/superior", { employee_id: userIdArr, filter_applyor: 1 }).then((res) => {
-			  callBack(res.data.data.list)
-			}).finally(()=>{
-				this.fullscreenLoading=false;
-			})
-		  },
+		//获取人员(上级人员)
+		getEmployeeList(userIdArr, callBack) {
+			this.$axios('get', 'api/employee/superior', { employee_id: userIdArr, filter_applyor: 1 })
+				.then(res => {
+					callBack(res.data.data.list);
+				})
+				.finally(() => {
+					this.fullscreenLoading = false;
+				});
+		},
 		// 获取规则信息
 		getRuleData() {
 			let data = {
 				cycle_type: '1'
 			};
 			this.integralType === 1 ? (data.pt_id = '1') : this.integralType === 2 ? (data.pt_id = '2') : (data.pt_id = '3');
-			this.$axios('get', '/api/integral/rule/trees', data)
-				.then(res => {
-					if (res.data.code == 1) {
-						const resultData = res.data.data;
-						this.rule_list = resultData.rule_tree;
-					}
-					this.rule_list = this.getTreeData(this.rule_list);
-				})
+			this.$axios('get', '/api/integral/rule/trees', data).then(res => {
+				if (res.data.code == 1) {
+					const resultData = res.data.data;
+					this.rule_list = resultData.rule_tree;
+				}
+				this.rule_list = this.getTreeData(this.rule_list);
+			});
 		},
 		// 获取规则细则
 		getRuleItemData() {
@@ -348,7 +365,7 @@ export default {
 					this.flatteningIntegralRules = this.getItemDetail(this.rule_item_list);
 					this.loading = false;
 				}
-			})
+			});
 		},
 		// 规则细则变化关闭down
 		ruleItemChange(value) {
@@ -384,30 +401,30 @@ export default {
 			return data;
 		},
 		// 选择对象
-		employee_confirm(data){
-		  const item = this.dialogData.items[this.itemIndex]
-		  item.employeeName = ''
-		  item.employee_selected = {dept: [],employee:[]}
-		  item.employee_id = ''
-		  
-		  if (data.employee !== null && data.employee.length != 0) {
-		    item.employeeName = data.employee[0].name
-		    item.employee_selected.employee = [{name: data.employee[0].name,id:data.employee[0].id,img_url: data.employee[0].img_url}]
-		    item.employee_id = data.employee[0].id
-			
-			var reviewerObj=this.getLocalVal(data.employee[0].id);
-			var reviewerObj=reviewerObj? JSON.parse(reviewerObj):{id:'',name:''};
-			// 清空审批人数据
-			if(reviewerObj.id){
-				item.approval_selected={ dept: [], employee: [reviewerObj] };
-			}else{
-				item.approval_selected={ dept: [], employee: [] };
+		employee_confirm(data) {
+			const item = this.dialogData.items[this.itemIndex];
+			item.employeeName = '';
+			item.employee_selected = { dept: [], employee: [] };
+			item.employee_id = '';
+
+			if (data.employee !== null && data.employee.length != 0) {
+				item.employeeName = data.employee[0].name;
+				item.employee_selected.employee = [{ name: data.employee[0].name, id: data.employee[0].id, img_url: data.employee[0].img_url }];
+				item.employee_id = data.employee[0].id;
+
+				var reviewerObj = this.getLocalVal(data.employee[0].id);
+				var reviewerObj = reviewerObj ? JSON.parse(reviewerObj) : { id: '', name: '' };
+				// 清空审批人数据
+				if (reviewerObj.id) {
+					item.approval_selected = { dept: [], employee: [reviewerObj] };
+				} else {
+					item.approval_selected = { dept: [], employee: [] };
+				}
+				item.reviewer_id = reviewerObj.id;
+				item.approvalName = reviewerObj.name;
+				item.approval_employee_list = []; //当前选中人的 上级
 			}
-			item.reviewer_id= reviewerObj.id;
-			item.approvalName= reviewerObj.name;
-			item.approval_employee_list=[];//当前选中人的 上级
-		  }
-		  item.show_employee_selector=false
+			item.show_employee_selector = false;
 		},
 
 		getItemDetail(arr) {
@@ -435,14 +452,14 @@ export default {
 				// 录入对象
 				employee_id: this.user_info.id,
 				employeeName: this.user_info.name,
-				employee_selected: {dept: [],employee:[{id: this.user_info.id ,img_url: this.user_info.img_url,name: this.user_info.name}]},
+				employee_selected: { dept: [], employee: [{ id: this.user_info.id, img_url: this.user_info.img_url, name: this.user_info.name }] },
 				show_employee_selector: false,
 
 				// 审批人信息
 				reviewer_id: this.LocalValObj.id,
 				approvalName: this.LocalValObj.name,
-				approval_selected: { dept: [], employee:this.LocalValObj.id? [this.LocalValObj]:[] },
-				approval_employee_list: [],//当前选中人的 上级
+				approval_selected: { dept: [], employee: this.LocalValObj.id ? [this.LocalValObj] : [] },
+				approval_employee_list: [], //当前选中人的 上级
 				show_approval_selector: false,
 
 				// 附件
@@ -455,50 +472,49 @@ export default {
 			});
 		},
 		closeDialog(formName) {
-			this.dialogData.items=[{
-				rule_switch: true,
-				rule_id: '',
-				item_id: '',
-				remark: '',
-				event_time: moment().format('YYYY-MM-DD'),
-			
-				// 录入对象
-				employee_id: this.user_info.id,
-				employeeName: this.user_info.name,
-				employee_selected: {dept: [],employee:[{id: this.user_info.id ,img_url: this.user_info.img_url,name: this.user_info.name}]},
-				show_employee_selector: false,
-			
-				// 审批人信息
-				reviewer_id: '',
-				approvalName: '',
-				approval_employee_list: [],//当前选中人的 上级
-				approval_selected: { dept: [], employee: [] },
-				show_approval_selector: false,
-			
-				// 附件
-				fileList: [],
-				files: [],
-				// 规则分类 与 规则细则 名称
-				rule_list_value: null,
-				rule_item_list_value: null,
-				rule_item_details: { range_type: '' }
-			}];
-			
-			this.$emit('update:visible', false);
+			this.dialogData.items = [
+				{
+					rule_switch: true,
+					rule_id: '',
+					item_id: '',
+					remark: '',
+					event_time: moment().format('YYYY-MM-DD'),
+
+					// 录入对象
+					employee_id: this.user_info.id,
+					employeeName: this.user_info.name,
+					employee_selected: { dept: [], employee: [{ id: this.user_info.id, img_url: this.user_info.img_url, name: this.user_info.name }] },
+					show_employee_selector: false,
+
+					// 审批人信息
+					reviewer_id: '',
+					approvalName: '',
+					approval_employee_list: [], //当前选中人的 上级
+					approval_selected: { dept: [], employee: [] },
+					show_approval_selector: false,
+
+					// 附件
+					fileList: [],
+					files: [],
+					// 规则分类 与 规则细则 名称
+					rule_list_value: null,
+					rule_item_list_value: null,
+					rule_item_details: { range_type: '' }
+				}
+			];
 		},
 		delItem(index) {
 			this.$confirm('你确定要删除奖扣明细' + parseInt(index + 1) + '吗?', '提示', {
 				confirmButtonText: '确定',
 				cancelButtonText: '取消',
 				type: 'warning'
-			})
-				.then(() => {
-					this.dialogData.items.splice(index, 1);
-					this.$message({
-						type: 'success',
-						message: '删除成功!'
-					});
-				})
+			}).then(() => {
+				this.dialogData.items.splice(index, 1);
+				this.$message({
+					type: 'success',
+					message: '删除成功!'
+				});
+			});
 		},
 		subData(formName) {
 			this.$refs[formName].validate(valid => {
@@ -508,6 +524,9 @@ export default {
 				}
 			});
 		},
+		closeDialog2(){
+			this.$emit('update:visible', false);
+		},
 		// 提交数据
 		save() {
 			let data = { items: [] };
@@ -520,26 +539,24 @@ export default {
 					event_time: element.event_time,
 					pt_id: element.pt_id,
 					reviewer_id: element.reviewer_id || 0,
-					approvalName:element.approvalName,
+					approvalName: element.approvalName,
 					files: element.files
 				});
 			});
 			this.$axios('post', '/api/integral/review/apply', data)
-			.then(res => {
+				.then(res => {
 					if (res.data.code == 1) {
 						this.closeDialog();
-						this.$message.success(res.data.msg);
 						this.error_list = res.data.data.list;
 						this.error_list_show = true;
-					} else {
-						this.$message.error(res.data.msg);
 					}
-			}).finally(()=>{
-				this.btn_loading = false;
-				data.items.forEach(element => {
-					localStorage.setItem(element.employee_id,JSON.stringify({id:element.reviewer_id,name:element.approvalName}))
+				})
+				.finally(() => {
+					this.btn_loading = false;
+					data.items.forEach(element => {
+						localStorage.setItem(element.employee_id, JSON.stringify({ id: element.reviewer_id, name: element.approvalName }));
+					});
 				});
-			})
 		},
 		// 当switch 改变了
 		switchChange(index, value) {
@@ -567,7 +584,7 @@ export default {
 				item.reviewer_id = data.employee[0].id;
 			}
 			item.show_approval_selector = false;
-		},
+		}
 	}
 };
 </script>

+ 44 - 23
src/components/bonusPointsPopup.vue

@@ -1,7 +1,7 @@
 <template>
 	<div>
 		<!-- 奖扣ab分弹窗 -->
-		<el-dialog :title="title" :visible.sync="visible" :close-on-click-modal="false" :before-close="closePopup" width="600px">
+		<el-dialog :title="title" :visible.sync="visible" top="3%" :close-on-click-modal="false" :before-close="closePopup" width="600px">
 			<div>
 				<el-form :model="dialogData" ref="dialogData" label-width="80px" v-loading="loading">
 					<el-form-item label="录入对象" prop="members" :rules="[{ required: true, message: '请选择录入对象', trigger: 'change' }]">
@@ -11,22 +11,6 @@
 								<div @click="noPersonnelListTips" style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"></div>
 							</el-col>
 						</el-row>
-						<el-dialog title="选择人员" width="640px" :visible.sync="show_employee_selector" append-to-body :before-close="handleClose">
-							<EmployeeSelector
-								v-if="show_employee_selector"
-								ref="members"
-								:isCreatorSelect="true"
-								:employee_list="manage_scope"
-								:user_no_select="false"
-								:can_select_dept="false"
-								:selected="employee_selected"
-								@confirm="move_employee_confirm"
-							/>
-							<span slot="footer" class="dialog-footer">
-								<el-button @click="show_employee_selector = false">取 消</el-button>
-								<el-button type="primary" @click="submitMembers()">确 定</el-button>
-							</span>
-						</el-dialog>
 					</el-form-item>
 
 					<div v-for="(item, index) in dialogData.items" :key="index" @click.stop="itemIndex = index">
@@ -126,7 +110,7 @@
 								(最多选择3张)
 							</upload>
 						</el-form-item>
-						<el-form-item label="递交审批">
+						<el-form-item label="递交审批" v-if="$getUserData().is_creator==0">
 							<el-row>
 								<el-col :span="18">
 									<el-input auto-complete="off" v-model="item.approvalName" placeholder="请选择审批人"></el-input>
@@ -137,11 +121,10 @@
 								<EmployeeSelector
 									v-if="item.show_approval_selector"
 									ref="superior"
+									:multi="false"
 									:isCreatorSelect="true"
-									:employee_list="superior_list"
 									:user_no_select="false"
-									:can_select_dept="false"
-									:multi="false"
+									:employee_list="superior_list"
 									:selected="item.approval_selected"
 									@confirm="approval_confirm"
 								/>
@@ -160,6 +143,38 @@
 					</el-form-item>
 				</el-form>
 			</div>
+			<el-dialog title="选择人员" width="640px" :visible.sync="show_employee_selector" append-to-body :before-close="handleClose">
+				<EmployeeSelector
+					v-if="show_employee_selector"
+					ref="members"
+					:isCreatorSelect="true"
+					:user_no_select="false"
+					:employee_list="manage_scope"
+					:selected="employee_selected"
+					@confirm="move_employee_confirm"
+				/>
+				<span slot="footer" class="dialog-footer">
+					<el-button @click="show_employee_selector = false">取 消</el-button>
+					<el-button type="primary" @click="submitMembers()">确 定</el-button>
+				</span>
+			</el-dialog>
+		</el-dialog>
+		
+		<el-dialog :title="'提交结果'" :visible.sync="error_list_show" :append-to-body="true"  width="700px">
+		  <el-table :data="error_list">
+		    <el-table-column prop="target" label="员工"></el-table-column>
+		    <el-table-column prop="point" label="积分">
+		      <template slot-scope="scope">
+		        <span>{{ scope.row.point}} <span>{{integralType==2? 'A分':'B分'}}</span></span>
+		      </template>
+		    </el-table-column>
+		    <el-table-column prop="status" label="处理状态">
+		      <template slot-scope="scope">
+		        <span :style="'color:' + (scope.row.status == 0 ? '#f70000' : '#47bf47')">{{ scope.row.status == 0 ? '提交失败' : '提交成功' }}</span>
+		      </template>
+		    </el-table-column>
+		    <el-table-column prop="remark" label="备注信息"></el-table-column>
+		  </el-table>
 		</el-dialog>
 	</div>
 </template>
@@ -254,7 +269,11 @@ export default {
 			rule_item_list: [],
 			flatteningIntegralRules: null,
 			ptid: 0,
-			itemIndex: 0
+			itemIndex: 0,
+			
+			// 错误提示
+			error_list: [], //错误信息数组
+			error_list_show: false, //错误信息弹窗
 		};
 	},
 	components: { EmployeeSelector, upload },
@@ -620,8 +639,10 @@ export default {
 							this.$refs['dialogData'].resetFields();
 							this.$emit('update:visible', false);
 							this.$emit('update:refresh',this.$moment().format().valueOf());
-							this.$message.success(res.data.msg);
+							// this.$message.success(res.data.msg);
 							this.closePopup();
+							this.error_list = res.data.data.list;
+							this.error_list_show = true;
 						} else {
 						}
 					}

+ 71 - 50
src/components/examinePopup.vue

@@ -7,15 +7,15 @@
 					<el-row :gutter="10" style="padding-bottom:20px;border-bottom:1px #f8f8f8 solid;position: relative;">
 						<el-col :span="24">
 							<template>
-								<userImage class="fl" :user_name="detail_info.employee_name" :img_url="detail_info.employee_img"  width="50px" height="50px"></userImage>
+								<userImage class="fl" :user_name="detail_info.employee_name" :img_url="detail_info.employee_img" width="50px" height="50px"></userImage>
 							</template>
 							<template>
 								<div class="flex-box flex-v-ce">
 									<span style="line-height:50px; margin-left:10px;margin-right:10px;">{{ detail_info.employee_name }}</span>
-									<span class="point" v-if="detail_info.status==1">
-										<span class="red" v-if="detail_info.review_point > 0">+{{detail_info.review_point}}</span>
-										<span v-else class="green">{{detail_info.review_point}}</span>
-										<span style="margin-left: 5px;"> {{$getTypsName(detail_info.pt_id)}}</span>
+									<span class="point" v-if="detail_info.status == 1">
+										<span class="red" v-if="detail_info.review_point > 0">+{{ detail_info.review_point }}</span>
+										<span v-else class="green">{{ detail_info.review_point }}</span>
+										<span style="margin-left: 5px;">{{ $getTypsName(detail_info.pt_id) }}</span>
 									</span>
 									<div style="margin-left: 5px;">
 										<span v-if="detail_info.status == 1" class="green">审批通过</span>
@@ -38,7 +38,7 @@
 								:preview-src-list="item.value"
 							></el-image>
 						</el-col>
-						<el-col :span="20" v-else-if="item.key == '工作留存'">
+						<el-col :span="20" v-else-if="item.key == '工作附件'">
 							<el-image
 								v-for="(items, indexs) in item.value"
 								:key="indexs"
@@ -50,10 +50,10 @@
 						<el-col :span="20" v-else>{{ item.value }}</el-col>
 					</el-row>
 
-					<el-row :gutter="10" v-if="detail_info.files != null && detail_info.files > 0">
-						<el-col :span="4">图片</el-col>
-						<el-col :span="20"><el-image style="width: 100px; height: 100px" :src="detail_info.files[0]" :preview-src-list="detail_info.files"></el-image></el-col>
-					</el-row>
+				  <el-row :gutter="10" v-if="detail_info.files != null && detail_info.files > 0">
+					<el-col :span="4">图片</el-col>
+					<el-col :span="20"><el-image style="width: 100px; height: 100px" :src="detail_info.files[0]" :preview-src-list="detail_info.files"></el-image></el-col>
+				  </el-row>
 
 					<div v-show="detail_info.item_name != ''">
 						<p class="row_title">
@@ -90,7 +90,7 @@
 									</template>
 									<template slot="title">
 										<div style="color: #303133;font-size:14px;margin-top:-2px;">
-											{{ item.name }} 
+											{{ item.name }}
 											<span v-if="item.remark == '待审核'" class="yellow">待审批</span>
 											<span v-else-if="item.remark == '审核通过'" class="green">审批通过</span>
 											<span v-else-if="item.remark == '审核驳回'" class="red">审批驳回</span>
@@ -107,12 +107,12 @@
 					</div>
 
 					<el-row style="border-top: 1px #f8f8f8 solid;">
-						<el-col :span="24" style="text-align: right;padding-top:20px" v-if="detail_info.status == 0">
+						<el-col :span="24" style="text-align: right;padding-top:20px" v-if="detail_info.status == 0&&detail_info.reviewer_id==$getUserData().id">
 							<el-button v-if="detail_info.pt_id == 1" @click="closeDetail">取消</el-button>
 							<el-button v-else @click="rejectBtn">驳回</el-button>
 							<el-button type="primary" @click="adoptBtn">通过</el-button>
 						</el-col>
-						<el-col :span="24" style="text-align: right;padding-top:20px" v-if="(detail_info.status==1||detail_info.status==2)&&detail_info.review_status==0">
+						<el-col :span="24" style="text-align: right;padding-top:20px" v-if="detail_info.can_refuse == '1'">
 							<span style="color:#909399;font-size:12px;padding-right:20px">撤回后需重新审批</span>
 							<el-button type="primary" @click="revokeApproval">撤回审批</el-button>
 						</el-col>
@@ -121,12 +121,12 @@
 			</div>
 		</el-drawer>
 
-		<el-dialog title="审批驳回" :visible.sync="rejectShow" :before-close="rejectClose" width="520px">
+		<el-dialog title="	" :visible.sync="rejectShow" :before-close="rejectClose" width="520px">
 			<el-form :model="rejectForm" ref="rejectForm" label-width="80px" v-loading="rejectLoading">
 				<el-form-item
 					label="审批意见"
 					prop="remark"
-					:rules="[{ required: true, message: '请输入审批意见', trigger: 'blur' },{min: 3,max: 50,message: '长度在 3 到 50 个字符',trigger: 'blur'}]"
+					:rules="[{ required: true, message: '请输入审批意见', trigger: 'blur' }, { min: 3, max: 50, message: '长度在 3 到 50 个字符', trigger: 'blur' }]"
 				>
 					<el-input type="textarea" :rows="4" v-model="rejectForm.remark" placeholder="请输入审批意见(限50字)"></el-input>
 				</el-form-item>
@@ -166,7 +166,13 @@
 				<el-form-item label="规则内容" v-if="(!!detail_info.rule_id && detail_info.item_name) || (!!detail_info.item_id && detail_info.item_name)">
 					<span>{{ detail_info.item_name }}</span>
 				</el-form-item>
-				<el-form-item label="规则" v-if="detail_info.source_type != 4" v-show="(detail_info.rule_id && detail_info.item) || adoptForm.ruleOrItem" prop="item_id" :rules="[{ required: true, message: '请选择规则细则', trigger: 'blur' }]">
+				<el-form-item
+					label="规则"
+					v-if="detail_info.source_type != 4"
+					v-show="(detail_info.rule_id && detail_info.item) || adoptForm.ruleOrItem"
+					prop="item_id"
+					:rules="[{ required: true, message: '请选择规则细则', trigger: 'blur' }]"
+				>
 					<el-cascader
 						:disabled="!!detail_info.rule_id || !!detail_info.item_id"
 						class="date-picker-width"
@@ -186,11 +192,20 @@
 					></el-cascader>
 				</el-form-item>
 				<el-form-item label="规则积分" v-show="detail_info.item_id">
-					{{detail_info.item_range_type == 1? detail_info.item_min_point: detail_info.item_range_type == -1? detail_info.item_min_point: detail_info.item_min_point + '~' + detail_info.item_max_point}}{{ detail_info.pt_id == 3 ? 'B分' : detail_info.pt_id == 2 ? 'A分' : detail_info.pt_id == 1 ? '绩效分' : '' }}
+					{{
+						detail_info.item_range_type == 1
+							? detail_info.item_min_point
+							: detail_info.item_range_type == -1
+							? detail_info.item_min_point
+							: detail_info.item_min_point + '~' + detail_info.item_max_point
+					}}{{ detail_info.pt_id == 3 ? 'B分' : detail_info.pt_id == 2 ? 'A分' : detail_info.pt_id == 1 ? '绩效分' : '' }}
 				</el-form-item>
 
 				<el-form-item label="" v-if="rangeType.rule_rangeType_pt_id == 2 || rangeType.rule_rangeType_pt_id == 3">
-					<div style="line-height: 24px;">{{ rangeType.rule_min_point == rangeType.rule_max_point ? rangeType.rule_min_point : rangeType.rule_min_point + '~' + rangeType.rule_max_point}}<span class="blue" style="margin-left: 5px;">{{ rangeType.rule_rangeType_pt_id == 3 ? 'B分' : 'A分' }}</span></div>
+					<div style="line-height: 24px;">
+						{{ rangeType.rule_min_point == rangeType.rule_max_point ? rangeType.rule_min_point : rangeType.rule_min_point + '~' + rangeType.rule_max_point }}
+						<span class="blue" style="margin-left: 5px;">{{ rangeType.rule_rangeType_pt_id == 3 ? 'B分' : 'A分' }}</span>
+					</div>
 					<div style="line-height: 24px;">{{ rangeType.rule_rangeType_name }}</div>
 				</el-form-item>
 				<el-form-item label="审批积分">
@@ -232,14 +247,14 @@
 				</el-form-item>
 				<div style="padding-left: 80px">奖票用于优秀表现和重要事项的表彰</div>
 				<el-form-item label="发放奖票"><el-switch v-model="adoptForm.switch"></el-switch></el-form-item>
-				<el-form-item label="递交审批">
+				<el-form-item label="递交审批" v-if="$getUserData().is_creator==0">
 					<el-row>
 						<el-col :span="18">
 							<el-input auto-complete="off" v-model="manager" placeholder="请选择上级递交审批"></el-input>
 							<div @click="show_employee_selector = true" style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"></div>
 						</el-col>
 					</el-row>
-					
+
 					<el-dialog title="选择人员" width="640px" :visible.sync="show_employee_selector" append-to-body :before-close="handleClose">
 						<EmployeeSelector
 							:can_select_employee="true"
@@ -247,8 +262,8 @@
 							ref="approval"
 							:multi="false"
 							:employee_list="employee_lists"
+							:isCreatorSelect="true"
 							:user_no_select="false"
-							:can_select_dept="false"
 							:selected="manager_selected"
 							@confirm="employee_confirm"
 						/>
@@ -345,6 +360,7 @@ export default {
 		},
 		show(val) {
 			if (val) {
+				this.detail_info= {rule_id: ''};
 				this.getDetail();
 			}
 		},
@@ -400,17 +416,18 @@ export default {
 				cancelButtonText: '取消',
 				type: 'warning'
 			}).then(() => {
-					this.detail_loading = true;
-					this.$axios('post', '/api/integral/review/destroy', { review_id: this.detail_id })
-						.then(res => {
-							if (res.data.code == 1) {
-								this.$message.success(res.data.msg);
-								this.closeDetail(); //关闭抽屉
-								this.$parent.getSpList(); //刷新列表
-							}
-						}).finally(() => {
-							this.detail_loading = false;
-						});
+				this.detail_loading = true;
+				this.$axios('post', '/api/integral/review/destroy', { review_id: this.detail_id })
+					.then(res => {
+						if (res.data.code == 1) {
+							this.$message.success(res.data.msg);
+							this.closeDetail(); //关闭抽屉
+							this.$parent.getSpList(); //刷新列表
+						}
+					})
+					.finally(() => {
+						this.detail_loading = false;
+					});
 			});
 		},
 		// 选择规则分类关闭down
@@ -472,7 +489,8 @@ export default {
 			};
 			self.detailShow = true;
 			self.detail_loading = true;
-			this.$axios('get', '/api/integral/review', params).then(res => {
+			this.$axios('get', '/api/integral/review', params)
+				.then(res => {
 					if (res.data.code == 1) {
 						self.detail_info = res.data.data;
 						self.detail_info.rule_id ? (self.adoptForm.rule_id = self.detail_info.rule_id) : '';
@@ -483,7 +501,8 @@ export default {
 							self.adoptForm.point = Math.abs(self.detail_info.point);
 						}
 					}
-				}).finally(e => {
+				})
+				.finally(e => {
 					self.detail_loading = false;
 				});
 		},
@@ -522,7 +541,8 @@ export default {
 								self.closeDetail(); //关闭抽屉
 								self.$parent.getSpList(); //刷新列表
 							}
-						}).finally(e => {
+						})
+						.finally(e => {
 							setTimeout(() => {
 								//延迟关闭,防止重复点击
 								self.rejectLoading = false;
@@ -583,14 +603,14 @@ export default {
 				this.adoptForm.reviewer_id = data.employee[0].id;
 				this.manager = data.employee[0].name;
 			}
-			this.show_employee_selector = false
+			this.show_employee_selector = false;
 		},
 		// 关闭通过弹窗
 		adoptClose() {
 			this.adoptForm.rule_id = 0;
 			this.adoptForm.item_id = 0;
 			this.forbiddenInputNum = false;
-			this.adoptForm.reviewer_id=0;
+			this.adoptForm.reviewer_id = 0;
 			this.adoptShow = false;
 			this.manager = ''; //清空递交审批
 			this.manager_selected = { dept: [], employee: [] }; //清空递交审批
@@ -635,19 +655,19 @@ export default {
 					if (data.item_id == '' || data.item_id == null) {
 						data.item_id = 0;
 					}
-					if(self.adoptForm.ruleOrItem){
-						if(data.item_id==0){
-							self.$message.error("请选择所属规则");
-							return
+					if (self.adoptForm.ruleOrItem) {
+						if (data.item_id == 0) {
+							self.$message.error('请选择所属规则');
+							return;
 						}
-					}else{
-						if(data.rule_id==0){
-							self.$message.error("请选择所属分类");
-							return
+					} else {
+						if (data.rule_id == 0) {
+							self.$message.error('请选择所属分类');
+							return;
 						}
 					}
 					if (data.point == 0 || !data.point) {
-						self.$message.error("积分不能为0或空")
+						self.$message.error('积分不能为0或空');
 						return;
 					}
 					this.determinedBy = true;
@@ -661,7 +681,8 @@ export default {
 								self.closeDetail(); //关闭抽屉
 								self.$parent.getSpList(); //刷新列表
 							}
-						}).finally(e => {
+						})
+						.finally(e => {
 							setTimeout(() => {
 								//预防重复点击
 								this.determinedBy = false;
@@ -675,9 +696,9 @@ export default {
 </script>
 
 <style lang="scss" scoped="scoped">
-	label {
-	    font-weight: 700;
-	}
+label {
+	font-weight: 700;
+}
 .fl {
 	float: left;
 }

+ 31 - 8
src/home.vue

@@ -1,8 +1,5 @@
 <template>
 	<div class="">
-		<!-- <div class="data-all"> -->
-		<!-- <img src="./assets/image/init.gif" class="appImg" />
-			<div>管理执行难,就用功道云</div> -->
 		<div class="flex-box ts flex-center-center" v-if="isSubject">
 			<img mode="scaleToFill" src="./assets/image/tz.png" />
 			<div class="flex-1">你正在使用个人体验版,如需正式使用,请联系管理员</div>
@@ -573,12 +570,39 @@ export default {
 		this.function_All();
 		window.addEventListener('resize', this.selfAdaption);
 		// 个人版处理
-		if(this.$getUserData().is_personal==1){
-			this.isSubject=true;
-			this.mainCorpId=this.$getUserData().main_corp_id
+		if (this.$getUserData().is_personal == 1) {
+			this.isSubject = true;
+			this.mainCorpId = this.$getUserData().main_corp_id;
 		}
+		var url = window.location.href;
+		var rUrl = this.GetRequest(url).url || '';
+		console.log('url=' + rUrl);
+		this.$nextTick(function() {
+			if (rUrl) {
+				setTimeout(() => {
+					this.$router.push({ path: '/' + rUrl });
+				}, 200);
+			}
+		});
 	},
 	methods: {
+		GetRequest(urlStr) {
+			if (typeof urlStr == 'undefined') {
+				var url = decodeURI(location.search); //获取url中"?"符后的字符串
+			} else {
+				var url = '?' + urlStr.split('?')[1];
+			}
+			var theRequest = new Object();
+			var strs;
+			if (url.indexOf('?') != -1) {
+				var str = url.substr(1);
+				strs = str.split('&');
+				for (var i = 0; i < strs.length; i++) {
+					theRequest[strs[i].split('=')[0]] = decodeURI(strs[i].split('=')[1]);
+				}
+			}
+			return theRequest;
+		},
 		openGly() {
 			contactAdminToUseApp({ id: '55493', corpId: this.mainCorpId }).catch(err => {
 				// 入参不正确,或者遇到技术异常时才会进入这个链路
@@ -1311,8 +1335,7 @@ export default {
 	beforeDestroy() {
 		//离开路由
 		window.removeEventListener('resize', this.selfAdaption); //取消echarts自适应
-	},
-	created() {}
+	}
 };
 </script>
 

+ 149 - 120
src/index.vue

@@ -9,10 +9,15 @@
 				<div class="flex-1 hea-right flex-box flex-v-ce" v-if="info.name">
 					<div class="name flex-1">{{ info.name }}</div>
 					<div class="flex-box flex-v-ce">
-						<div>您当前为 <span class="blue">"{{corpMessage.package_name}}"</span>,有效期至<span style="color:#FF9600">{{corpMessage.expire_time}}</span></div>
-						<el-button size="small" @click="isTz=true" class="upgrade" type="primary" icon="el-icon-upload">续费升级</el-button>
+						<div>
+							您当前为
+							<span class="blue">"{{ corpMessage.package_name }}"</span>
+							,有效期至
+							<span style="color:#FF9600">{{ corpMessage.expire_time }}</span>
+						</div>
+						<el-button size="small" @click="isTz = true" class="upgrade" type="primary" icon="el-icon-upload">续费升级</el-button>
 						<el-tooltip 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">
+							<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>
@@ -21,34 +26,37 @@
 		</el-header>
 		<el-container class="main">
 			<el-aside>
-				<el-menu :default-active="defaultActive" class="el-menu-vertical-demo" :router="true" @select="activeRouter" :unique-opened="true" >
+				<el-menu :default-active="defaultActive" class="el-menu-vertical-demo" :router="true" @select="activeRouter" :unique-opened="true">
 					<template v-for="(item, index) in routers">
-						<div v-if="item.children.length!=0" :key="index">
-							<el-submenu :index="index.toString()"  :key="index" v-if="item.children.length>=1 && item.name!='首页'">
-								<template slot="title"><span class="iconfont titleIcon" :class="item.icon" style="font-size: 20px;"></span><span style="margin-left: 5px;">{{item.name}}</span></template>
+						<div v-if="item.children.length != 0" :key="index">
+							<el-submenu :index="index.toString()" :key="index" v-if="item.children.length >= 1 && item.name != '首页'">
+								<template slot="title">
+									<span class="iconfont titleIcon" :class="item.icon" style="font-size: 20px;"></span>
+									<span style="margin-left: 5px;">{{ item.name }}</span>
+								</template>
 								<template v-for="(item2, index2) in item.children">
-									<el-menu-item :index="returnIndex(index,index2)" :ref="item2.path" :route="item2.path" :key="index2" class="font-flex-word">
+									<el-menu-item :index="returnIndex(index, index2)" :ref="item2.path" :route="item2.path" :key="index2" class="font-flex-word">
 										<span slot="title" style="margin-left: 10px;width:120px">{{ item2.name }}</span>
 									</el-menu-item>
 								</template>
 							</el-submenu>
-							<el-menu-item :index="returnIndex(index,index)" :route="item.children[0].path" :ref="item.children[0].path" v-else>
+							<el-menu-item :index="returnIndex(index, index)" :route="item.children[0].path" :ref="item.children[0].path" v-else>
 								<span class="iconfont titleIcon" :class="item.icon" style="font-size: 20px;"></span>
 								<span slot="title" style="margin-left: 5px;">{{ item.children[0].name }}</span>
 							</el-menu-item>
 						</div>
-					</template>	  
+					</template>
 				</el-menu>
 			</el-aside>
 			<el-main>
 				<router-view />
-				<div class="fontColorF" style="text-align: center;margin: 20px 0;">Copyright © 2020 广东功道云数字科技有限公司 All Rights Reserved</div>
+				<div class="fontColorF" style="text-align: center;margin: 20px 0;">Copyright © 2021 广东功道云数字科技有限公司 All Rights Reserved</div>
 			</el-main>
 		</el-container>
 		<!-- 续费升级 -->
-		<el-dialog class="续费升级"  :visible.sync="isTz" width="400px">
+		<el-dialog class="续费升级" :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"/>
+				<img src="./assets/image/code.png" />
 			</div>
 			<div class="fontColorF" style="text-align: center;margin-top: 15px;font-size: 18px;">手机钉钉扫码,付费升级</div>
 		</el-dialog>
@@ -56,17 +64,17 @@
 			<div>
 				<div class="wn-title fontColorF">三步轻松搭建积分管理体系:定人员、分责权、建制度</div>
 				<div class="flex-box flex-v-ce wn-box">
-					<div class="flex-1 flex-box-v flex-v-ce"  @click="openView(0)">
+					<div class="flex-1 flex-box-v flex-v-ce" @click="openView(0)">
 						<div><span class="iconfont " :class="routers_one[0].meta.icon"></span></div>
-						<div>1、确定{{routers_one[0].name}}</div>
+						<div>1、确定{{ routers_one[0].name }}</div>
 					</div>
-					<div class="flex-1 flex-box-v flex-v-ce"  @click="openView(1)">
+					<div class="flex-1 flex-box-v flex-v-ce" @click="openView(1)">
 						<div><span class="iconfont " :class="routers_one[1].meta.icon"></span></div>
-						<div>2、分配{{routers_one[1].name}}</div>
+						<div>2、分配{{ routers_one[1].name }}</div>
 					</div>
-					<div class="flex-1 flex-box-v flex-v-ce"  @click="openView(2)">
+					<div class="flex-1 flex-box-v flex-v-ce" @click="openView(2)">
 						<div><span class="iconfont " :class="routers_one[2].meta.icon"></span></div>
-						<div>3、建立{{routers_one[2].name}}</div>
+						<div>3、建立{{ routers_one[2].name }}</div>
 					</div>
 				</div>
 			</div>
@@ -75,15 +83,15 @@
 				<div class="flex-box flex-v-ce wn-box">
 					<div class="flex-1 flex-box-v flex-v-ce" @click="openView(3)">
 						<div><span class="iconfont " :class="routers_one[3].meta.icon"></span></div>
-						<div>{{routers_one[3].name}}</div>
+						<div>{{ routers_one[3].name }}</div>
 					</div>
 					<div class="flex-1 flex-box-v flex-v-ce" @click="openView(4)">
 						<div><span class="iconfont " :class="routers_one[4].meta.icon"></span></div>
-						<div>{{routers_one[4].name}}</div>
+						<div>{{ routers_one[4].name }}</div>
 					</div>
 					<div class="flex-1 flex-box-v flex-v-ce" @click="openView(5)">
 						<div><span class="iconfont " :class="routers_one[5].meta.icon"></span></div>
-						<div>{{routers_one[5].name}}</div>
+						<div>{{ routers_one[5].name }}</div>
 					</div>
 				</div>
 			</div>
@@ -97,77 +105,88 @@ export default {
 		return {
 			loading: false,
 			userData: {},
-			routers:[],
-			routers_one:[],
+			routers: [],
+			routers_one: [],
 			info: {},
-			wn_show:false,
-			defaultActive:"0-0",
-			isShowWn:true,
-			isTz:false,
+			wn_show: false,
+			defaultActive: '0-0',
+			isShowWn: true,
+			isTz: false,
 			direction: 'rtl',
-			corpMessage:{},//企业套餐信息
+			corpMessage: {} //企业套餐信息
 		};
 	},
-	watch:{
-		$route(to,from){
-			var str=to.path;
-			this.routers.map((item,index)=>{
-				if(item.children.length>0){
-					item.children.map((item2,index2)=>{
-						if(item2.path==str){
-							this.defaultActive=index+"-"+index2;
-							localStorage.setItem("path",index+"-"+index2);
+	watch: {
+		$route(to, from) {
+			var str = to.path;
+			this.routers.map((item, index) => {
+				if (item.children.length > 0) {
+					item.children.map((item2, index2) => {
+						if (item2.path == str) {
+							this.defaultActive = index + '-' + index2;
+							localStorage.setItem('path', index + '-' + index2);
 						}
-					})
+					});
 				}
-			})
+			});
 		}
-	},	
+	},
 	created() {
-		this.routers=[
-			{name:'首页',children:this.returnRoutersArr('home'),icon:'icon-xuanzhong_shouye'},
-			{name:'A/B分',children:this.returnRoutersArr('abPoint'),icon:'icon-PC_gongzuotai_ABfen'},
-			{name:'任务',children:this.returnRoutersArr('task'),icon:'icon-kaoqin_kaoqinyuebaobiao'},
-			{name:'统计',children:this.returnRoutersArr('ranking'),icon:'icon-dingdingPC_tongji'},
-			];
-		//this.$authoritys('权限名') 判断权限
-		if(this.$authoritys('creator') || this.$authoritys('admin') || this.$authoritys('point_manager')||this.$authoritys('dept_manager')){
-			this.routers.splice(3,0,{name:'工作台',children:this.returnRoutersArr('workbench'),icon:'icon-PC_gongzuotai_renwu'});
-		}
-		if(this.$authoritys('creator') || this.$authoritys('admin') || this.$authoritys('point_manager')){
-			this.routers.push({name:'设置',children:this.returnRoutersArr('set'),icon:'icon-dingdingPC_shezhi'})
-		}
-		//this.returnRoutersArr('set',true) 加true表示不限制路由
-		this.routers_one=this.returnRoutersArr('set',true);
-		this.userData=this.$getUserData();
-		if(this.$route.path!='/home'){//当刷新页面是控制左边导航栏的选中
-			this.defaultActive=localStorage.getItem("path");
-		}
+		this.initRouter();
+		this.getEmployee()//缓存人员列表
 	},
 	mounted() {
 		this.getTypes();
 		this.getInfo();
 		var url = window.location.href;
 		var str = this.GetRequest(url).corpId || '123';
+		// var rUrl = this.GetRequest(url).url || '';
 		var corpId = str.split('#')[0];
 		if (corpId) {
 			this.getCorp(corpId);
 		}
 		this.$nextTick(function() {
-			if(!this.$authoritys('employee') && !this.$authoritys('dept_manager')){
+			if (!this.$authoritys('employee') && !this.$authoritys('dept_manager')) {
 				if (localStorage.getItem('wn_show')) {
 					this.wn_show = false;
-					this.isShowWn=false;
+					this.isShowWn = false;
 				} else {
 					this.wn_show = true;
-					localStorage.setItem('wn_show','true');
+					localStorage.setItem('wn_show', 'true');
 				}
 			}
+			// if (rUrl) {
+			// 	setTimeout(() => {
+			// 		this.$router.push({ path: '/' + rUrl });
+			// 	}, 200);
+			// }
 		});
 	},
 	methods: {
-		openHome(){
-			this.$router.push({ path: '/home' })
+		initRouter() {
+			this.routers = [
+				{ name: '首页', children: this.returnRoutersArr('home'), icon: 'icon-xuanzhong_shouye' },
+				{ name: 'A/B分', children: this.returnRoutersArr('abPoint'), icon: 'icon-PC_gongzuotai_ABfen' },
+				{ name: '任务', children: this.returnRoutersArr('task'), icon: 'icon-kaoqin_kaoqinyuebaobiao' },
+				{ name: '统计', children: this.returnRoutersArr('ranking'), icon: 'icon-dingdingPC_tongji' }
+			];
+			//this.$authoritys('权限名') 判断权限
+			if (this.$authoritys('creator') || this.$authoritys('admin') || this.$authoritys('point_manager') || this.$authoritys('dept_manager')) {
+				this.routers.splice(3, 0, { name: '工作台', children: this.returnRoutersArr('workbench'), icon: 'icon-PC_gongzuotai_renwu' });
+			}
+			if (this.$authoritys('creator') || this.$authoritys('admin') || this.$authoritys('point_manager')) {
+				this.routers.push({ name: '设置', children: this.returnRoutersArr('set'), icon: 'icon-dingdingPC_shezhi' });
+			}
+			//this.returnRoutersArr('set',true) 加true表示不限制路由
+			this.routers_one = this.returnRoutersArr('set', true);
+			this.userData = this.$getUserData();
+			if (this.$route.path != '/home') {
+				//当刷新页面是控制左边导航栏的选中
+				this.defaultActive = localStorage.getItem('path');
+			}
+		},
+		openHome() {
+			this.$router.push({ path: '/home' });
 		},
 		GetRequest(urlStr) {
 			if (typeof urlStr == 'undefined') {
@@ -187,110 +206,120 @@ export default {
 			return theRequest;
 		},
 		//获取套餐信息
-		getCorp(corpId) {	
-		    this.$axios('get',"api/order/corp", {corp_id:corpId}).then((res) => {
-		      this.corpMessage = res.data.data;
-		    })
+		getCorp(corpId) {
+			this.$axios('get', 'api/order/corp', { corp_id: corpId }).then(res => {
+				this.corpMessage = res.data.data;
+			});
 		},
-		getSku(){
+		getSku() {
 			var that = this;
-			this.$axios('get','api/order/goods/sku',{callback: "https://test-ding.g107.com/#/index", goods_code: 'DD_GOODS-610003' }).then(res => {
-			
-			});
+			this.$axios('get', 'api/order/goods/sku', { callback: 'https://test-ding.g107.com/#/index', goods_code: 'DD_GOODS-610003' }).then(res => {});
 		},
 		//当刷新页面是控制左边导航栏的选中
-		activeRouter(index,indexPath){
-			localStorage.setItem("path",indexPath[1]?indexPath[1]:indexPath[0]);
+		activeRouter(index, indexPath) {
+			localStorage.setItem('path', indexPath[1] ? indexPath[1] : indexPath[0]);
 		},
-		routerAstrict(data){//限制路由
-			let obj = []
-			let supAuthority = this.$supremeAuthority() //$supremeAuthority获取当前登录者的最高权限
-			data.forEach(item=>{
-				if(!item.hidden){
-					if(!item.meta.jurisdiction){
-						obj.push(item)
-					}else{
-						if(item.meta.jurisdiction.indexOf(supAuthority)==-1){
-							obj.push(item)
+		routerAstrict(data) {
+			//限制路由
+			let obj = [];
+			let supAuthority = this.$supremeAuthority(); //$supremeAuthority获取当前登录者的最高权限
+			data.forEach(item => {
+				if (!item.hidden) {
+					if (!item.meta.jurisdiction) {
+						obj.push(item);
+					} else {
+						if (item.meta.jurisdiction.indexOf(supAuthority) == -1) {
+							obj.push(item);
 						}
 					}
 				}
-			})
-			return obj
+			});
+			return obj;
 		},
-		returnRoutersArr(str,bool){
+		returnRoutersArr(str, bool) {
 			var routers = this.$router.options.routes[0].children;
-			var routersArr=[];
-			routers.forEach(item=>{
-				if(item.meta.groupCode==str){//获取对应模块的路由
+			var routersArr = [];
+			routers.forEach(item => {
+				if (item.meta.groupCode == str) {
+					//获取对应模块的路由
 					routersArr.push(item);
 				}
-			})
-			if(bool){
+			});
+			if (bool) {
 				return routersArr;
 			}
 			return this.routerAstrict(routersArr);
 		},
-		returnIndex(str,str2){
-			return str+"-"+str2;
+		returnIndex(str, str2) {
+			return str + '-' + str2;
 		},
-		openView(e){
-			this.wn_show=false;
-			this.isShowWn=false;
-			this.$router.push({path:this.routers_one[e].path})
+		openView(e) {
+			this.wn_show = false;
+			this.isShowWn = false;
+			this.$router.push({ path: this.routers_one[e].path });
 		},
-		showWn(){
-			this.wn_show=true;
+		showWn() {
+			this.wn_show = true;
 		},
 		getInfo() {
 			var that = this;
-			this.$axios('get','/api/site/info').then(res => {
+			this.$axios('get', '/api/site/info').then(res => {
 				that.info = res.data.data;
 			});
 		},
 		getTypes() {
 			var that = this;
-			this.$axios('get','/api/integral/types').then(res => {
+			this.$axios('get', '/api/integral/types').then(res => {
 				that.$setTyps(res.data.data.list);
 			});
 		},
+		//获取员工列表
+		getEmployee() {
+			this.$axios('get', '/api/employee/index', { dept_id: 0, page: 1, page_size: 3000 }).then(res => {
+				let map={};
+				res.data.data.list.map(item=>{
+					 map[item.id]=item
+				})
+				localStorage.setItem("userList",JSON.stringify(map))
+			})
+		},
 	}
 };
 </script>
 
 <style scoped="scoped" lang="scss">
-.wn-box{
+.wn-box {
 	padding: 20px 0;
 }
-.wn-box .flex-1{
+.wn-box .flex-1 {
 	cursor: pointer;
 }
-.wn-box .flex-1 div:nth-child(1){
+.wn-box .flex-1 div:nth-child(1) {
 	width: 55px;
 	height: 55px;
 	border-radius: 50%;
 	text-align: center;
 	line-height: 55px;
-	background-color: #E0F2FF;
-	color: #26A2FF;
+	background-color: #e0f2ff;
+	color: #26a2ff;
 	margin-bottom: 20px;
 }
-.wn-box .flex-1 div:nth-child(2){
+.wn-box .flex-1 div:nth-child(2) {
 	width: 110px;
 	border-radius: 25px;
-	border: 1px solid #26A2FF;
-	padding:7px 10px;
+	border: 1px solid #26a2ff;
+	padding: 7px 10px;
 	text-align: center;
-	color: #26A2FF;
+	color: #26a2ff;
 }
-.wn-box .flex-1:hover div:nth-child(1){
+.wn-box .flex-1:hover div:nth-child(1) {
 	color: #fff;
-	background-color: #26A2FF;
+	background-color: #26a2ff;
 }
 
-.wn-box .flex-1:hover div:nth-child(2){
+.wn-box .flex-1:hover div:nth-child(2) {
 	color: #fff;
-	background-color: #26A2FF;
+	background-color: #26a2ff;
 }
 .el-menu-vertical-demo:not(.el-menu--collapse) {
 	width: 180px;
@@ -334,13 +363,13 @@ export default {
 	overflow-y: scroll;
 	padding: 10px;
 }
-.el-main::-webkit-scrollbar{
+.el-main::-webkit-scrollbar {
 	width: 3px;
 	height: 10px;
 	background-color: #fff;
 }
 .el-main::-webkit-scrollbar-thumb {
-	background-color: #D9D9D9;
+	background-color: #d9d9d9;
 }
 .logo-box {
 	width: 180px;
@@ -369,11 +398,11 @@ export default {
 	margin-left: 10px;
 	margin-right: 10px;
 }
-::v-deep .el-menu-item{
+::v-deep .el-menu-item {
 	padding-right: 10px !important;
 }
 ::v-deep .el-menu-item.is-active {
-    color: #26A2FF;
+	color: #26a2ff;
 	background-color: #ecf5ff;
 }
 </style>

+ 12 - 1
src/init.vue

@@ -88,6 +88,7 @@ export default {
 						var is = false;
 						if (res.data.code == 1) {
 							var { token, user } = res.data.data;
+							// that.getEmployee()//缓存人员列表
 							if (user.is_official==1) {
 								that.$setUserData(user);
 								that.$router.replace({ path: '/index' });
@@ -119,7 +120,17 @@ export default {
 				}
 			}
 			return theRequest;
-		}
+		},
+		//获取员工列表
+		getEmployee() {
+			this.$axios('get', '/api/employee/index', { dept_id: 0, page: 1, page_size: 3000 }).then(res => {
+				let map={};
+				res.data.data.list.map(item=>{
+					 map[item.id]=item
+				})
+				localStorage.setItem("userList",JSON.stringify(map))
+			})
+		},
 	}
 };
 </script>

+ 17 - 3
src/main.js

@@ -14,14 +14,15 @@ import echarts from 'echarts'
 import NProgress from 'nprogress';
 import 'nprogress/nprogress.css'
 import { getToken, setToken,getUserData,setUserData,getTyps,setTyps,getIsCreator,supremeAuthority,authoritys,getTypsName} from './api/auth';
+// import { createSocket,sendWSPush,sendPing } from './api/websocket'
 
 // 头像
 import userImage from '@/components/UserImage'
 Vue.component('userImage', userImage)
 Vue.use(ElementUI);
-// if (process.env.NODE_ENV === 'development') {
-//   new VConsole()
-// }
+if (process.env.NODE_ENV === 'development') {
+  new VConsole()
+}
 
 Vue.prototype.$echarts = echarts
 Vue.prototype.$dd=dd;
@@ -37,6 +38,19 @@ Vue.prototype.$supremeAuthority = supremeAuthority
 Vue.prototype.$authoritys = authoritys
 Vue.prototype.$moment = moment
 Vue.prototype.$appId=process.env.VUE_APP_APPID
+// 长连接
+
+// 接收消息
+// const getsocketData = e => {  // 创建接收消息函数
+//   const data = e && e.detail.data
+//   console.log(data)
+// }
+// // 注册监听事件
+// window.addEventListener('onmessageWS', getsocketData)
+
+// // 在需要的时候卸载监听事件,比如离开页面
+// window.removeEventListener('onmessageWS', getsocketData)
+
 
 Vue.prototype.$http= service;
 //Vue函数添加一个原型属性$axios 指向axios,这样vue实例或组件中不用再去重复引用Axios 直接用this.$axios就能执行axios 方法

+ 20 - 0
src/router/index.js

@@ -74,6 +74,26 @@ const routes = [{
 					jurisdiction: ['creator']
 				}
 			},
+			{
+				path: '/myExamine',
+				name: '我审批的',
+				component: () => import( /* webpackChunkName: "myExamine" */ '@/views/task/myExamine'),
+				meta: {
+					icon: 'icon-PC_gongzuotai_renwu',
+					groupCode: 'task',
+					jurisdiction: ['employee'] //什么权限隐藏
+				}
+			},
+			{
+				path: '/allTask',
+				name: '全部任务',
+				component: () => import( /* webpackChunkName: "allTask" */ '@/views/task/allTask'),
+				meta: {
+					icon: 'icon-PC_gongzuotai_renwu',
+					groupCode: 'task',
+					jurisdiction: ['employee'] //什么权限隐藏
+				}
+			},
 			{
 				path: '/dept_rank',
 				name: '阶段排名',

+ 17 - 8
src/views/abPoint/apply_list.vue

@@ -18,7 +18,7 @@
 		<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">
-					<span class="font-flex-word" style="max-width: 200px;">{{  scope.row.remark.customize  ||  scope.row.remark.rule}}</span>
+					<span class="font-flex-word" style="max-width: 200px;">{{ scope.row.remark.customize || scope.row.remark.rule }}</span>
 				</template>
 			</el-table-column>
 			<el-table-column label="积分" prop="review_point" width="120">
@@ -107,15 +107,26 @@
 			<div class="detail_popup" v-loading="detail_loading" v-if="detail_info !== null">
 				<el-row :gutter="10" style="padding-bottom:10px;border-bottom:1px #f8f8f8 solid;">
 					<el-col :span="24" class="flex-box flex-v-ce">
-						<userImage :user_name="detail_info.employee_name" :img_url="detail_info.img_url" width="50px" height="50px" fontSize="1"></userImage>
+						<userImage 
+							:user_name="detail_info.employee_name" 
+							:img_url="detail_info.img_url" 
+							width="50px" 
+							height="50px" 
+							fontSize="1">
+						</userImage>
 						<div class="user_text">
 							<p style="margin-left: 10px;">{{ detail_info.employee_name }}</p>
 							<div v-show="detail_info.review_point != 0">
 								<p v-if="detail_info.status == 1">
-									<span v-show="
+									<span
+										v-show="
 											(detail_info.review_point >= 0 && detail_info.item_prize_type == 1) ||
 												(detail_info.review_point >= 0 && detail_info.item_prize_type == -1) ||
-												(detail_info.review_point >= 0 && detail_info.item_prize_type == 0)"style="color:#f56c6c;padding-left:8px">+{{ detail_info.review_point }}
+												(detail_info.review_point >= 0 && detail_info.item_prize_type == 0)
+										"
+										style="color:#f56c6c;padding-left:8px"
+									>
+										+{{ detail_info.review_point }}
 									</span>
 									<span
 										v-show="
@@ -165,9 +176,7 @@
 									<userImage width="36px" height="36px" :img_url="item.img_url" :user_name="item.name"></userImage>
 								</template>
 								<template slot="title">
-									<div style="color: #303133;font-size:14px;margin-top:-2px;">
-										{{ item.name }} {{ item.remark }}
-									</div>
+									<div style="color: #303133;font-size:14px;margin-top:-2px;">{{ item.name }} {{ item.remark }}</div>
 								</template>
 								<template slot="description">
 									<div>{{ item.time }}</div>
@@ -177,7 +186,7 @@
 						</el-steps>
 					</div>
 				</div>
-				<div class="btn_danger flex-box flex-center-center" v-if="detail_info.applyor_id == userId && detail_info.status == 0 && detail_info.source_type == 2">
+				<div class="btn_danger flex-box flex-center-center" v-if="detail_info.applyor_id == userId && detail_info.can_refuse == '1' && detail_info.source_type == 2">
 					<el-button type="danger" class="danger" @click="revocation" :loading="cx_loading">撤销</el-button>
 				</div>
 			</div>

+ 3 - 42
src/views/abPoint/award_punish.vue

@@ -21,7 +21,7 @@
 			<el-table-column label="姓名" prop="employee_id" align="left">
 				<template slot-scope="scope">
 					<div class="flex-box flex-contet-conter">
-						<userImage  :user_name="scope.row.employee_name" width="50px" height="50px"></userImage>
+						<userImage :img_url="scope.row.employee_img_url" :user_name="scope.row.employee_name" width="50px" height="50px"></userImage>
 						<span style="margin-left: 10px; line-height: 50px;">{{ scope.row.employee_name }}</span>
 					</div>
 				</template>
@@ -55,7 +55,7 @@
 			<el-table-column label="姓名" prop="employee_id" align="left">
 				<template slot-scope="scope">
 					<div class="flex-box flex-contet-conter">
-						<userImage  :user_name="scope.row.employee_name" width="50px" height="50px"></userImage>
+						<userImage :img_url="scope.row.employee_img_url" :user_name="scope.row.employee_name" width="50px" height="50px"></userImage>
 						<span style="margin-left: 10px; line-height: 50px;">{{ scope.row.employee_name }}</span>
 					</div>
 				</template>
@@ -194,7 +194,7 @@
 				<el-row :gutter="10" style="padding-bottom:10px;border-bottom:1px #f8f8f8 solid;">
 					<el-col :span="24" >
 						<div class="flex-box flex-v-ce">
-						<userImage :user_name="detail_info.employee_name" width="50px" height="50px" fontSize="1"></userImage>
+						<userImage :user_name="detail_info.employee_name" :img_url="detail_info.img_url" width="50px" height="50px" fontSize="1"></userImage>
 						<span style="line-height:50px; margin-left:10px;margin:0px 10px;">{{ detail_info.employee_name }}</span>
 						<span class="red point" v-show="detail_info.point >= 0 && detail_info.point">+{{ detail_info.point }}</span>
 						<span class="green point" v-show="detail_info.point < 0 && detail_info.point">{{ detail_info.point }}</span>
@@ -288,53 +288,14 @@ export default {
 			dataList2: [],
 			pageLimit: 10,
 			keyword: '',
-			showTitle: false,
-			dialogVisible: false,
-			dialogData: {
-				members: [],
-				items: [
-					{
-						rule_switch: false,
-						rule_id: '',
-						item_id: '',
-						point: '0',
-						remark: '',
-						event_time: moment().format('YYYY-MM-DD'),
-						approval: '',
-						approval_not_select: [],
-						approval_selected: { dept: [], employee: [] },
-						plus: true,
-						pt_id: '',
-						reviewer_id: '',
-						files: []
-					}
-				]
-			},
-			itemData: {},
-			rules: {
-				manager: [{ required: true, message: '请选择录入对象', trigger: 'blur' }]
-			},
-			manager: '',
-			employee_not_select: [],
-			manager_selected: { dept: [], employee: [] },
-			show_employee_selector: false,
-
-			show_approval_selector: false,
-			itemIndex: 0,
 			rule_list: [],
-
-			rule_item_list: {},
-			rule_item_list_value: null,
-
 			drawer: false,
 			detail_loading: false,
 			detail_info: {
 				process:[]
 			},
 			detailShow: false,
-
 			employee_name: JSON.parse(localStorage.getItem('SET_EMPLOYEE_MAP')),
-			fileList: [],
 			userId:'',
 			cx_loading:false,
 			selectId:'',//打开详情ID

+ 0 - 3
src/views/common/below/rewardTask.vue

@@ -27,8 +27,6 @@
 								v-if="show_reviewer_selector"
 								ref="members"
 								:multi="false"
-								:employee_list="reviewer_employee_list"
-								:can_select_dept="false"
 								:use_Administrator_list="true"
 								:selected="reviewer_selected"
 								@confirm="reviewer_confirm"
@@ -164,7 +162,6 @@ export default {
 			// 审批人
 			reviewerName: null,
 			reviewer_not_select: [],
-			reviewer_employee_list: [],
 			reviewer_selected: { dept: [], employee: [] },
 			show_reviewer_selector: false,
 

+ 1 - 26
src/views/common/below/rewardTaskAmend.vue

@@ -26,9 +26,8 @@
 								v-if="show_reviewer_selector"
 								ref="members"
 								:multi="false"
-								:isCreatorSelect="false"
+								:isCreatorSelect="true"
 								:employee_list="reviewer_employee_list"
-								:can_select_dept="false"
 								:use_Administrator_list="true"
 								:selected="reviewer_selected"
 								@confirm="reviewer_confirm"
@@ -442,30 +441,6 @@ export default {
 		getDepartment() {
 			this.$axios('get', '/api/department/tree').then(res => {
 				this.dept_tree = this.getTreeData(res.data.data.list);
-				console.log(this.dept_tree);
-				// let aaa = [438550526,442486286,432649335,442348685]
-				// for(let i in aaa){
-				//   this.getTreeDatas(this.dept_tree,aaa[i]);
-				// }
-				// console.log(this.$refs.depts.getCheckedKeys().concat(this.$refs.depts.getHalfCheckedKeys()))
-				// console.log(this.$refs['depts'])
-
-				//FF是父级ID,FF为1时表示没有父了
-				// [{id:100,FF:1,child:[
-				//       {id:200,FF:100,child:[
-				//         {id:300,FF:200,child:[
-				//           {id:400,FF:300},//比如我有id  400 ,求[100,200,300,400] 。或者我有300 。[100,200,300]
-				//         ]},
-				//       ]},
-				//       {id:201,FF:100,child:[
-				//         {id:301,FF:201},//比如我有id  301 ,求[100,201,301]
-				//       ]},
-				//     ]
-				//   },
-				//   {id:101,FF:1,child:[{id:201,FF:101}]},
-				//   {id:102,FF:1,child:[{id:202,FF:102}]},
-				//   {id:103,FF:1},//如果我有103,那就得到[103]
-				// ]
 			});
 		},
 

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

@@ -48,11 +48,12 @@
             <div class="label">逾期扣分</div>
             <div class="content_text">{{workDetailData.point_config.timeout_deduction_point}}/天</div>
           </li>
-          <li class="flex-box" v-if="workDetailData.department_info" >
+          <li class="flex-box" v-if="workDetailData.department_info">
             <div class="label">可见范围</div>
-            <div class="content_text">
+            <div class="content_text" v-if="workDetailData.department_info.length>0">
               <span v-for="(item,index) in workDetailData.department_info" :key="index">{{item.name}},</span>
             </div>
+			<div class="content_text" v-else>全公司</div>
           </li>
           <li class="flex-box">
             <div class="label">任务类型</div>

+ 273 - 258
src/views/common/below/taskDetailsPopup.vue

@@ -1,266 +1,281 @@
 <template>
-  <div>
-    <!-- 任务详情弹窗 -->
-    <el-drawer :visible.sync="Delay_to_open"  :with-header="false" :size="'500px'" :before-close="handleClose" :custom-class="'drawer_details'">
-      <div class="details_title">{{title}}</div>
-      <div class="details_content" v-if="workDetailData" v-loading="loading">
-        <div class="flex-box flex-v-ce">
-          <userImage class="user_img person_imghead" width="46px" height="46px" :user_name="workDetailData.employee_name" :img_url="workDetailData.img_url"></userImage>
-          <div class="d_userMessage">
-            <div>{{workDetailData.employee_name}}</div>
-            <div v-if="detailType != 2 && workDetailData.dept_list[0]">{{workDetailData.dept_list[0].dept_name}}</div>
-          </div>
-		  <div style="margin-left: 5px;" class="flex-box flex-v-ce">
-			  <div v-if="workDetailData.point_config.base_point>0" class="red">+{{workDetailData.point_config.base_point}}</div>
-			  <div v-else class="green">{{workDetailData.point_config.base_point}}</div>
-			  <div style="margin-left: 5px;"> {{$getTypsName(workDetailData.pt_id)}}</div>
-			 
-		  </div>
-		  
-        </div>
-        <ul>
-          <li class="flex-box">
-            <div class="label">任务内容</div>
-            <div class="content_text">{{workDetailData.task_name}}</div>
-          </li>
-          <li class="flex-box">
-            <div class="label">任务备注</div>
-            <textarea class="flex-1" disabled="disabled" v-model="workDetailData.task_remark"  style="border: none;height:100px"></textarea>
-          </li>
-          <li class="flex-box">
-            <div class="label">任务积分</div>
-            <div class="content_text">{{workDetailData.point_config.base_point}}{{workDetailData.pt_name}}</div>
-          </li>
-          <li class="flex-box" v-if="workDetailData.point_config.review_point">
-            <div class="label">最终分</div>
-            <div class="content_text">{{workDetailData.point_config.review_point}}</div>
-          </li>
-          <li class="flex-box">
-            <div class="label">截止时间</div>
-            <div class="content_text">{{workDetailData.expire_time}}</div>
-          </li>
-          <li class="flex-box" v-if="workDetailData.point_config.timeout_deduction_point>0">
-            <div class="label">逾期扣分</div>
-            <div class="content_text">{{workDetailData.point_config.timeout_deduction_point}}</div>
-          </li>
-          <li class="flex-box">
-            <div class="label">审批人</div>
-            <div class="content_text">{{workDetailData.reviewer_name}}</div>
-          </li>
-          <li class="flex-box">
-            <div class="label">积分种类</div>
-            <div class="content_text">{{workDetailData.pt_name}}</div>
-          </li>
-        </ul>
-        <div v-show="showWork">
-          <div class="d_progress">
-            <div class="flex-box">
-              <div class="flex-1">工作进度({{workDetailData.progress}}%)</div>
-            </div>
-            <el-progress :percentage="workDetailData.progress"></el-progress>
-          </div>
-          <div v-if="Object.keys(workDetailData.process).length === 0">
-            <el-tabs v-model="activeName" >
-              <el-tab-pane label="工作记录" name="work">
-                <div class="flex-box">
-                  <div class="flex-1"></div>
-                </div>
-                <div class="work_box" style="padding-top:10px" v-if="workDetailData.process !== null && workDetailData.process.list !== null">
-                  <div class="flex-box work_item" v-for="(item,index) in workDetailData.process.list" :key="index" v-show="item.point == 0">
-                    <userImage class="user_img person_imghead" width="40px" height="40px" :user_name="item.recorder" :img_url="item.img_url"></userImage>
-                    <div class="work_right flex-1">
-                      <div class="flex-box">
-                        <div class="d_name flex-1">{{item.recorder}}</div>
-                        <div class="d_date">{{item.time}}</div>
-                      </div>
-                      <div class="d_content">{{item.remark}}</div>
-                      <div>
-                        <i class="el-icon-delete delicon color-red" @click="delItem(index,'work')"></i>
-                      </div>
-                    </div>
-                  </div>
-                  <div v-if="!text_list[0]" class="fontColorF" style="text-align: center;">暂无工作记录</div>
-                </div>
-              </el-tab-pane>
-              <el-tab-pane label="记分记录" name="participation">
-                <div class="flex-box" style="padding-bottom: 10px;border-bottom: 1px solid #f1f1f1;">
-                  <div class="flex-1 fontColorF"><span v-if="point_total>0">合计:{{point_total}}</span> </div>
-                </div>
-                <div class="work_box" style="padding-top:10px" v-if="workDetailData.process !== null && workDetailData.process.list !== null">
-                  <div class="flex-box work_item" v-for="(item,index) in workDetailData.process.list" :key="index" v-show="item.point != 0">
-                    <userImage class="user_img person_imghead" width="40px" height="40px" :user_name="item.recorder" :img_url="item.img_url"></userImage>
-                    <div class="work_right flex-1">
-                      <div class="flex-box">
-                        <div class="d_name flex-1">{{item.recorder}}
-                        <span class="blue" v-if="item.point>0">+{{item.point}}</span>
-                        <span class="green" v-if="item.point<0">{{item.point}}</span>
-                        </div>
-                        <div class="d_date">{{item.time}}</div>
-                      </div>
-                      <div class="d_content">{{item.remark}}</div>
-                      <div>
-                        <i class="el-icon-delete delicon color-red" @click="delItem(index,'point')"></i>
-                      </div>
-                    </div>
-                  </div>
-                  <div v-if="!point_list[0]" class="fontColorF" style="text-align: center;">暂无记分记录</div>
-                </div>
-              </el-tab-pane>
-            </el-tabs>
-          </div>
-        </div>
-      </div>
-    </el-drawer>
-
-  </div>
+	<div>
+		<!-- 任务详情弹窗 -->
+		<el-drawer :visible.sync="Delay_to_open" :with-header="false" :size="'500px'" :before-close="handleClose" :custom-class="'drawer_details'">
+			<div class="details_title">{{ title }}</div>
+			<div class="details_content" v-if="workDetailData" v-loading="loading">
+				<div class="flex-box flex-v-ce">
+					<userImage class="user_img person_imghead" width="46px" height="46px" :user_name="workDetailData.employee_name" :img_url="workDetailData.img_url"></userImage>
+					<div class="d_userMessage">
+						<div>{{ workDetailData.employee_name }}</div>
+						<div v-if="detailType != 2 && workDetailData.dept_list[0]">{{ workDetailData.dept_list[0].dept_name }}</div>
+					</div>
+					<div style="margin-left: 5px;" class="flex-box flex-v-ce">
+						<div v-if="workDetailData.point_config.base_point > 0" class="red">+{{ workDetailData.point_config.base_point }}</div>
+						<div v-else class="green">{{ workDetailData.point_config.base_point }}</div>
+						<div style="margin-left: 5px;">{{ $getTypsName(workDetailData.pt_id) }}</div>
+					</div>
+				</div>
+				<ul>
+					<li class="flex-box">
+						<div class="label">任务内容</div>
+						<div class="content_text">{{ workDetailData.task_name }}</div>
+					</li>
+					<li class="flex-box">
+						<div class="label">任务备注</div>
+						<textarea class="flex-1" disabled="disabled" v-model="workDetailData.task_remark" style="border: none;height:100px"></textarea>
+					</li>
+					<li class="flex-box">
+						<div class="label">任务积分</div>
+						<div class="content_text">{{ workDetailData.point_config.base_point }}{{ workDetailData.pt_name }}</div>
+					</li>
+					<li class="flex-box" v-if="workDetailData.point_config.review_point">
+						<div class="label">最终分</div>
+						<div class="content_text">{{ workDetailData.point_config.review_point }}</div>
+					</li>
+					<li class="flex-box">
+						<div class="label">截止时间</div>
+						<div class="content_text">{{ workDetailData.expire_time }}</div>
+					</li>
+					<li class="flex-box" v-if="workDetailData.point_config.timeout_deduction_point > 0">
+						<div class="label">逾期扣分</div>
+						<div class="content_text">{{ workDetailData.point_config.timeout_deduction_point }}</div>
+					</li>
+					<li class="flex-box">
+						<div class="label">审批人</div>
+						<div class="content_text">{{ workDetailData.reviewer_name }}</div>
+					</li>
+					<li class="flex-box">
+						<div class="label">发布人</div>
+						<div class="content_text">{{ workDetailData.publisher_name }}</div>
+					</li>
+					<li class="flex-box">
+						<div class="label">积分种类</div>
+						<div class="content_text">{{ workDetailData.pt_name }}</div>
+					</li>
+				</ul>
+				<div v-show="showWork">
+					<div class="d_progress">
+						<div class="flex-box">
+							<div class="flex-1">工作进度({{ workDetailData.progress }}%)</div>
+						</div>
+						<el-progress :percentage="workDetailData.progress"></el-progress>
+					</div>
+					<div>
+						<el-tabs v-model="activeName">
+							<el-tab-pane label="工作记录" name="work">
+								<div class="work_box" style="padding-top:10px">
+									<div class="work_item" v-for="(item, index) in text_list" :key="index">
+										<div class="flex-box-ce">
+											<userImage class="user_img person_imghead" width="40px" height="40px" :user_name="item.recorder" :img_url="item.img_url"></userImage>
+											<div class="d_name flex-1">{{ item.recorder }} 
+												<span v-if="item.point * 1 > 0">+{{ item.point }}</span>
+												<span v-if="item.point * 1 < 0">{{ item.point }}</span>
+											</div>
+											<div class="d_date fontColorF">{{ item.time }}</div>
+										</div>
+										<div class="d_content fontColorB">{{ item.remark }}</div>
+									</div>
+									<div v-if="text_list.length==0" class="fontColorF" style="text-align: center;">暂无工作记录</div>
+								</div>
+							</el-tab-pane>
+							<el-tab-pane label="记分记录" name="participation">
+								<div class="flex-box" style="padding-bottom: 10px;border-bottom: 1px solid #f1f1f1;">
+									<div class="flex-1 blue">
+										<span v-if="point_total > 0">合计:+{{ point_total }}</span>
+										<span v-else>合计:{{ point_total }}</span>
+									</div>
+								</div>
+								<div class="work_box" style="padding-top:10px">
+									<div class="work_item" v-for="(item, index) in point_list" :key="index">
+										<div class="flex-box-ce">
+											<userImage class="user_img person_imghead" width="40px" height="40px" :user_name="item.recorder" :img_url="item.img_url"></userImage>
+											<div class="d_name flex-1">{{ item.recorder }}
+												<span class="red" v-if="item.point * 1 > 0">+{{ item.point }}</span>
+												<span class="green" v-if="item.point * 1 < 0">{{ item.point }}</span>
+											</div>
+											<div class="d_date fontColorF">{{ item.time }}</div>
+										</div>
+										<div class="d_content fontColorB">{{ item.remark }}</div>
+									</div>
+									<div v-if="point_list.length==0" class="fontColorF" style="text-align: center;">暂无积分记录</div>
+								</div>
+							</el-tab-pane>
+						</el-tabs>
+					</div>
+				</div>
+			</div>
+		</el-drawer>
+	</div>
 </template>
 
 <script>
-  export default {
-    name: 'taskDetailsPopup',
-    props:{
-      title: {
-        type: String,
-        default: ''
-      },
-      visible: {
-        type: Boolean,
-        default: false
-      },
-      id: {
-        type: Number,
-        default: 0
-      },
-      showWork: {
-        type: Boolean,
-        default: true
-      },
-      detailType: {
-        type: String,
-        default: ''
-      }
-    },
-    data() {
-      return {
-        Delay_to_open:false,//打开抽屉
+export default {
+	name: 'taskDetailsPopup',
+	props: {
+		title: {
+			type: String,
+			default: ''
+		},
+		visible: {
+			type: Boolean,
+			default: false
+		},
+		id: {
+			type: Number,
+			default: 0
+		},
+		showWork: {
+			type: Boolean,
+			default: true
+		},
+		detailType: {
+			type: String,
+			default: ''
+		}
+	},
+	data() {
+		return {
+			Delay_to_open: false, //打开抽屉
 
-        loading: false,
-        workDetailData:{
-          process:[],
-          dept_list:[],
-          point_config:{
-            base_point: '0'
-          }
-        },
-        // itemId: getId,
-        isOne: false,
-        text_list:[],
-        point_total:0,
-        isIntegral:false,
-        point_list:[],
-        activeName: "work",
-        getDataUrl: '/api/integral/work',
-        params: {},
-      }
-    },
-    mounted() {
-      this.detailType == 2?this.getDataUrl = '/api/integral/schedule':this.getDataUrl = '/api/integral/work'
-      this.$nextTick(() => {
-        this.getData()
-        this.Delay_to_open = this.visible//更换打开抽屉时机,避免打开两次
-      })
-    },
-    methods: {	
-      // 关闭弹窗
-      handleClose(){
-        this.$emit('update:visible', false)
-      },
-      // 删除
-      delItem(){
-        console.log('删除')
-      },
-      // 获取数据
-      getData(){
-        let self = this
-        self.loading = true
-        let data =  this.detailType == 2?{schedule_id: this.id}:{work_id: this.id}
-        self.$axios('get',self.getDataUrl,data).then(res => {
-					if (res.data.code == 1) {
-            self.workDetailData = res.data.data
-          }
-				}).finally(()=>{
-          self.loading = false
-        })
-      }
-    },
-  }
+			loading: false,
+			workDetailData: {
+				process: [],
+				dept_list: [],
+				point_config: {
+					base_point: '0'
+				}
+			},
+			// itemId: getId,
+			isOne: false,
+			text_list: [],
+			isIntegral: false,
+			
+			point_total: 0,
+			point_list: [],
+			activeName: 'work',
+			getDataUrl: '/api/integral/work',
+			params: {}
+		};
+	},
+	mounted() {
+		this.detailType == 2 ? (this.getDataUrl = '/api/integral/schedule') : (this.getDataUrl = '/api/integral/work');
+		this.$nextTick(() => {
+			this.getData();
+			this.Delay_to_open = this.visible; //更换打开抽屉时机,避免打开两次
+		});
+	},
+	methods: {
+		// 关闭弹窗
+		handleClose() {
+			this.$emit('update:visible', false);
+		},
+		// 删除
+		delItem() {
+			console.log('删除');
+		},
+		// 获取数据
+		getData() {
+			this.loading = true;
+			let data = this.detailType == 2 ? { schedule_id: this.id } : { work_id: this.id };
+			this.$axios('get', this.getDataUrl, data).then(res => {
+				if (res.data.code == 1) {
+					this.workDetailData = res.data.data;
+					this.workDetailData = res.data.data
+					this.text_list = []
+					this.point_list = []
+					this.point_total = 0
+					if (this.workDetailData.process.list && this.workDetailData.process.list.length > 0) {
+					  for (let i in this.workDetailData.process.list) {
+					    this.point_total += this.workDetailData.process.list[i].point * 1
+					    if (this.workDetailData.process.list[i].point != 0) {
+					      this.point_list.push(this.workDetailData.process.list[i])
+					    } else {
+					      this.text_list.push(this.workDetailData.process.list[i])
+					    }
+					  }
+					}
+					
+				}
+			}).finally(() => {
+				this.loading = false;
+			});
+		}
+	}
+};
 </script>
 <style lang="scss" scoped="scoped">
-  .details_content{
-    & .d_userMessage{
-      margin-left: 10px;
-    }
-    & .d_userMessage div:nth-child(1){
-      font-size: 16px;
-    }
-    & .d_userMessage div:nth-child(2){
-      font-size: 12px;
-      color: #909399;
-    }
-    & .d_progress{
-      padding: 12px 0;
-      border-bottom: 1px solid #f1f1f1;
-      margin-bottom: 10px;
-    }
-    & ul{
-      padding: 12px 0;
-      border-bottom: 1px solid #f1f1f1;
-      & li{
-        padding: 6px 0;
-      }
-      & .label{
-        width: 80px;
-        text-align: left;
-        color: #909399;
-      }
-      & .content_text{
-        flex:1
-      }
-    }
-  }
-  .fontColorF{
-    color:#909399;
-  }
-  .details_content {
-    padding: 20px;
-    height: calc(100vh - 60px);
-    overflow: auto;
-    .row_title {
-      position: relative;
-      margin: 0 0 20px 0;
-      padding-top: 12px;
-      font-size: 16px;
-      color: #303133;
-      line-height: 22px;
-    }
-    .row_title:before {
-      position: absolute;
-      top: 0;
-      content: ' ';
-      width: 100%;
-      border-top: 1px #f8f8f8 solid;
-    }
-    .el-row {
-      margin-bottom: 10px;
-      font-size: 14px;
-      .el-col-4 {
-        color: #606266;
-      }
-    }
-  }
-  .details_title {
-    font-size: 18px;
-    padding: 20px;
-    border-bottom: 1px #efefef solid;
-  }
+.details_content {
+	& .d_userMessage {
+		margin-left: 10px;
+	}
+	& .d_userMessage div:nth-child(1) {
+		font-size: 16px;
+	}
+	& .d_userMessage div:nth-child(2) {
+		font-size: 12px;
+		color: #909399;
+	}
+	& .d_progress {
+		padding: 12px 0;
+		border-bottom: 1px solid #f1f1f1;
+		margin-bottom: 10px;
+	}
+	& ul {
+		padding: 12px 0;
+		border-bottom: 1px solid #f1f1f1;
+		& li {
+			padding: 6px 0;
+		}
+		& .label {
+			width: 80px;
+			text-align: left;
+			color: #909399;
+		}
+		& .content_text {
+			flex: 1;
+		}
+	}
+}
+.fontColorF {
+	color: #909399;
+}
+.details_content {
+	padding: 20px;
+	height: calc(100vh - 60px);
+	overflow: auto;
+	.row_title {
+		position: relative;
+		margin: 0 0 20px 0;
+		padding-top: 12px;
+		font-size: 16px;
+		color: #303133;
+		line-height: 22px;
+	}
+	.row_title:before {
+		position: absolute;
+		top: 0;
+		content: ' ';
+		width: 100%;
+		border-top: 1px #f8f8f8 solid;
+	}
+	.el-row {
+		margin-bottom: 10px;
+		font-size: 14px;
+		.el-col-4 {
+			color: #606266;
+		}
+	}
+}
+.details_title {
+	font-size: 18px;
+	padding: 20px;
+	border-bottom: 1px #efefef solid;
+}
+.d_name{
+	margin-left: 10px;
+}
+.d_content{
+	margin-left: 50px;
+}
 </style>

+ 0 - 4
src/views/common/below/temporaryTask.vue

@@ -31,7 +31,6 @@
 								:isCreatorSelect="true"
 								:employee_list="employee_list"
 								:user_no_select="false"
-								:can_select_dept="false"
 								:selected="approval_selected"
 								@confirm="approval_confirm"
 							/>
@@ -53,8 +52,6 @@
 								v-if="show_reviewer_selector"
 								ref="members1"
 								:isChecKedAll="false"
-								:employee_list="reviewer_employee_list"
-								:can_select_dept="false"
 								:use_Administrator_list="true"
 								:multi="false"
 								:selected="reviewer_selected"
@@ -174,7 +171,6 @@ export default {
 			// 审批人
 			reviewerName: null,
 			reviewer_not_select: [],
-			reviewer_employee_list: [],
 			reviewer_selected: { dept: [], employee: [] },
 			show_reviewer_selector: false,
 

+ 0 - 2
src/views/common/below/temporaryTaskAmend.vue

@@ -31,7 +31,6 @@
 								:isCreatorSelect="true"
 								:employee_list="employee_list"
 								:user_no_select="false"
-								:can_select_dept="false"
 								:multi="false"
 								:selected="approval_selected"
 								@confirm="approval_confirm"
@@ -57,7 +56,6 @@
 								:isCreatorSelect="false"
 								:employee_list="reviewer_employee_list"
 								:user_no_select="true"
-								:can_select_dept="false"
 								:multi="false"
 								:use_Administrator_list="true"
 								:selected="reviewer_selected"

+ 0 - 289
src/views/common/taskDetailsPopup.vue

@@ -1,289 +0,0 @@
-<template>
-	<div>
-		<!-- 任务详情弹窗 -->
-		<el-drawer :visible.sync="Delay_to_open" :with-header="false" :size="'500px'" :before-close="handleClose" :custom-class="'drawer_details'">
-			<div class="details_title">{{ title }}</div>
-			<div class="details_content" v-if="workDetailData" v-loading="loading">
-				<div class="flex-box flex-v-ce">
-					<userImage class="user_img person_imghead" width="46px" height="46px" :user_name="workDetailData.employee_name" :img_url="workDetailData.img_url"></userImage>
-					<div class="d_userMessage">
-						<div>{{ workDetailData.employee_name }}</div>
-						<div v-if="detailType != 2 && workDetailData.dept_list[0]">{{ workDetailData.dept_list[0].dept_name }}</div>
-					</div>
-					<!-- 为了在抽屉打开之后获取焦点 -->
-					<el-button type="text" style="padding: 0; margin: 0; visibility: hidden;">test</el-button>
-				</div>
-				<template v-if="workDetailData.review_status == 2 || workDetailData.review_status == 1">
-					<div class="header-main">
-						<div class="flex-box flex-v-ce" style="	margin-bottom: 10px;" v-if="workDetailData.review_status == 2">
-							<div class="laber">审批状态</div>
-							<div class="flex-1 red">已驳回</div>
-						</div>
-						<div class="flex-box flex-v-ce" style="	margin-bottom: 10px;" v-else>
-							<div class="laber">审批状态</div>
-							<div class="flex-1 green">已通过</div>
-						</div>
-						<div class="flex-box">
-							<div class="laber" v-if="workDetailData.review_status == 2">驳回理由</div>
-							<div class="laber" v-else>备注</div>
-							<div class="flex-1">{{ workDetailData.review_remark}}</div>
-						</div>
-					</div>
-				</template>
-				<ul>
-					<li class="flex-box">
-						<div class="label">任务内容</div>
-						<div class="content_text">{{ workDetailData.task_name }}</div>
-					</li>
-					<li class="flex-box">
-						<div class="label">任务备注</div>
-						<textarea class="flex-1" disabled="disabled" v-model="workDetailData.task_remark" style="border: none;height:100px"></textarea>
-					</li>
-					<li class="flex-box">
-						<div class="label">任务积分</div>
-						<div class="content_text yellow">{{ workDetailData.point_config.base_point }}{{ workDetailData.pt_name }}</div>
-					</li>
-					<li class="flex-box" v-if="workDetailData.point_config.rediv_point">
-						<div class="label">最终分</div>
-						<div class="content_text yellow">{{ workDetailData.point_config.rediv_point }}</div>
-					</li>
-					<li class="flex-box">
-						<div class="label">截止时间</div>
-						<div class="content_text">{{ workDetailData.expire_time }}</div>
-					</li>
-					<li class="flex-box" v-if="workDetailData.point_config.timeout_deduction_point > 0">
-						<div class="label">逾期扣分</div>
-						<div class="content_text">{{ workDetailData.point_config.timeout_deduction_point }}</div>
-					</li>
-					<li class="flex-box">
-						<div class="label">审批人</div>
-						<div class="content_text">{{ workDetailData.rediver_name }}</div>
-					</li>
-					<li class="flex-box">
-						<div class="label">积分种类</div>
-						<div class="content_text">{{ workDetailData.pt_name }}</div>
-					</li>
-				</ul>
-				<div v-show="showWork">
-					<div class="d_progress">
-						<div class="flex-box">
-							<div class="flex-1">工作进度({{ workDetailData.progress }}%)</div>
-						</div>
-						<el-progress :percentage="workDetailData.progress"></el-progress>
-					</div>
-					<div v-if="Object.keys(workDetailData.process).length === 0">
-						<el-tabs v-model="activeName">
-							<el-tab-pane label="工作记录" name="work">
-								<div class="flex-box"><div class="flex-1"></div></div>
-								<div class="work_box" style="padding-top:10px" v-if="workDetailData.process !== null && workDetailData.process.list !== null">
-									<div class="flex-box work_item" v-for="(item, index) in workDetailData.process.list" v-show="item.point == 0" :key="index">
-										<userImage class="user_img person_imghead" width="40px" height="40px" :user_name="item.recorder" :img_url="item.img_url"></userImage>
-										<div class="work_right flex-1">
-											<div class="flex-box">
-												<div class="d_name flex-1">{{ item.recorder }}</div>
-												<div class="d_date">{{ item.time }}</div>
-											</div>
-											<div class="d_content">{{ item.remark }}</div>
-											<div><i class="el-icon-delete delicon color-red" @click="delItem(index, 'work')"></i></div>
-										</div>
-									</div>
-									<div v-if="!text_list[0]" class="fontColorF" style="text-align: center;">暂无工作记录</div>
-								</div>
-							</el-tab-pane>
-							<el-tab-pane label="记分记录" name="participation">
-								<div class="flex-box" style="padding-bottom: 10px;border-bottom: 1px solid #f1f1f1;">
-									<div class="flex-1 fontColorF">
-										<span v-if="point_total > 0">合计:{{ point_total }}</span>
-									</div>
-								</div>
-								<div class="work_box" style="padding-top:10px" v-if="workDetailData.process !== null && workDetailData.process.list !== null">
-									<div class="flex-box work_item" v-for="(item, index) in workDetailData.process.list" v-show="item.point != 0" :key="index">
-										<userImage class="user_img person_imghead" width="40px" height="40px" :user_name="item.recorder" :img_url="item.img_url"></userImage>
-										<div class="work_right flex-1">
-											<div class="flex-box">
-												<div class="d_name flex-1">
-													{{ item.recorder }}
-													<span class="blue" v-if="item.point > 0">+{{ item.point }}</span>
-													<span class="green" v-if="item.point < 0">{{ item.point }}</span>
-												</div>
-												<div class="d_date">{{ item.time }}</div>
-											</div>
-											<div class="d_content">{{ item.remark }}</div>
-											<div><i class="el-icon-delete delicon color-red" @click="delItem(index, 'point')"></i></div>
-										</div>
-									</div>
-									<div v-if="!point_list[0]" class="fontColorF" style="text-align: center;">暂无记分记录</div>
-								</div>
-							</el-tab-pane>
-						</el-tabs>
-					</div>
-				</div>
-			</div>
-		</el-drawer>
-	</div>
-</template>
-
-<script>
-export default {
-	name: 'taskDetailsPopup',
-	props: {
-		title: {
-			type: String,
-			default: ''
-		},
-		visible: {
-			type: Boolean,
-			default: false
-		},
-		id: {
-			type: Number,
-			default: 0
-		},
-		showWork: {
-			type: Boolean,
-			default: true
-		},
-		detailType: {
-			type: String,
-			default: ''
-		}
-	},
-	data() {
-		let getId = this.id;
-		return {
-			Delay_to_open: false, //打开抽屉
-
-			loading: false,
-			workDetailData: {
-				process: [],
-				dept_list: [],
-				point_config: {
-					base_point: '0'
-				}
-			},
-			itemId: getId,
-			isOne: false,
-			text_list: [],
-			point_total: 0,
-			isIntegral: false,
-			point_list: [],
-			userId: this.$getUserData().id,
-			activeName: 'work',
-			getDataUrl: '/api/integral/work',
-			params: {}
-		};
-	},
-	mounted() {
-		this.detailType == 2 ? (this.getDataUrl = '/api/integral/schedule') : (this.getDataUrl = '/api/integral/work');
-		this.$nextTick(() => {
-			this.getData();
-			this.Delay_to_open = this.visible; //更换打开抽屉时机,避免打开两次
-		});
-	},
-	methods: {
-		// 关闭弹窗
-		handleClose() {
-			this.$emit('update:visible', false);
-		},
-		// 删除
-		delItem() {
-			console.log('删除');
-		},
-		// 获取数据
-		getData() {
-			let self = this;
-			self.loading = true;
-			let data = this.detailType == 2 ? { schedule_id: this.id } : { work_id: this.id };
-			self.$axios('get', self.getDataUrl, data)
-				.then(res => {
-					if (res.data.code == 1) {
-						self.workDetailData = res.data.data;
-					}
-					self.loading = false;
-				})
-				.finally(() => {
-					self.loading = false;
-				});
-		}
-	}
-};
-</script>
-<style lang="scss" scoped="scoped">
-.details_content {
-	& .d_userMessage {
-		margin-left: 10px;
-	}
-	& .d_userMessage div:nth-child(1) {
-		font-size: 16px;
-		margin-bottom: 8px;
-	}
-	& .d_userMessage div:nth-child(2) {
-		font-size: 12px;
-		color: #909399;
-	}
-	& .d_progress {
-		padding: 12px 0;
-		border-bottom: 1px solid #f1f1f1;
-		margin-bottom: 10px;
-	}
-	& ul {
-		padding: 12px 0;
-		border-bottom: 1px solid #f1f1f1;
-		& li {
-			padding: 6px 0;
-		}
-		& .label {
-			width: 80px;
-			text-align: left;
-			color: #909399;
-		}
-		& .content_text {
-			flex: 1;
-		}
-	}
-}
-.fontColorF {
-	color: #909399;
-}
-.details_content {
-	padding: 20px;
-	height: calc(100vh - 60px);
-	overflow: auto;
-	.row_title {
-		position: relative;
-		margin: 0 0 20px 0;
-		padding-top: 12px;
-		font-size: 16px;
-		color: #303133;
-		line-height: 22px;
-	}
-	.row_title:before {
-		position: absolute;
-		top: 0;
-		content: ' ';
-		width: 100%;
-		border-top: 1px #f8f8f8 solid;
-	}
-	.el-row {
-		margin-bottom: 10px;
-		font-size: 14px;
-		.el-col-4 {
-			color: #606266;
-		}
-	}
-}
-.details_title {
-	font-size: 18px;
-	padding: 20px;
-	border-bottom: 1px #efefef solid;
-}
-.header-main{
-	border-bottom: 1px #efefef solid;
-	padding: 10px 0;
-}
-.header-main .laber{
-	width: 80px;
-	text-align: left;
-	color: #909399;
-}
-</style>

+ 0 - 1
src/views/ranking/custom_rank code.vue

@@ -112,7 +112,6 @@
 							v-if="isEmployeeShow"
 							ref="Employee"
 							:user_no_select="false"
-							:can_select_dept="true"
 							:selected="employees_selected"
 							:close_clear_data="true"
 							@confirm="move_employee_confirm"

+ 6 - 7
src/views/ranking/custom_rank.vue

@@ -132,7 +132,6 @@
 							v-if="isEmployeeShow"
 							ref="Employee"
 							:user_no_select="false"
-							:can_select_dept="true"
 							:selected="employees_selected"
 							:close_clear_data="true"
 							@confirm="move_employee_confirm"
@@ -754,9 +753,6 @@ export default {
 							name: name
 						}); //左边分组
 						self.groupShow = false;
-						// if (!self.popupType) {
-						// self.open_right(self.clickItem)
-						// }
 						this.employees = '';
 						this.employee_not_select = [];
 						this.employees_selected = { employee: [], dept: [] };
@@ -879,16 +875,19 @@ export default {
 									}
 								}
 							});
-							this.groups_list = data;
+							this.$nextTick(()=>{
+								this.groups_list = data;
+							})
 						} else {
-							this.groups_list = lists;
+							this.$nextTick(()=>{
+								this.groups_list = lists;
+							})
 						}
 
 						self.$nextTick(() => {
 							if (atPresent) {
 								for (let i in self.groups_list) {
 									if (atPresent == self.groups_list[i].id) {
-										// self.open_right(self.groups_list[i]);
 										self.getGroupsInfo(self.groups_list[i]);
 									}
 								}

+ 235 - 220
src/views/ranking/integral_event.vue

@@ -2,72 +2,68 @@
 	<div>
 		<div class="all padding-20">
 			<el-form ref="form" :inline="true" label-width="80px">
-			  <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,value:'id',label:'name',children:'_child'}"
-				  	ref="dept"
-				  	clearable
-				  	filterable
-				  	placeholder="全公司"
-				  ></el-cascader>
-			  </el-form-item>
-			  <el-form-item label="时间" style="margin-top: 1px;">
-				  <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 style="margin-top: 2px;">
-				  <el-input size="medium" v-model="formData.keyword" placeholder="输入同事姓名" max="200" @keyup.enter.native="keyWordSelect" class="persons_name">
-				  	<el-button size="medium" slot="append" icon="el-icon-search" @click="keyWordSelect"></el-button>
-				  </el-input>
-			  </el-form-item>
-			  <el-form-item>
-				  <el-button v-if="employeeOrdept" type="success" size="medium" @click="excelImportShow = true" plain>导入数据</el-button>
-				  <el-button type="primary" size="medium" @click="exportExcel" plain>导出当前数据</el-button>
-          		  <el-button class="first-element-btn" 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>
-			</el-form> 
-			 <!-- 表格 -->
+				<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, value: 'id', label: 'name', children: '_child' }"
+						ref="dept"
+						clearable
+						filterable
+						placeholder="全公司"
+					></el-cascader>
+				</el-form-item>
+				<el-form-item label="时间" style="margin-top: 1px;">
+					<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 style="margin-top: 2px;">
+					<el-input size="medium" v-model="formData.keyword" placeholder="输入同事姓名" max="200" @keyup.enter.native="keyWordSelect" class="persons_name">
+						<el-button size="medium" slot="append" icon="el-icon-search" @click="keyWordSelect"></el-button>
+					</el-input>
+				</el-form-item>
+				<el-form-item>
+					<el-button v-if="employeeOrdept" type="success" size="medium" @click="excelImportShow = true" plain>导入数据</el-button>
+					<el-button type="primary" size="medium" @click="exportExcel" plain>导出当前数据</el-button>
+					<el-button class="first-element-btn" 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>
+			</el-form>
+			<!-- 表格 -->
 			<div>
 				<el-table :data="list" style="width: 100%" 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" width="200px">	
+					<el-table-column v-if="employeeOrdept" type="selection" width="55"></el-table-column>
+					<el-table-column prop="employee_name" label="姓名" align="left" width="200px">
 						<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>
+								<userImage :user_name="scope.row.employee_name" :img_url="scope.row.employee_img_url" width="50px" height="50px"></userImage>
 								<span style="line-height: 50px; padding-left: 10px;">{{ scope.row.employee_name }}</span>
 							</div>
 						</template>
@@ -95,7 +91,7 @@
 							{{ cuttString(scope.row.create_time) }}
 						</template>
 					</el-table-column>
-				
+
 					<template slot="empty">
 						<noData></noData>
 					</template>
@@ -153,8 +149,14 @@
 
 				<el-row v-show="detail_info.files !== null && detail_info.files.length > 0">
 					<el-col :span="6">图片</el-col>
-					<el-col :span="18"  >
-						<el-image v-for="(itme,index) in detail_info.files" :key="index" style="width: 80px; height: 80px;margin: 0 5px;" :src="itme" :preview-src-list="detail_info.files"></el-image>
+					<el-col :span="18">
+						<el-image
+							v-for="(itme, index) in detail_info.files"
+							:key="index"
+							style="width: 80px; height: 80px;margin: 0 5px;"
+							:src="itme"
+							:preview-src-list="detail_info.files"
+						></el-image>
 					</el-col>
 				</el-row>
 
@@ -176,12 +178,13 @@
 						</el-col>
 					</el-row>
 				</div>
-				<div v-show="detail_info.rule_id">
-					<Steps :process="detail_info.process"></Steps>
-				</div>
-				
-				<div style="text-align: center;margin-top: 30px;" v-if="detail_info.source_type==10">
-					 <el-button type="primary" size="medium" @click="showLog=true">查看日志详情内容 <span style=";padding-left:5px;">»</span></el-button>
+				<div v-show="detail_info.rule_id"><Steps :process="detail_info.process"></Steps></div>
+
+				<div style="text-align: center;margin-top: 30px;" v-if="detail_info.source_type == 10">
+					<el-button type="primary" size="medium" @click="showLog = true">
+						查看日志详情内容
+						<span style=";padding-left:5px;">»</span>
+					</el-button>
 				</div>
 				<div v-if="!this.$authoritys('employee')" style="position: absolute; bottom: 20px; display: block; right: 20px;">
 					<el-button @click="close_integral_event">取消</el-button>
@@ -189,57 +192,61 @@
 				</div>
 			</div>
 		</el-drawer>
-			
+
 		<el-dialog title="查看日志详情" width="600px" :visible.sync="showLog">
-			<div class="title">{{ding_report.creator_name}}的{{ding_report.template_name}}</div>
-			<div v-if="ding_report.contents.length>0">
-				<div class="contents" v-for="(item,index) in ding_report.contents" :key="index">
-					<div class="key">{{item.key}}</div>
+			<div class="title">{{ ding_report.creator_name }}的{{ ding_report.template_name }}</div>
+			<div v-if="ding_report.contents.length > 0">
+				<div class="contents" v-for="(item, index) in ding_report.contents" :key="index">
+					<div class="key">{{ item.key }}</div>
 					<div class="value fontColorF">
-						<span v-if="item.value">{{item.value}}</span>
+						<span v-if="item.value">{{ item.value }}</span>
 						<span v-else>未填写</span>
 					</div>
-				</div>  
+				</div>
 			</div>
-			<div  v-if="ding_report.images.length>0">
-			  <div class="key" style="margin-bottom: 20px;">图片</div>
-			  <div class="flex-box flex-d-wrap">
-				  <el-image
-				  	v-for="(item, index) in ding_report.images"
-				  	:key="index"
-				  	style="width: 100px; height: 100px;margin-right:8px"
-				  	:src="item"
-				  	:preview-src-list="ding_report.images"
-				  ></el-image>
-<!-- 				  <img class="imgs" :src="imgs" v-for="(imgs,index) in ding_report.images" :key="index"/> -->
-			  </div>
+			<div v-if="ding_report.images.length > 0">
+				<div class="key" style="margin-bottom: 20px;">图片</div>
+				<div class="flex-box flex-d-wrap">
+					<el-image
+						v-for="(item, index) in ding_report.images"
+						:key="index"
+						style="width: 100px; height: 100px;margin-right:8px"
+						:src="item"
+						:preview-src-list="ding_report.images"
+					></el-image>
+					<!-- 				  <img class="imgs" :src="imgs" v-for="(imgs,index) in ding_report.images" :key="index"/> -->
+				</div>
 			</div>
 		</el-dialog>
-		
+
 		<!-- 导入数据 -->
 		<el-dialog title="导入积分事件数据" width="600px" :visible.sync="excelImportShow" :close-on-click-modal="false" :before-close="close_import">
 			<div style="padding:0 50px;">
 				<div class="flex-box flex-v-ce margin-bottom">
 					<div style="margin-right: 10px;">1、下载积分事件模版,批量录入积分事件</div>
-					<el-button size="medium" type="primary" @click="downloadTemplate"  plain>下载模板</el-button>
+					<el-button size="medium" type="primary" @click="downloadTemplate" plain>下载模板</el-button>
 				</div>
 				<div class="margin-bottom">
-					<el-upload  
-					:limit="1" 
-					:headers="ATOKEN" 
-					ref="upload" 
-					:action="action" 
-					:on-remove="handleRemove"
-					:on-success="handlePictureCardPrediv" 
-					:file-list="fileList"
-					:before-upload="beforeFilesUpload">
-						<p>2、上传积分事件数据Excel表<el-button  style="margin-left: 10px;" size="medium" type="primary" plain>选择文件</el-button></p>
+					<el-upload
+						:limit="1"
+						:headers="ATOKEN"
+						ref="upload"
+						:action="action"
+						:on-remove="handleRemove"
+						:on-success="handlePictureCardPrediv"
+						:file-list="fileList"
+						:before-upload="beforeFilesUpload"
+					>
+						<p>
+							2、上传积分事件数据Excel表
+							<el-button style="margin-left: 10px;" size="medium" type="primary" plain>选择文件</el-button>
+						</p>
 					</el-upload>
 				</div>
 				<!-- <div>3、选择文件后点击下方【上传】按钮</div> -->
 			</div>
 			<div slot="footer" class="dialog-footer">
-				<el-button @click="close_import"  size="medium">取 消</el-button>
+				<el-button @click="close_import" size="medium">取 消</el-button>
 				<!-- <el-button type="primary" @click="uploadFile()"  size="medium" :loading="update_btn">上传</el-button> -->
 			</div>
 		</el-dialog>
@@ -254,7 +261,7 @@
 					</el-table-column>
 				</el-table>
 			</div>
-			<span slot="footer"><el-button type="primary"  size="medium" @click="importErrorInfoShow = false">确 定</el-button></span>
+			<span slot="footer"><el-button type="primary" size="medium" @click="importErrorInfoShow = false">确 定</el-button></span>
 		</el-dialog>
 
 		<el-dialog title="轮播事件" :visible.sync="swiperShow" width="500px">
@@ -270,9 +277,9 @@
 				</el-row>
 			</div>
 			<span slot="footer">
-				<el-button  size="medium" @click="swiperShow = false" style="margin-right: 10px;">取 消</el-button>
+				<el-button size="medium" @click="swiperShow = false" style="margin-right: 10px;">取 消</el-button>
 				<router-link :to="{ path: '/deptRankSwiper?' + '&page=1&page_size=' + this.page_size + '&type=1' }" target="_blank">
-					<el-button  size="medium" type="primary">开始轮播</el-button>
+					<el-button size="medium" type="primary">开始轮播</el-button>
 				</router-link>
 			</span>
 		</el-dialog>
@@ -284,10 +291,10 @@ import Steps from '@/components/Steps';
 export default {
 	data() {
 		return {
-			deleteDisabled:true,
-			action:process.env.VUE_APP_BASE_API+'api/integral/import',
-			ATOKEN: { 'A-TOKEN': this.$getToken(),'Accept':'application/vnd.test.v2+json' },
-			
+			deleteDisabled: true,
+			action: process.env.VUE_APP_BASE_API + 'api/integral/import',
+			ATOKEN: { 'A-TOKEN': this.$getToken(), Accept: 'application/vnd.test.v2+json' },
+
 			loading: false,
 			swiperShow: false,
 			swiperPageList: [{ value: '10' }, { value: '30' }, { value: '50' }],
@@ -301,7 +308,7 @@ export default {
 			},
 			time_slot: null,
 			rule_trees: [],
-			props: {checkStrictly: true, value: 'id', label: 'name', children: 'child' },
+			props: { checkStrictly: true, value: 'id', label: 'name', children: 'child' },
 			rule: [],
 			list: [],
 			total: null,
@@ -314,31 +321,30 @@ export default {
 			error_list: [],
 			importErrorInfoShow: false,
 			fileList: [],
-			employeeOrdept:!this.$authoritys('employee') && !this.$authoritys('dept_manager'),
-			
-      		selectionID:[],//删除的事件ID
+			employeeOrdept: !this.$authoritys('employee') && !this.$authoritys('dept_manager'),
+
+			selectionID: [], //删除的事件ID
 			// 查看日志
-			showLog:false,
-			ding_report:{
-				contents:[],
-				images:[]
+			showLog: false,
+			ding_report: {
+				contents: [],
+				images: []
 			}
-			
 		};
 	},
-	components: { noData,Steps },
+	components: { noData, Steps },
 	mounted() {
 		this.getDepartment();
 		this.get_rule_trees();
 		this.get_integral_list(this.formData);
-		this.point_types=this.getTypes()
+		this.point_types = this.getTypes();
 	},
 	watch: {
-		selectionID(){
-			if(this.selectionID.length==0){
-				this.deleteDisabled = true
-			}else{
-				this.deleteDisabled = false
+		selectionID() {
+			if (this.selectionID.length == 0) {
+				this.deleteDisabled = true;
+			} else {
+				this.deleteDisabled = false;
 			}
 		},
 		'formData.pt_id'(val, old_val) {
@@ -374,11 +380,11 @@ export default {
 		}
 	},
 	methods: {
-		getTypes(){
-			var arr=this.$getTyps();
-			return arr.filter(function(item){
-				return item.code!='JX'
-			})
+		getTypes() {
+			var arr = this.$getTyps();
+			return arr.filter(function(item) {
+				return item.code != 'JX';
+			});
 		},
 		handleRemove(file, fileList) {
 			// if (fileList !== null && fileList.length != 0) {
@@ -398,13 +404,14 @@ export default {
 			this.get_integral_list(this.formData);
 		},
 		downloadTemplate() {
-			window.open(process.env.VUE_APP_BASE_API+'api/download/integral/template',);
+			window.open(process.env.VUE_APP_BASE_API + 'api/download/integral/template');
 		},
 		uploadFile() {
 			let params = {};
 			params.file = this.file;
 			this.update_btn = true;
-			this.$axios("post",'/api/integral/import', params,'v2').then(res => {
+			this.$axios('post', '/api/integral/import', params, 'v2')
+				.then(res => {
 					if (res.data.code == 1) {
 						if (res.data.data.error.length == 0) {
 							this.$message({ type: 'success', message: '导入成功' });
@@ -417,7 +424,8 @@ export default {
 					} else {
 						this.$message({ type: 'error', message: res.data.msg });
 					}
-				}).finally(() => {
+				})
+				.finally(() => {
 					setTimeout(() => {
 						this.update_btn = false;
 					}, 3000);
@@ -425,22 +433,22 @@ export default {
 		},
 		handlePictureCardPrediv(response) {
 			if (response.code == 1) {
-				if(response.data.error.length>0){
-					var htmls=response.data.error;
-					var str="<div class='red'></div>";
-					htmls.forEach(item=>{
-						str+=`<div>${item}</div>`;
-					})
+				if (response.data.error.length > 0) {
+					var htmls = response.data.error;
+					var str = "<div class='red'></div>";
+					htmls.forEach(item => {
+						str += `<div>${item}</div>`;
+					});
 					this.close_import();
 					this.$notify.error({
-					          title: '导入错误',
-					          dangerouslyUseHTMLString: true,
-					          message: str,
-							  duration:0,
-							  offset:50,
-							  customClass:'notifyBox',
+						title: '导入错误',
+						dangerouslyUseHTMLString: true,
+						message: str,
+						duration: 0,
+						offset: 50,
+						customClass: 'notifyBox'
 					});
-				}else{
+				} else {
 					this.file = response.data;
 					this.$message.success({ message: response.msg });
 					this.keyWordSelect();
@@ -458,9 +466,13 @@ export default {
 				return false;
 			}
 		},
-		onFilePrediv() {},
 		exportExcel() {
-			window.open(process.env.VUE_APP_BASE_API +'api/download/integral?employee_id='+this.$getUserData().id+'&page=' +this.formData.page +
+			window.open(
+				process.env.VUE_APP_BASE_API +
+					'api/download/integral?employee_id=' +
+					this.$getUserData().id +
+					'&page=' +
+					this.formData.page +
 					'&page_size=' +
 					this.formData.page_size +
 					(this.formData.rule_id ? '&rule_id=' + this.formData.rule_id : '') +
@@ -481,45 +493,46 @@ export default {
 		cuttString(data) {
 			return data.substring(5);
 		},
-		deleteInBatches(){
+		deleteInBatches() {
 			if (this.selectionID.length < 1) {
-				return false
+				return false;
 			}
 			this.$confirm('此操作将永久删除选中的积分事件, 确认要删除吗?', '批量删除事件', {
 				confirmButtonText: '确定',
 				cancelButtonText: '取消',
 				type: 'warning'
-			}).then(() => {
-				this.loading = true
-				this.$axios('POST','/api/integral/statistics/integral/many',{event_ids:this.selectionID}).then((res)=>{
-				if(res.data.code == 1){
-					this.$message({
-						message: res.data.msg,
-						type: 'success'
-					});
-					if(this.selectionID.length == this.list.length){
-						if(this.formData.page > 1){
-							this.formData.page = this.formData.page-1;
-						}
-					}
-					this.get_integral_list(this.formData)
-				}else{
-					this.$message.error(res.data.msg);
-				};
-				}).catch(()=>{
-					this.loading = false
-				}).finally(()=>{
-				})
-			}).catch(() => {
-
 			})
+				.then(() => {
+					this.loading = true;
+					this.$axios('POST', '/api/integral/statistics/integral/many', { event_ids: this.selectionID })
+						.then(res => {
+							if (res.data.code == 1) {
+								this.$message({
+									message: res.data.msg,
+									type: 'success'
+								});
+								if (this.selectionID.length == this.list.length) {
+									if (this.formData.page > 1) {
+										this.formData.page = this.formData.page - 1;
+									}
+								}
+								this.get_integral_list(this.formData);
+							} else {
+								this.$message.error(res.data.msg);
+							}
+						})
+						.finally(() => {
+							this.loading = false;
+						});
+				})
+				.catch(() => {});
 		},
-		deleteEvents(selection){
-			let listId = []
-			selection.forEach(item=>{
-				listId.push(item.id)
-			})
-      		this.selectionID = listId
+		deleteEvents(selection) {
+			let listId = [];
+			selection.forEach(item => {
+				listId.push(item.id);
+			});
+			this.selectionID = listId;
 		},
 		open_detail(item) {
 			this.detail_popup = true;
@@ -527,36 +540,38 @@ export default {
 				event_id: item.id
 			};
 			this.detail_loading = true;
-			this.$axios("get",'/api/integral/statistics/integral/info',data).then(res => {
+			this.$axios('get', '/api/integral/statistics/integral/info', data)
+				.then(res => {
 					if (res.data.code == 1) {
 						this.detail_info = res.data.data;
-						var ding_report=res.data.data.remark.ding_report
-						if(Object.keys(ding_report).length!=0){
-							this.ding_report= res.data.data.remark.ding_report
+						var ding_report = res.data.data.remark.ding_report;
+						if (Object.keys(ding_report).length != 0) {
+							this.ding_report = res.data.data.remark.ding_report;
 						}
 					} else {
 						this.$message.error(res.data.data.msg);
 					}
 				})
-			.finally(() => {
+				.finally(() => {
 					this.detail_loading = false;
-			});
+				});
 		},
 		//获取部门
 		getDepartment() {
-			this.$axios('get','/api/department/tree').then(res => {
-				this.dept_tree =this.getTreeData(res.data.data.list);
+			this.$axios('get', '/api/department/tree').then(res => {
+				this.dept_tree = this.getTreeData(res.data.data.list);
 			});
 		},
 		//获取规则
 		get_rule_trees() {
-			this.$axios('get','/api/integral/rule/trees').then(res => {
-				this.rule_trees =this.getRuleTreeData(res.data.data.rule_tree);
+			this.$axios('get', '/api/integral/rule/trees').then(res => {
+				this.rule_trees = this.getRuleTreeData(res.data.data.rule_tree);
 			});
 		},
 		get_integral_list(data) {
 			this.loading = true;
-			this.$axios('get','/api/integral/statistics/integral',data).then(res => {
+			this.$axios('get', '/api/integral/statistics/integral', data)
+				.then(res => {
 					if (res.data.code == 1) {
 						this.list = res.data.data.list;
 						this.total = res.data.data.total;
@@ -588,15 +603,15 @@ export default {
 				cancelButtonText: '取消',
 				type: 'warning'
 			}).then(() => {
-				this.$axios("post",'/api/integral/statistics/integral/destroy',{ event_id: item.event_id }).then(res => {
-						if (res.data.code == 1) {
-							this.$message.success(res.data.msg);
-							this.detail_popup = false;
-							this.get_integral_list(this.formData);
-						} else {
-							this.$message.error(res.data.msg);
-						}
-				})
+				this.$axios('post', '/api/integral/statistics/integral/destroy', { event_id: item.event_id }).then(res => {
+					if (res.data.code == 1) {
+						this.$message.success(res.data.msg);
+						this.detail_popup = false;
+						this.get_integral_list(this.formData);
+					} else {
+						this.$message.error(res.data.msg);
+					}
+				});
 			});
 		},
 		close_integral_event() {
@@ -634,33 +649,33 @@ export default {
 				}
 			}
 			return data;
-		},
+		}
 	}
 };
 </script>
 <style scoped lang="scss">
-.title{
-  text-align: center;
-  font-weight: 700;
-  max-width: 70%;
-  margin: 20px auto;
-  margin-top: 0;
-  font-size: 18px;
+.title {
+	text-align: center;
+	font-weight: 700;
+	max-width: 70%;
+	margin: 20px auto;
+	margin-top: 0;
+	font-size: 18px;
 }
-.key{
-  font-weight: 700;
-  font-size: 16px;
+.key {
+	font-weight: 700;
+	font-size: 16px;
 }
-.value{
-  font-size: 14px;
-  margin: 10px 0;
-  margin-bottom: 20px;
+.value {
+	font-size: 14px;
+	margin: 10px 0;
+	margin-bottom: 20px;
 }
-.imgs{
-  width: 80px;
-  height: 80px;
-  margin-right: 5px;
-  margin-bottom: 5px;
+.imgs {
+	width: 80px;
+	height: 80px;
+	margin-right: 5px;
+	margin-bottom: 5px;
 }
 header.el-drawer__header {
 	font-size: 18px;

+ 77 - 8
src/views/set/framework.vue

@@ -42,18 +42,21 @@
 				</div>
 				<div class="terr-right border-right flex-1">
 					<div class="margin-bottom">
-						<el-button @click="participation()" :loading="enable_loading" size="medium" type="primary" style="margin-right: 10px;">批量启用积分管理</el-button>
+						<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-input placeholder="输入同事姓名" size="medium" style="width: 230px;" v-model="keywords" clearable @input="searchUser()">
 							<!-- <el-button slot="append" icon="el-icon-search" @click="getEmployee()"></el-button> -->
 						</el-input>
 					</div>
 					<el-table :data="userList" @selection-change="handleSelectionChange" v-loading="tableToading">
-						<el-table-column type="selection" width="50"></el-table-column>
+						<el-table-column type="selection" width="50" :selectable="selectable"></el-table-column>
 						<el-table-column label="姓名">
 							<template slot-scope="scope">
 								<div class="flex-box flex-v-ce">
 									<userImage :user_name="scope.row.name" :img_url="scope.row.img_url" width="44px" height="44px"></userImage>
 									<div style="margin-left: 10px;">{{ scope.row.name }}</div>
+									<div style="margin-left: 10px;" v-if="scope.row.is_creator" class="green">(创始人)</div>
+									<div style="margin-left: 10px;" v-if="scope.row.id == userInfo.id" class="green">(我)</div>
 								</div>
 							</template>
 						</el-table-column>
@@ -65,10 +68,19 @@
 							</template>
 						</el-table-column>
 						<el-table-column prop="accedence_time" label="入职时间"></el-table-column>
-						<el-table-column prop="accedence_time" label="是否参与排名" align="center">
+						<el-table-column prop="id" label="员工标识" width="80">
 							<template slot-scope="scope">
-								<template v-if="scope.row.is_creator!=1">
-									<span class="participateRank" :style="scope.row.is_ranking == 1 ? 'color:#409eff' : 'color:#F56C6C'" @click="rankingtakePartIn(scope.row.id, scope.row.is_ranking)">
+								<el-button size="mini" type="primary" @click="copyId(scope.row.id)">复制</el-button>
+							</template>
+						</el-table-column>
+						<el-table-column label="是否参与排名" align="center">
+							<template slot-scope="scope">
+								<template v-if="scope.row.is_creator != 1">
+									<span
+										class="participateRank"
+										:style="scope.row.is_ranking == 1 ? 'color:#409eff' : 'color:#F56C6C'"
+										@click="rankingtakePartIn(scope.row.id, scope.row.is_ranking)"
+									>
 										{{ scope.row.is_ranking == 1 ? '参与' : '不参与' }}
 									</span>
 								</template>
@@ -89,7 +101,10 @@
 											<el-button size="small" @click="visible_close()">我知道了</el-button>
 										</div>
 									</div>
-									<div slot="reference" class="popover" @click="visible = !visible">启用积分管理</div>
+									<div slot="reference" class="popover" @click="visible = !visible">
+										启用积分管理
+										<i class="el-icon-info" style="margin-left: 5px;"></i>
+									</div>
 								</el-popover>
 							</template>
 							<template slot-scope="scope">
@@ -115,6 +130,8 @@
 					</div>
 				</div>
 			</div>
+			<!-- 隐藏文本,用于复制ID -->
+			<input  v-model="copyIds" id="biao" style="opacity:0"/>
 		</div>
 		<el-dialog title="设置是否参与排名" :visible.sync="dialogVisible" top="30vh" width="520px" :before-close="handleClose">
 			<div style="margin-left:20px;">
@@ -163,7 +180,9 @@ export default {
 			radio: '1',
 
 			rangLoad: false,
-			radioLi: [{ id: '1', name: '参与排名', kam: '在排名中展示此人' }, { id: '0', name: '不参与排名', kam: '排名不展示此人(自定义排名除外)' }]
+			radioLi: [{ id: '1', name: '参与排名', kam: '在排名中展示此人' }, { id: '0', name: '不参与排名', kam: '排名不展示此人(自定义排名除外)' }],
+			userInfo: this.$getUserData(),
+			copyIds:'',
 		};
 	},
 	components: {
@@ -188,6 +207,57 @@ export default {
 		});
 	},
 	methods: {
+		// 复制ID
+		copyId(id) {
+			this.$axios('get', '/api/employee/code', { employee_id: id })
+				.then(res => {
+					if (res.data.code == 1) {
+						this.copyIds = res.data.data.encrypt_code;
+						this.$nextTick(()=>{
+							this.copyToClipboard();
+						})
+					}
+				})
+		},
+		copyToClipboard() {
+			var Url2=document.getElementById("biao");
+			console.log(Url2)
+			Url2.select(); // 选择对象
+			document.execCommand("Copy"); // 执行浏览器复制命令
+			this.$message.success('已复制');
+		},
+		forbidden() {
+			if (this.selectIds.length == 0) {
+				this.$message.error({ message: '请选择禁用的人员!' });
+				return;
+			}
+			this.$confirm('确定禁用选择的人员?', '提示', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning'
+			}).then(() => {
+				this.enable_loading = true;
+				this.$axios('post', '/api/employee/disable', { employee_id: this.selectIds })
+					.then(res => {
+						if (res) {
+							this.$message.success('已禁用');
+							this.getEmployee();
+						}
+					})
+					.finally(err => {
+						this.enable_loading = false;
+					});
+			});
+		},
+		selectable(row) {
+			if (row.is_creator) {
+				return false;
+			} else if (this.userInfo.id == row.id) {
+				return false;
+			} else {
+				return true;
+			}
+		},
 		setRanking() {
 			this.rangLoad = true;
 			let data = {
@@ -277,7 +347,6 @@ export default {
 		//获取公司信息
 		getInfo(is) {
 			this.ruleDeprt = true;
-			// api/test?employee_id=155
 			this.$axios('get', '/api/site/info').then(res => {
 				this.info = res.data.data;
 				this.getDepartment(is);

+ 414 - 21
src/views/set/jurisdiction.vue

@@ -30,12 +30,21 @@
 						<div class="user_text fontColorF" v-if="item_info.code == 'employee'">员工为默认角色,每个人都拥有员工角色的功能权限,该角色不可修改</div>
 					</div>
 					<div class="flex-box btns flex-v-ce margin-bottom" v-if="item_info.code != 'employee'">
-						<el-button size="small" v-show="item_info.code == 'creator' && table_list.length > 1 && isStart" @click="del_creator" type="danger">删除</el-button>
-						<el-button size="small" v-show="item_info.code == 'creator' && isStart" @click="dialogFormVisible = true" type="primary">添加</el-button>
-						<el-button size="small" v-show="item_info.code != 'creator' && table_list.length > 0" @click="del_item" type="danger">删除</el-button>
-						<el-button size="small" v-show="item_info.code != 'creator'" @click="add_item" type="primary">添加</el-button>
+						<div class="flex-1">
+							<el-button size="small" v-show="item_info.code == 'creator' && table_list.length > 1 && isStart" @click="del_creator" type="danger">删除</el-button>
+							<el-button size="small" v-show="item_info.code == 'creator' && isStart" @click="dialogFormVisible = true" type="primary">添加</el-button>
+							<el-button size="small" v-show="item_info.code != 'creator' && table_list.length > 0" @click="del_item" type="danger">删除</el-button>
+							<el-button size="small" v-show="item_info.code != 'creator'" @click="add_item" type="primary">添加</el-button>
+							<el-button size="small" v-show="item_info.code == 'dept_manager'" @click="exportEmploye = true">导出/修改管理列表</el-button>
+							<el-button size="small" v-show="item_info.code == 'dept_manager'" @click="synchronization" type="primary">同步管理范围</el-button>
+						</div>
+						<div class="gap-right-8 fr" style="display:inline-block; width:180px;" v-show="item_info.code == 'dept_manager'">
+							<el-input placeholder="搜索员工姓名" ref="search-bar" v-model="keyword" size="small" class="input-with-select" @keyup.enter.native="onFilterChanged">
+								<el-button slot="append" size="small" icon="el-icon-search" @click="onFilterChanged"></el-button>
+							</el-input>
+						</div>
 					</div>
-					<div v-if="item_info.code == 'creator'">
+					<div v-show="item_info.code == 'creator'">
 						<el-table :data="table_list" v-loading="table_loading">
 							<el-table-column width="40" fixed v-if="item_info.code == 'creator' && table_list.length > 1 && isStart">
 								<template slot-scope="scope">
@@ -73,9 +82,9 @@
 							</template>
 						</div> -->
 					</div>
-					<div v-else-if="item_info.code == 'employee'" style="text-align:center;margin-top:200px;">未设置管理角色的人员,都是普通员工</div>
+					<div v-show="item_info.code == 'employee'" style="text-align:center;margin-top:200px;">未设置管理角色的人员,都是普通员工</div>
 
-					<el-table :data="table_list" fit v-else v-loading="table_loading">
+					<el-table :data="table_list" fit v-show="item_info.code == 'admin' || item_info.code == 'point_manager'" v-loading="table_loading">
 						<el-table-column width="40" fixed>
 							<template slot-scope="scope">
 								<el-radio v-model="radioVal" :label="scope.row.id"></el-radio>
@@ -258,11 +267,192 @@
 							</noData>
 						</template>
 					</el-table>
+
+					<!-- 部门管理者专属 -->
+					<el-table :data="table_list" fit v-show="item_info.code == 'dept_manager'" v-loading="table_loading" @selection-change="handleSelectionChange">
+						<el-table-column width="55" fixed type="selection"></el-table-column>
+						<el-table-column prop="name" label="姓名" width="150" fixed>
+							<template slot-scope="scope">
+								<div class="flex-box flex-v-ce">
+									<userImage width="50px" height="50px" :img_url="scope.row.img_url" :user_name="scope.row.name"></userImage>
+									<span style="margin-left: 10px; line-height: 50px;">{{ scope.row.name }}</span>
+								</div>
+							</template>
+						</el-table-column>
+						<el-table-column prop="dept" label="部门"></el-table-column>
+						<el-table-column width="100px">
+							<template slot="header" slot-scope="scope">
+								<span>管理范围</span>
+								<el-tooltip placement="top">
+									<div slot="content">
+										可自由分配每个管理者的管辖范围,设置后对管辖范围内的人员有分配任务,发绩效,奖扣积分、查看积分排名和统计、审核其提交上来的申请等权限
+									</div>
+									<span class="tips">?</span>
+								</el-tooltip>
+							</template>
+							<template slot-scope="scope">
+								<div @click="add_management_scope(scope.row)" v-show="scope.row.manage_scope_count == 0" class="cursor_pointer" style="text-decoration:underline">
+									去设置
+								</div>
+								<div @click="add_management_scope(scope.row)" v-show="scope.row.manage_scope_count != 0" class="cursor_pointer">
+									{{ scope.row.manage_scope_count }}人
+								</div>
+							</template>
+						</el-table-column>
+						<el-table-column>
+							<template slot="header" slot-scope="scope">
+								<span>积分权限</span>
+								<el-tooltip placement="top">
+									<div slot="content">
+										针对不同的管理岗位,可赋予每个管理者不同的奖扣积分权限
+										<br />
+										积分权限不足的须递交给其上级审核
+									</div>
+									<span class="tips">?</span>
+								</el-tooltip>
+							</template>
+							<el-table-column label="A分权限">
+								<template slot-scope="scope">
+									<div @click="open_integral_limit(scope.row)" class="cursor_pointer">
+										<div v-for="(item, index) in scope.row.point_limit" :key="index" v-show="item.name == 'A分'" class="cursor_pointer">
+											<span v-if="item.point != 0">{{ item.point }}</span>
+											<span v-else style="text-decoration:underline">未设置</span>
+										</div>
+									</div>
+								</template>
+							</el-table-column>
+							<el-table-column label="B分权限">
+								<template slot-scope="scope">
+									<div @click="open_integral_limit(scope.row)" class="cursor_pointer">
+										<div v-for="(item, index) in scope.row.point_limit" :key="index" v-show="item.name == 'B分'" class="cursor_pointer">
+											<span v-if="item.point != 0">{{ item.point }}</span>
+											<span v-else style="text-decoration:underline">未设置</span>
+										</div>
+									</div>
+								</template>
+							</el-table-column>
+							<el-table-column label="每月B分奖分上限">
+								<template slot-scope="scope">
+									<div @click="open_integral_limit(scope.row)" v-show="scope.row.entry_limit == 0" class="cursor_pointer" style="text-decoration:underline">
+										未设置
+									</div>
+									<div @click="open_integral_limit(scope.row)" v-show="scope.row.entry_limit > 0" class="cursor_pointer">{{ scope.row.entry_limit }}</div>
+									<div @click="open_integral_limit(scope.row)" v-show="scope.row.entry_limit < 0">此人不限制奖分上限</div>
+								</template>
+							</el-table-column>
+						</el-table-column>
+						<el-table-column>
+							<template slot="header" slot-scope="scope">
+								<span>奖扣目标</span>
+								<el-tooltip placement="top">
+									<div slot="content">
+										积分是否能落地,奖扣分的执行最为关键。赋予一定的人员奖扣分任务,比如经理,主管,积分专员,行政人事等,更利于整个积分制管理的落地和实施。
+									</div>
+									<span class="tips">?</span>
+								</el-tooltip>
+							</template>
+							<el-table-column label="奖分目标">
+								<template slot-scope="scope">
+									<span @click="open_bonus_deducted(scope.row)">
+										<div
+											v-for="(item, index) in scope.row.reward_task_monthly"
+											:key="index"
+											v-show="item.name == 'B分' && item.point != 0"
+											class="cursor_pointer"
+										>
+											{{ item.point }}
+										</div>
+										<div
+											v-for="(item, index) in scope.row.reward_task_monthly"
+											:key="index + ':'"
+											v-show="item.name == 'B分' && item.point == 0"
+											class="cursor_pointer"
+											style="text-decoration:underline"
+										>
+											未设置
+										</div>
+									</span>
+								</template>
+							</el-table-column>
+							<el-table-column label="扣分目标">
+								<template slot-scope="scope">
+									<span @click="open_bonus_deducted(scope.row)">
+										<div
+											v-for="(item, index) in scope.row.deduct_task_monthly"
+											:key="index"
+											v-show="item.name == 'B分' && item.point != 0"
+											class="cursor_pointer"
+										>
+											{{ item.point }}
+										</div>
+										<div
+											v-for="(item, index) in scope.row.deduct_task_monthly"
+											:key="index + '::'"
+											v-show="item.name == 'B分' && item.point == 0"
+											class="cursor_pointer"
+											style="text-decoration:underline"
+										>
+											未设置
+										</div>
+									</span>
+								</template>
+							</el-table-column>
+							<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">
+										未设置
+									</div>
+									<div @click="open_bonus_deducted(scope.row)" v-show="scope.row.exec_count != 0" class="cursor_pointer">{{ scope.row.exec_count }}</div>
+								</template>
+							</el-table-column>
+							<el-table-column label="每少一次扣">
+								<template slot-scope="scope">
+									<div @click="open_bonus_deducted(scope.row)" v-show="scope.row.exec_count_point == 0" class="cursor_pointer" style="text-decoration:underline">
+										未设置
+									</div>
+									<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="奖扣比例">
+								<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">
+										未设置
+									</div>
+									<div @click="open_bonus_deducted(scope.row)" v-show="scope.row.reward_ratio != 0" class="cursor_pointer">{{ scope.row.reward_ratio }}</div>
+								</template>
+							</el-table-column>
+							<el-table-column label="不达标扣">
+								<template slot-scope="scope">
+									<div
+										@click="open_bonus_deducted(scope.row)"
+										v-show="scope.row.reward_ratio_point == 0"
+										class="cursor_pointer"
+										style="text-decoration:underline"
+									>
+										未设置
+									</div>
+									<div @click="open_bonus_deducted(scope.row)" v-show="scope.row.reward_ratio_point != 0" class="cursor_pointer">
+										{{ scope.row.reward_ratio_point }}
+									</div>
+								</template>
+							</el-table-column>
+						</el-table-column>
+						<template slot="empty">
+							<noData :isSolt="true">
+								<template v-slot:default>
+									<div>
+										还没有{{ item_info.name }},
+										<span style="color:#26A2FF;cursor:pointer;" @click="add_item">去添加>></span>
+									</div>
+								</template>
+							</noData>
+						</template>
+					</el-table>
 				</div>
 			</div>
 		</div>
 		<el-dialog title="添加人员" :visible.sync="add_employee_show" :before-close="publicClose" width="700px" top="5vh">
-			<EmployeeSelector v-if="add_employee_show" ref="Employee" :user_no_select="false" :can_select_dept="true" @confirm="add_employee_confirm"></EmployeeSelector>
+			<EmployeeSelector v-if="add_employee_show" ref="Employee" :user_no_select="false" @confirm="add_employee_confirm"></EmployeeSelector>
 			<span slot="footer">
 				<el-button @click="publicClose()">取消</el-button>
 				<!-- 积分负责人调用单次的添加接口 -->
@@ -296,7 +486,6 @@
 				:my_no_select="my_no_select"
 				:user_no_select="false"
 				:selected="management_scope_arr"
-				:can_select_dept="true"
 				@confirm="management_scope_confirm"
 			></EmployeeSelector>
 			<span slot="footer">
@@ -399,7 +588,7 @@
 					<template slot="label">
 						<span>比例不达标扣</span>
 						<el-tooltip placement="top">
-							<div slot="content" style="width: 300px;">完成奖扣比例任务的,按对应分值扣分</div>
+							<div slot="content" style="width: 300px;">完成奖扣比例任务的,按对应分值扣分</div>
 							<span class="tips">?</span>
 						</el-tooltip>
 					</template>
@@ -414,7 +603,7 @@
 		</el-dialog>
 		<!-- 添加老板 -->
 		<el-dialog title="添加创始人" :visible.sync="dialogFormVisible" top="5vh" width="700px">
-			<EmployeeSelector v-if="dialogFormVisible" ref="boss" :multi="false" :user_no_select="false" :can_select_dept="true" @confirm="selectBoss"></EmployeeSelector>
+			<EmployeeSelector v-if="dialogFormVisible" ref="boss" :multi="false" :user_no_select="false" @confirm="selectBoss"></EmployeeSelector>
 			<div style="text-align: center;" class="fontColorT">创始人至少有一位,创始人不能删除自己</div>
 			<div slot="footer" class="dialog-footer">
 				<el-button @click="dialogFormVisible = false" :disabled="isShowBoss">取 消</el-button>
@@ -439,6 +628,54 @@
 				<el-button :disabled="setDataAccessBtn" type="primary" @click="setDataAccess">确定</el-button>
 			</span>
 		</el-dialog>
+		<!-- 导出员工 -->
+		<el-dialog title="导出/修改部门管理者信息" width="600px" :visible.sync="exportEmploye" :close-on-click-modal="false" :before-close="close_export">
+			<div style="float: left;width:49%" class="ps">
+				<div style="margin-left: 20%;">
+					<p>1.导出部门管理者信息</p>
+					<el-button type="primary" plain @click="downloadSheet">导出</el-button>
+				</div>
+			</div>
+			<div style="border-left: 1px solid #D8D8D8;width: 1px;height: 255px;float: left;"></div>
+
+			<div style="float: left;width:49%;" class="ps">
+				<div style="margin-left: 20%;">
+					<p>2.修改部门管理者信息</p>
+					<p>导出部门管理者信息表进行修改</p>
+					<p>上传修改好的部门管理者信息表</p>
+					<el-upload
+						:limit="1"
+						:headers="ATOKEN"
+						ref="upload2"
+						:action="integralUpload"
+						:on-success="handlePictureCardPreview"
+						:before-upload="beforeFilesUpload"
+					>
+						<p><el-button slot="trigger" type="primary" plain>选取文件</el-button></p>
+					</el-upload>
+					<!-- <p>先选择文件后再完成上传</p> -->
+					<!-- <el-button type="primary" @click="uploadFile('prize_buckle')" :loading="update_btn" plain>上传</el-button> -->
+				</div>
+			</div>
+			<div class="align-center" style="margin-bottom:20px; float:left; margin-left:10px;"></div>
+			<div class="align-center" style="margin-bottom:20px; float:left; margin-left:10px;"></div>
+			<div style="clear:both;"></div>
+		</el-dialog>
+		<!-- 同步人员 -->
+		<el-dialog  title="提示" :visible.sync="isShowTb" :before-close="closeTb" width="500px">
+			<p style="font-size: 18px;font-weight: 600;margin-bottom: 10px;">
+				<i class="el-icon-warning yellow" style="font-size: 22px;"></i>
+				确认同步所选择的人员吗?
+			</p>
+			<span slot="footer">
+				<div class="flex-box-ce">
+					<el-checkbox v-model="isMode">替换已有管理范围</el-checkbox>
+					<div class="flex-1"></div>
+					<el-button @click="closeTb()">取 消</el-button>
+					<el-button type="primary" :loading="tb_loading" :disabled="tb_loading" @click="tb">确 定</el-button>
+				</div>
+			</span>
+		</el-dialog>
 	</div>
 </template>
 
@@ -497,6 +734,15 @@ export default {
 			dialogFormVisible: false, //控制添加老板弹窗
 			bossObj: '',
 			isShowBoss: false,
+			keyword: '', //搜索的关键词
+
+			checked: true,
+			integralUpload: process.env.VUE_APP_BASE_API + '/api/employee/prize_import',
+			publicBASE_API: process.env.VUE_APP_BASE_API,
+			// datas: { type: 'prize_buckle' },
+			update_btn: false,
+			ATOKEN: { 'A-TOKEN': this.$getToken() },
+			exportEmploye: false, // 导出员工信息
 
 			// 控制管理范围
 			dataAccessShow: false,
@@ -553,7 +799,13 @@ export default {
 				//       {name: '查看全员数据', id: 2},
 				//     ]
 				//   }
-			]
+			],
+
+			// 同步管理范围
+			del_arr: [],
+			isShowTb: false,
+			tb_loading: false,
+			isMode: false
 		};
 	},
 	components: { EmployeeSelector, noData },
@@ -569,7 +821,132 @@ export default {
 			this.tips_show = true;
 		}
 	},
+	watch: {
+		isShowTb(val) {
+			if (!val) {
+				this.isMode = false;
+			}
+		},
+		isMode(val) {
+			let users = this.del_arr;
+			users.forEach(item => {
+				item.mode = val ? 'cover' : 'merge';
+			});
+			this.del_arr = users;
+		}
+	},
 	methods: {
+		// 同步管理范围
+		tb() {
+			this.tb_loading = true;
+			this.$axios('post', '/api/employee/sync_scope', { info: JSON.stringify(this.del_arr) })
+				.then(res => {
+					if (res.data.code == 1) {
+						this.$message.success('已同步');
+						this.get_table_list();
+					}
+				})
+				.finally(() => {
+					this.isShowTb = false;
+					this.tb_loading = false;
+				});
+		},
+		handleSelectionChange(val) {
+			this.del_arr = [];
+			val.forEach(element => {
+				this.del_arr.push({ employee_id: element.id, mode: 'merge' });
+			});
+		},
+		// 同步管理范围
+		synchronization() {
+			if (this.del_arr.length == 0) {
+				this.$message.error('请勾选人员');
+				return;
+			}
+			this.isShowTb = true;
+		},
+		closeTb() {
+			this.isShowTb = false;
+		},
+		// 关闭导出
+		close_export() {
+			this.exportEmploye = false;
+			this.$refs.upload2.clearFiles();
+		},
+		//  导入 新增
+		uploadFile: function(type) {
+			let params = {};
+			params.file = this.file;
+			this.update_btn = true;
+			this.$axios('post', '/api/employee/prize_import', params)
+				.then(res => {
+					if (res.data.code == 1) {
+						this.close_export();
+						this.$message.success({
+							type: '上传成功',
+							message: res.data.msg
+						});
+						this.get_table_list();
+					}
+				})
+				.finally(() => {
+					setTimeout(() => {
+						this.update_btn = false;
+					}, 3000);
+				});
+		},
+		// 导出员工信息
+		downloadSheet: function() {
+			let role_id;
+			for (let i in this.role_list) {
+				if (this.role_list[i].code == 'dept_manager') {
+					role_id = this.role_list[i].id;
+				}
+			}
+			window.open(this.publicBASE_API + 'api/download/prize_export?role_id=' + role_id + '&employee_id=' + this.$getUserData().id, '_blank');
+		},
+		handlePictureCardPreview(response) {
+		  if (response.code == 1) {
+		  	if (Array.isArray(response.data)&&response.data.length > 0) {
+		  		var htmls = response.data;
+		  		var str = "<div class='red'></div>";
+		  		htmls.forEach(item => {
+		  			str += `<div>${item.errors}</div>`;
+		  		});
+		  		this.close_export();
+		  		this.$notify.error({
+		  			title: '导入错误',
+		  			dangerouslyUseHTMLString: true,
+		  			message: str,
+		  			duration: 0,
+		  			offset: 50,
+		  			customClass: 'notifyBox'
+		  		});
+		  	} else {
+		  		this.file = response.data;
+		  		this.$message.success({ message: response.msg });
+		  		this.close_export();
+				this.get_table_list();
+		  	}
+		  }else{
+			  this.$message.error({ message: response.msg });
+			  this.close_export();
+		  }
+		},
+		beforeFilesUpload(file) {
+			const $ext_list = ['xlsx', 'xls'];
+			let len = file.name.split('.').length - 1;
+			const $ext_name = file.name.split('.')[len];
+			if ($ext_list.indexOf($ext_name) != -1) {
+			} else {
+				this.$message.warning('文件格式上传错误,仅支持上传xlsx,xls)');
+				return false;
+			}
+		},
+		//点击搜索
+		onFilterChanged: function() {
+			this.get_table_list();
+		},
 		// 数据查看权限弹窗
 		dataAccessPopup() {
 			this.dataAccessShow = true;
@@ -907,20 +1284,33 @@ export default {
 		},
 		del_item() {
 			var userData = this.$getUserData();
-			if (!this.radioVal) {
-				this.$message.error('请选择要删除的人员');
-				return false;
-			}
-			if (this.radioVal == userData.id) {
-				this.$message.error('不能删除自己');
-				return false;
+			let employee_id=[];
+			if(this.item_info.code=='dept_manager'){
+				if (this.del_arr.length == 0) {
+					this.$message.error('请选择需要同步的人员');
+					return;
+				}
+				employee_id=this.del_arr.map(item=>{
+					return item.employee_id
+				})
+			}else{
+				if (!this.radioVal) {
+					this.$message.error('请选择要删除的人员');
+					return false;
+				}
+				if (this.radioVal == userData.id) {
+					this.$message.error('不能删除自己');
+					return false;
+				}
+				employee_id.push(this.radioVal);
 			}
+			
 			this.$confirm('确定要删除该人员?', '提示', {
 				confirmButtonText: '确定',
 				cancelButtonText: '取消',
 				type: 'warning'
 			}).then(() => {
-				this.$axios('post', '/api/role/user/del', { role_id: this.item_info.id, employee_id: this.radioVal })
+				this.$axios('post', '/api/role/user/del', { role_id: this.item_info.id, employee_id: JSON.stringify(employee_id)})
 					.then(res => {
 						if (res.data.code == 1) {
 							this.$message.success(res.data.msg);
@@ -959,7 +1349,7 @@ export default {
 			this.table_loading = true;
 			var that = this;
 			this.table_list = [];
-			this.$axios('get', '/api/role/user', { role_id: this.item_info.id })
+			this.$axios('get', '/api/role/user', { role_id: this.item_info.id, keyword: this.keyword })
 				.then(res => {
 					if (res.data.code == 1) {
 						var list = res.data.data.list;
@@ -1018,4 +1408,7 @@ export default {
 .cursor_pointer {
 	cursor: pointer;
 }
+.ps p {
+	margin-bottom: 10px;
+}
 </style>

+ 0 - 2
src/views/set/rule.vue

@@ -352,9 +352,7 @@ export default {
 			}
 		});
 		var that = this;
-		// setTimeout(function(){
 		that.getData();
-		// },1000);
 	},
 	methods: {
 		//导出规则按钮

+ 178 - 12
src/views/set/voluntarilyPoint.vue

@@ -29,7 +29,7 @@
 					</el-col>
 				</div>
 
-				<div class="terr-right border-right flex-1" v-loading="table_loading">
+				<div class="terr-right border-right flex-1">
 					<el-col :span="24" v-show="rule_list.length == 0 || isShowAdd"  style="text-align: center;margin: 0 auto;position: relative;top: 30%;">
 						<p><img src="@/assets/image/nodata_default.png" width="200px" alt="" /></p>
 						<p style="color: #909399;">
@@ -53,8 +53,16 @@
 							</el-col>
 						</el-row>
 						<div class="flex-box btns flex-v-ce">
-							<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>
+							<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="import_rules_show = true">导入自动积分</el-button>
+							</div>
+							<div>
+								<el-select size="small" 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>
 						</div>
 						<el-table  ref="multipleTable"	:data="table_list"	tooltip-effect="dark"  style="width: 100%;margin-top:20px;"  @selection-change="handleSelectionChange">
 							<el-table-column type="selection" width="45"></el-table-column>
@@ -75,6 +83,11 @@
 								</template>
 							</el-table-column>
 							<el-table-column prop="cycle_remark" label="加分周期"></el-table-column>
+							<el-table-column prop="update_time" label="更新时间">
+								<template slot-scope="scope">
+									<div>{{getUpdate(scope.row.update_time)}}</div>
+								</template>
+							</el-table-column>
 							<template slot="empty">
 								<noData></noData>
 							</template>
@@ -158,7 +171,6 @@
 							v-if="add_employee_show"
 							:max="add_employee_max"
 							:user_no_select="false" 
-							:can_select_dept="false"
 							@confirm="add_employee_confirm"
 							ref="Employee"
 						></EmployeeSelector>
@@ -169,6 +181,44 @@
 					</el-form-item>
 				</el-form>
 			</el-dialog>
+		
+			<!-- 导入规则 -->
+			<el-dialog title="导入自动积分" :visible.sync="import_rules_show" width="500px" @before-close="close_import">
+			  <el-row>
+			    <el-col :span="12">
+			      <div style="text-align: center;line-height: 34px;">
+			        <p>1、导出模板,填写好规则</p>
+			        <p><img src="../../assets/image/rules_mould.png" alt="" /></p>
+			        <p>规则表</p>
+			        <p>
+			          <a target="_blank" :href="publicBASE_API + '/api/download/point_auto'"><el-button type="primary" >下载模板</el-button></a>
+			        </p>
+			      </div>
+			    </el-col>
+			    <el-col :span="12">
+			      <div style="text-align: center;line-height: 34px;">
+			        <p>2、上传填好的规则表</p>
+			        <p><img src="../../assets/image/rules_mould1.png" alt="" /></p>
+			        <p>仅支持xls、xlsx格式文件</p>
+			        <el-upload
+			          class="upload-demo"
+			          :headers="ATOKEN"
+			          :data="{ type: 'auto_integral' }"
+			          ref="upload"
+			          :limit="1"
+					  :action="action"
+			          :on-remove="handleRemove"
+			          :on-success="handleSuccess"
+			          :before-upload="beforeFilesUpload"
+			          :file-list="fileList"
+			        >
+			          <el-button slot="trigger" type="primary">选取文件</el-button>
+			        </el-upload>
+			        <!-- <p><el-button type="primary" @click="submitUpload" :loading="save_loading" v-show="import_btn_show" block>导入</el-button></p> -->
+			      </div>
+			    </el-col>
+			  </el-row>
+			</el-dialog>
 		</div>
 	</div>
 </template>
@@ -273,25 +323,46 @@ export default {
 			},
 			task_cycle: [
 				{
-					name: '每天自动加分',
+					name: '每天0点自动加分',
 					value: 1
 				},
 				{
-					name: '每周自动加分',
+					name: '每周自动加分',
 					value: 2
 				},
 				{
-					name: '每月自动加分',
+					name: '每月1号自动加分',
 					value: 3
 				}
-			]
+			],
+			action: process.env.VUE_APP_BASE_API + 'api/integral/auto/import',
+			publicBASE_API: process.env.VUE_APP_BASE_API,
+			save_loading: false,
+			ATOKEN: { 'A-TOKEN': this.$getToken(),'Accept':'application/vnd.test.v2+json' },
+			import_btn_show: false,
+			fileList: [],
+			file: null,
+			import_rules_show: false, //导出弹窗
+			
+			keyword:'',
+			employee_map:[],
+			employee_id:'',
+			selectData:{},
 		};
 	},
 	components: {
 		EmployeeSelector,
 		noData
 	},
-	created() {},
+	created() {
+		this.getEmployee();
+	},
+	watch:{
+		employee_id(val){
+			this.page=1;
+			this.open_right(this.selectData);
+		}
+	},
 	mounted() {
 		if (localStorage.getItem('voluntarilyPoint')) {
 			this.tips_show = false;
@@ -301,6 +372,97 @@ export default {
 		this.get_role_lists(true);
 	},
 	methods: {
+		//获取员工列表
+		getEmployee() {
+			this.$axios('get', '/api/employee/index', { dept_id: 0, keywords: '', page: 1, page_size: 2000 })
+				.then(res => {
+					let list = res.data.data.list;
+					this.employee_map = list;
+				})
+				.finally(err => {});
+		},
+		getUpdate(date){
+			return this.$moment.unix(date).format('YYYY-MM-DD HH:mm:ss')
+		},
+		// 搜索
+		onFilterChanged(){
+			
+		},
+		close_import() {
+		  this.import_rules_show = false;
+		  this.import_btn_show = false;
+		  this.$refs.upload.clearFiles();
+		},
+		submitUpload() {
+		  this.save_loading = true;
+		  let params = {
+		    file: this.file
+		  };
+		  this.$axios('post', '/api/integral/auto/import', params)
+		    .then(res => {
+		      if (res.data.code == 1) {
+		        // this.import_rules_show = false;
+		        this.close_import(); //成功之后关闭并清除选中的文件
+		        this.$message.success({ message: res.data.msg });
+		        this.get_rule_trees();
+		      } else {
+		        this.$message({ type: 'error', message: res.data.msg });
+		      }
+		    })
+		    .catch(() => {})
+		    .finally(() => {
+		      this.save_loading = false;
+		    });
+		},
+		//导入
+		beforeFilesUpload(file) {
+		  const $ext_list = ['xlsx', 'xls'];
+		  let len = file.name.split('.').length - 1;
+		  const $ext_name = file.name.split('.')[len];
+		  if ($ext_list.indexOf($ext_name) != -1) {
+		    this.import_btn_show = true;
+		  } else {
+		    this.$message.warning('文件格式上传错误,仅支持上传xlsx,xls)');
+		    return false;
+		  }
+		},
+		handleSuccess(response) {
+		  if (response.code == 1) {
+		  	if (response.data.length > 0) {
+		  		var htmls = response.data;
+		  		var str = "<div class='red'></div>";
+		  		htmls.forEach(item => {
+		  			str += `<div>${item.errors}</div>`;
+		  		});
+		  		this.close_import();
+		  		this.$notify.error({
+		  			title: '导入错误',
+		  			dangerouslyUseHTMLString: true,
+		  			message: str,
+		  			duration: 0,
+		  			offset: 50,
+		  			customClass: 'notifyBox'
+		  		});
+		  	} else {
+		  		this.file = response.data;
+		  		this.$message.success({ message: response.msg });
+		  		this.close_import();
+				this.page=1;
+				this.open_right(this.selectData);
+		  	}
+		  }else{
+			  this.$message.error({ message: response.msg });
+			  this.close_import();
+		  }
+		},
+		handleRemove(file, fileList) {
+		  if (fileList !== null && fileList.length != 0) {
+		    this.import_btn_show = true;
+		  } else {
+		    this.import_btn_show = false;
+		  }
+		},
+
 		returnIndex(str,str2){
 			return str+"-"+str2;
 		},
@@ -309,7 +471,9 @@ export default {
 			this.open_right();
 		},
 		open_rights(data){
+			console.log(data)
 			this.page=1;
+			this.selectData=data;
 			this.open_right(data);
 		},
 		// 组建
@@ -442,6 +606,7 @@ export default {
 			} else {
 				self.rules_detail_form.item_id = self.rules_detail_form.id;
 				data = self.rules_detail_form;
+				data.sync=2;
 			}
 			self.$refs[form].validate(valid => {
 				if (valid) {
@@ -651,6 +816,7 @@ export default {
 							this.right_rules_detail={};
 							this.table_list=[];
 							this.page=1;
+							this.selectData=rule_list[0].child[0];
 							this.open_right(rule_list[0].child[0],noUpdata);
 							setTimeout(()=>{
 								this.default_active = '0-0'
@@ -730,9 +896,9 @@ export default {
 		font-size: 18px;
 		margin-right: 20px;
 	}
-	.btns button {
-		margin-top: 20px;
-		margin-right: 5px;
+
+	.btns{
+		padding-top: 20px;
 	}
 }
 .terr-left button {

+ 343 - 0
src/views/task/allTask.vue

@@ -0,0 +1,343 @@
+<template>
+	<div>
+		<div class="box">
+			<el-tabs v-model="formData.status" type="card">
+				<el-tab-pane 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.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  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>
+
+			<div>
+				<el-table :data="list" ref="elTable" style="width: 100%" v-loading="loading"  @sort-change="sortChange">
+					<el-table-column label="负责人" prop="employee_id">
+					  <template slot-scope="scope">
+					   <div class="flex-box-ce">
+					      <userImage  :id="scope.row.employee_id" width="50px" height="50px"  :user_name="scope.row.employee_name" ></userImage>
+					      <span style="line-height: 50px; padding-left: 10px;">{{scope.row.employee_name}}</span>
+					    </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>
+						</template>
+					</el-table-column>
+					<el-table-column label="积分" prop="base_point" sortable="custom">
+						<template slot-scope="scope">
+							<span class="red">+{{ 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>
+					<el-table-column label="操作" prop="owner_id">
+						<template slot-scope="scope">
+							<el-link type="primary" :underline="false" @click.stop="openDetail(scope.row)" class="blue">查看任务</el-link>
+							<el-link style="margin-left: 10px;" v-if="formData.status=='reviewed'||formData.status=='complete'" type="primary" :underline="false" @click.stop="openDetailXq(scope.row)">查看审批</el-link>
+						</template>
+					</el-table-column>
+					<template slot="empty">
+						<noData></noData>
+					</template>
+				</el-table>
+			</div>
+
+			<center style="padding: 20px 0;">
+				<el-pagination
+					background
+					@size-change="handleSizeChange"
+					@current-change="handleCurrentChange"
+					:page-sizes="[10, 20, 50, 100]"
+					layout="total, sizes, prev, pager, next"
+					:current-page="formData.page"
+					:page-size="formData.page_size"
+					:total="total"
+				></el-pagination>
+			</center>
+		</div>
+
+		<el-drawer :custom-class="'drawer_details'" :visible.sync="completeShow" wrapperClosable :with-header="false" size="500px">
+			<div class="details_title">完成任务</div>
+			<div class="details_content">
+				<el-form :model="detail_form" ref="detail_form" label-width="80px">
+					<el-form-item label="任务备注" prop="remark" :rules="[{ required: true, message: '请填写任务备注(限20字)', trigger: 'blur' }]">
+						<el-input v-model="detail_form.remark" type="textarea" max="20"></el-input>
+					</el-form-item>
+					<el-form-item>
+						<el-button @click="resetForm('detail_form')">取消</el-button>
+						<el-button type="primary" @click="onSubmit('detail_form')">提交</el-button>
+					</el-form-item>
+				</el-form>
+			</div>
+		</el-drawer>
+
+		<!-- 详情弹窗 -->
+		<taskDetailsPopup :visible.sync="showDetailPopup" v-if="showDetailPopup" :id="detailId" :title="'任务详情'"></taskDetailsPopup>
+		<!-- 审批详情 -->
+		<examinePopup :title="'审核详情'" :id="detail_id" :show.sync="detailShow"></examinePopup>
+	</div>
+</template>
+
+<script>
+import noData from '@/components/noData';
+import examinePopup from '@/components/examinePopup.vue';
+import taskDetailsPopup from '@/views/common/below/taskDetailsPopup'
+
+export default {
+	name: 'my_task',
+	data() {
+		return {
+			active: 'running',
+			tabsOption: [{ label: '待完成', name: 'running' }, { label: '待审批', name: 'complete' }, { label: '已审批', name: 'reviewed' }],
+			list: [],
+			loading: false,
+			total: null,
+			point_type: null,
+			detail_form: {
+				id: '',
+				remark: ''
+			},
+			formData: {
+				status: 'running',
+				pt_id: 0,
+				content:'',
+				employee_id:'',
+				reviewer_id:'',
+				page: 1,
+				page_size: 10,
+				sort_by:'create_time',// ‘create_time’创建时间,’expire_time’过期时间,’base_point’,积分大小
+				order:'desc',//‘desc’ 倒序,’asc’ 正序
+			},
+			completeShow: false,
+			showDetailPopup: false,
+			detailId: null,
+			showRepetitiveTasksPopup: false,
+			showRewardTaskDetailsPopup: false,
+			employee_map:[],
+			
+			// 审批相关
+			detail_id:0,
+			detailShow:false,
+		};
+	},
+	components: { taskDetailsPopup, noData,examinePopup },
+	watch: {
+		'formData.pt_id'(val) {
+			this.formData.page = 1;
+			this.get_list();
+		},
+		'formData.employee_id'(val) {
+			this.formData.page = 1;
+			this.get_list();
+		},
+		'formData.reviewer_id'(val) {
+			this.formData.page = 1;
+			this.get_list();
+		},
+		'formData.status'(val) {
+			this.formData.page = 1;
+			this.formData.pt_id = 0;
+			this.formData.employee_id=''
+			this.formData.reviewer_id=''
+			this.formData.sort_by = 'create_time';
+			this.formData.order = 'desc';
+			this.list = [];
+			this.$refs.elTable.clearSort();
+			this.get_list();
+		}
+	},
+	created() {
+		this.getEmployee()
+	},
+	mounted() {
+		this.get_list();
+		this.point_type = this.getPointType();
+	},
+	methods: {
+		openDetailXq(item) {
+			this.detail_id = item.review_id;
+			this.detailShow = true;
+		},
+		//获取员工列表
+		getEmployee() {
+			this.$axios('get', '/api/employee/index', { dept_id: 0, page: 1, page_size: 3000 }).then(res => {
+				this.employee_map = res.data.data.list;
+			})
+		},
+		sortChange(row){
+			if(row.order=='ascending'){//升序
+				if(row.prop){
+					this.formData.sort_by = row.prop;
+					this.formData.order = 'asc';
+				}
+			}else if(row.order=='descending'){//降序
+				if(row.prop){
+					this.formData.sort_by = row.prop;
+					this.formData.order = 'desc';
+				}
+			}else{//默认排序
+				this.formData.sort_by = 'create_time';
+				this.formData.order = 'desc';
+			}
+			this.formData.page = 1;
+			this.get_list();
+		},
+		// 点击完成
+		completeBtn(data) {
+			this.detail_form.id = data.id;
+			this.completeShow = true;
+		},
+		//提交完成任务
+		onSubmit(formName) {
+			this.$refs[formName].validate(valid => {
+				if (valid) {
+					let self = this;
+					let data = {
+						work_id: self.detail_form.id,
+						progress: '100',
+						remark: self.detail_form.remark,
+						state: '1'
+					};
+					self.$axios('post', '/api/integral/work', data).then(res => {
+						if (res.data.code == 1) {
+							self.$message.success(res.data.msg);
+							self.$refs[formName].resetFields();
+							self.completeShow = false;
+							self.get_list();
+						} else {
+							self.$message.error(res.data.msg);
+						}
+					});
+				}
+			});
+		},
+		//重置表单
+		resetForm(formName) {
+			this.$refs[formName].resetFields();
+			this.completeShow = false;
+		},
+		getPointType() {
+			let point = window.plus ? JSON.parse(puls.storage.getItem('types')) : JSON.parse(localStorage.getItem('types'));
+			// point.splice(0,1)
+			point.unshift({ code: 'AF', id: 0, name: '全部' });
+			return point;
+		},
+		// 页码变更
+		handleCurrentChange(val) {
+			this.formData.page = val;
+			this.get_list();
+		},
+		handleSizeChange(val) {
+			this.formData.page_size = val;
+			this.get_list();
+		},
+		openDetail(row) {
+			this.detailId = parseInt(row.id);
+			this.showDetailPopup = true;
+		},
+		get_list() {
+			let self = this;
+			self.loading = true;
+			let params = JSON.parse(JSON.stringify(this.formData));
+			if (params.pt_id == 0) {
+				delete params.pt_id;
+			}
+			if (params.employee_id == '') {
+				delete params.employee_id;
+			}
+			if (params.reviewer_id == '') {
+				delete params.reviewer_id;
+			}
+			self.$axios('get', '/api/integral/work/list/manage', params)
+				.then(res => {
+					if (res.data.code == 1) {
+						self.list = res.data.data.list;
+						self.total = res.data.data.total;
+					} else {
+						self.$message.error(res.data.data.msg);
+					}
+				})
+				.finally(() => {
+					self.loading = false;
+				});
+		}
+	}
+};
+</script>
+
+<style scoped lang="scss">
+.box {
+	min-height: calc(100vh - 184px);
+	min-width: 800px;
+	background-color: #fff;
+	padding: 20px;
+}
+::v-deep .el-table tr:hover {
+	cursor: pointer;
+}
+.details_content {
+	padding: 20px;
+	height: calc(100vh - 60px);
+	overflow: auto;
+	.row_title {
+		position: relative;
+		margin: 0 0 20px 0;
+		padding-top: 12px;
+		font-size: 16px;
+		color: #303133;
+		line-height: 22px;
+	}
+	.row_title:before {
+		position: absolute;
+		top: 0;
+		content: ' ';
+		width: 100%;
+		border-top: 1px #f8f8f8 solid;
+	}
+	.el-row {
+		margin-bottom: 10px;
+		font-size: 14px;
+		.el-col-4 {
+			color: #606266;
+		}
+	}
+}
+.details_title {
+	font-size: 18px;
+	padding: 20px;
+	border-bottom: 1px #efefef solid;
+}
+</style>

+ 259 - 0
src/views/task/myExamine.vue

@@ -0,0 +1,259 @@
+<template>
+	<div>
+		<div class="box">
+			<el-tabs v-model="formData.status" type="card">
+				<el-tab-pane 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.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 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>
+
+			<div>
+				<el-table :data="list" style="width: 100%" v-loading="loading">
+					<el-table-column label="负责人" prop="employee_id">
+					  <template slot-scope="scope">
+					   <div class="flex-box-ce">
+					      <userImage  width="50px" :id="scope.row.employee_id" height="50px"  :user_name="scope.row.employee_name" ></userImage>
+					      <span style="line-height: 50px; padding-left: 10px;">{{scope.row.employee_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>
+						</template>
+					</el-table-column>
+					<el-table-column label="积分">
+						<template slot-scope="scope">
+							<span class="red">+{{ scope.row.point_config.base_point }} {{ scope.row.pt_name }}</span>
+						</template>
+					</el-table-column>
+					<el-table-column label="截止时间" prop="expire_time"></el-table-column>
+<!-- 					<el-table-column label="状态" prop="review_status" v-if="formData.status=='complete'">
+						<template slot-scope="scope">
+							  <div class="yellow" v-if="scope.row.review_status == 0">待处理</div>
+							  <div class="green" v-if="scope.row.review_status ==1">已通过</div>
+							  <div class="red" v-if="scope.row.review_status == 2">已驳回</div>
+						</template>
+					</el-table-column> -->
+					<el-table-column label="操作" prop="owner_id">
+						<template slot-scope="scope">
+							<el-link type="primary" :underline="false" @click.stop="openDetail(scope.row)" class="blue">查看任务</el-link>
+							<el-link style="margin-left: 10px;" v-if="formData.status=='complete'" type="primary" :underline="false" @click.stop="openDetailXq(scope.row)">去审批</el-link>
+							<el-link style="margin-left: 10px;" v-if="formData.status=='reviewed'" type="primary" :underline="false" @click.stop="openDetailXq(scope.row)">查看审批</el-link>
+						</template>
+					</el-table-column>
+					<template slot="empty">
+						<noData></noData>
+					</template>
+				</el-table>
+			</div>
+
+			<center style="padding: 20px 0;">
+				<el-pagination
+					background
+					@size-change="handleSizeChange"
+					@current-change="handleCurrentChange"
+					:page-sizes="[10, 20, 50, 100]"
+					layout="total, sizes, prev, pager, next"
+					:current-page="formData.page"
+					:page-size="formData.page_size"
+					:total="total"
+				></el-pagination>
+			</center>
+		</div>
+
+		<!-- 详情弹窗 -->
+		<taskDetailsPopup :visible.sync="showDetailPopup" v-if="showDetailPopup" :id="detailId" :title="'任务详情'"></taskDetailsPopup>
+		
+		<!-- 审批详情 -->
+		<examinePopup :title="'审核详情'" :id="detail_id" :show.sync="detailShow"></examinePopup>
+	</div>
+</template>
+
+<script>
+import noData from '@/components/noData';
+import examinePopup from '@/components/examinePopup.vue';
+import taskDetailsPopup from '@/views/common/below/taskDetailsPopup'
+
+export default {
+	name: 'my_task',
+	data() {
+		return {
+			active: 'running',
+			tabsOption: [{ label: '待完成', name: 'running' }, { label: '待审批', name: 'complete' }, { label: '已审批', name: 'reviewed' }],
+			list: [],
+			loading: false,
+			total: null,
+			sort: [ { id: 2, code: 'publish', name: '按发布时间' },{ id: 1, code: 'expire', name: '按截止时间' }],
+			point_type: null,
+			detail_form: {
+				id: '',
+				remark: ''
+			},
+			formData: {
+				employee_id:'',
+				status: 'running',
+				pt_id: 0,
+				sort: 'publish',
+				source_type: '0',
+				page: 1,
+				page_size: 10
+			},
+			completeShow: false,
+			showDetailPopup: false,
+			detailId: null,
+			showRepetitiveTasksPopup: false,
+			showRewardTaskDetailsPopup: false,
+			employee_map:[],
+			
+			// 审批相关
+			detail_id:0,
+			detailShow:false,
+		};
+	},
+	components: { taskDetailsPopup, noData,examinePopup },
+	watch: {
+		'formData.pt_id'(val) {
+			this.formData.page = 1;
+			this.getSpList();
+		},
+		'formData.sort'(val) {
+			this.formData.page = 1;
+			this.getSpList();
+		},
+		'formData.employee_id'(val) {
+			this.formData.page = 1;
+			this.getSpList();
+		},
+		'formData.status'(val) {
+			this.formData.page = 1;
+			this.formData.pt_id = 0;
+			this.formData.employee_id=''
+			this.formData.sort = 'publish';
+			this.list = [];
+			this.getSpList();
+		}
+	},
+	created() {
+		this.getEmployee()
+	},
+	mounted() {
+		this.getSpList();
+		this.point_type = this.getPointType();
+	},
+	methods: {
+		//获取员工列表
+		getEmployee() {
+			this.$axios('get', '/api/employee/index', { dept_id: 0, page: 1, page_size: 3000 }).then(res => {
+				this.employee_map = res.data.data.list;
+			})
+		},
+		openDetailXq(item) {
+			this.detail_id = item.review_id;
+			this.detailShow = true;
+		},
+		getPointType() {
+			let point = window.plus ? JSON.parse(puls.storage.getItem('types')) : JSON.parse(localStorage.getItem('types'));
+			// point.splice(0,1)
+			point.unshift({ code: 'AF', id: 0, name: '全部' });
+			return point;
+		},
+		// 页码变更
+		handleCurrentChange(val) {
+			this.formData.page = val;
+			this.getSpList();
+		},
+		handleSizeChange(val) {
+			this.formData.page_size = val;
+			this.getSpList();
+		},
+		openDetail(row) {
+			this.detailId = parseInt(row.id);
+			this.showDetailPopup = true;
+		},
+		getSpList() {
+			let self = this;
+			self.loading = true;
+			let params = JSON.parse(JSON.stringify(this.formData));
+			if (params.pt_id == 0) {
+				delete params.pt_id;
+			}
+			if (params.employee_id == '') {
+				delete params.employee_id;
+			}
+			self.$axios('get', '/api/integral/work/list/reviewer', params)
+				.then(res => {
+					if (res.data.code == 1) {
+						self.list = res.data.data.list;
+						self.total = res.data.data.total;
+					} else {
+						self.$message.error(res.data.data.msg);
+					}
+				})
+				.finally(() => {
+					self.loading = false;
+				});
+		}
+	}
+};
+</script>
+
+<style scoped lang="scss">
+.box {
+	min-height: calc(100vh - 184px);
+	min-width: 800px;
+	background-color: #fff;
+	padding: 20px;
+}
+::v-deep .el-table tr:hover {
+	cursor: pointer;
+}
+.details_content {
+	padding: 20px;
+	height: calc(100vh - 60px);
+	overflow: auto;
+	.row_title {
+		position: relative;
+		margin: 0 0 20px 0;
+		padding-top: 12px;
+		font-size: 16px;
+		color: #303133;
+		line-height: 22px;
+	}
+	.row_title:before {
+		position: absolute;
+		top: 0;
+		content: ' ';
+		width: 100%;
+		border-top: 1px #f8f8f8 solid;
+	}
+	.el-row {
+		margin-bottom: 10px;
+		font-size: 14px;
+		.el-col-4 {
+			color: #606266;
+		}
+	}
+}
+.details_title {
+	font-size: 18px;
+	padding: 20px;
+	border-bottom: 1px #efefef solid;
+}
+</style>

+ 3 - 3
src/views/task/my_issue.vue

@@ -43,7 +43,7 @@
           <el-table-column label="执行人" prop="task_name" width='250px'>
             <template slot-scope="scope">
               <div style="display:flex">
-                <userImage  width="50px" height="50px" :user_name="scope.row.employee_name"></userImage>
+                <userImage :img_url="scope.row.employee_img_url" :id="scope.row.employee_id" :user_name="scope.row.employee_name" width="50px" height="50px"></userImage>
                 <span style="line-height: 50px; padding-left: 10px;">{{scope.row.employee_name}}的{{scope.row.pt_name}}任务</span>
               </div>
             </template>
@@ -273,8 +273,8 @@
           {id: 5, name: '已撤销', code: 'revocation'},
           {id: 6, name: '已退回', code: 'refuse'},
         ],
-        sort: [{id:1,name:'按截止时间',code:'expire'},{id:2,name:'按发布时间',code:'publish'}],
-        order_by: [{id:1,name:'按截止时间',code:'expire_time'},{id:2,name:'按发布时间',code:'create_time'}],
+        sort: [{id:2,name:'按发布时间',code:'publish'},{id:1,name:'按截止时间',code:'expire'}],
+        order_by: [{id:2,name:'按发布时间',code:'create_time'},{id:1,name:'按截止时间',code:'expire_time'}],
         tabsOption: [
           { label: '我指派的', name: 'assign' },
           { label: '我悬赏的', name: 'reward' },

+ 6 - 4
src/views/task/my_task.vue

@@ -87,7 +87,7 @@
 			<div class="details_content">
 				<el-form :model="detail_form" ref="detail_form" label-width="80px">
 					<el-form-item label="任务备注" prop="remark" :rules="[{ required: true, message: '请填写任务备注(限20字)', trigger: 'blur' }]">
-						<el-input v-model="detail_form.remark" type="textarea" max="20"></el-input>
+						<el-input v-model="detail_form.remark" type="textarea" :rows="4"  maxlength="20" show-word-limit></el-input>
 					</el-form-item>
 					<el-form-item>
 						<el-button @click="resetForm('detail_form')">取消</el-button>
@@ -104,7 +104,7 @@
 
 <script>
 import noData from '@/components/noData';
-import taskDetailsPopup from '@/views/common/taskDetailsPopup';
+import taskDetailsPopup from '@/views/common/below/taskDetailsPopup'
 
 export default {
 	name: 'my_task',
@@ -115,7 +115,7 @@ export default {
 			list: [],
 			loading: false,
 			total: null,
-			sort: [{ id: 1, code: 'expire', name: '按截止时间' }, { id: 2, code: 'publish', name: '按发布时间' }],
+			sort: [ { id: 2, code: 'publish', name: '按发布时间' },{ id: 1, code: 'expire', name: '按截止时间' }],
 			point_type: null,
 			detail_form: {
 				id: '',
@@ -147,12 +147,14 @@ export default {
 		'formData.status'(val) {
 			this.formData.page = 1;
 			this.formData.pt_id = 0;
-			this.formData.sort = 'expire';
+			this.formData.sort = 'publish';
 			this.list = [];
 			this.get_list();
 		}
 	},
 	mounted() {
+		
+		
 		this.get_list();
 		this.point_type = this.getPointType();
 	},

+ 199 - 232
src/views/workbench/approval_list.vue

@@ -1,250 +1,217 @@
 <template>
-  <div>
-    <div class="all padding-20">
-      <el-tabs v-model="formData.type" type="card">
-        <el-tab-pane
-          v-for="(item, index) in tabsOption"
-          :key="index"
-          :label="item.label"
-          :name="item.name"
-        ></el-tab-pane>
-      </el-tabs>
+	<div>
+		<div class="all padding-20">
+			<el-tabs v-model="formData.type" type="card">
+				<el-tab-pane 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="50px"
-      >
-        <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-form>
+			<el-form ref="formData" :inline="true" :model="formData" label-width="50px">
+				<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-form>
 
-      <div v-if="formData.type == 'waiting'">
-        <el-table
-          :data="list"
-          style="cursor: pointer;"
-          v-loading="loading"
-          class="listTable"
-          @row-click="openDetail"
-        >
-          <el-table-column label="审批标题" prop="task_name">
-            <template slot-scope="scope">
-			  <div class="flex-box flex-v-ce">
-				  <userImage  width="50px" height="50px"  :user_name="scope.row.employee_name"></userImage>
-				  <div style="margin-left: 5px;">
-					  <span class="tableTitle" v-show="scope.row.source_type == 1" >{{ scope.row.employee_name }}的积分任务</span>
-					  <span class="tableTitle" v-show="scope.row.source_type == 2">{{ scope.row.employee_name }}的积分申请</span>
-					  <span class="tableTitle" v-show="scope.row.source_type == 3">{{ scope.row.employee_name }}的积分录入</span>
-					  <span class="tableTitle" v-show="scope.row.source_type == 4">{{ scope.row.employee_name }}的绩效工作</span>
-				  </div>
-			  </div>
-            </template>
-          </el-table-column>
-          <el-table-column label="审批内容" prop="remark.rule">
-            <template slot-scope="scope">
-                <span class="font-flex-word" style="max-width: 200px;">{{  scope.row.remark.customize  ||  scope.row.remark.rule}}</span>
-            </template>
-          </el-table-column>
-          <el-table-column
-            label="时间"
-            prop="event_time"
-            width="150"
-          ></el-table-column>
-          <el-table-column label="操作" prop="owner_id" width="80">
-            <template slot-scope="scope">
-              <el-button type="text">审批</el-button>
-            </template>
-          </el-table-column>
-          <template slot="empty">
-            <div class="nopoint_box">
-              <div class="noimg noperson"></div>
-              <span class="title">没有对应的数据</span>
-            </div>
-          </template>
-        </el-table>
-      </div>
+			<div v-if="formData.type == 'waiting'">
+				<el-table :data="list" style="cursor: pointer;" v-loading="loading" class="listTable" @row-click="openDetail">
+					<el-table-column label="审批标题" prop="task_name">
+						<template slot-scope="scope">
+							<div class="flex-box flex-v-ce">
+								<userImage width="50px" height="50px"  :id="scope.row.employee_id" :user_name="scope.row.employee_name"></userImage>
+								<div style="margin-left: 5px;">
+									<span class="tableTitle" v-show="scope.row.source_type == 1">{{ scope.row.employee_name }}的积分任务</span>
+									<span class="tableTitle" v-show="scope.row.source_type == 2">{{ scope.row.employee_name }}的积分申请</span>
+									<span class="tableTitle" v-show="scope.row.source_type == 3">{{ scope.row.employee_name }}的积分录入</span>
+									<span class="tableTitle" v-show="scope.row.source_type == 4">{{ scope.row.employee_name }}的绩效工作</span>
+								</div>
+							</div>
+						</template>
+					</el-table-column>
+					<el-table-column label="审批内容" prop="remark.rule">
+						<template slot-scope="scope">
+							<span class="font-flex-word" style="max-width: 200px;">{{ scope.row.remark.customize || scope.row.remark.rule }}</span>
+						</template>
+					</el-table-column>
+					<el-table-column label="时间" prop="event_time" width="150"></el-table-column>
+					<el-table-column label="操作" prop="owner_id" width="80">
+						<template slot-scope="scope">
+							<el-button type="text">审批</el-button>
+						</template>
+					</el-table-column>
+					<template slot="empty">
+						<div class="nopoint_box">
+							<div class="noimg noperson"></div>
+							<span class="title">没有对应的数据</span>
+						</div>
+					</template>
+				</el-table>
+			</div>
 
-      <div v-if="formData.type == 'reviewed'">
-        <el-table  :data="list"  style="cursor: pointer;"  v-loading="loading"  class="listTable"  @row-click="openDetail">
-          <el-table-column label="审批标题" prop="task_name">
-            <template slot-scope="scope">
-				<div class="flex-box flex-v-ce">
-				  <userImage  width="50px" height="50px" :user_name="scope.row.employee_name"></userImage>
-				  <div style="margin-left: 5px;">
-					  <span class="tableTitle" v-show="scope.row.source_type == 1" >{{ scope.row.employee_name }}的积分任务</span>
-					  <span class="tableTitle" v-show="scope.row.source_type == 2">{{ scope.row.employee_name }}的积分申请</span>
-					  <span class="tableTitle" v-show="scope.row.source_type == 3">{{ scope.row.employee_name }}的积分录入</span>
-					  <span class="tableTitle" v-show="scope.row.source_type == 4">{{ scope.row.employee_name }}的绩效工作</span>
-				  </div>
-				 </div>
-            </template>
-          </el-table-column>
-          <el-table-column label="审批内容" prop="remark.rule">
-            <template slot-scope="scope">
-					<span class="font-flex-word" style="max-width: 200px;">{{  scope.row.remark.customize  ||  scope.row.remark.rule}}</span>
-            </template>
-          </el-table-column>
-          <el-table-column
-            label="时间"
-            prop="event_time"
-            width="150"
-          ></el-table-column>
-          <el-table-column label="积分" prop="review_point" width="120">
-            <template slot-scope="scope">
-              <span v-show="scope.row.review_point < 0" class="green">{{ scope.row.review_point}}   <span>{{$getTypsName(scope.row.pt_id)}}</span></span>
-              <span class="red" v-show="scope.row.review_point >= 0">+{{ scope.row.review_point }}  <span>{{$getTypsName(scope.row.pt_id)}}</span></span>
-            </template>
-          </el-table-column>
-          <el-table-column label="状态" prop="status" width="80">
-            <template slot-scope="scope">
-              <span v-show="scope.row.status == 1" class="green"
-                >审批通过</span
-              >
-              <span v-show="scope.row.status == 2" class="red"
-                >审批驳回</span
-              >
-            </template>
-          </el-table-column>
-          <template slot="empty">
-            <div class="nopoint_box">
-              <div class="noimg noperson"></div>
-              <span class="title">没有对应的数据</span>
-            </div>
-          </template>
-        </el-table>
-      </div>
+			<div v-if="formData.type == 'reviewed'">
+				<el-table :data="list" style="cursor: pointer;" v-loading="loading" class="listTable" @row-click="openDetail">
+					<el-table-column label="审批标题" prop="task_name">
+						<template slot-scope="scope">
+							<div class="flex-box flex-v-ce">
+								<userImage width="50px" height="50px" :id="scope.row.employee_id" :user_name="scope.row.employee_name"></userImage>
+								<div style="margin-left: 5px;">
+									<span class="tableTitle" v-show="scope.row.source_type == 1">{{ scope.row.employee_name }}的积分任务</span>
+									<span class="tableTitle" v-show="scope.row.source_type == 2">{{ scope.row.employee_name }}的积分申请</span>
+									<span class="tableTitle" v-show="scope.row.source_type == 3">{{ scope.row.employee_name }}的积分录入</span>
+									<span class="tableTitle" v-show="scope.row.source_type == 4">{{ scope.row.employee_name }}的绩效工作</span>
+								</div>
+							</div>
+						</template>
+					</el-table-column>
+					<el-table-column label="审批内容" prop="remark.rule">
+						<template slot-scope="scope">
+							<span class="font-flex-word" style="max-width: 200px;">{{ scope.row.remark.customize || scope.row.remark.rule }}</span>
+						</template>
+					</el-table-column>
+					<el-table-column label="时间" prop="event_time" width="150"></el-table-column>
+					<el-table-column label="积分" prop="review_point" width="120">
+						<template slot-scope="scope">
+							<span v-show="scope.row.review_point < 0" class="green">
+								{{ scope.row.review_point }}
+								<span>{{ $getTypsName(scope.row.pt_id) }}</span>
+							</span>
+							<span class="red" v-show="scope.row.review_point >= 0">
+								+{{ scope.row.review_point }}
+								<span>{{ $getTypsName(scope.row.pt_id) }}</span>
+							</span>
+						</template>
+					</el-table-column>
+					<el-table-column label="状态" prop="status" width="80">
+						<template slot-scope="scope">
+							<span v-show="scope.row.status == 1" class="green">审批通过</span>
+							<span v-show="scope.row.status == 2" class="red">审批驳回</span>
+						</template>
+					</el-table-column>
+					<template slot="empty">
+						<div class="nopoint_box">
+							<div class="noimg noperson"></div>
+							<span class="title">没有对应的数据</span>
+						</div>
+					</template>
+				</el-table>
+			</div>
 
-      <center style="padding: 20px 0;">
-        <el-pagination
-          background
-          @size-change="handleSizeChange"
-          @current-change="handleCurrentChange"
-          :current-page="formData.page"
-          :page-sizes="[10, 20, 30, 40, 50, 100]"
-          layout="total, sizes, prev, pager, next"
-          :page-size="formData.page_size"
-          :total="total"
-        >
-        </el-pagination>
-      </center>
-    </div>
-    <examinePopup
-      :title="'审核详情'"
-      :id="detail_id"
-      :show.sync="detailShow"
-    ></examinePopup>
-  </div>
+			<center style="padding: 20px 0;">
+				<el-pagination
+					background
+					@size-change="handleSizeChange"
+					@current-change="handleCurrentChange"
+					:current-page="formData.page"
+					:page-sizes="[10, 20, 30, 40, 50, 100]"
+					layout="total, sizes, prev, pager, next"
+					:page-size="formData.page_size"
+					:total="total"
+				></el-pagination>
+			</center>
+		</div>
+		<examinePopup :title="'审核详情'" :id="detail_id" :show.sync="detailShow"></examinePopup>
+	</div>
 </template>
 
 <script>
-import examinePopup from "@/components/examinePopup.vue";
+import examinePopup from '@/components/examinePopup.vue';
 
 export default {
-  data() {
-    return {
-      formData: {
-        type: "waiting",
-        source_type: "0",
-        pt_id: 0,
-        page_size: 10,
-        page: 1
-      },
-      total: null,
-      list: null,
-      loading: false,
-      point_types: null,
-      tabsOption: [
-        { label: "待我审批", name: "waiting" },
-        { label: "我已审批", name: "reviewed" }
-      ],
-      detailShow: false,
-      detail_id: null
-    };
-  },
-  watch: {
-    "formData.type"() {
-      this.formData.page = 1;
-      this.list = [];
-      this.getSpList();
-    },
-    "formData.pt_id"() {
-      this.list = [];
-      this.formData.page = 1
-      this.getSpList();
-    },
-  },
-  components: { examinePopup },
-  mounted() {
-    this.getSpList();
-    this.point_types = this.getPointTypes();
-  },
-  methods: {
-    openDetail(item) {
-      this.detail_id = item.id;
-      this.detailShow = true;
-    },
-	getTypes(){
-		var arr=this.$getTyps();
-		return arr.filter(function(item){
-			return item.code!='JX'
-		})
+	data() {
+		return {
+			formData: {
+				type: 'waiting',
+				source_type: '0',
+				pt_id: 0,
+				page_size: 10,
+				page: 1
+			},
+			total: null,
+			list: null,
+			loading: false,
+			point_types: null,
+			tabsOption: [{ label: '待我审批', name: 'waiting' }, { label: '我已审批', name: 'reviewed' }],
+			detailShow: false,
+			detail_id: null
+		};
 	},
-    // 获取积分类型
-    getPointTypes() {
-      let point = this.getTypes();
-      point.unshift({ code: "all", id: 0, name: "全部" });
-      return point;
-    },
-    // 页码变更
-    handleCurrentChange(val) {
-      this.formData.page = val;
-      this.getSpList();
-    },
-    handleSizeChange(val) {
-      this.formData.page_size = val;
-      this.getSpList();
-    },
-    getSpList() {
-      let self = this;
-      self.loading = true;
-      let params = JSON.parse(JSON.stringify(this.formData));
-      self.$axios('get',"/api/integral/review/list",params).then(res => {
-          if (res.data.code == 1) {
-            self.list = res.data.data.list;
-            self.total = res.data.data.total;
-          }
-        }).finally(e => {
-          self.loading = false;
-        });
-    }
-  }
+	watch: {
+		'formData.type'() {
+			this.formData.page = 1;
+			this.list = [];
+			this.getSpList();
+		},
+		'formData.pt_id'() {
+			this.list = [];
+			this.formData.page = 1;
+			this.getSpList();
+		}
+	},
+	components: { examinePopup },
+	mounted() {
+		this.getSpList();
+		this.point_types = this.getPointTypes();
+	},
+	methods: {
+		openDetail(item) {
+			this.detail_id = item.id;
+			this.detailShow = true;
+		},
+		getTypes() {
+			var arr = this.$getTyps();
+			return arr.filter(function(item) {
+				return item.code != 'JX';
+			});
+		},
+		// 获取积分类型
+		getPointTypes() {
+			let point = this.getTypes();
+			point.unshift({ code: 'all', id: 0, name: '全部' });
+			return point;
+		},
+		// 页码变更
+		handleCurrentChange(val) {
+			this.formData.page = val;
+			this.getSpList();
+		},
+		handleSizeChange(val) {
+			this.formData.page_size = val;
+			this.getSpList();
+		},
+		getSpList() {
+			let self = this;
+			self.loading = true;
+			let params = JSON.parse(JSON.stringify(this.formData));
+			self.$axios('get', '/api/integral/review/list', params)
+				.then(res => {
+					if (res.data.code == 1) {
+						self.list = res.data.data.list;
+						self.total = res.data.data.total;
+					}
+				})
+				.finally(e => {
+					self.loading = false;
+				});
+		}
+	}
 };
 </script>
 
-<style  lang="scss">
+<style lang="scss">
 .box {
-  min-height: calc(100vh - 140px);
-  width: 100%;
-  background-color: #fff;
-  padding: 20px;
-  & .listTable {
-    & .tableTitle {
-      line-height: 50px;
-      padding-left: 10px;
-    }
-  }
+	min-height: calc(100vh - 140px);
+	width: 100%;
+	background-color: #fff;
+	padding: 20px;
+	& .listTable {
+		& .tableTitle {
+			line-height: 50px;
+			padding-left: 10px;
+		}
+	}
 }
-.popperSPBOX{
-  max-width: calc(100vh - 400px);
-  background-color: #fff;
+.popperSPBOX {
+	max-width: calc(100vh - 400px);
+	background-color: #fff;
 }
 </style>