Browse Source

Merge branch 'dev'

347617796@qq.com 2 years ago
parent
commit
9a25a79371
40 changed files with 1105 additions and 526 deletions
  1. 2 3
      src/api/auth.js
  2. 2 2
      src/api/axios.js
  3. 1 8
      src/api/websocket.js
  4. BIN
      src/assets/image/pc.jpg
  5. BIN
      src/assets/image/pc.png
  6. 5 8
      src/components/EmployeeSelector.vue
  7. 1 1
      src/components/Steps.vue
  8. 2 2
      src/components/UserImage.vue
  9. 7 7
      src/components/applicationIntegrationPopup.vue
  10. 4 4
      src/components/bonusPointsPopup.vue
  11. 16 11
      src/components/examinePopup.vue
  12. 1 2
      src/components/season.vue
  13. 3 3
      src/hint.vue
  14. 33 5
      src/home.vue
  15. 2 1
      src/index.vue
  16. 1 2
      src/init.vue
  17. 0 1
      src/router/index.js
  18. 5 2
      src/screen.vue
  19. 3 2
      src/views/abPoint/award_punish.vue
  20. 4 1
      src/views/common/repeatTaskDetailsPopup.vue
  21. 1 0
      src/views/common/rewardTask.vue
  22. 1 2
      src/views/common/rewardTaskAmend.vue
  23. 297 166
      src/views/common/taskDetailsPopup.vue
  24. 6 1
      src/views/common/temporaryTask.vue
  25. 1 0
      src/views/common/temporaryTaskAmend.vue
  26. 3 1
      src/views/ranking/JfDetail.vue
  27. 1 1
      src/views/ranking/balanceA.vue
  28. 106 154
      src/views/ranking/dept_rank.vue
  29. 4 2
      src/views/ranking/integral_event.vue
  30. 3 1
      src/views/ranking/integral_event_two.vue
  31. 496 54
      src/views/set/framework.vue
  32. 9 9
      src/views/set/jurisdiction.vue
  33. 31 31
      src/views/set/rule.vue
  34. 1 1
      src/views/set/screenSet.vue
  35. 1 1
      src/views/set/systemLayout.vue
  36. 1 1
      src/views/task/allTask.vue
  37. 11 18
      src/views/task/myExamine.vue
  38. 36 16
      src/views/task/my_issue.vue
  39. 1 1
      src/views/welfare/flManagement.vue
  40. 3 1
      src/views/workbench/review.vue

+ 2 - 3
src/api/auth.js

@@ -37,8 +37,7 @@ function deepCopy(obj) { //深度拷贝对象
 	else return obj; //如果是基本数据类型就直接返回
 	for (var i in obj) {
 		var copy = obj[i];
-		if (getClass(copy) == "Object" || getClass(copy) == "Array") result[i] = deepCopy(
-		copy); //递归方法 ,如果对象继续变量obj[i],下一级还是对象,就obj[i][i]
+		if (getClass(copy) == "Object" || getClass(copy) == "Array") result[i] = deepCopy(copy); //递归方法 ,如果对象继续变量obj[i],下一级还是对象,就obj[i][i]
 		// else if (getClass(copy) == "Array") result[i] = deepCopy(copy); //递归方法 ,如果对象继续数组obj[i],下一级还是数组,就obj[i][i]
 		else result[i] = copy; //基本数据类型则赋值给属性
 	}
@@ -72,7 +71,7 @@ export function getTyps(id) {
 export function getTypsName(id) {
 	return getTyps(id).name
 }
-// 判断是否创始人
+// 判断是否系统管理员
 export function getIsCreator(key) {
 	let is = false;
 	getUserData().employee_detail.role_list.forEach(item => {

+ 2 - 2
src/api/axios.js

@@ -7,8 +7,8 @@ import {
 } from './auth.js'
 import qs from 'qs'
 const service = axios.create({
-	// baseURL: process.env.VUE_APP_BASE_API, 
-	baseURL:'https://app55493.eapps.dingtalkcloud.com/',
+	baseURL: process.env.VUE_APP_BASE_API, 
+	// baseURL:'https://app55493.eapps.dingtalkcloud.com/',
 	timeout: 20000,
 	headers: {
 		'Content-Type': 'application/x-www-form-urlencoded',

+ 1 - 8
src/api/websocket.js

@@ -1,6 +1,5 @@
 
 let wsurl='wss://' + process.env.VUE_APP_WEBSCOKET + '/ws/';
-// let wsurl='ws://rodyking.vicp.io:12358';
 let ws = null
 let weboscket_callback = null
 import {getToken,generateUUID } from '@/api/auth';
@@ -73,10 +72,8 @@ let sendData = (data, callback) => {
 	}
 	if(ws){//  判断 websocket 的状态
 		if (ws.readyState === ws.OPEN) {// 已经打开,可以直接发送
-			// console.log("1")
 			ws.send(data)
 		} else if (ws.readyState === ws.CONNECTING) {// 正在开启状态中,则 1 秒后重新发送
-			// console.log("2")
 			setTimeout(() => {
 				ws.send(data)
 			}, 2000)
@@ -84,11 +81,7 @@ let sendData = (data, callback) => {
 	}else {
 		// 未打开,则开启后重新调用
 		initWebSocket()
-		let wsData = {
-			type: 'auth',
-			token: getToken(),
-			machine:generateUUID()
-		};
+		let wsData = {type: 'auth',token: getToken(),machine:generateUUID()};
 		sendData(wsData, callback)
 		sendData(data, callback)
 	}

BIN
src/assets/image/pc.jpg


BIN
src/assets/image/pc.png


+ 5 - 8
src/components/EmployeeSelector.vue

@@ -117,7 +117,7 @@ export default {
 			default: 0
 		},
 		user_no_select: {
-			//是否能选择创始人
+			//是否能选择系统管理员
 			type: Boolean,
 			default: true
 		},
@@ -142,7 +142,7 @@ export default {
 			default: false
 		},
 		createDimness: {
-			//组织架构设置上级专用-不清除创始人
+			//组织架构设置上级专用-不清除系统管理员
 			type: Boolean,
 			default: false
 		}
@@ -225,7 +225,6 @@ export default {
 				    }
 				  }
 				});
-				
 				// for (let i in this.list) {
 				// 	this.$set(this.list[i], 'checked', true);
 				// }
@@ -392,6 +391,7 @@ export default {
 				list = [...userlist].filter(x => [...list].some(y => y.id === x.id));
 				employee_selected_list=[...userlist].filter(x => [...employee_selected_list].some(y => y.id === x.id));
 			}
+			console.log(userlist,list)
 			list.map(item => {
 				item['checked'] = false;
 				for (var i in employee_selected_list) {
@@ -416,8 +416,7 @@ export default {
 				return false;
 			}
 			this.list = [];
-			this.$axios('get', '/api/employee/index', { dept_id: this.pid, keywords: this.keyword, page: 0, page_size: 3000,is_official:1 })
-				.then(res => {
+			this.$axios('get', '/api/employee/index', { dept_id: this.pid, keywords: this.keyword, page: 0, page_size: 3000,is_official:1 }).then(res => {
 					var employee = res.data.data.list || [];
 					if (this.use_Administrator_list) {
 						//使用管理员列表
@@ -426,7 +425,7 @@ export default {
 					var userAll = [];
 					employee.forEach((item, i) => {
 						if (!this.not_user && item.is_creator == 1) {
-							//过滤创始人
+							//过滤系统管理员
 							return null;
 						} else if (this.my_no_select == item.id) {
 							//过滤掉当前设置人
@@ -448,8 +447,6 @@ export default {
 							}
 						}
 					});
-					// employee_selected_list=[...employee].filter(x => [...employee_selected_list].some(y => y.id === x.id));
-					// that.employee_selected_list = employee_selected_list;
 					that.list = userAll;
 					this.searchBox=userAll;
 				})

+ 1 - 1
src/components/Steps.vue

@@ -2,7 +2,7 @@
   <div>
     <p class="row_title">
       审批
-      <span class="row_tips fontColorB">多人审批时,以最后一人为准</span>
+      <!-- <span class="row_tips fontColorB">多人审批时,以最后一人为准</span> -->
     </p>
     <div class="examine_steps">
       <el-steps direction="vertical" :space="50">

+ 2 - 2
src/components/UserImage.vue

@@ -16,11 +16,11 @@
     props: {
       width: {
         type: String,
-        default: '0.8rem'
+        default: '44px'
       },
       height: {
         type: String,
-        default: '0.8rem'
+        default: '44px'
       },
       id:{
         type: Number,

+ 7 - 7
src/components/applicationIntegrationPopup.vue

@@ -9,10 +9,10 @@
 							<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-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>
+									<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>
@@ -299,7 +299,7 @@ export default {
 						remark: '',
 						event_time: moment().format('YYYY-MM-DD'),
 
-						// 录入对象
+						// 奖扣对象
 						employee_id: getUserData.id,
 						employeeName: getUserData.name,
 						employee_selected: { dept: [], employee: [{ id: getUserData.id, name: getUserData.name }] },
@@ -330,7 +330,7 @@ export default {
 			user_info: null,
 			btn_loading: false,
 			itemIndex: 0,
-			fullscreenLoading: false, //选择审批人时需要,获取录入对象的上级
+			fullscreenLoading: false, //选择审批人时需要,获取奖扣对象的上级
 			LocalValObj: { id: '', name: '' } ,//当前录入的审批人缓存
 			
 			// 长连接结果
@@ -477,7 +477,7 @@ export default {
 		// 选择审批人前提
 		approval_selected_null(item) {
 			if (!item.employee_id) {
-				this.$message.error('请先选择录入对象');
+				this.$message.error('请先选择奖扣对象');
 			} else {
 				this.fullscreenLoading = true;
 				this.getEmployeeList(item.employee_id, function(res) {
@@ -623,7 +623,7 @@ export default {
 				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 }] },
@@ -654,7 +654,7 @@ export default {
 					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 }] },

+ 4 - 4
src/components/bonusPointsPopup.vue

@@ -4,10 +4,10 @@
 		<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' }]">
+					<el-form-item label="奖扣对象" prop="members" :rules="[{ required: true, message: '请选择奖扣对象', trigger: 'change' }]">
 						<el-row>
 							<el-col :span="18">
-								<el-input auto-complete="off" v-model="employeeName" placeholder="请选择录入对象"></el-input>
+								<el-input auto-complete="off" v-model="employeeName" placeholder="请选择奖扣对象"></el-input>
 								<div @click="noPersonnelListTips" style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"></div>
 								<slot></slot>
 							</el-col>
@@ -358,7 +358,7 @@ export default {
 					}
 				]
 			},
-			// 录入对象名称
+			// 奖扣对象名称
 			employeeName: '',
 			employee_not_select: [],
 			employee_selected: { dept: [], employee: [] },
@@ -532,7 +532,7 @@ export default {
 				item.rule_list_value = '';
 			}
 		},
-		// 选择录入对象
+		// 选择奖扣对象
 		move_employee_confirm(data) {
 			this.employee_selected = { dept: [], employee: [] };
 			this.employeeName = '';

+ 16 - 11
src/components/examinePopup.vue

@@ -17,12 +17,21 @@
 										<span v-else class="green">{{ detail_info.review_point }}</span>
 										<span style="margin-left: 5px;">{{ $getTypsName(detail_info.pt_id) }}</span>
 									</span>
+									<span class="point" v-else>
+										<template v-if="detail_info.point">
+											<span v-if="detail_info.point > 0">+{{ detail_info.point }}</span>
+											<span v-else>{{ detail_info.point }}</span>
+											<span style="margin-left: 5px;">{{ $getTypsName(detail_info.pt_id) }}</span>
+										</template>
+									</span>
 									<div style="margin-left: 5px;">
 										<span v-if="detail_info.status == 1" class="green">审批通过</span>
 										<span v-else-if="detail_info.status == 2" class="red">审批驳回</span>
 										<span v-else-if="detail_info.status == 0" class="orange">待审批</span>
 										<span v-else></span>
 									</div>
+									
+									
 								</div>
 							</template>
 						</el-col>
@@ -175,6 +184,7 @@
 					</div>
 					<div style="line-height: 24px;">{{ rangeType.rule_rangeType_name }}</div>
 				</el-form-item>
+				
 				<el-form-item label="审批积分">
 					<el-col :span="10">
 						<el-input-number
@@ -182,6 +192,7 @@
 							:min="detail_info.item_min_point"
 							:max="detail_info.item_max_point"
 							v-model="adoptForm.point"
+							:disabled="detail_info.pid!=0"
 							type="number"
 						></el-input-number>
 						<el-input-number
@@ -193,26 +204,22 @@
 						<div v-else>
 							<el-input-number
 								v-if="rangeType.rule_range_type == 2"
-								:disabled="forbiddenInputNum"
+								:disabled="forbiddenInputNum||detail_info.pid!=0"
 								:min="rangeType.rule_min_point"
 								:max="rangeType.rule_max_point"
 								v-model="adoptForm.point"
 								placeholder="请输入分值"
 							></el-input-number>
-							<el-input-number v-else :disabled="forbiddenInputNum" v-model="adoptForm.point" placeholder="请输入分值"></el-input-number>
+							<el-input-number v-else :disabled="forbiddenInputNum||detail_info.pid!=0" v-model="adoptForm.point" placeholder="请输入分值"></el-input-number>
 						</div>
 					</el-col>
 				</el-form-item>
-				<el-form-item
-					v-if="detail_info.source_type == 4"
-					label="审批意见"
-					prop="remark"
-					:rules="[{ required: true, message: '请输入审批意见', trigger: 'blur' }, { max: 100, message: '长度不能超过 100 个字符', trigger: 'blur' }]"
-				>
+				
+				<el-form-item v-if="detail_info.source_type == 4" label="审批意见" prop="remark" :rules="[{ required: true,message:'请输入审批意见',trigger: 'blur' },{ max: 100, message: '长度不能超过 100 个字符', trigger: 'blur' }]">
 					<el-input :rows="4" type="textarea" v-model="adoptForm.remark" placeholder="说点什么(限100字)"></el-input>
 				</el-form-item>
-				<div style="padding-left: 80px">奖票用于优秀表现和重要事项的表彰</div>
 				<el-form-item label="发放奖票"><el-switch v-model="adoptForm.switch"></el-switch></el-form-item>
+				<div style="padding-left: 80px;position: relative;top: -26px;">奖票用于优秀表现和重要事项的表彰</div>
 				<el-form-item label="递交审批" v-if="$getUserData().is_creator == 0">
 					<el-row>
 						<el-col :span="18">
@@ -378,8 +385,6 @@ export default {
 						datas = { ...element };
 					}
 				});
-				// return
-				// let datas = this.$refs['ruleItem'].getCheckedNodes()[0].data;
 				if (datas.range_type == 1) {
 					this.forbiddenInputNum = true;
 				} else {

+ 1 - 2
src/components/season.vue

@@ -1,7 +1,7 @@
 <template>
   <div>
     <span @click="showDoubleMonth">
-      <el-input v-model="choseQuarter" prefix-icon="el-icon-date" :placeholder="defaultHint?yearFullMonth+'年 '+defaultQuarter:'请选择'" />
+      <el-input size="medium" v-model="choseQuarter" prefix-icon="el-icon-date" :placeholder="defaultHint?yearFullMonth+'年 '+defaultQuarter:'请选择'" />
     </span>
     <div v-show="showTime1a" class="show1">
       <p>
@@ -56,7 +56,6 @@ import moment from "moment";
         '第三季度':this.quarterFullMonth == '4'?
         '第四季度':''
       }
-      
       if(!this.isActive){
         var date=new Date().getMonth()+1;
         var arrs=this.fullMonth;

+ 3 - 3
src/hint.vue

@@ -1,7 +1,7 @@
 <template>
 	<div>
 		<div @click="init()">
-			<img src="./assets/image/pc.png" style="width:100%;height:auto" v-if="type == 'PC'" />
+			<img src="./assets/image/pc.jpg" style="width:100%;height:auto" v-if="type == 'PC'" />
 			<div class="app" v-else :style="{ width: width }">
 				<img src="./assets/image/app1.png" :style="{ width: width, height: 'auto' }" />
 			</div>
@@ -82,9 +82,9 @@ export default {
 						close({});
 					} else {
 						if(this.IsPC()){
-							window.location.replace('https://pc.dd.g107.com?corpId=' + corpId)
+							window.location.replace('https://app55493.eapps.dingtalkcloud.com/pc?corpId=' + corpId)
 						}else{
-							openLink({ url:'https://pc.dd.g107.com?corpId=' + corpId }).then(() => close({}));
+							openLink({ url:'https://app55493.eapps.dingtalkcloud.com/pc?corpId=' + corpId }).then(() => close({}));
 						}
 						
 					}

+ 33 - 5
src/home.vue

@@ -520,7 +520,7 @@ export default {
 			authorityManagerHeaderLoad: false, //管理员头部loading
 			authorityManagerHeaders: {}, //管理员头部 数据
 			headDayBs: {},//管理员头部 数据 天
-			creatorJurisdiction: this.$getIsCreator('creator'), //是否创始人
+			creatorJurisdiction: this.$getIsCreator('creator'), //是否系统管理员
 
 			widths: '100%',
 			time: this.$moment().format('HH'),
@@ -632,6 +632,7 @@ export default {
 		}
 	},
 	mounted() {
+		// this.initAjax();
 		this.thisweek=this.getTime(7)+'~'+this.getTime(1)
 		if (this.employeeRout) {
 			this.inCommonUse = [];
@@ -649,16 +650,43 @@ export default {
 		}
 		var url = window.location.href;
 		var rUrl = this.GetRequest(url).url || '';
-		console.log(this.$supremeAuthority())
-		this.$nextTick(function() {
-			if (rUrl) {
+		rUrl=rUrl.split("/")[0]
+		this.$nextTick(()=>{
+			if (rUrl&&!this.$getCache('isUrl')) {
 				setTimeout(() => {
+					this.$setCache('isUrl',true)
 					this.$router.push({ path: '/' + rUrl });
 				}, 1000);
 			}
 		});
 	},
 	methods: {
+		initAjax(){
+			//(1).实例化ajax对象
+			let ajax=new XMLHttpRequest()
+			 //(2).设置请求方法和地址
+			ajax.open('get',process.env.VUE_APP_BASE_API+'/api/announcement/list');
+			//(3).设置请求头(post请求才需要设置)
+			ajax.setRequestHeader('Content-Type','application/x-www-form-urlencoded')
+			ajax.setRequestHeader('A-Token','eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOm51bGwsImlhdCI6MTY2OTk1MTE0OCwiZXhwIjotMSwibmJmIjoxNjY5OTUxMTQ4LCJqdGkiOiJNdTcwTnlEWHBhc3N4NXBQIiwic3ViIjoxODEsInBydiI6ImNhNjQ4OWQ1MGYyNDA3YTY3ODMwZTgwOTBkMDE0ODgzNTY4NTk2MmIiLCJyb2xlIjoiZW1wbG95ZWUifQ.kwLflzKZncId-G95vLe0K_TwogEHlxO8FzGay0Q7ubw')
+			 //(4).发送请求 : 参数格式  'key=value'
+			ajax.data='page=1&page_size=10'
+			ajax.send()
+			//(5).注册回调函数
+		    ajax.onreadystatechange = function() {
+		        //onreadystatechange会触发多次,一般需要判断xhr.readState == 4 才获取响应数据
+		        if (ajax.readyState == 4) {
+		          console.log(JSON.parse(ajax.response))
+		        }
+		    }
+			 ajax.onload = function() {
+			         //onreadystatechange会触发多次,一般需要判断xhr.readState == 4 才获取响应数据
+			  //        if (ajax.readyState == 4) {
+			           console.log(ajax)
+			  //        }
+			  }
+			
+		},
 		submitForm(formName) {
 			this.$refs[formName].validate((valid) => {
 			  if (valid) {
@@ -763,7 +791,7 @@ export default {
 		},
 		function_All() {
 			if (this.$getIsCreator('creator')) {
-				//是否是创始人
+				//是否是系统管理员
 			} else {
 				this.authorityManagerHeader();
 			}

+ 2 - 1
src/index.vue

@@ -101,7 +101,7 @@
 			</el-aside>
 			<el-main id="main">
 				<router-view />
-				<div class="fontColorC" style="text-align: center;margin: 10px 0;">Copyright © 2022 广东功道云数字科技有限公司 All Rights Reserved</div>
+				<div class="fontColorC" style="text-align: center;margin: 10px 0;">Copyright © {{$moment().format('YYYY')}} 广东功道云数字科技有限公司 All Rights Reserved</div>
 			</el-main>
 		</el-container>
 		<!-- 续费升级 -->
@@ -288,6 +288,7 @@ export default {
 		this.getInform();
 	},
 	mounted() {
+		this.$setCache('isUrl',false)//清楚代办进入
 		this.getInfo();
 		var url = window.location.href;
 		var str = this.GetRequest(url).corpId || 'ding49b5c3bf0b205896bc961a6cb783455b';

+ 1 - 2
src/init.vue

@@ -55,8 +55,7 @@ export default {
 			this.$dd.biz.util.openSlidePanel({
 				url:"https://page.dingtalk.com/wow/dingtalk/act/serviceconversation?wh_biz=tm&showmenu=false&goodsCode=DT_GOODS_881607043109331&corpId="+this.$getCache('corpId')+"&token=5784a3e6b5e025ee891517ea814180f4",
 				title: '客服群',
-				onSuccess : function(result) {
-				},
+				onSuccess : function(result) {},
 				onFail : function(err) {
 					console.log('onFail')
 				}

+ 0 - 1
src/router/index.js

@@ -17,7 +17,6 @@ const routes = [{
 		children: [{
 				path: '/home',
 				name: '首页',
-				id: '0',
 				component: () => import( /* webpackChunkName: "home" */ '@/home'),
 				meta: {
 					icon: 'icon-shezhi_zuzhijiagou',

+ 5 - 2
src/screen.vue

@@ -122,6 +122,7 @@
 				<i class="el-icon-loading" style="margin-top: 15%;width: 150px;margin-bottom: 10px;color: #fff;font-size: 64px;"></i>
 				<div style="color: #fff;">管理执行难,就用功道云</div>
 			</div>
+			
 			<el-dialog title="输入密码" :visible.sync="isShowCode" width="450px" :show-close="false" :close-on-click-modal="false" :close-on-press-escape="false">
 				<div style="margin: 10px 0;">
 					<el-input style="width: 300px;" v-model="code" placeholder="请输入随机密码"></el-input>
@@ -131,7 +132,9 @@
 			</el-dialog>
 		</div>
 		<div v-else style="height: 100%;" class="back">
+
 			<el-alert v-if="isShowError" :title="errorMsg"  type="error"></el-alert>
+			
 			<div v-if="result.company" style="height: 100%;">
 				<header>
 					<div style="height: 2.4rem;padding: 0 1rem;font-size: 14px;" class="zhuColor flex-box-ce">
@@ -252,7 +255,6 @@
 				<i class="el-icon-loading" style="margin-top: 15%;width: 150px;margin-bottom: 10px;color: #fff;font-size: 64px;"></i>
 				<div style="color: #fff;">管理执行难,就用功道云</div>
 			</div>
-			
 			<el-dialog title="输入密码" :visible.sync="isShowCode" width="450px" :show-close="false" :close-on-click-modal="false" :close-on-press-escape="false">
 				<div style="margin: 10px 0;">
 					<el-input style="width: 300px;" v-model="code" placeholder="请输入随机密码"></el-input>
@@ -260,6 +262,7 @@
 				</div>
 				<div class="flex-box-end"><el-button type="primary" :disabled="isShowlog" :loading="isShowlog" @click="opneWebSocket()">确定</el-button></div>
 			</el-dialog>
+			
 		</div>
 	</div>
 </template>
@@ -404,7 +407,7 @@ export default {
 					this.opneWebSocket()
 					// this.isShowError=false;
 					clearTimeout(setT)
-				},60000)
+				},120000)
 			}
 		},
 		//管理者奖扣统计

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

@@ -530,8 +530,9 @@ export default {
 						}else{
 							this.dataList2 = res.data.data.list;
 						}
-						
-						this.formData.total = res.data.data.total;
+						if(data.page==1){
+							this.formData.total = res.data.data.total;
+						}
 					}
 				})
 				.finally(() => {

+ 4 - 1
src/views/common/repeatTaskDetailsPopup.vue

@@ -2,7 +2,10 @@
 	<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_title flex-box-ce">
+				<span class="flex-1">{{ title }}</span>
+				<span class="red" v-if="workDetailData.enable==0">已暂停</span>
+			</div>
 			<div class="details_content" v-if="workDetailData" v-loading="loading">
 				<ul>
 					<li class="flex-box">

+ 1 - 0
src/views/common/rewardTask.vue

@@ -124,6 +124,7 @@
 							format="yyyy-MM-dd HH:mm"
 							value-format="yyyy-MM-dd HH:mm"
 							default-time="18:00"
+							:clearable="false"
 						></el-date-picker>
 					</el-form-item>
 

+ 1 - 2
src/views/common/rewardTaskAmend.vue

@@ -81,8 +81,6 @@
 								v-if="show_reviewer_selector"
 								ref="members"
 								:multi="false"
-								:isCreatorSelect="true"
-								:employee_list="reviewer_employee_list"
 								:use_Administrator_list="true"
 								:selected="reviewer_selected"
 								@confirm="reviewer_confirm"
@@ -102,6 +100,7 @@
 							format="yyyy-MM-dd HH:mm"
 							value-format="yyyy-MM-dd HH:mm"
 							default-time="18:00"
+							:clearable="false"
 						></el-date-picker>
 					</el-form-item>
 

+ 297 - 166
src/views/common/taskDetailsPopup.vue

@@ -15,7 +15,35 @@
 						<div v-else class="green">{{ workDetailData.point_config.base_point }}</div>
 						<div style="margin-left: 5px;">{{ $getTypsName(workDetailData.pt_id) }}</div>
 					</div>
+					<div class="flex-1"></div>
+					
+					<el-popover v-if="workDetailData.reviews.length>0" placement="bottom-start" trigger="click">
+						<div class="record"  style="margin: 20px 0;width: 400px;">
+							<div
+								@click="openDetail(item)"
+								v-for="(item, index) in workDetailData.reviews"
+								:key="index"
+								class="recordList"
+								:class="[workDetailData.reviews.length - index > 1 ? 'record-list' : '']"
+							>
+								<div class="flex-box-ce record-date fontColorB">
+									<!-- <div class="record-name">{{ item.reviewer_name }}</div> -->
+									<div class="flex-1">
+										<span v-if="item.review_status == 0" class="fontColorB">待审批</span>
+										<span v-else-if="item.review_status == 1" class="green">已通过</span>
+										<span v-else class="red">已驳回</span>
+									</div>
+									<span class="fontColorC">{{item.review_time}}</span>
+								</div>
+								<div class="record-content">
+									<pre class="pre fontColorC">{{ item.remark || '无备注' }}</pre>
+								</div>
+							</div>
+						</div>
+						<div slot="reference" class="blue" style="cursor: pointer;">查看审批记录</div>
+					</el-popover>
 				</div>
+
 				<ul>
 					<li class="flex-box">
 						<div class="label">任务内容</div>
@@ -28,13 +56,13 @@
 					<li class="flex-box" v-if="workDetailData.task_file_list && workDetailData.task_file_list.length > 0">
 						<div class="label"></div>
 						<div class="content_text">
-						<el-image
-							v-for="(item, index) in workDetailData.task_file_list"
-							:key="index"
-							style="width: 100px; height: 100px;margin-right:8px"
-							:src="item"
-							:preview-src-list="workDetailData.task_file_list"
-						></el-image>
+							<el-image
+								v-for="(item, index) in workDetailData.task_file_list"
+								:key="index"
+								style="width: 100px; height: 100px;margin-right:8px"
+								:src="item"
+								:preview-src-list="workDetailData.task_file_list"
+							></el-image>
 						</div>
 					</li>
 					<li class="flex-box">
@@ -84,17 +112,17 @@
 					<li class="flex-box" v-if="workDetailData.complete_task && workDetailData.complete_task.files && workDetailData.complete_task.files.length > 0">
 						<div class="label"></div>
 						<div class="content_text">
-						<el-image
-							v-for="(item, index) in workDetailData.complete_task.files"
-							:key="index"
-							style="width: 100px; height: 100px;margin-right:8px"
-							:src="item"
-							:preview-src-list="workDetailData.complete_task.files"
-						></el-image>
+							<el-image
+								v-for="(item, index) in workDetailData.complete_task.files"
+								:key="index"
+								style="width: 100px; height: 100px;margin-right:8px"
+								:src="item"
+								:preview-src-list="workDetailData.complete_task.files"
+							></el-image>
 						</div>
 					</li>
 				</ul>
-				
+
 				<div v-show="workDetailData.point_config && workDetailData.point_config.item_info">
 					<p class="row_title">规则依据</p>
 					<el-row :gutter="10" v-if="workDetailData.point_config.rule_info">
@@ -107,9 +135,11 @@
 					</el-row>
 					<el-row v-if="workDetailData.point_config.item_info">
 						<el-col :span="4">积分</el-col>
-						<el-col :span="19" v-show="workDetailData.point_config.item_info.min_point == workDetailData.point_config.item_info.max_point">{{ workDetailData.point_config.item_info.min_point }} {{workDetailData.pt_name}}</el-col>
+						<el-col :span="19" v-show="workDetailData.point_config.item_info.min_point == workDetailData.point_config.item_info.max_point">
+							{{ workDetailData.point_config.item_info.min_point }} {{ workDetailData.pt_name }}
+						</el-col>
 						<el-col :span="19" v-show="workDetailData.point_config.item_info.min_point != workDetailData.point_config.item_info.max_point">
-							{{ workDetailData.point_config.item_info.min_point }} ~ {{ workDetailData.point_config.item_info.max_point }} {{workDetailData.pt_name}}
+							{{ workDetailData.point_config.item_info.min_point }} ~ {{ workDetailData.point_config.item_info.max_point }} {{ workDetailData.pt_name }}
 						</el-col>
 					</el-row>
 				</div>
@@ -117,7 +147,7 @@
 					<div class="d_progress">
 						<div class="flex-box ">
 							<div class="flex-1">工作进度({{ workDetailData.progress }}%)</div>
-            				<div class="addJf blue" @click="sliderShow" v-if="workDetailData.employee_id == userId && workDetailData.status==1">+更新进度</div>
+							<div class="addJf blue" @click="sliderShow" v-if="workDetailData.employee_id == userId && workDetailData.status == 1">+更新进度</div>
 						</div>
 						<el-progress :percentage="workDetailData.progress"></el-progress>
 					</div>
@@ -126,7 +156,7 @@
 							<el-tab-pane label="工作记录" name="work">
 								<div class="flex-box">
 									<div class="flex-1"></div>
-									<div class="addJf blue" @click="isOne = true" v-if="workDetailData.employee_id == userId && workDetailData.status < 3 ">+记一条工作记录</div>
+									<div class="addJf blue" @click="isOne = true" v-if="workDetailData.employee_id == userId && workDetailData.status < 3">+记一条工作记录</div>
 								</div>
 								<div class="work_box" style="padding-top:10px">
 									<div class="work_item" v-for="(item, index) in text_list" :key="index" style="margin: 0 0 15px 0">
@@ -134,17 +164,23 @@
 											<userImage class="user_img person_imghead" width="40px" height="40px" :user_name="item.recorder" :img_url="item.img_url"></userImage>
 											<div style="width: 100%;" class="d_name">
 												<div class="flex-box flex-d-center">
-													<div class="flex-1">{{ item.recorder }} 
+													<div class="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 fontColorC">{{ item.time }} <span class="delete_jfjl" v-if="item.recorder_id == userId && workDetailData.status < 3 " @click="deletejf_cli(index,0)"><i class="el-icon-delete"></i></span> </div>
+													<div class="d_date fontColorC">
+														{{ item.time }}
+														<span class="delete_jfjl" v-if="item.recorder_id == userId && workDetailData.status < 3" @click="deletejf_cli(index, 0)">
+															<i class="el-icon-delete"></i>
+														</span>
+													</div>
 												</div>
 												<div class="fontColorB" style="margin-top: 5px;word-break: break-all;">{{ item.remark }}</div>
 											</div>
 										</div>
 									</div>
-									<div v-if="text_list.length==0" class="fontColorC" style="text-align: center;">暂无工作记录</div>
+									<div v-if="text_list.length == 0" class="fontColorC" style="text-align: center;">暂无工作记录</div>
 								</div>
 							</el-tab-pane>
 							<el-tab-pane label="记分记录" name="participation">
@@ -153,7 +189,7 @@
 										<span v-if="point_total > 0">合计:+{{ point_total }}</span>
 										<span v-else>合计:{{ point_total }}</span>
 									</div>
-            						<div class="addJf blue" @click="isIntegral = true" v-if="keepTheScore">+记分</div>
+									<div class="addJf blue" @click="isIntegral = true" v-if="keepTheScore">+记分</div>
 								</div>
 								<div class="work_box" style="padding-top:10px">
 									<div class="work_item" v-for="(item, index) in point_list" :key="index" style="margin: 0 0 15px 0">
@@ -161,17 +197,23 @@
 											<userImage class="user_img person_imghead" width="40px" height="40px" :user_name="item.recorder" :img_url="item.img_url"></userImage>
 											<div style="width: 100%;" class="d_name">
 												<div class="flex-box flex-d-center">
-													<div class="flex-1">{{ item.recorder }}
+													<div class="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 fontColorC">{{ item.time }} <span class="delete_jfjl" v-if="userId == item.recorder_id && workDetailData.status < 3" @click="deletejf_cli(index,1)"><i class="el-icon-delete"></i></span> </div>
+													<div class="d_date fontColorC">
+														{{ item.time }}
+														<span class="delete_jfjl" v-if="userId == item.recorder_id && workDetailData.status < 3" @click="deletejf_cli(index, 1)">
+															<i class="el-icon-delete"></i>
+														</span>
+													</div>
 												</div>
 												<div class="fontColorB" style="margin-top: 5px;word-break: break-all;">{{ item.remark }}</div>
 											</div>
 										</div>
 									</div>
-									<div v-if="point_list.length==0" class="fontColorC" style="text-align: center;">暂无积分记录</div>
+									<div v-if="point_list.length == 0" class="fontColorC" style="text-align: center;">暂无积分记录</div>
 								</div>
 							</el-tab-pane>
 						</el-tabs>
@@ -179,16 +221,17 @@
 				</div>
 			</div>
 		</el-drawer>
-		
+		<examinePopup :title="'审核详情'" :id="detail_id" :show.sync="detailShow"></examinePopup>
+
 		<!-- 更新进度 -->
 		<el-dialog title="更新进度" :close-on-click-modal="false" :visible.sync="isSlider" :before-close="publicClose" width="40%">
 			<div class="slider">
-			<div class="fontColorC">拖动滑杆更新进度</div>
-			<el-slider v-model="progress"></el-slider>
+				<div class="fontColorC">拖动滑杆更新进度</div>
+				<el-slider v-model="progress"></el-slider>
 			</div>
 			<span slot="footer">
-			<el-button @click="publicClose()">取消</el-button>
-			<el-button type="primary" @click="sliderSend">完成</el-button>
+				<el-button @click="publicClose()">取消</el-button>
+				<el-button type="primary" @click="sliderSend">完成</el-button>
 			</span>
 		</el-dialog>
 		<!-- 记一条 -->
@@ -205,14 +248,23 @@
 		<!-- 记分记录 -->
 		<el-dialog title="记分" :visible.sync="isIntegral" :before-close="publicClose" width="40%" destroy-on-close :close-on-click-modal="false">
 			<el-form :model="integral" ref="integral" label-width="80px" :rules="formRules">
-				<el-form-item label="记录"  prop="text" :rules="[{ required: true, message: '记录不能为空'}]">
+				<el-form-item label="记录" prop="text" :rules="[{ required: true, message: '记录不能为空' }]">
 					<el-input type="textarea" :rows="3" v-model="integral.text"></el-input>
 				</el-form-item>
 				<!-- 记分不能为空 -->
-				<el-form-item label="记分"  prop="num" >
-				<!-- <el-form-item label="记分"  prop="num" :rules="[{ required: false, message: '记分不能为空'},{ type: 'number', message: '积分必须为数字值'}]"> -->
-					<div class="num" :class="[integral.type=='1'?'add':'jian']"></div>
-					<el-input placeholder="请输入内容" type="Number" v-model.number="integral.num" @input="(val)=>{integral.num = val.replace(/[^\d]/g, '')}" >
+				<el-form-item label="记分" prop="num">
+					<!-- <el-form-item label="记分"  prop="num" :rules="[{ required: false, message: '记分不能为空'},{ type: 'number', message: '积分必须为数字值'}]"> -->
+					<div class="num" :class="[integral.type == '1' ? 'add' : 'jian']"></div>
+					<el-input
+						placeholder="请输入内容"
+						type="Number"
+						v-model.number="integral.num"
+						@input="
+							val => {
+								integral.num = val.replace(/[^\d]/g, '');
+							}
+						"
+					>
 						<el-select v-model="integral.type" slot="prepend" placeholder="请选择" style="width: 80px;">
 							<el-option label="奖分" value="1"></el-option>
 							<el-option label="扣分" value="2"></el-option>
@@ -229,19 +281,22 @@
 </template>
 
 <script>
-const validatorNoZero = (rule, value, callback) => {//设置记分的验证
+const validatorNoZero = (rule, value, callback) => {
+	//设置记分的验证
 	if (value === 0) {
-		return callback(new Error("记分不能为0"));
+		return callback(new Error('记分不能为0'));
 	} else if (value === '') {
-		return callback(new Error("记分不能为空"));
-	}else if (isNaN(value)){
-		return callback(new Error("积分必须为数字值"));
-	}else{
+		return callback(new Error('记分不能为空'));
+	} else if (isNaN(value)) {
+		return callback(new Error('积分必须为数字值'));
+	} else {
 		callback();
 	}
 };
+import examinePopup from '@/components/examinePopup.vue';
 export default {
 	name: 'taskDetailsPopup',
+	components: { examinePopup },
 	props: {
 		title: {
 			type: String,
@@ -270,6 +325,7 @@ export default {
 
 			loading: false,
 			workDetailData: {
+				reviews: [],
 				process: [],
 				dept_list: [],
 				point_config: {
@@ -280,36 +336,38 @@ export default {
 			isOne: false,
 			text_list: [],
 			isIntegral: false,
-			
+
 			point_total: 0,
 			point_list: [],
 			activeName: 'work',
 			getDataUrl: '/api/integral/work',
 			params: {},
 
-
 			userId: this.$getUserData().id,
-			isSlider: false,//更新进度弹窗
-			  progress: 0,//更新进度modus
-			  isOne: false,//记一条
-			  textarea: '',//记录一条内容
-			  isIntegral:false,//记分记录
-			integral:{
-				text:'',
-				num:0,
-				type:"1",
+			isSlider: false, //更新进度弹窗
+			progress: 0, //更新进度modus
+			isOne: false, //记一条
+			textarea: '', //记录一条内容
+			isIntegral: false, //记分记录
+			integral: {
+				text: '',
+				num: 0,
+				type: '1'
 			},
-			formRules:{//记分验证
+			formRules: {
+				//记分验证
 				num: [
-				{
-					required: true,
-					validator: validatorNoZero,
-					trigger: "blur"
-				}
-				],
+					{
+						required: true,
+						validator: validatorNoZero,
+						trigger: 'blur'
+					}
+				]
 			},
 			keepTheScore: false,
 			employeeMe: {},
+			detailShow: false,
+			detail_id: 0
 		};
 	},
 	mounted() {
@@ -320,88 +378,93 @@ export default {
 		});
 	},
 	methods: {
-		employee_me(data){
+		openDetail(item) {
+			this.detailShow = true;
+			this.detail_id = item.id;
+		},
+		employee_me(data) {
 			let params = {
 				id: data.employee_id
 			};
-			this.$axios('get', '/api/employee/info', params)
-			.then(res => {
-				this.employeeMe = res.data.data
-				this.keepTheScore = this.keepThe_score(data)
-			})
+			this.$axios('get', '/api/employee/info', params).then(res => {
+				this.employeeMe = res.data.data;
+				this.keepTheScore = this.keepThe_score(data);
+			});
 		},
-		keepThe_score(cer){
-			if(cer.status > 2){
-				return false
+		keepThe_score(cer) {
+			if (cer.status > 2) {
+				return false;
 			}
-			if(this.userId == cer.reviewer_id){
-				return true
+			if (this.userId == cer.reviewer_id) {
+				return true;
 			}
-			return this.employeeMe.employee_detail.superior_list.some(x =>{
-				if(this.userId == x.id){
-					return true
+			return this.employeeMe.employee_detail.superior_list.some(x => {
+				if (this.userId == x.id) {
+					return true;
 				}
-			})
+			});
 		},
-		deletejf_cli(cor,cur){
+		deletejf_cli(cor, cur) {
 			this.$confirm('确定永久删除此项?', '提示', {
-			confirmButtonText: '确定',
-			cancelButtonText: '取消',
-			type: 'warning'
-			}).then(() => {
-				let lier = cur == 1 ? this.point_list : this.text_list
-				let libf = cur == 1 ? this.text_list : this.point_list
-				lier.splice(cor,1)
-				let data = {
-					work_id: this.workDetailData.id,
-            		process: []
-				}
-				data.process =lier.concat(libf)
-				if (data.process.length == 0) {
-					data.process = "[1]"
-				} else {
-					data.process = JSON.stringify(data.process);
-				}
-				this.$axios('post', '/api/integral/work', data).then(res =>{
-					if(res.data.code == 1){
-						this.getData();
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning'
+			})
+				.then(() => {
+					let lier = cur == 1 ? this.point_list : this.text_list;
+					let libf = cur == 1 ? this.text_list : this.point_list;
+					lier.splice(cor, 1);
+					let data = {
+						work_id: this.workDetailData.id,
+						process: []
+					};
+					data.process = lier.concat(libf);
+					if (data.process.length == 0) {
+						data.process = '[1]';
+					} else {
+						data.process = JSON.stringify(data.process);
 					}
+					this.$axios('post', '/api/integral/work', data).then(res => {
+						if (res.data.code == 1) {
+							this.getData();
+						}
+					});
 				})
-			}).catch(() => {});
+				.catch(() => {});
 		},
 		//记分记录
-		integralSend(formName){
-			this.$refs[formName].validate((valid) => {
+		integralSend(formName) {
+			this.$refs[formName].validate(valid => {
 				if (valid) {
 					var items = this.workDetailData.process.list || [];
 					var process = {
-							img_url: this.$getUserData().img_url,
-							point: this.integral.type == "1" ? this.integral.num : '-' + this.integral.num,
-							recorder_id: this.$getUserData().id,
-							recorder: this.$getUserData().name,
-							remark: this.integral.text,
-							time: this.$moment().format('YYYY-MM-DD HH:mm')
-					}
+						img_url: this.$getUserData().img_url,
+						point: this.integral.type == '1' ? this.integral.num : '-' + this.integral.num,
+						recorder_id: this.$getUserData().id,
+						recorder: this.$getUserData().name,
+						remark: this.integral.text,
+						time: this.$moment().format('YYYY-MM-DD HH:mm')
+					};
 					var data = {
 						work_id: this.workDetailData.id,
-						process: [],
-					}
+						process: []
+					};
 					items.unshift(process);
 					data.process = JSON.stringify(items);
-					this.$axios('post','/api/integral/work',data).then(res => {
+					this.$axios('post', '/api/integral/work', data).then(res => {
 						if (res.data.code == 1) {
 							this.publicClose();
 							this.getData();
 						}
-					})
+					});
 				}
-			})
+			});
 		},
 		//记一条
-		onerecord(){
-			if(!this.textarea){
-				this.$message.error("请输入备注内容");
-				return
+		onerecord() {
+			if (!this.textarea) {
+				this.$message.error('请输入备注内容');
+				return;
 			}
 			var items = this.workDetailData.process.list || [];
 			var process = {
@@ -411,44 +474,44 @@ export default {
 				recorder: this.$getUserData().name,
 				remark: this.textarea,
 				time: this.$moment().format('YYYY-MM-DD HH:mm')
-			}
-			var data={
-				work_id:this.workDetailData.id,
-				process:[],
-			}
+			};
+			var data = {
+				work_id: this.workDetailData.id,
+				process: []
+			};
 			items.unshift(process);
-			data.process=JSON.stringify(items);
+			data.process = JSON.stringify(items);
 			this.$axios('post', '/api/integral/work', data).then(res => {
 				if (res.data.code == 1) {
 					this.publicClose();
 					this.getData();
 				}
-			})
+			});
 		},
 		//更新进度
-		sliderShow(){
-			this.progress = this.workDetailData.progress
-			this.isSlider = true
+		sliderShow() {
+			this.progress = this.workDetailData.progress;
+			this.isSlider = true;
 		},
-		sliderSend(){
+		sliderSend() {
 			var self = this;
 			let data = {
 				work_id: self.workDetailData.id,
-				progress: self.progress,
-			}
-			self.$axios('post','/api/integral/work',data).then(res => {
+				progress: self.progress
+			};
+			self.$axios('post', '/api/integral/work', data).then(res => {
 				if (res.data.code == 1) {
 					this.getData();
 					self.isSlider = false;
 				}
-			})
+			});
 		},
-		publicClose(){
+		publicClose() {
 			this.textarea = '';
 			this.integral = {
 				text: '',
 				num: 0,
-				type: "1",
+				type: '1'
 			};
 			this.isSlider = false;
 			this.isOne = false;
@@ -466,36 +529,104 @@ export default {
 		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 => {
+			this.$axios('get', this.getDataUrl, data, this.detailType == 2 ? '' : 'v2')
+				.then(res => {
 					this.workDetailData = res.data.data;
-					this.employee_me(res.data.data)
-					let text_list = []
-					let point_list = []
-					this.point_total = 0
+					this.employee_me(res.data.data);
+					let text_list = [];
+					let 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) {
-					      point_list.push(this.workDetailData.process.list[i])
-					    } else {
-							if(this.workDetailData.process.list[i].recorder_id == this.workDetailData.employee_id) {
-								text_list.push(this.workDetailData.process.list[i])
+						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) {
+								point_list.push(this.workDetailData.process.list[i]);
+							} else {
+								if (this.workDetailData.process.list[i].recorder_id == this.workDetailData.employee_id) {
+									text_list.push(this.workDetailData.process.list[i]);
+								}
 							}
-					    }
-					  }
+						}
 					}
-					setTimeout(()=>{
-					  this.text_list=text_list;
-					  this.point_list=point_list;
-					},500)
-			}).finally(() => {
-				this.loading = false;
-			});
+					setTimeout(() => {
+						this.text_list = text_list;
+						this.point_list = point_list;
+					}, 500);
+				})
+				.finally(() => {
+					this.loading = false;
+				});
 		}
 	}
 };
 </script>
 <style lang="scss" scoped="scoped">
+.recordList {
+	padding: 10px 0;
+	cursor: pointer;
+	border-radius: 5px;
+}
+.recordList:hover {
+	// background-color: #F7F8FA;
+}
+.textarea ::v-deep textarea {
+	background-color: #f7f8fa;
+	border: none;
+	padding: 0;
+	width: 500px;
+	color: #222 !important;
+}
+.record-message {
+	font-size: 13px;
+	margin: 5px 60px;
+}
+.record-list {
+	position: relative;
+}
+.record-list::after {
+	content: '';
+	position: absolute;
+	width: 2px;
+	top: 5px;
+	left: 3px;
+	bottom: -15px;
+	background-color: #ccc;
+}
+.record-title {
+	padding: 16px 0;
+	font-size: 16px;
+}
+.record-date {
+	padding-left: 20px;
+	position: relative;
+	font-size: 13px;
+}
+.record-date::after {
+	content: '';
+	position: absolute;
+	width: 8px;
+	height: 8px;
+	background-color: #ccc;
+	left: 0;
+	top: 50%;
+	margin-top: -4px;
+	border-radius: 50%;
+	z-index: 2;
+}
+.record-content {
+	background-color: #f7f8fa;
+	padding: 6px;
+	border-radius: 5px;
+	margin-left: 20px;
+	margin-top: 10px;
+	// margin-bottom: 10px;
+}
+.record-name {
+	margin-right: 10px;
+	/* margin-left: 10px; */
+	color: #141c28;
+	font-weight: 600;
+}
 .details_content {
 	& .d_userMessage {
 		margin-left: 10px;
@@ -561,23 +692,23 @@ export default {
 	padding: 20px;
 	border-bottom: 1px #efefef solid;
 }
-.d_name{
+.d_name {
 	margin-left: 10px;
 }
-.d_content{
+.d_content {
 	margin-left: 50px;
 }
-.addJf{
+.addJf {
 	font-size: 13px;
 	cursor: pointer;
 	margin-bottom: 5px;
 	padding: 5px;
-	transition: all .3s;
+	transition: all 0.3s;
 }
-.addJf:hover{
+.addJf:hover {
 	color: #26a2ff !important;
 }
-.num{
+.num {
 	position: absolute;
 	height: 22px;
 	width: 20px;
@@ -585,22 +716,22 @@ export default {
 	left: 85px;
 	line-height: 40px !important;
 }
-.add:before{
+.add:before {
 	position: absolute;
-	content: "+";
+	content: '+';
 	color: #f56c6c;
 }
-.jian:before{
+.jian:before {
 	position: absolute;
-	content: "-";
+	content: '-';
 	color: #67c23a;
 }
-.delete_jfjl{
-	transition: .3s all;
+.delete_jfjl {
+	transition: 0.3s all;
 	cursor: pointer;
 	margin: 0 0 0 10px;
 }
-.delete_jfjl:hover{
+.delete_jfjl:hover {
 	color: #26a2ff;
 }
 </style>

+ 6 - 1
src/views/common/temporaryTask.vue

@@ -135,6 +135,7 @@
 							format="yyyy-MM-dd HH:mm"
 							value-format="yyyy-MM-dd HH:mm"
 							default-time="18:00"
+							:clearable="false"
 						></el-date-picker>
 					</el-form-item>
 
@@ -457,6 +458,7 @@ export default {
 			this.fileList = filtList
 			this.fileFun('', filtList)
 			// 指定了规则
+			console.log(this.modifyData.point_config)
 			if(this.modifyData.point_config.item_info){
 				let itemInfo = this.modifyData.point_config.item_info
 				this.arr=[itemInfo.id];
@@ -469,6 +471,7 @@ export default {
 						this.ruleItemChange(this.formData.tree_echo);
 					})
 				})
+				
 			}else if(this.modifyData.point_config.rule_info){//指定了分类
 				this.isSelectType=false;
 				this.formData.rule_id = this.modifyData.point_config.rule_info.id;
@@ -498,7 +501,9 @@ export default {
 			if(list[0]&&list[0].pid == 0){
 				return false
 			}else{
-				this.getruleChange(list[0].pid)
+				if(list[0]){
+					this.getruleChange(list[0].pid)
+				}
 			}
 		},
 		returnRuleVal(rule_id,arr){

+ 1 - 0
src/views/common/temporaryTaskAmend.vue

@@ -124,6 +124,7 @@
 							format="yyyy-MM-dd HH:mm"
 							value-format="yyyy-MM-dd HH:mm"
 							default-time="18:00"
+							:clearable="false"
 						></el-date-picker>
 					</el-form-item>
 

+ 3 - 1
src/views/ranking/JfDetail.vue

@@ -392,7 +392,9 @@ export default {
 				.then(res => {
 					if (res.data.code == 1) {
 						this.list = res.data.data.list;
-						this.total = res.data.data.total;
+						if(this.formData.page==1){
+							this.total = res.data.data.total;
+						}
 					} else {
 						this.$message.error(res.data.data.msg);
 					}

+ 1 - 1
src/views/ranking/balanceA.vue

@@ -2,7 +2,7 @@
 	<div>
 		<el-alert class="diy-tip" @close="tips_close" v-show="tips_show" type="success" description>
 			<p>A分余额在线下兑换/使用过后,由管理员手动结算清零;</p>
-			<p>清零操作为全员批量清除,请谨慎操作!</p>
+			<p>清零操作为全员批量清除,请谨慎操作。此操作不会清空A分统计、排名和事件!</p>
 			<p>每次清零将清空指定月份之前的余额(不含指定月份),不可清空未结束月份的余额:</p>
 			<p>例如当前是2020年7月8号,指定选择2020年7月份,可清空2020年7月1号之前所有余额,不清除7月1-8号的余额。</p>
 		</el-alert>

+ 106 - 154
src/views/ranking/dept_rank.vue

@@ -13,37 +13,41 @@
 				<el-form-item>
 					<el-date-picker
 						size="medium"
-						v-show="time_type == '2'"
-						v-model="export_from.year"
+						v-show="time_type == '1'"
+						v-model="formData.month"
 						class="date-picker-width"
-						type="year"
-						value-format="yyyy"
-						placeholder="选择年份排名"
+						type="month"
+						:clearable="false"
+						value-format="yyyy-MM"
+						placeholder="选择月份排名"
 					></el-date-picker>
 					<el-date-picker
 						size="medium"
-						v-show="time_type == '1' || time_type == '月份'"
-						v-model="export_from.month"
+						v-show="time_type == '2'"
+						v-model="formData.year"
 						class="date-picker-width"
-						type="month"
-						value-format="yyyy-MM"
-						placeholder="选择月份排名"
+						type="year"
+						:clearable="false"
+						value-format="yyyy"
+						placeholder="选择年份排名"
 					></el-date-picker>
-					<season v-if="time_type == '3'" :isActive="true" class="date-picker-width" @confirm="export_quarter_confirm"></season>
-					
+					<season v-if="time_type == '3'" class="date-picker-width" @confirm="export_quarter_confirm"></season>
 					<el-date-picker
 						size="medium"
 						v-show="time_type == '4'"
 						class="date-picker-width"
-						v-model="export_from.time_range"
+						v-model="formData.time_range"
 						type="daterange"
-						value-format="timestamp"
+						value-format="yyyy-MM-dd"
 						range-separator="至"
+						:clearable="false"
 						start-placeholder="开始日期"
 						end-placeholder="结束日期"
 						:picker-options="instantPickerOptions"
 					></el-date-picker>
 				</el-form-item>
+				
+				
 				<el-form-item label="部门">
 					<el-cascader
 						size="medium"
@@ -92,7 +96,7 @@
 				</el-form-item>
 				<el-form-item label="人员">
 					<el-select size="medium" v-model="formData.position" style="width:150px" placeholder="请选择">
-						<el-option v-for="item in positions" :key="item.id" :label="item.name" :value="item.age"></el-option>
+						<el-option v-for="item in positions" :key="item.id" :label="item.name" :value="item.id"></el-option>
 					</el-select>
 				</el-form-item>
 				<el-form-item>
@@ -157,7 +161,7 @@
 							v-model="Dc_Data.value1"
 							type="daterange"
 							size="medium"
-							value-format="timestamp"
+							value-format="yyyy-MM-dd"
 							range-separator="至"
 							start-placeholder="开始日期"
 							end-placeholder="结束日期"
@@ -167,7 +171,7 @@
 
 					<el-form-item label="人员" style="margin-left:30px">
 						<el-select size="medium" v-model="Dc_Data.DC_position" style="width:150px" placeholder="请选择">
-							<el-option v-for="item in positions" :key="item.id" :label="item.name" :value="item.age"></el-option>
+							<el-option v-for="item in positions" :key="item.id" :label="item.name" :value="item.id"></el-option>
 						</el-select>
 					</el-form-item>
 				</div>
@@ -263,7 +267,7 @@ export default {
 			Dc_Data: {
 				//导出数据
 				value1: '', //时间
-				DC_position: '全部', //人员
+				DC_position: 'all', //人员
 				dept_name: [], //部门
 				rule: [] ,//规则
 				pt_id: 3,
@@ -281,7 +285,11 @@ export default {
 				page: 1,
 				rule: '',
 				page_size: 10,
-				position: 0 //部门多选删除这个
+				position: 'all' ,
+				year:moment().format('YYYY'),
+				month: moment().format('YYYY-MM'),
+				quarter: '',
+				time_range: []
 			},
 			total: null,
 			rule_trees: null,
@@ -293,16 +301,9 @@ export default {
 			time_types: [{ label: '月份', value: '1' }, { label: '季度', value: '3' }, { label: '年份', value: '2' }, { label: '自定义', value: '4' }],
 			props: { value: 'id', label: 'name', children: 'child', multiple: true },
 			props2: { value: 'id', label: 'name', children: 'child', checkStrictly: true},
-			time_type: '月份',
-			export_from: {
-				year: '',
-				month: moment().format('YYYY-MM'),
-				quarter: '',
-				// time_range: [new Date(new Date().toLocaleDateString()).getTime(), new Date(new Date().toLocaleDateString()).getTime()]
-				time_range: []
-			},
+			time_type: '1',
 			employee_map: this.$getCache('SET_EMPLOYEE_MAP'),
-			positions: [{ id: 0, age: 'all', name: '全部' }, { id: 1, age: 'manager', name: '管理者' }, { id: 2, age: 'employee', name: '员工' }],
+			positions: [{ id: 'all', name: '全部' }, { id:'manager', name: '管理者' }, { id: 'employee',name: '员工' }],
 			tips_show: false,
 			byRankingShow: false,
 			byRankingData: {
@@ -322,53 +323,53 @@ export default {
 					{
 						text: '今天',
 						onClick(picker) {
-						const now = new Date(new Date().toLocaleDateString());
-						const start = now.getTime();
-						picker.$emit('pick', [start, start]);
+							const now = new Date(new Date().toLocaleDateString());
+							const start = now.getTime();
+							picker.$emit('pick', [moment(start).format('YYYY-MM-DD'), moment(start).format('YYYY-MM-DD')]);
 						}
 					},
 					{
 						text: '昨天',
 						onClick(picker) {
-						const now = new Date(new Date().toLocaleDateString());
-						const start = now.getTime() - 60 * 60 * 24 * 1000;
-						picker.$emit('pick', [start, start]);
+							const now = new Date(new Date().toLocaleDateString());
+							const start = now.getTime() - 60 * 60 * 24 * 1000;
+							picker.$emit('pick', [moment(start).format('YYYY-MM-DD'),moment(start).format('YYYY-MM-DD')]);
 						}
 					},
 					{
 						text: '本周',
 						onClick(picker) {
-						const now = new Date(new Date().toLocaleDateString());
-						const start = now.getTime() - (now.getDay() - 1) * 24 * 60 * 60 * 1000;
-						const end = start + 7 * 24 * 60 * 60 * 1000 - 1000;
-						picker.$emit('pick', [start, end]);
+							const now = new Date(new Date().toLocaleDateString());
+							const start = now.getTime() - (now.getDay() - 1) * 24 * 60 * 60 * 1000;
+							const end = start + 7 * 24 * 60 * 60 * 1000 - 1000;
+							picker.$emit('pick', [moment(start).format('YYYY-MM-DD'), moment(end).format('YYYY-MM-DD')]);
 						}
 					},
 					{
 						text: '上周',
 						onClick(picker) {
-						const now = new Date(new Date().toLocaleDateString());
-						const start = now.getTime() - (now.getDay() + 6) * 24 * 60 * 60 * 1000;
-						const end = start + 7 * 24 * 60 * 60 * 1000 - 1000;
-						picker.$emit('pick', [start, end]);
+							const now = new Date(new Date().toLocaleDateString());
+							const start = now.getTime() - (now.getDay() + 6) * 24 * 60 * 60 * 1000;
+							const end = start + 7 * 24 * 60 * 60 * 1000 - 1000;
+							picker.$emit('pick', [moment(start).format('YYYY-MM-DD'), moment(end).format('YYYY-MM-DD')]);
 						}
 					},
 					{
 						text: '本月',
 						onClick(picker) {
 						const now = new Date();
-						const startDate = new Date(now.getFullYear(), now.getMonth(), 1);
-						const endDate = new Date(now.getFullYear(), now.getMonth() + 1, 0);
-						picker.$emit('pick', [startDate.getTime(), endDate.getTime()]);
+							const startDate = new Date(now.getFullYear(), now.getMonth(), 1);
+							const endDate = new Date(now.getFullYear(), now.getMonth() + 1, 0);
+							picker.$emit('pick', [moment(startDate.getTime()).format('YYYY-MM-DD'), moment(endDate.getTime()).format('YYYY-MM-DD')]);
 						}
 					},
 					{
 						text: '上月',
 						onClick(picker) {
-						const now = new Date();
-						const startDate = new Date(now.getFullYear() - (now.getMonth() > 0 ? 0 : 1), (now.getMonth() + 11) % 12, 1);
-						const endDate = new Date(now.getFullYear(), now.getMonth(), 0);
-						picker.$emit('pick', [startDate.getTime(), endDate.getTime()]);
+							const now = new Date();
+							const startDate = new Date(now.getFullYear() - (now.getMonth() > 0 ? 0 : 1), (now.getMonth() + 11) % 12, 1);
+							const endDate = new Date(now.getFullYear(), now.getMonth(), 0);
+							picker.$emit('pick', [moment(startDate.getTime()).format('YYYY-MM-DD'), moment(endDate.getTime()).format('YYYY-MM-DD')]);
 						}
 					}
 				],
@@ -386,18 +387,27 @@ export default {
                     }
 				}
 			},
-			pickerDisabledDate: {
-			},
 		};
 	},
 	watch: {
-		'export_from.time_range'(){
+		time_type(val){
+			if(val=='1'){
+				this.selectBtn();
+			}else if(val=='2'){
+				this.selectBtn();
+			}else if(val=='3'){
+				// this.formData.quarter=moment().format('YYYY')+moment().format("Q");
+			}else {
+				this.formData.time_range=[moment().startOf('month').format('YYYY-MM-DD'),moment().endOf('month').format('YYYY-MM-DD')]
+			}
+		},
+		'formData.time_range'(){
 			this.selectBtn();
 		},
-		'export_from.year'(){
+		'formData.year'(val,val2){
 			this.selectBtn();
 		},
-		'export_from.month'(){
+		'formData.month'(){
 			this.selectBtn();
 		},
 		'formData.pt_id'(){
@@ -445,6 +455,7 @@ export default {
 		rule_id(val) {
 			if(val.length==0){
 				this.formData.rule='';
+				this.selectBtn();
 				return false
 			}
 			if(val.length==1){
@@ -500,14 +511,8 @@ export default {
 					break;
 			}
 			if(!date){
-				// let month=moment().format('YYYY-MM').split("-");
-				// date={type:3,year:month[0],month:month[1]<10? month[1].slice(1):month[1]}
-				// this.getDate((res)=>{
-				// 	parameter.start_date = this.$moment(Number(res.data.start+'000')).format('YYYY-MM-DD')
-				// 	parameter.end_date = this.$moment(Number(res.data.end+'000')).format('YYYY-MM-DD')
 					data.parameter=JSON.stringify(parameter);
 					this.$router.push({path: '/JfDetail',query:data})
-				// },date)
 				return false
 			}
 			if(parameter.time_type==4){
@@ -591,106 +596,64 @@ export default {
 		},
 		// 查询
 		selectBtn() {
-			switch (this.time_type) {
-				case '1':
-					this.$set(this.formData, 'month', this.export_from.month);
-					this.formData.month ? '' : delete this.formData.month;
-					break;
-				case '2':
-					this.$set(this.formData, 'year', this.export_from.year);
-					this.formData.year ? '' : delete this.formData.year;
-					break;
-				case '月份':
-					this.$set(this.formData, 'month', this.export_from.month);
-					this.formData.month ? '' : delete this.formData.month;
-					break;
-				case '3':
-					this.$set(this.formData, 'quarter', this.export_from.quarter);
-					this.formData.quarter ? '' : delete this.formData.quarter;
-					break;
-				case '4':
-					this.$set(this.formData, 'time_range', this.export_from.time_range);
-					this.formData.time_range ? '' : delete this.formData.time_range;
-					break;
-				default:
-					break;
-			}
-
-			// let data = JSON.parse(JSON.stringify(this.formData));
-			let data = JSON.parse(JSON.stringify(this.formData));
-			var employee_ids = data.exclusion.join(',');
-			data.exclusion = employee_ids;
-			data.page = 1;
-			data.page_size = 10;
 			this.formData.page = 1;
 			this.formData.page_size = 10;
 			this.$nextTick(() => {
-				this.get_list(data);
+				this.get_list();
 			});
 		},
 		// 页面变更
 		handleCurrentChange(val) {
 			this.formData.page = val;
-			this.get_list(this.formData);
+			this.get_list();
 		},
 		handleSizeChange(val) {
 			this.formData.page = 1;
 			this.formData.page_size = val;
-			this.get_list(this.formData);
+			this.get_list();
 		},
 		// 选择时间
 		export_quarter_confirm(val) {
-			this.export_from.quarter = val;
+			this.formData.quarter = val;
 			this.selectBtn();
 		},
 		//请求数据
-		get_list(data, bool) {
-			if (this.time_type == 1) {
-				delete data.year;
-				delete data.quarter;
-				delete data.time_range;
-			} else if (this.time_type == 2) {
-				delete data.month;
-				delete data.quarter;
-				delete data.time_range;
-			} else if (this.time_type == '月份') {
-				delete data.year;
-				delete data.quarter;
-				delete data.time_range;
-			} else if (this.time_type == 3) {
-				delete data.month;
-				delete data.year;
-				delete data.time_range;
-			} else if (this.time_type == 4) {
-				delete data.month;
-				delete data.year;
-				delete data.quarter;
-				if(data.time_range && data.time_range.length > 0){
-					data.start_date = moment(data.time_range[0]).format('YYYY-MM-DD')
-					data.end_date = moment(data.time_range[1]).format('YYYY-MM-DD')
-				}
-				delete data.time_range
-			}
-			if (bool) {
-				data.month = moment().format('YYYY-MM');
+		get_list() {
+			let data={
+				page: this.formData.page,
+				page_size: this.formData.page_size,
+				dept_id: this.formData.dept_id,
+				sort:this.formData.sort,
+				pt_id:this.formData.pt_id,
+				time_type: this.formData.time_type,
+				exclusion:  this.formData.exclusion.toString(),
+				rule: this.formData.rule,
+				position: this.formData.position,
+			};
+			if(this.time_type==1||this.time_type=='月份'){
+				data.month=this.formData.month
+			}else if(this.time_type==2){
+				data.year=this.formData.year
+			}else if(this.time_type==3){
+				data.quarter=this.formData.quarter
+			}else if(this.time_type==4){
+				data.start_date= moment(this.formData.time_range[0]).format('YYYY-MM-DD')
+				data.end_date=moment(this.formData.time_range[1]).format('YYYY-MM-DD')
 			}
+			
 			this.loading = true;
-			data ? '' : (data = this.formData);
-
-			data.position = data.position == 'manager' ? 'manager' : data.position == 'employee' ? 'employee' : 'all';
-			this.$axios('get', '/api/integral/statistics/ranking', data, 'v2')
-				.then(res => {
-					this.labelName = this.formData.pt_id == 2 ? 'A分' : 'B分';
-					if (res.data.code == 1) {
-						this.list =this.$returnDeptName(res.data.data.list);
-						this.total = res.data.data.total;
-					} else {
-						this.$message.error(res.data.data.msg);
-					}
-				})
-				.finally(() => {
-					this.loading = false;
-				});
+			this.$axios('get', '/api/integral/statistics/ranking', data, 'v2').then(res => {
+				this.labelName = this.formData.pt_id == 2 ? 'A分' : 'B分';
+				if (res.data.code == 1) {
+					this.list =this.$returnDeptName(res.data.data.list);
+					this.total = res.data.data.total;
+				} else {
+					this.$message.error(res.data.data.msg);
+				}
+			})
+			.finally(() => {
+				this.loading = false;
+			});
 		},
 		// 获取积分规则
 		get_rule_tree() {
@@ -737,27 +700,16 @@ export default {
 		},
 
 		exportExcel() {
-			//人员
-			this.Dc_Data.DC_position =
-				this.Dc_Data.DC_position == 'manager' ? 'manager' : this.Dc_Data.DC_position == 'employee' ? 'employee' : this.Dc_Data.DC_position == '全部' ? 'all' : 'all';
 			//部门
 			let dept_name;
 			for (let i in this.Dc_Data.dept_name) {
 				dept_name = this.Dc_Data.dept_name[i];
 			}
 			this.Dc_Data.dept_name = dept_name;
-			//规则
-			// let rule_id = [];
-			// for (let i in this.Dc_Data.rule_id) {
-			// 	for (let a in this.Dc_Data.rule_id[i]) {
-			// 		rule_id.push(this.Dc_Data.rule_id[i][a]);
-			// 	}
-			// }
-			// this.Dc_Data.rule_id = rule_id;
 			let data = '';
 			if (this.Dc_Data.value1) {
-				data += '&start_date=' + moment(this.Dc_Data.value1[0]).format('YYYY-MM-DD');
-				data += '&end_date=' + moment(this.Dc_Data.value1[1]).format('YYYY-MM-DD');
+				data += '&start_date=' + this.Dc_Data.value1[0];
+				data += '&end_date=' + this.Dc_Data.value1[1];
 			}
 			data += '&position=' + this.Dc_Data.DC_position;
 			this.Dc_Data.dept_name > 0 ? (data += '&dept_id=' + this.Dc_Data.dept_name) : (data += '&dept_id=0');
@@ -779,8 +731,8 @@ export default {
 		this.tips_show = this.$getCache('dept_rank_tips') ? false : true;
 		this.getDepartment();
 		this.getEmployeeList();
-		this.get_list(this.formData, true);
 		this.get_rule_tree();
+		this.get_list();
 	}
 };
 </script>

+ 4 - 2
src/views/ranking/integral_event.vue

@@ -165,7 +165,7 @@
 					</div>
 				</el-row>
 
-				<el-row v-show="detail_info.rule_list">
+				<el-row >
 					<el-col :span="6">任务描述</el-col>
 					<el-col :span="18" v-if="detail_info.remark">{{ detail_info.remark && (detail_info.remark.customize || detail_info.remark.rule) }}</el-col>
 				</el-row>
@@ -736,7 +736,9 @@ export default {
 				.then(res => {
 					if (res.data.code == 1) {
 						this.list = res.data.data.list;
-						this.total = res.data.data.total;
+						if(data.page==1){
+							this.total = res.data.data.total;
+						}
 					} else {
 						this.$message.error(res.data.data.msg);
 					}

+ 3 - 1
src/views/ranking/integral_event_two.vue

@@ -682,7 +682,9 @@ export default {
 				.then(res => {
 					if (res.data.code == 1) {
 						this.list = res.data.data.list;
-						this.total = res.data.data.total;
+						if(data.page==1){
+							this.total = res.data.data.total;
+						}
 					} else {
 						this.$message.error(res.data.data.msg);
 					}

+ 496 - 54
src/views/set/framework.vue

@@ -41,7 +41,7 @@
 					</div>
 				</div>
 				<div class="terr-right border-right flex-1">
-					<div class="margin-bottom">
+					<div class="margin-bottom flex-box-ce">
 						<el-button @click="participation()" :loading="enable_loading" size="medium" type="primary">批量启用</el-button>
 						<el-button @click="forbidden()" :loading="enable_loading" size="medium" type="danger" style="margin-right: 10px;">批量禁用</el-button>
 						<el-select v-model="status"  size="medium" style="margin-right: 10px;width: 150px;">
@@ -53,6 +53,8 @@
 						  </el-option>
 						</el-select>
 						<el-input placeholder="输入同事姓名" size="medium" style="width: 230px;" v-model="keywords" clearable></el-input>
+						<div class="flex-1"></div>
+						<el-button @click="showDrawerTow=true" plain size="medium" type="primary">未授权人员</el-button>
 					</div>
 					<div>
 						<el-button size="small" type="success" @click="import_rules_show = true" plain>导入人员</el-button>
@@ -65,7 +67,7 @@
 								<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.is_creator" class="green">(系统管理员)</div>
 									<div style="margin-left: 10px;" v-if="scope.row.id == userInfo.id" class="green">(我)</div>
 								</div>
 							</template>
@@ -131,6 +133,7 @@
 						
 						<el-table-column prop="id" label="操作" >
 							<template slot-scope="scope">
+<!-- 								<el-link style="padding-right: 10px;" type="info" @click="moreMessage(scope.row.id)" :underline="false">转交事项</el-link> -->
 								<el-link type="primary" @click="moreMessage(scope.row.id)" :underline="false">更多信息</el-link>
 							</template>
 						</el-table-column>
@@ -155,56 +158,121 @@
 			<input  v-model="copyIds" id="biao" style="opacity:0"/>
 		</div>
 		
-		<el-dialog :close-on-click-modal="false" ref="EditInformation_list" title="员工详情" width="500px" :before-close="detailFormreturn" :visible.sync="diaTableVisible">
-			<div style="padding-right:50px;">
-			<el-form ref="detailForm" :model="messageMore"  @submit.native.prevent v-loading="show_loading">
-				<el-form-item label="员工标识" prop="id" :label-width="'100px'">
-					<el-input v-model="copyIds" disabled auto-complete="off"></el-input>
-					<span style="position:absolute;top:1px;right:7px;font-size:12px;color:#61aeff;cursor:pointer;" @click="copyToClipboard()">点击复制</span>
-				</el-form-item>
-				<el-form-item label="姓名" prop="name" :label-width="'100px'">
-					<el-input v-model="messageMore.name" disabled ref="inputName" auto-complete="off"></el-input>
-				</el-form-item>
-				<el-form-item label="入职时间" prop="accedence_time" :label-width="'100px'">
-					<el-date-picker
-					style="width:100%;"
-					v-model="messageMore.accedence_time"
-					type="date"
-					value-format="yyyy-MM-dd"
-					placeholder="选择日期"
-					disabled
-					></el-date-picker>
-				</el-form-item>
-				<el-form-item label="部门" prop="name" :label-width="'100px'">
-					<el-input v-model="deptList" disabled ref="inputName" placeholder="暂无部门"  auto-complete="off"></el-input>
-				</el-form-item>
-				<el-form-item label="是否参与排名" prop="name" :label-width="'100px'">
-					<span v-if="messageMore.is_creator != 1" class="participateRank"
-						:style="messageMore.is_ranking == 1 ? 'color:#409eff' : 'color:#F56C6C'"
-						@click="rankingtakePartIn(messageMore.id, messageMore.is_ranking)">
-							{{ messageMore.is_ranking == 1 ? '参与' : '不参与' }}
-					</span>
-					<span v-else class="fontColorB">不参与</span>
-				</el-form-item>
-				<el-form-item label="管理上级" prop="name" :label-width="'100px'">
-					<el-input auto-complete="off" v-model="propList" :disabled="messageMore.is_creator == 1 || messageMore.is_official == 0"  placeholder="暂无管理上级"></el-input>
-					<div
-					@click="setSuperior(messageMore)"
-					v-if="messageMore.is_creator != 1 && messageMore.is_official != 0"
-					style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"
-					></div>
-				</el-form-item>
-				<el-form-item label="直属上级" prop="name" :label-width="'100px'">
-					<el-input auto-complete="off" v-model="dirSupervisor.name" :disabled="messageMore.is_creator == 1 || messageMore.is_official == 0"  placeholder="暂无直属上级"></el-input>
-					<div
-					@click="dirSuperior(messageMore)"
-					v-if="messageMore.is_creator != 1 && messageMore.is_official != 0"
-					style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"
-					></div>
-				</el-form-item>
-			</el-form>
+		<el-dialog  :close-on-click-modal="false" ref="EditInformation_list" title="员工详情" width="500px" :before-close="detailFormreturn" :visible.sync="diaTableVisible">
+			<div style="padding-right:20px;">
+				<div class="flex-box-end" style="margin-bottom: 20px;"><el-button size="mini" type="primary" @click="openZj()">任务,审批事项转交</el-button></div>
+				<el-form ref="detailForm" :model="messageMore"  @submit.native.prevent v-loading="show_loading">
+					<el-form-item label="员工标识" prop="id" :label-width="'100px'">
+						<el-input v-model="copyIds" disabled auto-complete="off"></el-input>
+						<span style="position:absolute;top:1px;right:7px;font-size:12px;color:#61aeff;cursor:pointer;" @click="copyToClipboard()">点击复制</span>
+					</el-form-item>
+					<el-form-item label="姓名" prop="name" :label-width="'100px'">
+						<el-input v-model="messageMore.name" disabled ref="inputName" auto-complete="off"></el-input>
+					</el-form-item>
+					<el-form-item label="入职时间" prop="accedence_time" :label-width="'100px'">
+						<el-date-picker
+						style="width:100%;"
+						v-model="messageMore.accedence_time"
+						type="date"
+						value-format="yyyy-MM-dd"
+						placeholder="选择日期"
+						disabled
+						></el-date-picker>
+					</el-form-item>
+					<el-form-item label="部门" prop="name" :label-width="'100px'">
+						<el-input v-model="deptList" disabled ref="inputName" placeholder="暂无部门"  auto-complete="off"></el-input>
+					</el-form-item>
+					<el-form-item label="是否参与排名" prop="name" :label-width="'100px'">
+						<span v-if="messageMore.is_creator != 1" class="participateRank"
+							:style="messageMore.is_ranking == 1 ? 'color:#409eff' : 'color:#F56C6C'"
+							@click="rankingtakePartIn(messageMore.id, messageMore.is_ranking)">
+								{{ messageMore.is_ranking == 1 ? '参与' : '不参与' }}
+						</span>
+						<span v-else class="fontColorB">不参与</span>
+					</el-form-item>
+					<el-form-item label="管理上级" prop="name" :label-width="'100px'">
+						<el-input auto-complete="off" v-model="propList" :disabled="messageMore.is_creator == 1 || messageMore.is_official == 0"  placeholder="暂无管理上级"></el-input>
+						<div
+						@click="setSuperior(messageMore)"
+						v-if="messageMore.is_creator != 1 && messageMore.is_official != 0"
+						style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"
+						></div>
+					</el-form-item>
+					<el-form-item label="直属上级" prop="name" :label-width="'100px'">
+						<el-input auto-complete="off" v-model="dirSupervisor.name" :disabled="messageMore.is_creator == 1 || messageMore.is_official == 0"  placeholder="暂无直属上级"></el-input>
+						<div
+						@click="dirSuperior(messageMore)"
+						v-if="messageMore.is_creator != 1 && messageMore.is_official != 0"
+						style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"
+						></div>
+					</el-form-item>
+				</el-form>
 			</div>
 		</el-dialog>
+		
+		<!-- 事项转交 -->
+		<el-dialog class="dialog" :title="'事项转交 ('+selectUserName+')'" :visible.sync="isShowZj" top="10vh" width="700px" :before-close="handleClose">
+			<div>
+			  <el-tabs v-model="activeName">
+				<el-tab-pane label="待完成任务" name="first"></el-tab-pane>
+				<el-tab-pane label="待审批事项" name="second"></el-tab-pane>
+			  </el-tabs>
+			  <div class="flex-box-ce">
+					<el-select size="small" style="width: 150px" v-model="taskType" placeholder="请选择截止日期" v-if="activeName=='first'">
+						<el-option :key="1" label="Ta负责的" :value="1"></el-option>
+						<el-option :key="2" label="Ta审批的" :value="2"></el-option>
+					</el-select>
+					<el-input size="small"  prefix-icon="el-icon-search" style="width: 200px;margin-left: 10px;" clearable placeholder="内容搜索" v-model="keyName"></el-input>
+					<span class="fontColorC" style="font-size: 12px;padding-left: 10px;">请选择对应事项进行转交,暂不支持批量转交</span>
+			  </div>
+			  <div>
+				  <template v-if="activeName=='first'">
+					  <el-table :data="taskList" style="width: 100%;height: 536px;">
+					  	<el-table-column label="任务内容" prop="task_name">
+					  		<template slot-scope="scope"><span class="font-flex-word" style="max-width: 400px;">{{ scope.row.task_name }}</span></template>
+					  	</el-table-column>
+<!-- 					  	<el-table-column label="积分" width="80px">
+					  		<template slot-scope="scope">
+					  			<span class="red" v-if="scope.row.point_config.base_point > 0">+{{ scope.row.point_config.base_point }} {{ scope.row.pt_name }}</span>
+					  			<span class="green" v-else>{{ scope.row.point_config.base_point }} {{ scope.row.pt_name }}</span>
+					  		</template>
+					  	</el-table-column> -->
+					  	<el-table-column label="操作" width="120px">
+					  		<template slot-scope="scope">
+								<el-link type="primary" style="padding-right: 10px;" :underline="false" @click.stop="openDetail(scope.row)" class="blue">查看任务</el-link>
+								<el-link type="primary" :underline="false" @click.stop="completeBtn(scope.row,1)">转交</el-link>
+					  		</template>
+					  	</el-table-column>
+					  	<template slot="empty"><noData></noData></template>
+					  </el-table>
+				  </template>
+				  <template v-if="activeName=='second'">
+					  <el-table :data="spList" style="width: 100%;height: 536px;">
+						<el-table-column label="审批内容" prop="remark.rule">
+							<template slot-scope="scope">
+								<span class="font-flex-word" style="max-width: 400px;">{{ scope.row.remark.customize || scope.row.remark.rule }}</span>
+							</template>
+						</el-table-column>
+						<el-table-column label="操作" width="120px">
+							<template slot-scope="scope">
+								<el-link style="padding-right: 10px;" type="primary" :underline="false" @click.stop="openDetailXq(scope.row)">查看审批</el-link>
+								<el-link type="primary" :underline="false" @click.stop="completeBtn(scope.row,2)">转交</el-link>
+							</template>
+						</el-table-column>
+						<template slot="empty"><noData></noData></template>
+					  </el-table>
+				  </template>
+				  <center class="pagination">
+				  	<el-pagination	:current-page.sync="page3" 	layout="total,prev,pager,next" 	:total="total3" @size-change="handleSizeChange3" @current-change="handleCurrentChange3" :page-size="perPage3"></el-pagination>
+				  </center>
+			  </div>
+			</div>
+		</el-dialog>
+		
+		<!-- 详情弹窗 -->
+		<taskDetailsPopup :visible.sync="showDetailPopup" v-if="showDetailPopup" :id="taskId" :title="'任务详情'"></taskDetailsPopup>
+		<!-- 审批详情 -->
+		<examinePopup :title="'审核详情'" :id="examineId" :show.sync="detailShow"></examinePopup>
 
 		<el-dialog title="设置是否参与排名" :visible.sync="dialogVisible" top="30vh" width="520px" :before-close="handleClose">
 			<div style="margin-left:20px;">
@@ -274,13 +342,67 @@
 				<el-button type="primary" :loading="scope_loading" :disabled="scope_loading" @click="dir_SupScope">完成</el-button>
 			</span>
 		</el-dialog>
+		<!-- 未授权人员 -->
+		<el-drawer :visible.sync="showDrawerTow" :append-to-body="true" :with-header="false">
+		  <header class="drawer-header flex-box-ce">
+		    <span class="flex-1">未授权人员</span>
+		  </header>
+		  <div class="drawer-main">
+				<div class="flex-box-ce"><el-input prefix-icon="el-icon-search"  maxlength="10" show-word-limit  placeholder="人员搜索" clearable v-model="userName"></el-input></div>
+				<ul class="ul"  v-loading="tableToading2">
+				  <li v-for="(item, index) in noUserList" :key="index" class="flex-box-ce li" style="padding: 10px 0;">
+					<div class="flex-1 flex-box-ce">
+						<userImage :user_name="item.name"  :img_url="item.img_url"></userImage>
+						<div class="flex-box-v" style="margin: 0 10px;">
+						  <div>{{ item.name }}</div>
+						  <div v-if="item.employee_detail.dept_list.length > 0" style="margin-top: 5px;" class="fontColorC font-flex-word">
+						    <span v-for="(item2, index2) in item.employee_detail.dept_list" :key="index2">
+						      <span>{{ item2.dept_name }}</span>
+						      <span v-if="item.employee_detail.dept_list.length - index2 > 1">,</span>
+						    </span>
+						  </div>
+						</div>		  
+					</div>
+					<span style="cursor: pointer;" class="blue" @click="openZj(item)">事项转交</span>
+				  </li>
+				</ul>
+				<noData v-if="noUserList.length==0"></noData>
+				<center class="pagination">
+					<el-pagination
+					:current-page.sync="page2" 
+					layout="total,prev,pager,next" 
+					:total="total2" 
+					@size-change="handleSizeChange2"
+					@current-change="handleCurrentChange2" 
+					:page-size="perPage2">
+					</el-pagination>
+				</center>
+		  </div>
+		</el-drawer>
+	
+		<el-dialog title="转交" :visible.sync="comtheResults" width="500px" :close-on-click-modal="false">
+		  <div class="">
+		    <div style="margin-bottom: 20px;">{{selectIndex==1? '当前负责人':'当前审批人'}}:<span style="padding-left: 10px;">{{ selectUserName }}</span></div>
+			<div class="flex-box-ce">
+				<span style="line-height:36px;width: 84px;text-align: right;">转给:</span>
+				<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>
+		  <span slot="footer" class="dialog-footer">
+		    <el-button @click="comtheResults = false">取 消</el-button>
+		    <el-button type="primary" @click="savecomtheResults()">确 定</el-button>
+		  </span>
+		</el-dialog>
 	</div>
 </template>
 
 <script>
-
 import EmployeeSelector from '@/components/EmployeeSelector.vue';
 import {_debounce} from '@/api/auth';
+import examinePopup from '@/components/examinePopup';
+import taskDetailsPopup from '@/views/common/taskDetailsPopup'
 export default {
 	data() {
 		return {
@@ -291,7 +413,7 @@ export default {
 			clickone: false,
 			mangeId: 0,
 			selected_manage: { employee: [], dept: [] },
-
+			
 			is: 1,
 			no: 0,
 			page: 1,
@@ -352,10 +474,41 @@ export default {
 			dirSupList: [],
 			selected_dirSup: { employee: [], dept: [] },
 			employeeAll:[],//人员列表
+			
+			// 未授权
+			showDrawerTow:false,
+			tableToading2:false,
+			page2: 1,
+			perPage2: 10,
+			total2: 0,
+			noUserList: [],
+			userName:'',
+			
+			isShowZj:false,
+			activeName:'first',
+			taskList:[],
+			spList:[],
+			showDetailPopup:false,
+			detailShow:false,
+			examineId:0,
+			taskId:0,
+			selectUserId:0,
+			
+			page3: 1,
+			perPage3: 10,
+			total3: 0,
+			keyName:'',
+			comtheResults:false,
+			selectIndex:1,
+			selectUserName:'',
+			employee_id:'',
+			selectId:0,
+			employee_map:[],
+			taskType:1,
 		};
 	},
 	components: {
-		EmployeeSelector
+		EmployeeSelector,examinePopup,taskDetailsPopup
 	},
 	watch: {
 		keywords: {
@@ -372,6 +525,61 @@ export default {
 		status(){
 			 this.page = 1;
 			 this.getEmployee();
+		},
+		userName: {
+		  deep: true,
+		  handler: _debounce(function(val) {
+			this.page2 = 1;
+			this.getNoUser();
+		  })
+		},
+		keyName: {
+		  deep: true,
+		  handler: _debounce(function(val) {
+			this.page3 = 1;
+			if(this.activeName=='first'){
+				if(this.taskType==1){
+					this.getTaskList();
+				}else{
+					this.getTaskList2();
+				}
+			}else{
+				this.getSpList();
+			}
+		  })
+		},
+		showDrawerTow(val){
+			if(val){
+				this.getNoUser();
+			}
+		},
+		activeName(val){
+			this.page3= 1;
+			this.perPage3= 10;
+			this.total3= 0;
+			this.keyName='';
+			// this.taskType=1;
+			this.$nextTick(()=>{
+				if(val=='first'){
+					if(this.taskType==1){
+						this.getTaskList();
+					}else{
+						this.getTaskList2();
+					}
+				}else{
+					this.getSpList();
+				}
+			})
+		},
+		taskType(val){
+			this.page3= 1;
+			this.perPage3= 10;
+			this.total3= 0;
+			if(val==1){
+				this.getTaskList();
+			}else{
+				this.getTaskList2();
+			}
 		}
 	},
 	created() {
@@ -379,6 +587,7 @@ export default {
 		this.getInfo();
 		this.getEmployee();
 		this.manageList();
+		this.getEmployeeList();
 	},
 	mounted() {
 		this.$nextTick(function() {
@@ -390,6 +599,122 @@ export default {
 		});
 	},
 	methods: {
+		//获取员工列表
+		getEmployeeList() {
+			this.$axios('get', '/api/employee/index', { dept_id: 0, keywords: '', page: 1, page_size: 3000, is_official: 1 })
+				.then(res => {
+					let list = res.data.data.list;
+					this.employee_map = list;
+				})
+				.finally(err => {});
+		},
+		savecomtheResults(){
+			if(!this.employee_id){
+				
+				this.$message.error('请选择转交人员')
+				return false
+			}
+			let url='';
+			if(this.selectIndex==1){
+				url=this.taskType==1? "api/integral/work/transfer":'api/integral/work/transfer/reviewer'
+			}else{
+				url='api/integral/review/transfer'
+			}
+			let data={
+				work_id:this.selectId,
+				review_id:this.selectId,
+				employee_id:this.employee_id,
+			}
+			this.$axios('post', url, data).then(res => {
+				this.$message.success('已转交')
+				this.comtheResults=false;
+			})
+		},
+		completeBtn(item,index){
+			this.selectIndex=index;
+			this.selectId=item.id;
+			this.employee_id='';
+			this.comtheResults=true;
+		},
+		openDetail(row) {
+			this.taskId = parseInt(row.id);
+			this.showDetailPopup = true;
+		},
+		openDetailXq(row) {
+			this.examineId = row.id;
+			this.detailShow = true;
+		},
+		
+		getTaskList(){
+			let data={
+				status: 'running',
+				page: this.page3,
+				page_size:this.perPage3,
+				content:this.keyName,
+				sort:'publish',
+				employee_id:this.selectUserId,
+			}
+			this.$axios('get', '/api/integral/work/list', data).then(res => {
+				this.total3 = res.data.data.total;
+				this.taskList = res.data.data.list;
+			})
+		},
+		getTaskList2(){
+			let data={
+				page: this.page3,
+				page_size:this.perPage3,
+				reviewer_id:this.selectUserId,
+				keyword:this.keyName,
+			}
+			this.$axios('get', '/api/integral/work/list/reviewer/r', data).then(res => {
+				this.total3 = res.data.data.total;
+				this.taskList = res.data.data.list;
+			})
+		},
+		getSpList(){
+			let data={
+				type: 'waiting',
+				page: this.page3,
+				pt_id:0,
+				page_size:this.perPage3,
+				keyword:this.keyName,
+				reviewer_id:this.selectUserId,
+			}
+			this.$axios('get', '/api/integral/review/list', data).then(res => {
+				this.$nextTick(()=>{
+					this.total3 = res.data.data.total;
+					this.spList = res.data.data.list;
+				})
+			})
+		},
+		openZj(item){
+			this.page3= 1;
+			this.perPage3= 10;
+			this.total3= 0;
+			this.keyName='';
+			this.taskType=1;
+			this.selectUserId=item? item.id:this.newId;
+			this.activeName='first';
+			this.selectUserName=item? item.name:this.messageMore.name,
+			this.getTaskList();
+			this.isShowZj=true;
+		},
+		getNoUser(){
+			this.tableToading2 = true;
+			let data={
+				keywords: this.userName,
+				page: this.page2,
+				page_size:this.perPage2,
+				is_scope:0,
+			}
+			this.$axios('get', '/api/employee/index', data).then(res => {
+				this.total2 = res.data.data.pageInfo.count;
+				this.noUserList = res.data.data.list;
+			}).finally(err => {
+				this.tableToading2 = false;
+			});
+		},
+		
 		manage_confirm(date) {
 			let manageId = [];
 			date.employee.forEach(item => manageId.push(item.id))
@@ -725,7 +1050,6 @@ export default {
 				this.$message.error({ message: '请选择参与的人员!' });
 				return;
 			}
-
 			this.enable_loading = true;
 			this.$axios('post', '/api/employee/enable', { employee_id: this.selectIds })
 				.then(res => {
@@ -821,12 +1145,130 @@ export default {
 		handleCurrentChange: function(val) {
 			this.page = val;
 			this.getEmployee();
+		},
+		handleSizeChange2: function(val) {
+			this.perPage2 = val;
+			this.page2 = 1;
+			this.getNoUser();
+		},
+		//页码变更
+		handleCurrentChange2: function(val) {
+			this.page2 = val;
+			this.getNoUser();
+		},
+		handleSizeChange3: function(val) {
+			this.perPage3 = val;
+			this.page3 = 1;
+			if(this.activeName=='first'){
+				if(this.taskType==1){
+					this.getTaskList()
+				}else{
+					this.getTaskList2()
+				}
+			}else{
+				this.getSpList()
+			}
+		},
+		//页码变更
+		handleCurrentChange3: function(val) {
+			this.page3 = val;
+			if(this.activeName=='first'){
+				if(this.taskType==1){
+					this.getTaskList()
+				}else{
+					this.getTaskList2()
+				}
+			}else{
+				this.getSpList()
+			}
 		}
 	}
 };
 </script>
 
 <style lang="scss" scoped="scoped">
+.li {
+  border-bottom: 1px solid #f1f1f1;
+}
+.li:hover {
+  background-color: #f5f7fa;
+}
+.ul {
+  margin-top: 20px;
+}
+.el-icon-close {
+  cursor: pointer;
+  padding: 8px;
+  position: relative;
+  right: -8px;
+}
+.el-icon-close:hover {
+  color: #f56c6c;
+}
+.dialog ::v-deep .el-dialog__body{
+	padding-top: 0px;
+	padding: 0 20px;
+}
+
+::v-deep .li .el-checkbox__label {
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  display: block;
+  width: 440px;
+}
+::v-deep .li .el-radio__label {
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  display: block;
+  width: 100%;
+  max-width: 440px;
+}
+::v-deep .el-drawer {
+  width: 500px !important;
+}
+.drawer-header {
+  height: 60px;
+  border-bottom: 1px solid #ebebeb;
+  line-height: 60px;
+  font-size: 18px;
+  font-weight: 500;
+  padding: 0 20px;
+}
+.drawer-main {
+  height: calc(100vh - 120px);
+  padding: 20px;
+  overflow-y: scroll;
+  min-width: 450px;
+  font-size: 14px;
+}
+.drawer-main::-webkit-scrollbar-track {
+  -webkit-box-shadow: inset 0 0 5px rgba(255, 255, 255, 0.3);
+  border-radius: 5px;
+  background-color: rgba(216, 216, 216, 0.8);
+}
+.drawer-main::-webkit-scrollbar {
+  width: 5px;
+  background-color: rgba(201, 201, 201, 0);
+}
+.drawer-main::-webkit-scrollbar-thumb {
+  border-radius: 5px;
+  -webkit-box-shadow: inset 0 0 5px rgb(153, 145, 145) (160, 154, 154);
+  background-color: rgb(168, 167, 167);
+}
+.drawer-footer {
+  background-color: #fff;
+  border-top: 1px solid #ebebeb;
+  padding: 10px 20px;
+  font-size: 14px;
+}
+::v-deep .width-150 {
+  width: 180px;
+}
+::v-deep :focus {
+  outline: 0;
+}
 .text-center {
 	text-align: center;
 }

+ 9 - 9
src/views/set/jurisdiction.vue

@@ -23,7 +23,7 @@
 							</el-button>
 							<el-button type="text" size="medium" plain v-if="item_info.code != 'employee'" @click="open_right(item_info)">刷新</el-button>
 						</div>
-						<div class="user_text fontColorC" v-if="item_info.code == 'creator'">创始人默认为开通【功道云积分制】的人,拥有所有的功能及管理权限</div>
+						<div class="user_text fontColorC" v-if="item_info.code == 'creator'">系统管理员默认为开通【功道云积分制】的人,拥有所有的功能及管理权限</div>
 						<div class="user_text fontColorC" v-if="item_info.code == 'admin'">公司管理员一般为合伙人、股东等高级管理人员,可管理多个部门和人员</div>
 						<div class="user_text fontColorC" v-if="item_info.code == 'point_manager'">积分专员一般为人事、行政等管理督办人员,可管理多个部门和人员</div>
 						<div class="user_text fontColorC" v-if="item_info.code == 'dept_manager'">部门管理员一般为部门/团队经理、主管、组长,可管理一部分人员</div>
@@ -74,7 +74,7 @@
 						<!-- 						<div v-else style="text-align: center;">
 							<template>
 								<div style="margin-top: 10%;margin-bottom: 10px;">
-									创始人即钉钉的主管理员,请确认应用的使用范围中是否选择了主管理员设置步骤:
+									系统管理员即钉钉的主管理员,请确认应用的使用范围中是否选择了主管理员设置步骤:
 								</div>
 								<div>
 									进入【<span class="blue">钉钉管理后台</span>】→【<span class="blue">工作台</span>】→【<span class="blue">功道云积分制</span>】→【<span class="blue">设置</span>】,修改可见范围为全部员工或从部分员工中选上主管理员
@@ -612,9 +612,9 @@
 			</el-form>
 		</el-dialog>
 		<!-- 添加老板 -->
-		<el-dialog title="添加创始人" :visible.sync="dialogFormVisible" top="5vh" width="700px">
+		<el-dialog title="添加系统管理员" :visible.sync="dialogFormVisible" top="5vh" width="700px">
 			<EmployeeSelector v-if="dialogFormVisible" ref="boss" :multi="false" :user_no_select="false" @confirm="selectBoss"></EmployeeSelector>
-			<div style="text-align: center;" class="fontColorD">创始人至少有一位,创始人不能删除自己</div>
+			<div style="text-align: center;" class="fontColorD">系统管理员至少有一位,系统管理员不能删除自己</div>
 			<div slot="footer" class="dialog-footer">
 				<el-button @click="dialogFormVisible = false" :disabled="isShowBoss">取 消</el-button>
 				<el-button type="primary" :loading="isShowBoss" :disabled="isShowBoss" @click="add_creator()">确 定</el-button>
@@ -772,7 +772,7 @@ export default {
 				// reward_ratio_point: [{ required: true, validator: minimum, trigger: 'blur' }, { type: 'number', message: '分值必须为数字值' }]
 			},
 			my_no_select: '', //设置人的ID
-			isStart: false, //是否是创始人或者积分负责人
+			isStart: false, //是否是系统管理员或者积分负责人
 			// BOSS操作
 			dialogFormVisible: false, //控制添加老板弹窗
 			bossObj: '',
@@ -859,7 +859,7 @@ export default {
 	components: { EmployeeSelector, toLead },
 	created() {
 		this.get_role_list();
-		// 判断是否是创始人
+		// 判断是否是系统管理员
 		this.isStart = this.$getIsCreator('creator');
 	},
 	mounted() {
@@ -1328,18 +1328,18 @@ export default {
 			this.management_scope_show = false;
 			this.dialogFormVisible = false;
 		},
-		//删除创始人
+		//删除系统管理员
 		del_creator() {
 			var userData = this.$getUserData();
 			if (!this.radioVal) {
-				this.$message.error('请选择要删除的创始人');
+				this.$message.error('请选择要删除的系统管理员');
 				return false;
 			}
 			if (this.radioVal == userData.id) {
 				this.$message.error('不能删除自己');
 				return false;
 			}
-			this.$confirm('确定要删除该创始人?', '提示', {
+			this.$confirm('确定要删除该系统管理员?', '提示', {
 				confirmButtonText: '确定',
 				cancelButtonText: '取消',
 				type: 'warning'

+ 31 - 31
src/views/set/rule.vue

@@ -89,7 +89,7 @@
 				<el-form-item label="上级分类">
 					<el-cascader
 						style="width: 400px;"
-						ref="dept"
+						ref="pid"
 						v-model="dept_formdata.pid"
 						:options="rule_tree"
 						:props="{ checkStrictly: true, label: 'name', value: 'id', children: 'child' }"
@@ -365,7 +365,7 @@ export default {
 		},
 		'dept_formdata.pid'(val, old_val) {
 			this.$nextTick(() => {
-				this.$refs.dept.dropDownVisible = false;
+				this.$refs.pid.dropDownVisible = false;
 			});
 		},
 		'rules_detail_form.rule_id'(val, old_val) {
@@ -409,28 +409,28 @@ export default {
 		//添加分组
 		submit_add_dept(form) {
 			this.dept_loading = true;
-			let that = this;
-			that.$refs[form].validate(valid => {
+			this.$refs[form].validate(valid => {
 				if (valid) {
-					let pidData=JSON.parse(JSON.stringify(that.dept_formdata.pid))//备份选择的规则,因为提交时间PID会被重新赋值
-					that.dept_formdata.dept_ids=JSON.stringify(that.dept_formdata.dept_ids)
-					if (that.class_type == 'edit') {
-						delete that.dept_formdata.child;
-						that.dept_formdata.rule_id = that.dept_formdata.id;
-						if (typeof that.dept_formdata.pid == 'number') {
+					let pidData=JSON.parse(JSON.stringify(this.dept_formdata.pid))//备份选择的规则,因为提交时间PID会被重新赋值
+					if (this.class_type == 'edit') {
+						delete this.dept_formdata.child;
+						this.dept_formdata.rule_id = this.dept_formdata.id;
+						if (typeof this.dept_formdata.pid == 'number') {
 							
 						} else {
-							if (that.dept_formdata.pid.length > 0) {
-								that.dept_formdata.pid = that.dept_formdata.pid[that.dept_formdata.pid.length - 1];
+							if (this.dept_formdata.pid.length > 0) {
+								this.dept_formdata.pid = this.dept_formdata.pid[this.dept_formdata.pid.length - 1];
 							} else {
-								that.dept_formdata.pid = 0;
+								this.dept_formdata.pid = 0;
 							}
 						}
-						this.$axios('post', '/api/integral/rule/edit', that.dept_formdata)
+						let dept_formdata=JSON.parse(JSON.stringify(this.dept_formdata))
+						dept_formdata.dept_ids=JSON.stringify(dept_formdata.dept_ids)
+						this.$axios('post', '/api/integral/rule/edit',dept_formdata)
 							.then(res => {
 								if (res.data.code == 1) {
-									that.selectItem.name = that.dept_formdata.name;
-									that.$message.success('修改积分分类成功');
+									this.selectItem.name = this.dept_formdata.name;
+									this.$message.success('修改积分分类成功');
 									this.getData(true);
 									this.add_dept_close('dept_formdata');
 								}
@@ -440,23 +440,23 @@ export default {
 								this.dept_loading = false;
 							});
 					} else {
-						if (that.dept_formdata.pid !== null && that.dept_formdata.pid.length == 0) {
-							that.dept_formdata.pid = 0;
+						if (this.dept_formdata.pid !== null && this.dept_formdata.pid.length == 0) {
+							this.dept_formdata.pid = 0;
 						} else {
-							that.dept_formdata.pid = that.dept_formdata.pid[that.dept_formdata.pid.length - 1];
+							this.dept_formdata.pid = this.dept_formdata.pid[this.dept_formdata.pid.length - 1];
 						}
-						this.$axios('post', '/api/integral/rule', that.dept_formdata)
-							.then(res => {
-								if (res.data.code == 1) {
-									that.$message.success('添加积分分类成功');
-									this.getData(true);
-									this.add_dept_close('dept_formdata');
-								}
-							})
-							.finally(() => {
-								this.dept_formdata.pid=pidData
-								this.dept_loading = false;
-							});
+						let dept_formdata=JSON.parse(JSON.stringify(this.dept_formdata))
+						dept_formdata.dept_ids=JSON.stringify(dept_formdata.dept_ids)
+						this.$axios('post', '/api/integral/rule',dept_formdata).then(res => {
+							if (res.data.code == 1) {
+								this.$message.success('添加积分分类成功');
+								this.getData(true);
+								this.add_dept_close('dept_formdata');
+							}
+						}).finally(() => {
+							this.dept_formdata.pid=pidData
+							this.dept_loading = false;
+						});
 					}
 				} else {
 					this.dept_loading = false;

+ 1 - 1
src/views/set/screenSet.vue

@@ -877,7 +877,7 @@ export default {
 			// 	this.$refs.dept4.dropDownVisible = false;
 			// });
 		},
-		// 选择录入对象
+		// 选择奖扣对象
 		move_employee_confirm(data) {
 			this.employee_selected = { dept: [], employee: [] };
 			this.config.ranking.condition.employeeName = '';

+ 1 - 1
src/views/set/systemLayout.vue

@@ -22,7 +22,7 @@
 						  <el-checkbox v-model="event_entry_review" label="积分奖扣" border size="small"></el-checkbox>
 						  <el-checkbox v-model="event_task_review" label="任务" border size="small"></el-checkbox>
 						</div>
-						<div>积分管理员、公司管理员、创始人均可操作复核</div>
+						<div>积分管理员、公司管理员、系统管理员均可操作复核</div>
 						<el-checkbox v-model="event_review_point">允许复核人调整分值</el-checkbox>
 					</div>
 				</div>

+ 1 - 1
src/views/task/allTask.vue

@@ -85,7 +85,7 @@
 					<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>
+							<!-- <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">

+ 11 - 18
src/views/task/myExamine.vue

@@ -58,8 +58,8 @@
 					<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>
+							<!-- <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">
@@ -99,7 +99,7 @@ export default {
 	name: 'my_task',
 	data() {
 		return {
-			tabsOption: [{ label: '待审批', name: 'complete' },{ label: '待完成', name: 'running' }, { label: '已审批', name: 'reviewed' }],
+			tabsOption: [{ label: '待完成', name: 'running' },{ label: '待审批', name: 'complete' }, { label: '已审批', name: 'reviewed' }],
 			list: [],
 			loading: false,
 			total: null,
@@ -111,7 +111,7 @@ export default {
 			},
 			formData: {
 				employee_id:'',
-				status: 'complete',
+				status: 'running',
 				pt_id: 0,
 				sort: 'publish',
 				source_type: '0',
@@ -202,8 +202,7 @@ export default {
 			this.showDetailPopup = true;
 		},
 		getSpList() {
-			let self = this;
-			self.loading = true;
+			this.loading = true;
 			let params = JSON.parse(JSON.stringify(this.formData));
 			if (params.pt_id == 0) {
 				delete params.pt_id;
@@ -211,18 +210,12 @@ export default {
 			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;
-				});
+			this.$axios('get', '/api/integral/work/list/reviewer', params).then(res => {
+				this.list = res.data.data.list;
+				this.total = res.data.data.total;
+			}).finally(() => {
+				this.loading = false;
+			});
 		}
 	}
 };

+ 36 - 16
src/views/task/my_issue.vue

@@ -162,11 +162,11 @@
 					</el-table-column>
 					<el-table-column label="状态" prop="owner_id" width="100px">
 						<template slot-scope="scope">	
-						<span class="orange" v-if="scope.row.status == 1">待领取</span>			
-				<span class="orange" v-else-if="scope.row.status == 2">进行中</span>			
-				<span class="green" v-else-if="scope.row.status == 3">已完成</span>			
-				<span class="fontColorZ" v-else-if="scope.row.status == 4">已撤回</span>	
-						<span class="red" v-else>已过期</span>
+							<span class="orange" v-if="scope.row.status == 1">待领取</span>			
+							<span class="orange" v-else-if="scope.row.status == 2">进行中</span>			
+							<span class="green" v-else-if="scope.row.status == 3">已完成</span>			
+							<span class="fontColorZ" v-else-if="scope.row.status == 4">已撤回</span>	
+							<span class="red" v-else>已过期</span>
 						</template>
 					</el-table-column>
 
@@ -231,16 +231,28 @@
 						</template>
 					</el-table-column>
 					<el-table-column label="创建时间" prop="create_time" width="140px"></el-table-column>
-
-					<el-table-column prop="base_point" label="操作" align="center" width="80px">
+					<el-table-column label="状态" prop="create_time" width="140px">
 						<template slot-scope="scope">
-							<el-dropdown placement="bottom" :show-timeout="150" :hide-timeout="150">
-								<span class="el-dropdown-links">···</span>
-								<el-dropdown-menu slot="dropdown">
-									<el-dropdown-item :disabled="false"><el-button type="text" class="color-blue" v-loading.fullscreen.lock="bodyLoad" @click.stop="copyTask(scope.row)">复制</el-button></el-dropdown-item>
-									<el-dropdown-item :disabled="false"><el-button type="text" class="color-red" v-loading.fullscreen.lock="bodyLoad" @click.stop="deletes(scope.row, 2)">删除</el-button></el-dropdown-item>
-								</el-dropdown-menu>
-							</el-dropdown>
+							<span class="blue" v-if="scope.row.enable">已启用</span>
+							<span class="red" v-else>已暂停</span>
+						</template>
+					</el-table-column>
+					<el-table-column prop="base_point" label="操作"  width="80px">
+						<template slot-scope="scope">
+							<div class="flex-box-ce">
+<!-- 								<el-switch v-model="scope.row.enable" active-color="#13ce66"   inactive-color="#ff4949" :active-value="1"  :inactive-value="0"></el-switch>
+								<span style="padding-right: 20px;">{{scope.row.enable==1? '已启用':'已暂停'}}</span> -->
+								<el-dropdown placement="bottom" :show-timeout="150" :hide-timeout="150">
+									<span class="el-dropdown-links">···</span>
+									<el-dropdown-menu slot="dropdown">
+										<el-dropdown-item ><el-button type="text" class="color-blue" v-loading.fullscreen.lock="bodyLoad" @click.stop="copyTask(scope.row)">复制</el-button></el-dropdown-item>
+										<el-dropdown-item >
+											<el-button type="text" class="color-blue" v-loading.fullscreen.lock="bodyLoad" @click.stop="enable(scope.row)">{{scope.row.enable==1? '暂停任务':'启用任务'}}</el-button>
+										</el-dropdown-item>
+										<el-dropdown-item ><el-button type="text" class="color-red" v-loading.fullscreen.lock="bodyLoad" @click.stop="deletes(scope.row, 2)">删除</el-button></el-dropdown-item>
+									</el-dropdown-menu>
+								</el-dropdown>
+							</div>
 						</template>
 					</el-table-column>
 					<template slot="empty">		
@@ -430,6 +442,12 @@ export default {
 		this.getEmployee(); //员工列表
 	},
 	methods: {
+		enable(item){
+			this.$axios('post', '/api/integral/schedule/enable', { schedule_id:item.id }).then(res => {
+				this.$message.success(item.enable==1? '已暂停':'已启用');
+				this.get_list();
+			});
+		},
 		list_approver(id) {
 			let arr = this.employee_map.filter(x => x.id == id);
 			return arr[0] ? arr[0].name : '';
@@ -587,8 +605,10 @@ export default {
 					//数据过多的情况延迟较大
 					if (res.data.code == 1) {
 						//传入发布者ID进行判断			
-			self.list = res.data.data.list;
-						self.total = res.data.data.total;
+						self.list = res.data.data.list;
+						if(this.formData.page==1){
+							self.total = res.data.data.total;
+						}
 					} else {
 						self.$message.error(res.data.data.msg);
 						this.get_list();

+ 1 - 1
src/views/welfare/flManagement.vue

@@ -698,7 +698,7 @@ export default {
 				this.loadingDetail=false;
 			});
 		},
-		// 选择录入对象
+		// 选择奖扣对象
 		employeeConfirm(e) {
 			this.ruleForm.employee_ids = e.employee.map(item=>{
 				return item.id

+ 3 - 1
src/views/workbench/review.vue

@@ -732,7 +732,9 @@ export default {
 				.then(res => {
 					if (res.data.code == 1) {
 						this.list = res.data.data.list;
-						this.total = res.data.data.total;
+						if(data.page==1){
+							this.total = res.data.data.total;
+						}
 					} else {
 						this.$message.error(res.data.data.msg);
 					}