347617796@qq.com 4 tahun lalu
induk
melakukan
3e92224501

+ 73 - 0
src/components/Steps.vue

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

+ 9 - 5
src/components/publics/workpoints.vue

@@ -17,11 +17,15 @@
 		  </el-form-item>	
           <el-form-item  style="margin: 20px 0 0 0 " v-else>
             <template slot="label">
-              <span :style="'width:'+initia_head.initial_left">{{v.initialName}}</span>
-              <el-tooltip placement="top">
-                <div slot="content" v-html="v.initial_text"></div>
-                <span class="initia_mark" v-show="v.initia_mark">?</span>
-              </el-tooltip>
+				<template v-if="v.message">
+					<el-popover placement="bottom" width="400" trigger="hover">
+					  <div style="padding: 10px;">{{v.message}}</div>
+					  <span slot="reference" :style="'width:'+initia_head.initial_left">{{v.initialName}} <i class="el-icon-warning"></i></span>
+					</el-popover>
+				</template>
+				<template v-else>
+					<span slot="reference" :style="'width:'+initia_head.initial_left">{{v.initialName}}</span>
+				</template>
             </template>
             <el-input type="age" v-model="v.initia_input.age" :disabled="disabled"  autocomplete="off"  class="nitia_list_input"  placeholder="请输入分值" oninput="if(this.value=='00'){this.value='0';}else{this.value=this.value.replace(/[^0-9]/g,'')}"></el-input>
 		  </el-form-item>

+ 192 - 182
src/home.vue

@@ -146,13 +146,7 @@
 											<b>{{ index == 5 ? '倒数第2' : index == 6 ? '倒数第1' : '' }}</b>
 										</div>
 									</div>
-									<userImage
-										:img_url="item.employee_img_url"
-										fontSize="1"
-										:user_name="item.employee_name"
-										width="60px"
-										height="60px"
-									></userImage>
+									<userImage :img_url="item.employee_img_url" fontSize="1" :user_name="item.employee_name" width="60px" height="60px"></userImage>
 								</div>
 								<span
 									style="color:#303133;font-size:14px;text-align:center;margin-top:10px;display: inline-block;width:100%;display: block;text-overflow: ellipsis;white-space: nowrap;overflow: hidden;"
@@ -288,45 +282,69 @@
 			<el-col :span="6" style="min-width:280px;">
 				<el-row v-if="!creatorJurisdiction">
 					<div class="right-all-style" style="background-color:#fff;padding:20px;;text-align:left;margin-bottom: 10px;">
-					<span class="title">常用</span>
-					<div>
-						<span v-for="(item,index) in inCommonUse" :key="index" @click="$router.push({ path: item.push })" class="inCommonUseStyle">
-						<img :src="item.image" alt="" style="width:31px;height:31px;margin:11px 10% 0 8%;">
-						<b>{{item.name}}</b>
-						</span>
-					</div>
+						<span class="title">常用</span>
+						<div>
+							<span v-for="(item, index) in inCommonUse" :key="index" @click="$router.push({ path: item.push })" class="inCommonUseStyle">
+								<img :src="item.image" alt="" style="width:31px;height:31px;margin:11px 10% 0 8%;" />
+								<b>{{ item.name }}</b>
+							</span>
+						</div>
 					</div>
 				</el-row>
 				<el-row>
 					<div class="right-all-style" v-loading="highestPrizeBuckleloading" style="background:#fff;padding: 20px 20px 0;">
-						<span class="title">待我审批({{auditList.length}})</span>
-				
-						<div class="nopoint_box" v-if="auditList.length==0">
+						<span class="title">待我审批({{ auditList.length }})</span>
+
+						<div class="nopoint_box" v-if="auditList.length == 0">
 							<div class="noimg"></div>
 							<span class="title1" style="padding-bottom:20px;">还没有待我审批</span>
 						</div>
-				
+
 						<div v-else style="padding:20px 0 20px 0;" class="flex-box-v">
-							<div v-for="(item,index) in auditList" class="List_border" :key="index" style="cursor:pointer;display:flex;padding-top:10px;"  @click="openDetail(item)">
-								    <userImage
-								      width="45px"
-								      height="45px"
-								      :id="item.employee_id"
-								      :user_name="item.employee_name"
-								      style="margin-right:8px"
-								    ></userImage>
-								    <div class="rightexamineAndApproveList2">
-								      <p style="width:160px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#303133;font-size:16px"><b>{{item.employee_name}}{{item.source_type==1?'的积分任务':item.source_type==2?'的积分申请':item.source_type==3?'的积分录入':item.source_type==4?'的绩效工作':''}}</b></p>
-								      <p style="padding:10px 0;font-size:13px;line-height:20px;color:#303133;overflow:hidden; text-overflow:ellipsis;display:-webkit-box; -webkit-box-orient:vertical;-webkit-line-clamp:2; ">{{item.remark.rule || item.remark.customize}}</p>
-								      <div style="display:flex;padding-bottom:10px;justify-content: space-between;">
-								        <span style="color:#909399">{{item.event_time}}</span>
-								        <div>
-								          <span style="color:#26A2FF;cursor:pointer" >去审批</span>
-								        </div>
-								      </div>
-								    </div>
+							<div
+								v-for="(item, index) in auditList"
+								class="List_border"
+								:key="index"
+								style="cursor:pointer;display:flex;padding-top:10px;"
+								@click="openDetail(item)"
+							>
+								<userImage width="45px" height="45px" :id="item.employee_id" :user_name="item.employee_name" style="margin-right:8px"></userImage>
+								<div class="rightexamineAndApproveList2">
+									<p style="width:160px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#303133;font-size:16px">
+										<b>
+											{{ item.employee_name
+											}}{{
+												item.source_type == 1
+													? '的积分任务'
+													: item.source_type == 2
+													? '的积分申请'
+													: item.source_type == 3
+													? '的积分录入'
+													: item.source_type == 4
+													? '的绩效工作'
+													: ''
+											}}
+										</b>
+									</p>
+									<p
+										style="padding:10px 0;font-size:13px;line-height:20px;color:#303133;overflow:hidden; text-overflow:ellipsis;display:-webkit-box; -webkit-box-orient:vertical;-webkit-line-clamp:2; "
+									>
+										{{ item.remark.rule || item.remark.customize }}
+									</p>
+									<div style="display:flex;padding-bottom:10px;justify-content: space-between;">
+										<span style="color:#909399">{{ item.event_time }}</span>
+										<div><span style="color:#26A2FF;cursor:pointer">审批</span></div>
+									</div>
 								</div>
-							<div class="more" v-show="auditList.length >= 3" style="text-align: center;color: #909399;font-size: 14px; padding:16px 16px 0 16px; cursor: pointer;"  @click="$router.push({path: '/approval_list'})">查看更多</div>
+							</div>
+							<div
+								class="more"
+								v-show="auditList.length >= 3"
+								style="text-align: center;color: #909399;font-size: 14px; padding:16px 16px 0 16px; cursor: pointer;"
+								@click="$router.push({ path: '/approval_list' })"
+							>
+								查看更多
+							</div>
 						</div>
 					</div>
 				</el-row>
@@ -340,7 +358,7 @@
 						</div>
 
 						<div v-else style="display:flex;padding:20px 0 20px 0;">
-							<userImage width="45px" height="45px"  :user_name="prize.name" fontSize=".9" style="margin-right:8px"></userImage>
+							<userImage width="45px" height="45px" :user_name="prize.name" fontSize=".9" style="margin-right:8px"></userImage>
 							<div class="rightexamineAndApproveList" style="border:0px">
 								<p
 									style="width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#73767c;font-size:16px;display:flex;justify-content: space-between;"
@@ -371,7 +389,7 @@
 						</div>
 
 						<div v-else style="display:flex;padding:20px 0 20px 0;">
-							<userImage width="45px" height="45px"  :user_name="buckle.name" fontSize=".9" style="margin-right:8px"></userImage>
+							<userImage width="45px" height="45px" :user_name="buckle.name" fontSize=".9" style="margin-right:8px"></userImage>
 							<div class="rightexamineAndApproveList">
 								<p
 									style="width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#73767c;font-size:16px;display:flex;justify-content: space-between;"
@@ -388,7 +406,7 @@
 						</div>
 					</div>
 				</el-row>
-				
+
 				<el-row>
 					<div class="right-all-style" v-loading="announLoad" style="background:#fff;padding: 20px 20px 20px 20px;">
 						<div style="display:flex;justify-content: space-between;">
@@ -396,50 +414,41 @@
 							<span v-if="announcement.title" @click="$router.push({ path: '/update_notice' })" class="announcementc" style="font-size:13px;">查看详情</span>
 						</div>
 						<div v-if="announcement.title" class="announs">
-							<b style="font-size:15px;margin:10px 0 0 10px;display: inline-block;">{{announcement.title}}</b>
+							<b style="font-size:15px;margin:10px 0 0 10px;display: inline-block;">{{ announcement.title }}</b>
 							<div class="announDetails" style="padding:0 0 0 18px;margin-top:10px;" v-html="announcement.focus"></div>
 						</div>
 						<div v-else class="nopoint_box">
 							<div class="noimg"></div>
 							<span class="title1" style="padding-bottom:10px;">暂无系统公告</span>
 						</div>
-
-
 					</div>
 				</el-row>
-				
 			</el-col>
 		</el-row>
 		<div class="updateNotice">
 			<el-dialog title="系统公告" :visible.sync="updateVisible" width="500px" top="20vh" :before-close="updateClose">
-				<b style="font-size:16px;margin:0 0 10px 0;display: inline-block;">{{announcement.title}}</b>
+				<b style="font-size:16px;margin:0 0 10px 0;display: inline-block;">{{ announcement.title }}</b>
 				<div class="announDetails" style="padding:0 0 0 0" v-html="announcement.focus"></div>
-  				<span slot="footer" class="dialog-footer">
-  					<el-button @click="$router.push({ path: '/update_notice' })" type="primary" round>查看详情</el-button>
-  				</span>
+				<span slot="footer" class="dialog-footer"><el-button @click="$router.push({ path: '/update_notice' })" type="primary" round>查看详情</el-button></span>
 			</el-dialog>
 		</div>
-		<examinePopup
-		  :title="'审核详情'"
-		  :id="detail_id"
-		  :show.sync="detailShow"
-		></examinePopup>
+		<examinePopup :title="'审核详情'" :id="detail_id" :show.sync="detailShow"></examinePopup>
 	</div>
 </template>
 
 <script>
 var bool = true; // 五秒执行一次变量
-import examinePopup from "@/components/examinePopup";
+import examinePopup from '@/components/examinePopup';
 export default {
-	components:{examinePopup},
+	components: { examinePopup },
 	data() {
 		return {
-			announLoad:false,
-			announcement:{},
+			announLoad: false,
+			announcement: {},
 
-			updateVisible:false,
+			updateVisible: false,
 
-			employeeRout:this.$authoritys('employee'),
+			employeeRout: this.$authoritys('employee'),
 
 			authorityManagerHeaderLoad: false, //管理员头部loading
 			authorityManagerHeaders: {}, //管理员头部 数据
@@ -526,17 +535,17 @@ export default {
 			highestPrizeBuckleloading: false, //奖扣分最高loading
 			prize: {}, //奖分
 			buckle: {}, //扣分
-			
-			inCommonUse:[
-				{name:'奖扣积分',image:require('./assets/image/entry_list.png'),push:'/award_punish'},
-				{name:'发布任务',image:require('./assets/image/my_publish.png'),push:'/my_issue'},
-				{name:'申请积分',image:require('./assets/image/a_apply.png'),push:'/apply_list'},
-				{name:'领任务',image:require('./assets/image/task_hall.png'),push:'/get_task'},
+
+			inCommonUse: [
+				{ name: '奖扣积分', image: require('./assets/image/entry_list.png'), push: '/award_punish' },
+				{ name: '发布任务', image: require('./assets/image/my_publish.png'), push: '/my_issue' },
+				{ name: '申请积分', image: require('./assets/image/a_apply.png'), push: '/apply_list' },
+				{ name: '领任务', image: require('./assets/image/task_hall.png'), push: '/get_task' }
 			],
 			// 待我审批模块
-			auditList:[],
-			detail_id:0,
-			detailShow:false,
+			auditList: [],
+			detail_id: 0,
+			detailShow: false
 		};
 	},
 	watch: {
@@ -546,12 +555,12 @@ export default {
 		}
 	},
 	mounted() {
-		if(this.employeeRout){
-			this.inCommonUse = []
+		if (this.employeeRout) {
+			this.inCommonUse = [];
 			this.inCommonUse.push(
-				{name:'申请积分',image:require('./assets/image/a_apply.png'),push:'/apply_list'},
-				{name:'领任务',image:require('./assets/image/task_hall.png'),push:'/get_task'},
-			)
+				{ name: '申请积分', image: require('./assets/image/a_apply.png'), push: '/apply_list' },
+				{ name: '领任务', image: require('./assets/image/task_hall.png'), push: '/get_task' }
+			);
 		}
 		this.function_All();
 		window.addEventListener('resize', this.selfAdaption);
@@ -563,65 +572,68 @@ export default {
 			} else {
 				this.authorityManagerHeader();
 			}
-			this.noticeList()//系统公告
+			this.noticeList(); //系统公告
 			this.integralForm(); //积分构成
 			this.getDepartment(); //获取部门列表
 			this.rankingListname(); //获取自定义排行榜名
 			this.monthlyIntegral(); //本月积分情况
-			this.getSpList();//待我审批列表
-			if(!this.employeeRout){
+			this.getSpList(); //待我审批列表
+			if (!this.employeeRout) {
 				this.ManagerSAward(); //管理者奖扣任务执行情况
 			}
 			this.highestPrizeBuckle(); //奖扣分最高积分事件
 		},
 		//审批
 		openDetail(item) {
-		  this.detail_id = item.id;
-		  this.detailShow = true;
+			this.detail_id = item.id;
+			this.detailShow = true;
 		},
 		// 待我审批列表
-		getSpList(){
+		getSpList() {
 			let params = {
 				source_type: 0,
 				type: 'waiting',
 				page: 1,
 				pt_id: 0,
-				page_size: '3',
-			}
-			this.$axios('get','/api/integral/review/list',params).then((res)=>{
-				if(res.data.code == 1){
-					this.auditList = res.data.data.list
-				}
-			}).finally(()=>{
-
-			})
+				page_size: '3'
+			};
+			this.$axios('get', '/api/integral/review/list', params)
+				.then(res => {
+					if (res.data.code == 1) {
+						this.auditList = res.data.data.list;
+					}
+				})
+				.finally(() => {});
 		},
-		noticeList(){//系统公告
-			this.announLoad = true
+		noticeList() {
+			//系统公告
+			this.announLoad = true;
 			let params = {
-				page:1,
-				page_size:10,
-			}
-			this.$axios('get','/api/announcement/list',params).then((res)=>{
-				if(res.data.code == 1){
-					let list = res.data.data.list[0]
-					if(localStorage.getItem('noticeId')){
-						if(localStorage.getItem('noticeId') != list.id){
-							this.updateVisible = true
-							localStorage.setItem("noticeId",list.id);
+				page: 1,
+				page_size: 10
+			};
+			this.$axios('get', '/api/announcement/list', params)
+				.then(res => {
+					if (res.data.code == 1) {
+						let list = res.data.data.list[0];
+						if (localStorage.getItem('noticeId')) {
+							if (localStorage.getItem('noticeId') != list.id) {
+								this.updateVisible = true;
+								localStorage.setItem('noticeId', list.id);
+							}
+						} else {
+							localStorage.setItem('noticeId', list.id);
+							this.updateVisible = true;
 						}
-					}else{
-						localStorage.setItem("noticeId",list.id);
-						this.updateVisible = true
+						this.announcement = list;
 					}
-					this.announcement = list
-				}
-			}).finally(()=>{
-				this.announLoad = false
-			})
+				})
+				.finally(() => {
+					this.announLoad = false;
+				});
 		},
-		updateClose(none){
-			none()
+		updateClose(none) {
+			none();
 		},
 		//echarts自适应
 		selfAdaption() {
@@ -828,7 +840,7 @@ export default {
 			} else {
 				(params.dept_id = null), (params.month = this.$moment().format('YYYY-MM'));
 			}
-			if(this.employeeRout){
+			if (this.employeeRout) {
 				params.employee_id = this.$getUserData().id;
 			}
 			this.$axios('get', '/api/integral/statistics/pie/b', params, 'v2')
@@ -1034,12 +1046,12 @@ export default {
 			this.monthlyIntegralloading = true;
 			let params = {};
 			let listslength = [];
-			if(this.employeeRout){
+			if (this.employeeRout) {
 				params.employee_id = this.$getUserData().id;
-			}else{
-				(params.dept_id = this.exclusiveMonthBranch)
+			} else {
+				params.dept_id = this.exclusiveMonthBranch;
 			}
-			(params.month = this.$moment().format('YYYY-MM'));
+			params.month = this.$moment().format('YYYY-MM');
 			if (this.exclusiveMonthChecked) {
 				params.include_fixed = 1;
 			} else {
@@ -1281,34 +1293,32 @@ export default {
 		//离开路由
 		window.removeEventListener('resize', this.selfAdaption); //取消echarts自适应
 	},
-	created() {
-	}
+	created() {}
 };
 </script>
 
 <style scoped="scoped" lang="scss">
-.updateNotice ::v-deep .el-dialog{
+.updateNotice ::v-deep .el-dialog {
 	border-radius: 10px;
-	.el-dialog__header{
+	.el-dialog__header {
 		padding: 13px 20px;
 		text-align: center;
 		background-color: #3193fc;
 		border-radius: 8px 8px 0 0;
-		.el-dialog__title{
+		.el-dialog__title {
 			font-size: 16px;
 			color: #fff;
 		}
-		.el-icon-close{
+		.el-icon-close {
 			color: #fff;
-
 		}
 	}
-	.el-dialog__body{
-		padding:20px 20px 30px 20px;
+	.el-dialog__body {
+		padding: 20px 20px 30px 20px;
 	}
-	.el-dialog__footer{
-		.dialog-footer{
-			.is-round{
+	.el-dialog__footer {
+		.dialog-footer {
+			.is-round {
 				padding: 10px 19px;
 				border-radius: 15px;
 			}
@@ -1519,79 +1529,79 @@ export default {
 .rightexamineAndApproveList2 {
 	text-align: left;
 	width: 100%;
-	border-bottom:1px solid #EFEFEF;
+	border-bottom: 1px solid #efefef;
+}
+.inCommonUseStyle {
+	width: 95%;
+	height: 54px;
+	border: 1px solid #c0c4cc;
+	display: block;
+	margin: 16px 0 0 10px;
+	display: flex;
+	line-height: 54px;
+	border-radius: 5px;
+	cursor: pointer;
+	transition: all 0.5s;
+}
+.inCommonUseStyle b {
+	transition: all 0.5s;
+	color: #303133;
+	font-size: 14px;
 }
-  .inCommonUseStyle{
-    width:95%;
-    height:54px;
-    border:1px solid #C0C4CC;
-    display:block;
-    margin:16px 0 0 10px;
-    display:flex;
-    line-height:54px;
-    border-radius:5px;
-    cursor:pointer;
-    transition: all .5s;
-  }
-  .inCommonUseStyle b{
-    transition: all .5s;
-    color:#303133;
-    font-size:14px;
-  }
-  .inCommonUseStyle:hover{
-    background-color: #fcfcfc;
-    border: 1px solid #409EFF;
-  }
-  .inCommonUseStyle:hover b{
-    color : #409EFF;
-  }
-  .announs{
-	padding:0 0 10px 0;
+.inCommonUseStyle:hover {
+	background-color: #fcfcfc;
+	border: 1px solid #409eff;
+}
+.inCommonUseStyle:hover b {
+	color: #409eff;
+}
+.announs {
+	padding: 0 0 10px 0;
 	border: 1px solid rgb(236, 236, 236);
 	border-radius: 10px;
 	overflow: hidden;
 	cursor: default;
 	// min-height: calc(60vh - 160px);
 	margin: 10px 0 0 0;
-  }
-  ::v-deep .announDetails{
+}
+::v-deep .announDetails {
 	// max-height: 410px;
-  	// overflow-y: auto;
+	// overflow-y: auto;
 	// *{
 	// 	color: #8c8c8c !important;
 	// }
 	// img{
 	// 	width: 100% !important;
 	// }
-  }
-  .announDetails{
+}
+.announDetails {
 	max-height: 410px;
-  	overflow-y: auto;
-  }
+	overflow-y: auto;
+}
 .announDetails::-webkit-scrollbar {
 	width: 9px;
 	height: 9px;
 }
-	.announDetails::-webkit-scrollbar-track {
-		width: 6px;
-		background-color: #fff0;
-		-webkit-border-radius: 2em;
-		-moz-border-radius: 2em;
-		border-radius: 2em;
-	}
-	.announDetails::-webkit-scrollbar-thumb {
-		background-color: #fff0;
-		background-clip: padding-box;
-		min-height: 28px;
-		-webkit-border-radius: 2em;
-		-moz-border-radius: 2em;
-		border-radius: 2em;
-	}
-	.announDetails:hover::-webkit-scrollbar-thumb {
-		overflow-x: none;
-		background-color: rgba(144, 147, 153, 0.3);
-	}
-	.announcementc{
+.announDetails::-webkit-scrollbar-track {
+	width: 6px;
+	background-color: #fff0;
+	-webkit-border-radius: 2em;
+	-moz-border-radius: 2em;
+	border-radius: 2em;
+}
+.announDetails::-webkit-scrollbar-thumb {
+	background-color: #fff0;
+	background-clip: padding-box;
+	min-height: 28px;
+	-webkit-border-radius: 2em;
+	-moz-border-radius: 2em;
+	border-radius: 2em;
+}
+.announDetails:hover::-webkit-scrollbar-thumb {
+	overflow-x: none;
+	background-color: rgba(144, 147, 153, 0.3);
+}
+.announcementc {
 	display: block;
 	text-align: right;
 	font-size: 13px;
@@ -1604,4 +1614,4 @@ export default {
 .announcementc:active {
 	color: #409eff;
 }
-</style>
+</style>

+ 145 - 135
src/router/index.js

@@ -2,9 +2,9 @@ import Vue from 'vue'
 import VueRouter from 'vue-router'
 
 //解决重复点击导航栏报错问题
-const originalPush = VueRouter.prototype.push 
+const originalPush = VueRouter.prototype.push
 VueRouter.prototype.push = function push(location) {
-  return originalPush.call(this, location).catch(err => err)
+	return originalPush.call(this, location).catch(err => err)
 }
 
 Vue.use(VueRouter)
@@ -12,251 +12,261 @@ Vue.use(VueRouter)
 const routes = [{
 		path: '/index',
 		name: '初始页',
-		component: () => import(/* webpackChunkName: "index" */'@/index'),
+		component: () => import( /* webpackChunkName: "index" */ '@/index'),
 		redirect: "home",
-		children: [
-			{
+		children: [{
 				path: '/home',
 				name: '首页',
-				id:'0',
-				component: () => import(/* webpackChunkName: "home" */'@/home'),
+				id: '0',
+				component: () => import( /* webpackChunkName: "home" */ '@/home'),
 				meta: {
 					icon: 'icon-shezhi_zuzhijiagou',
-					groupCode:'home',
+					groupCode: 'home',
 				}
 			},
 			{
 				path: '/award_punish',
 				name: '我奖扣的',
-				component: () => import(/* webpackChunkName: "award_punish" */'@/views/abPoint/award_punish.vue'),
+				component: () => import( /* webpackChunkName: "award_punish" */
+					'@/views/abPoint/award_punish.vue'),
 				meta: {
 					icon: 'icon-shezhi_zuzhijiagou',
-					groupCode:'abPoint',
-					jurisdiction :['employee']//什么权限隐藏
+					groupCode: 'abPoint',
+					jurisdiction: ['employee'] //什么权限隐藏
 				}
 			},
 			{
 				path: '/apply_list',
 				name: '我申请的',
-				component: () => import(/* webpackChunkName: "apply_list" */'@/views/abPoint/apply_list.vue'),
+				component: () => import( /* webpackChunkName: "apply_list" */ '@/views/abPoint/apply_list.vue'),
 				meta: {
 					icon: 'icon-shezhi_zuzhijiagou',
-					groupCode:'abPoint',
-					jurisdiction :['creator']
+					groupCode: 'abPoint',
+					jurisdiction: ['creator']
 				}
 			},
 			{
 				path: '/my_issue',
 				name: '我发布的',
-				component: () => import(/* webpackChunkName: "my_issue" */'@/views/task/my_issue.vue'),
+				component: () => import( /* webpackChunkName: "my_issue" */ '@/views/task/my_issue.vue'),
 				meta: {
 					icon: 'icon-PC_gongzuotai_renwu',
-					groupCode:'task',
-					jurisdiction :['employee']
+					groupCode: 'task',
+					jurisdiction: ['employee']
 				}
-			  },
-			  {
+			},
+			{
 				path: '/get_task',
 				name: '领任务',
-				component: () => import(/* webpackChunkName: "get_task" */'@/views/task/get_task.vue'),
+				component: () => import( /* webpackChunkName: "get_task" */ '@/views/task/get_task.vue'),
 				meta: {
 					icon: 'icon-PC_gongzuotai_renwu',
-					groupCode:'task',
+					groupCode: 'task',
 				}
-			  },
-			  {
+			},
+			{
 				path: '/my_task',
 				name: '我的任务',
-				component: () => import(/* webpackChunkName: "my_task" */'@/views/task/my_task.vue'),
+				component: () => import( /* webpackChunkName: "my_task" */ '@/views/task/my_task.vue'),
 				meta: {
 					icon: 'icon-PC_gongzuotai_renwu',
-					groupCode:'task',
-					jurisdiction :['creator']
+					groupCode: 'task',
+					jurisdiction: ['creator']
+				}
+			},
+			{
+				path: '/dept_rank',
+				name: '阶段排名',
+				component: () => import( /* webpackChunkName: "dept_rank" */ '@/views/ranking/dept_rank.vue'),
+				meta: {
+					icon: 'icon-shezhi_zuzhijiagou',
+					groupCode: 'ranking',
 				}
-			  },
-			  {
-				  path: '/dept_rank',
-				  name: '阶段排名',
-				  component: () => import(/* webpackChunkName: "dept_rank" */'@/views/ranking/dept_rank.vue'),
-				  meta: {
-					  icon: 'icon-shezhi_zuzhijiagou',
-					  groupCode:'ranking',
-				  }
-			  },
-			  {
-				  path: '/total_rank',
-				  name: '累计B分排名',
-				  component: () => import(/* webpackChunkName: "total_rank" */'@/views/ranking/total_rank.vue'),
-				  meta: {
-					  icon: 'icon-shezhi_jiaose',
-					  groupCode:'ranking',
-				  }
-			  },
-			  {
-				  path: '/attendance_rating',
-				  name: '考勤分排名',
-				  component: () => import(/* webpackChunkName: "attendance_rating" */'@/views/ranking/attendance_rating.vue'),
-				  meta: {
-					  icon: 'icon-shezhi_jiaose',
-					  groupCode:'ranking',
-				  }
-			  },
-			  {
-				  path: '/custom_rank',
-				  name: '自定义分组B分排名',
-				  component: () => import(/* webpackChunkName: "custom_rank" */'@/views/ranking/custom_rank.vue'),
-				  meta: {
-					  icon: 'icon-shezhi_jichushezhi',
-					  groupCode:'ranking',
-				  }
-			  },
-			  {
-				  path: '/manager_statistics',
-				  name: '管理者奖扣',
-				  component: () => import(/* webpackChunkName: "manager_statistics" */'@/views/ranking/manager_statistics.vue'),
-				  meta: {
-					  icon: 'icon-shezhi_jichushezhi',
-					  groupCode:'ranking',
-					  jurisdiction :['employee']
-				  }
-			  },
-			  {
+			},
+			{
+				path: '/total_rank',
+				name: '累计B分排名',
+				component: () => import( /* webpackChunkName: "total_rank" */ '@/views/ranking/total_rank.vue'),
+				meta: {
+					icon: 'icon-shezhi_jiaose',
+					groupCode: 'ranking',
+				}
+			},
+			{
+				path: '/attendance_rating',
+				name: '考勤分排名',
+				component: () => import( /* webpackChunkName: "attendance_rating" */
+					'@/views/ranking/attendance_rating.vue'),
+				meta: {
+					icon: 'icon-shezhi_jiaose',
+					groupCode: 'ranking',
+				}
+			},
+			{
+				path: '/custom_rank',
+				name: '自定义分组B分排名',
+				component: () => import( /* webpackChunkName: "custom_rank" */
+					'@/views/ranking/custom_rank.vue'),
+				meta: {
+					icon: 'icon-shezhi_jichushezhi',
+					groupCode: 'ranking',
+				}
+			},
+			{
+				path: '/manager_statistics',
+				name: '管理者奖扣',
+				component: () => import( /* webpackChunkName: "manager_statistics" */
+					'@/views/ranking/manager_statistics.vue'),
+				meta: {
+					icon: 'icon-shezhi_jichushezhi',
+					groupCode: 'ranking',
+					jurisdiction: ['employee']
+				}
+			},
+			{
 				path: '/integral_event',
 				name: '积分事件',
-				component: () => import(/* webpackChunkName: "integral_event" */'@/views/ranking/integral_event.vue'),
+				component: () => import( /* webpackChunkName: "integral_event" */
+					'@/views/ranking/integral_event.vue'),
 				meta: {
 					icon: 'icon-shezhi_jifenguize',
-					groupCode:'ranking',
-					groupName:"统计",
+					groupCode: 'ranking',
+					groupName: "统计",
+				}
+			},
+			{
+				path: '/individual_statistics',
+				name: '个人统计',
+				component: () => import( /* webpackChunkName: "individual_statistics" */
+					'@/views/ranking/individual_statistics.vue'),
+				meta: {
+					icon: 'icon-shezhi_jichushezhi',
+					groupCode: 'ranking',
 				}
-			  },
-			  {
-				  path: '/individual_statistics',
-				  name: '个人统计',
-				  component: () => import(/* webpackChunkName: "individual_statistics" */'@/views/ranking/individual_statistics.vue'),
-				  meta: {
-					  icon: 'icon-shezhi_jichushezhi',
-					  groupCode:'ranking',
-				  }
-			  },
-			  {
-				  path: '/department_statistics',
-				  name: '部门统计',
-				  component: () => import(/* webpackChunkName: "department_statistics" */'@/views/ranking/department_statistics.vue'),
-				  meta: {
-					  icon: 'icon-shezhi_jichushezhi',
-					  groupCode:'ranking',
-					  jurisdiction :['employee']
-				  }
-			  },
-			  {
+			},
+			{
+				path: '/department_statistics',
+				name: '部门统计',
+				component: () => import( /* webpackChunkName: "department_statistics" */
+					'@/views/ranking/department_statistics.vue'),
+				meta: {
+					icon: 'icon-shezhi_jichushezhi',
+					groupCode: 'ranking',
+					jurisdiction: ['employee']
+				}
+			},
+			{
 				path: '/lotteryTicket_statistics',
 				name: '奖票统计',
-				component: () => import(/* webpackChunkName: "lotteryTicket_statistics" */'@/views/ranking/lotteryTicket_statistics'),
+				component: () => import( /* webpackChunkName: "lotteryTicket_statistics" */
+					'@/views/ranking/lotteryTicket_statistics'),
 				meta: {
 					icon: 'icon-shezhi_jichushezhi',
-					groupCode:'ranking',
-					jurisdiction :['dept_manager','employee']
+					groupCode: 'ranking',
+					jurisdiction: ['dept_manager', 'employee']
 				}
-			  },
+			},
 			{
 				path: '/framework',
 				name: '组织架构',
-				component: () => import(/* webpackChunkName: "framework" */'@/views/set/framework.vue'),
+				component: () => import( /* webpackChunkName: "framework" */ '@/views/set/framework.vue'),
 				meta: {
 					icon: 'icon-shezhi_zuzhijiagou',
-					groupCode:'set',
-					jurisdiction :['dept_manager','employee']
+					groupCode: 'set',
+					jurisdiction: ['dept_manager', 'employee']
 				}
 			},
 			{
 				path: '/jurisdiction',
 				name: '角色权限',
-				component: () => import(/* webpackChunkName: "jurisdiction" */'@/views/set/jurisdiction.vue'),
+				component: () => import( /* webpackChunkName: "jurisdiction" */ '@/views/set/jurisdiction.vue'),
 				meta: {
 					icon: 'icon-shezhi_jiaose',
-					groupCode:'set',
-					jurisdiction :['dept_manager','employee']
+					groupCode: 'set',
+					jurisdiction: ['dept_manager', 'employee']
 				}
 			},
 			{
 				path: '/rule',
 				name: '积分规则',
-				component: () => import(/* webpackChunkName: "rule" */'@/views/set/rule.vue'),
+				component: () => import( /* webpackChunkName: "rule" */ '@/views/set/rule.vue'),
 				meta: {
 					icon: 'icon-shezhi_jifenguize',
-					groupCode:'set',
-					groupName:"设置",
-					jurisdiction :['dept_manager','employee']
+					groupCode: 'set',
+					groupName: "设置",
+					jurisdiction: ['dept_manager', 'employee']
 				}
 			},
 			{
 				path: '/initialPoint',
 				name: '初始分',
-				component: () => import(/* webpackChunkName: "initialPoint" */'@/views/set/initialPoint.vue'),
+				component: () => import( /* webpackChunkName: "initialPoint" */ '@/views/set/initialPoint.vue'),
 				meta: {
 					icon: 'icon-shezhi_jichushezhi',
-					groupCode:'set',
-					jurisdiction :['dept_manager','employee']
+					groupCode: 'set',
+					jurisdiction: ['dept_manager', 'employee']
 				}
 			},
 			{
 				path: '/check',
 				name: '考勤积分',
-				component: () => import(/* webpackChunkName: "check" */'@/views/set/check.vue'),
+				component: () => import( /* webpackChunkName: "check" */ '@/views/set/check.vue'),
 				meta: {
 					icon: 'icon-kaoqin_kaoqinyuebaobiao',
-					groupCode:'set',
-					jurisdiction :['dept_manager','employee']
+					groupCode: 'set',
+					jurisdiction: ['dept_manager', 'employee']
 				}
 			},
 			{
 				path: '/voluntarilyPoint',
 				name: '自动积分',
-				component: () => import(/* webpackChunkName: "voluntarilyPoint" */'@/views/set/voluntarilyPoint.vue'),
+				component: () => import( /* webpackChunkName: "voluntarilyPoint" */
+					'@/views/set/voluntarilyPoint.vue'),
 				meta: {
 					icon: 'icon-shezhi_zidongjifen',
-					groupCode:'set',
-					jurisdiction :['dept_manager','employee']
+					groupCode: 'set',
+					jurisdiction: ['dept_manager', 'employee']
 				}
 			},
 			{
 				path: '/log',
 				name: '日志设置',
-				component: () => import(/* webpackChunkName: "log" */'@/views/set/log.vue'),
+				component: () => import( /* webpackChunkName: "log" */ '@/views/set/log.vue'),
 				meta: {
 					icon: 'icon-shezhi_xitongpeizhi',
-					groupCode:'set',
-					jurisdiction :['dept_manager','employee']
+					groupCode: 'set',
+					jurisdiction: ['dept_manager', 'employee']
 				}
 			},
 			{
 				path: '/systemLayout',
 				name: '系统配置',
-				component: () => import(/* webpackChunkName: "systemLayout" */'@/views/set/systemLayout.vue'),
+				component: () => import( /* webpackChunkName: "systemLayout" */ '@/views/set/systemLayout.vue'),
 				meta: {
 					icon: 'icon-shezhi_xitongpeizhi',
-					groupCode:'set',
-					jurisdiction :['dept_manager','employee']
+					groupCode: 'set',
+					jurisdiction: ['dept_manager', 'employee']
 				}
 			},
 			{
 				path: '/update_notice',
 				name: '公告列表',
-				component: () => import(/* webpackChunkName: "update_notice" */'@/views/subassembly/update_notice.vue'),
-				hidden: true,//侧边栏隐藏
+				component: () => import( /* webpackChunkName: "update_notice" */
+					'@/views/subassembly/update_notice.vue'),
+				hidden: true, //侧边栏隐藏
 				meta: {
 					icon: 'icon-shezhi_gongdaolbiao',
-					groupCode:'abPoint',
+					groupCode: 'abPoint',
 				}
 			},
 			{
 				path: '/approval_list',
 				name: '审批',
-				component: () => import(/* webpackChunkName: "approval_list" */'@/views/workbench/approval_list.vue'),
+				component: () => import( /* webpackChunkName: "approval_list" */
+					'@/views/workbench/approval_list.vue'),
 				meta: {
 					icon: 'icon-shezhi_gongdaolbiao',
-					groupCode:'workbench',
+					groupCode: 'workbench',
 				}
 			},
 		]
@@ -264,17 +274,17 @@ const routes = [{
 	{
 		path: '/',
 		name: '初始化',
-		component: () => import(/* webpackChunkName: "init" */'@/init'),
+		component: () => import( /* webpackChunkName: "init" */ '@/init'),
 	},
 	{
 		path: '/noAccess',
 		name: '无权限',
-		component: () => import(/* webpackChunkName: "noAccess" */'@/noAccess'),
+		component: () => import( /* webpackChunkName: "noAccess" */ '@/noAccess'),
 	},
 	{
 		path: '/deptRankSwiper',
 		name: '轮播',
-		component: () => import(/* webpackChunkName: "deptRankSwiper" */'@/views/ranking/deptRankSwiper.vue'),
+		component: () => import( /* webpackChunkName: "deptRankSwiper" */ '@/views/ranking/deptRankSwiper.vue'),
 	},
 ]
 

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

@@ -32,7 +32,6 @@
 								:employee_list="employee_list"
 								:user_no_select="false"
 								:can_select_dept="false"
-								:multi="false"
 								:selected="approval_selected"
 								@confirm="approval_confirm"
 							/>
@@ -295,7 +294,6 @@ export default {
 			// /api/integral/work/publish
 			// 选择重复任务之后
 			// /api/integral/schedule/publish/work
-
 			let self = this;
 			let data = JSON.parse(JSON.stringify(self.formData));
 			if (data.task_cycle == 0) {

+ 281 - 259
src/views/common/taskDetailsPopup.vue

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

+ 84 - 4
src/views/ranking/attendance_rating.vue

@@ -30,8 +30,10 @@
 							@change="onFilterChanged"
 						></el-date-picker>
 					</el-form-item>
-
-					<el-form-item><el-button type="primary" plain @click="exportRanking">导出排名</el-button></el-form-item>
+					<el-form-item>
+						<el-button type="primary" plain @click="exportRanking">导出排名</el-button>
+						<el-button type="primary" plain @click="isUpdate=true">更新考勤数据</el-button>
+					</el-form-item>
 				</el-form>
 			</el-row>
 
@@ -75,7 +77,39 @@
 				></el-pagination>
 			</center>
 		</div>
-
+		<!-- 更新考勤数据 -->
+		<el-dialog title="更新考勤数据" :visible.sync="isUpdate" width="730px">
+			<el-form>
+				<el-form-item label="考勤组">
+					  <el-radio-group v-model="update.type">
+						<el-radio label="daily">更新某一天的考勤数据</el-radio>
+						<el-radio label="monthly">更新某个月的考勤数据</el-radio>
+					  </el-radio-group>
+				</el-form-item>
+				<el-form-item label="日" v-if="update.type=='daily'">
+					<el-date-picker
+					  v-model="update.target_date"
+					  type="date"
+					  value-format="yyyy-MM-dd"
+					  :picker-options="pickerOptions"
+					  placeholder="选择日期">
+					</el-date-picker>
+				</el-form-item>
+				<el-form-item label="月" v-else>
+					<el-date-picker
+					 value-format="yyyy-MM"
+					 :picker-options="pickerOptions"
+					  v-model="update.target_month"
+					  type="month"
+					  placeholder="选择月">
+					</el-date-picker>
+				</el-form-item>
+			</el-form>
+			<span class="dialog-footer" style="display:flex;justify-content: flex-end;">
+				<el-button @click="isUpdate = false">取 消</el-button>
+				<el-button type="primary" @click="saveUpdate">确 定</el-button>
+			</span>
+		</el-dialog>
 		<!-- 导出弹窗 -->
 		<el-dialog title="导出排名" :visible.sync="dialogVisible" width="730px">
 			<div style="font-size:15px;margin:20px 0 20px 0;">系统将按以下已选条件导出对应的排名报表</div>
@@ -120,6 +154,12 @@ import noData from '@/components/noData';
 export default {
 	data() {
 		return {
+		  // 设置只能选择当前日期及之后的日期
+		    pickerOptions: {
+			  disabledDate(time) {
+				return time.getTime() > Date.now() - 8.64e7;//如果没有后面的-8.64e7就是不可以选择今天的 
+			  }
+			},
 			exportLoad: false,
 			dialogVisible: false,
 			checkingInGroup: [],
@@ -210,15 +250,55 @@ export default {
 						}
 					}
 				]
+			},
+			// 更新考勤数据
+			isUpdate:false,
+			update:{
+				type:'daily',
+				target_date:'',
+				target_month:''
 			}
 		};
 	},
 	components: { noData },
-	watch: {},
+	watch:{
+		isUpdate(val){
+			if(!val){
+				this.update={
+					type:'daily',
+					target_date:'',
+					target_month:''
+				}
+			}
+		}
+	},
 	mounted() {
 		this.checkingIn_group(); //考勤组
 	},
 	methods: {
+		saveUpdate(){
+			let update=this.update
+			let data={type:update.type};
+			if(update.type=='daily'){
+				if(!update.target_date){
+					this.$message.error('请选择日期');
+					return false
+				}
+				data.target_date=update.target_date
+			}else{
+				if(!update.target_month){
+					this.$message.error('请选择月份');
+					return false
+				}
+				data.target_month=update.target_month
+			}
+			this.$axios('post','/api/ding/ad_sync',data).then(res => {
+				if (res.data.code == 1) {
+					this.$message.success('已更新');
+					this.isUpdate=false;
+				}
+			})
+		},
 		exportRanking() {
 			if (this.checkingInGroup.length > 0) {
 				this.exportData.group_id = this.checkingInGroup[0].id;

+ 6 - 28
src/views/ranking/integral_event.vue

@@ -153,7 +153,9 @@
 
 				<el-row v-show="detail_info.files !== null && detail_info.files.length > 0">
 					<el-col :span="6">图片</el-col>
-					<el-col :span="18"><el-image style="width: 100px; height: 100px" :src="detail_info.files[0]" :prediv-src-list="detail_info.files"></el-image></el-col>
+					<el-col :span="18"  >
+						<el-image v-for="(itme,index) in detail_info.files" :key="index" style="width: 80px; height: 80px;margin: 0 5px;" :src="itme" :preview-src-list="detail_info.files"></el-image>
+					</el-col>
 				</el-row>
 
 				<div v-show="detail_info.rule_id">
@@ -174,33 +176,8 @@
 						</el-col>
 					</el-row>
 				</div>
-
 				<div v-show="detail_info.rule_id">
-					<p class="row_title">
-						审批
-						<span class="row_tips">多人审批时,以最后一人为准</span>
-					</p>
-					<div class="examine_steps">
-						<el-steps direction="vertical" :space="50">
-							<el-step v-for="(item, index) in detail_info.process" :key="index" style="margin-bottom: 5px;">
-								<template slot="icon">
-									<userImage width="36px" height="36px" :img_url="item.img_url" :user_name="item.name"></userImage>
-								</template>
-								<template slot="title">
-									<div style="color: #303133;font-size:14px;margin-top:-2px;">
-										{{ item.name }} {{ item.remark }}
-										<strong style="font-weight: 500;">
-											<span class="red point" v-show="item.rediv_point > 0">+{{ item.rediv_point }}</span>
-											<span class="green point" v-show="item.rediv_point < 0">{{ item.rediv_point }}</span>
-										</strong>
-									</div>
-								</template>
-								<template slot="description" style="">
-									{{ item.time }}
-								</template>
-							</el-step>
-						</el-steps>
-					</div>
+					<Steps :process="detail_info.process"></Steps>
 				</div>
 				
 				<div style="text-align: center;margin-top: 30px;" v-if="detail_info.source_type==10">
@@ -303,6 +280,7 @@
 </template>
 <script>
 import noData from '@/components/noData';
+import Steps from '@/components/Steps';
 export default {
 	data() {
 		return {
@@ -348,7 +326,7 @@ export default {
 			
 		};
 	},
-	components: { noData },
+	components: { noData,Steps },
 	mounted() {
 		this.getDepartment();
 		this.get_rule_trees();

+ 6 - 2
src/views/ranking/manager_statistics.vue

@@ -58,7 +58,9 @@
 						<!-- 导出报表 -->
 						<el-form-item><el-button type="primary" plain @click="exportExcel" size="medium" style="margin-left:20px">导出报表</el-button></el-form-item>
 					</el-form>
-
+					<div class="flex-box-end">
+						<span class="yellow">*管理者奖扣任务均为B分,对A分不做要求*</span>
+					</div>
 					<el-table :data="last" style="width: 100%" v-loading="loading">
 						<el-table-column label="管理者">
 							<template slot-scope="scope">
@@ -156,7 +158,9 @@
 							></el-date-picker>
 						</el-form-item>
 					</el-form>
-
+					<div class="flex-box-end">
+						<span class="yellow">*管理者奖扣任务均为B分,对A分不做要求*</span>
+					</div>
 					<el-table :data="list" style="width: 100%" v-loading="loading" @row-click="open_detail">
 						<el-table-column label="管理者">
 							<template slot-scope="scope">

+ 2 - 1
src/views/set/check.vue

@@ -90,8 +90,9 @@ export default {
         //   },
         // },
 		{
-		  initialName: "加班,每满一天加分",
+		  initialName: "加班加分",
 		  initia_mark: false,
+		  message:'当天最终加班得分=【加班加分】*【加班-审批单统计】,必须是提交通过的审批单,加班才有加分 ',
 		  initia_input: {
 		    age: "0",
 		  },

+ 15 - 26
src/views/set/jurisdiction.vue

@@ -305,12 +305,12 @@
 			</span>
 		</el-dialog>
 
-		<el-dialog title="B分奖扣任务" :visible.sync="bonus_deducted_show" width="600px">
+		<el-dialog title="每月奖扣目标 (B分)" :visible.sync="bonus_deducted_show" width="600px">
 			<el-form :model="integral_limit_form" ref="integral_limit_form" :rules="integral_limit_rules" label-width="130px" v-loading="bonus_deducted_loading">
 				<span v-for="(item, index) in integral_limit_form.reward_task_monthly" :key="index" v-show="item.name == 'B分'">
 					<el-form-item>
 						<template slot="label">
-							<span>月奖分任务</span>
+							<span>奖分目标</span>
 							<el-tooltip placement="top">
 								<div slot="content" style="width: 300px;">
 									对奖分分值作任务要求。未达分值任务的按差额扣分
@@ -326,7 +326,7 @@
 				<span v-for="(item, index) in integral_limit_form.deduct_task_monthly" :key="item.name" v-show="item.name == 'B分'">
 					<el-form-item style="margin-bottom: 0;" prop="point">
 						<template slot="label">
-							<span>月扣分任务</span>
+							<span>扣分目标</span>
 							<el-tooltip placement="top">
 								<div slot="content" style="width: 300px;">
 									对扣分分值作任务要求。未达分值任务的按差额扣分
@@ -349,7 +349,7 @@
 
 				<el-form-item prop="exec_count">
 					<template slot="label">
-						<span>月奖扣次数</span>
+						<span>次数要求</span>
 						<el-tooltip placement="top">
 							<div slot="content" style="width: 300px;">
 								对奖分和扣分的执行次数作任务要求
@@ -366,11 +366,7 @@
 					<template slot="label">
 						<span>每少一次奖扣</span>
 						<el-tooltip placement="top">
-							<div slot="content" style="width: 300px;">
-								扣x分(x为输入框)
-								<br />
-								奖扣次数未达任务要求的,每少一次扣对应分值
-							</div>
+							<div slot="content" style="width: 300px;">奖扣次数未达任务要求的,每少一次扣对应分值</div>
 							<span class="tips">?</span>
 						</el-tooltip>
 					</template>
@@ -379,7 +375,7 @@
 
 				<el-form-item prop="reward_ratio">
 					<template slot="label">
-						<span>月奖扣比例</span>
+						<span>比例要求</span>
 						<el-tooltip placement="top">
 							<div slot="content" style="width: 300px;">
 								对奖分和扣分的比例作任务要求
@@ -389,25 +385,21 @@
 							<span class="tips">?</span>
 						</el-tooltip>
 					</template>
-					<el-input style="width: 100px;" disabled placeholder="1"></el-input>
-					:
 					<el-input
 						v-model.number="integral_limit_form.reward_ratio"
 						style="width: 100px;"
 						oninput="value=value.replace(/[^\d]/g,'')"
 						placeholder="请输入数值"
 					></el-input>
+					:
+					<el-input style="width: 100px;" disabled placeholder="1"></el-input>
 				</el-form-item>
 
 				<el-form-item prop="reward_ratio_point">
 					<template slot="label">
-						<span>比例未达标</span>
+						<span>比例不达标扣</span>
 						<el-tooltip placement="top">
-							<div slot="content" style="width: 300px;">
-								扣x分(x为输入框)
-								<br />
-								完成奖扣比例任务的,按对应分值扣分
-							</div>
+							<div slot="content" style="width: 300px;">完成奖扣比例任务的,按对应分值扣分</div>
 							<span class="tips">?</span>
 						</el-tooltip>
 					</template>
@@ -494,10 +486,10 @@ export default {
 			bonus_deducted_loading: false,
 			bonus_loading: false,
 			integral_limit_rules: {
-				exec_count: [{ required: true, validator: minimum, trigger: 'blur' }, { type: 'number', message: '分值必须为数字值' }],
-				exec_count_point: [{ required: true, validator: minimum, trigger: 'blur' }, { type: 'number', message: '分值必须为数字值' }],
-				reward_ratio: [{ required: true, validator: minimum, trigger: 'blur' }, { type: 'number', message: '分值必须为数字值' }],
-				reward_ratio_point: [{ required: true, validator: minimum, trigger: 'blur' }, { type: 'number', message: '分值必须为数字值' }]
+				// exec_count: [{ required: true, validator: minimum, trigger: 'blur' }, { type: 'number', message: '分值必须为数字值' }],
+				// exec_count_point: [{ required: true, validator: minimum, trigger: 'blur' }, { type: 'number', message: '分值必须为数字值' }],
+				// reward_ratio: [{ required: true, validator: minimum, trigger: 'blur' }, { type: 'number', message: '分值必须为数字值' }],
+				// reward_ratio_point: [{ required: true, validator: minimum, trigger: 'blur' }, { type: 'number', message: '分值必须为数字值' }]
 			},
 			my_no_select: '', //设置人的ID
 			isStart: false, //是否是创始人或者积分负责人
@@ -550,7 +542,7 @@ export default {
 					title: '积分事件',
 					name: 'event_range',
 					code: 0,
-					list: [{ name: '看自己的', id: 2 }, { name: '查看全员数据', id: 3 }]
+					list: [{ name: '看自己的', id: 1 }, { name: '查看全员数据', id: 3 }]
 				}
 				//   {
 				//     title: '团队绩效',
@@ -595,13 +587,10 @@ export default {
 							self.dataAccessList.forEach(element => {
 								element.name == 'event_range' ? (element.code = resData.event_range) : '';
 								element.name == 'prize_range' ? (element.code = resData.prize_range) : '';
-								//   element.name == 'performance_range'?element.code = resData.performance_range:''
-								//   element.name == 'statistics_range'?element.code = resData.statistics_range:''
 							});
 						} else {
 							self.dataAccessListEmployee.forEach(element => {
 								element.name == 'event_range' ? (element.code = resData.event_range) : '';
-								//   element.name == 'performance_range'?element.code = resData.performance_range:''
 							});
 						}
 					} else {

+ 27 - 3
src/views/set/log.vue

@@ -65,11 +65,11 @@
 						</el-select>
 					</el-form-item>
 					<el-form-item label="每次汇报奖励" :rules="[{ required: true, message: '请输入分值', trigger: 'change' }]" prop="config.point">
-						<el-input class="widthInput" oninput="value=value.replace(/[^\d]/g,'')" v-model.number="selectItem.config.point"></el-input>
+						<el-input class="widthInput" placeholder="请输入(1~999)" @input="checkCountry($event,'input1')" id="input1" v-model.number="selectItem.config.point"></el-input>
 						<span style="margin-left: 5px;">B分</span>
 					</el-form-item>
 					<el-form-item label="汇报提交超过" prop="config.upper_limit" :rules="[{ required: true, message: '请输入次数' }]">
-						<el-input class="widthInput" oninput="value=value.replace(/[^\d]/g,'')" v-model.number="selectItem.config.upper_limit"></el-input>
+						<el-input class="widthInput" placeholder="请输入(1~999)" @input="checkCountry($event,'input2')" id="input2" v-model.number="selectItem.config.upper_limit"></el-input>
 						<span style="margin-left: 5px;">次,不再奖励积分</span>
 					</el-form-item>
 				</template>
@@ -124,6 +124,21 @@ export default {
 		this.getList();
 	},
 	methods: {
+		// 最大值不能大于100
+		checkCountry(e,id){
+		    //解决v-model与oninput同时使用失效问题
+		    var dom = document.getElementById(id);
+		    var value = dom.value;
+		    //写你自己的输入规则
+		    value = value.replace(/[^\d]/g,'');
+		    if(value>999){
+			  id=='input1'?this.selectItem.config.point='':this.selectItem.config.upper_limit=''
+		      this.$message.error('不能大于999');
+		      return false
+		    }
+		    dom.value = value;//输入框赋值
+			id=='input1'?this.selectItem.config.point=dom.value:this.selectItem.config.upper_limit=dom.value
+		},
 		submitName() {
 			if (!this.nameVal || this.nameVal == null || this.nameVal == undefined) {
 				this.$message.error('请输入日志名称');
@@ -137,6 +152,15 @@ export default {
 			this.isShowName = true;
 		},
 		submit(fromName) {
+			if(this.selectItem.config.point==0){
+				this.$message.error('汇报奖励不能为0');
+				return false
+			}
+			if(this.selectItem.config.upper_limit==0){
+				this.$message.error('提交超过次数不能为0');
+				return false
+			}
+			
 			this.$refs[fromName].validate(valid => {
 				if (valid) {
 					this.setLoading = true;
@@ -199,7 +223,7 @@ export default {
 	top: -20px;
 }	
 .widthInput {
-	width: 120px;
+	width: 150px;
 }
 .title {
 	margin: 10px 0;

+ 11 - 41
src/views/set/rule.vue

@@ -154,34 +154,6 @@
 					</el-form-item>
 				</div>
 
-				<!-- 			<el-form-item prop="min_point">
-					<el-row :gutter="20" class="select_width">
-						<el-col :span="11">
-							<el-input
-								placeholder="请输入分值"
-								v-model.number="rules_detail_form.min_point"
-								type="age" class="input-with-select"
-							>
-								<el-select v-model="integral_select_name1" slot="prepend" placeholder="请选择类型">
-									<el-option v-for="(item, index) in integral_select" :key="index" :label="item.name" :value="item.value"></el-option>
-								</el-select>
-							</el-input>
-						</el-col>
-						<el-col :span="1" v-show="rules_detail_form.range_type == 2">至</el-col>
-						<el-col :span="11" v-show="rules_detail_form.range_type == 2">
-							<el-input
-								placeholder="请输入分值"
-								v-model.number="rules_detail_form.max_point"
-								type="age"	class="input-with-select"
-							>
-								<el-select v-model="integral_select_name2" slot="prepend" placeholder="请选择类型">
-									<el-option v-for="(item, index) in integral_select" :key="index" :label="item.name" :value="item.value"></el-option>
-								</el-select>
-							</el-input>
-						</el-col>
-					</el-row>
-				</el-form-item> -->
-
 				<div class="flex-box flex-v-ce">
 					<el-button type="danger" @click="del_rule" :loading="delRule_loading" :disabled="delRule_loading" v-show="rule_type == 'edit'">删除规则</el-button>
 					<div class="flex-1"></div>
@@ -295,10 +267,10 @@ export default {
 				rule_id: '',
 				range_type: '1',
 				prize_type: '0',
-				min_point: 0,
-				max_point: 0,
-				min_point2: 0,
-				max_point2: 0,
+				min_point: '',
+				max_point: '',
+				min_point2: '',
+				max_point2: '',
 				remark: '',
 				is_attendance: '0',
 				cycle_type: '1',
@@ -319,8 +291,6 @@ export default {
 						trigger: 'change'
 					}
 				]
-				// min_point2:[{ required: true, message: '分值不能为空'},{ pattern: /^[1-9]\d*$/, message: '分值必须为数字值'}],
-				// max_point2:[{ required: true, message: '分值不能为空'},{ pattern: /^[1-9]\d*$/, message: '分值必须为数字值'}],
 			},
 			integral_select_name1: '1',
 			integral_select_name2: '1',
@@ -520,8 +490,8 @@ export default {
 			let self = this;
 			self.$refs[form].validate(valid => {
 				if (valid) {
-					if (self.rules_detail_form.min_point == 0 || !self.rules_detail_form.min_point) {
-						this.$message.error('请输入积分分值');
+					if (!self.rules_detail_form.min_point) {
+						this.$message.error('积分不能为空或为0');
 						return;
 					}
 					// self.rules_detail_form.min_point=self.rules_detail_form.min_point2;
@@ -622,7 +592,7 @@ export default {
 						self.rules_detail_form.max_point = self.rules_detail_form.min_point;
 					}
 					if (self.rules_detail_form.min_point == 0 || !self.rules_detail_form.min_point || self.rules_detail_form.max_point == 0 || !self.rules_detail_form.max_point) {
-						this.$message.error('请输入积分分值');
+						this.$message.error('积分不能为空或为0');
 						return;
 					}
 					if (Array.isArray(self.rules_detail_form.rule_id)) {
@@ -738,10 +708,10 @@ export default {
 				rule_id: '',
 				range_type: '1',
 				prize_type: '0',
-				min_point: 0,
-				max_point: 0,
-				min_point2: 0,
-				max_point2: 0,
+				min_point: '',
+				max_point: '',
+				min_point2: '',
+				max_point2: '',
 				remark: '',
 				is_attendance: '0',
 				cycle_type: '1',

+ 262 - 265
src/views/task/my_task.vue

@@ -1,282 +1,279 @@
 <template>
-  <div>
-    <div class="box">
-      <el-tabs v-model="formData.status" type="card">
-        <el-tab-pane v-for="(item,index) in tabsOption" :key="index" :label="item.label" :name="item.name"></el-tab-pane>
-      </el-tabs>
+	<div>
+		<div class="box">
+			<el-tabs v-model="formData.status" type="card">
+				<el-tab-pane v-for="(item, index) in tabsOption" :key="index" :label="item.label" :name="item.name"></el-tab-pane>
+			</el-tabs>
 
-      <el-form ref="formData" :inline="true" :model="formData" label-width="80px">
-        <el-form-item label="积分类型">
-          <el-select v-model="formData.pt_id" clearable placeholder="请选择积分类型">
-            <el-option v-for="item in point_type" :key="item.id" :label="item.name" :value="item.id"></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="排序">
-          <el-select v-model="formData.sort" placeholder="请选择排序">
-            <el-option v-for="item in sort" :key="item.id" :label="item.name" :value="item.code"></el-option>
-          </el-select>
-        </el-form-item>
-      </el-form>
+			<el-form ref="formData" :inline="true" :model="formData" label-width="80px">
+				<el-form-item label="积分类型">
+					<el-select v-model="formData.pt_id" clearable placeholder="请选择积分类型">
+						<el-option v-for="item in point_type" :key="item.id" :label="item.name" :value="item.id"></el-option>
+					</el-select>
+				</el-form-item>
+				<el-form-item label="排序">
+					<el-select v-model="formData.sort" placeholder="请选择排序">
+						<el-option v-for="item in sort" :key="item.id" :label="item.name" :value="item.code"></el-option>
+					</el-select>
+				</el-form-item>
+			</el-form>
 
-      <div v-if="formData.status == 'running'">
-        <el-table :data="list" style="width: 100%" v-loading="loading" @row-click="openDetail" >
-          <el-table-column label="任务内容" prop="task_name">
-			  <template slot-scope="scope">
-					<span class="font-flex-word" style="max-width: 200px;">{{scope.row.task_name}}驱蚊器翁请问请问恶趣味恶趣味</span>
-			  </template>
-		  </el-table-column>
-          <el-table-column label="积分">
-				<template slot-scope="scope">
-					<span class="red">+{{scope.row.point_config.base_point}} {{scope.row.pt_name}}</span>
-				</template>
-          </el-table-column>
-          <el-table-column label="截止时间" prop="expire_time"></el-table-column>
-          <el-table-column label="操作" prop="owner_id">
-            <template slot-scope="scope">
-              <el-link type="primary" :underline='false' @click.stop="completeBtn(scope.row)">完成任务</el-link>
-            </template>
-          </el-table-column>
-          <template slot="empty">
-				<noData></noData>
-          </template>
-        </el-table>
-      </div>
-
-      <div v-else>
-        <el-table :data="list" style="width: 100%" v-loading="loading" @row-click="openDetail">
-          <el-table-column label="任务内容" prop="task_name">
-			  <template slot-scope="scope">
-			  	<span class="font-flex-word" style="max-width: 200px;">{{scope.row.task_name}}</span>
-			  </template>
-		  </el-table-column>
-          <el-table-column label="积分">
-            <template slot-scope="scope">
-              <span class="red">+{{scope.row.point_config.base_point}} {{scope.row.pt_name}}</span>
-            </template>
-          </el-table-column>
-          <el-table-column label="截止时间" prop="expire_time"></el-table-column>
-          <template slot="empty">
+			<div v-if="formData.status == 'running'">
+				<el-table :data="list" style="width: 100%" v-loading="loading" @row-click="openDetail">
+					<el-table-column label="任务内容" prop="task_name">
+						<template slot-scope="scope">
+							<span class="font-flex-word" style="max-width: 200px;">{{ scope.row.task_name }}</span>
+						</template>
+					</el-table-column>
+					<el-table-column label="积分">
+						<template slot-scope="scope">
+							<span class="red">+{{ scope.row.point_config.base_point }} {{ scope.row.pt_name }}</span>
+						</template>
+					</el-table-column>
+					<el-table-column label="截止时间" prop="expire_time"></el-table-column>
+					<el-table-column label="操作" prop="owner_id">
+						<template slot-scope="scope">
+							<el-link type="primary" :underline="false" @click.stop="completeBtn(scope.row)">完成任务</el-link>
+						</template>
+					</el-table-column>
+					<template slot="empty">
 						<noData></noData>
-          </template>
-        </el-table>
-      </div>
-
-      <center style="padding: 20px 0;">
-        <el-pagination
-          background
-          @size-change="handleSizeChange"
-          @current-change="handleCurrentChange"
-				  :page-sizes="[10, 20, 50, 100]"
-          layout="total, sizes, prev, pager, next"
-          :current-page="formData.page"
-          :page-size="formData.page_size"
-          :total="total">
-        </el-pagination>
-      </center>
+					</template>
+				</el-table>
+			</div>
 
-    </div>
+			<div v-else>
+				<el-table :data="list" style="width: 100%" v-loading="loading" @row-click="openDetail">
+					<el-table-column label="任务内容" prop="task_name">
+						<template slot-scope="scope">
+							<span class="font-flex-word" style="max-width: 200px;">{{ scope.row.task_name }}</span>
+						</template>
+					</el-table-column>
+					<el-table-column label="积分">
+						<template slot-scope="scope">
+							<span class="red">+{{ scope.row.point_config.base_point }} {{ scope.row.pt_name }}</span>
+						</template>
+					</el-table-column>
+					<el-table-column label="截止时间" prop="expire_time"></el-table-column>
+					<el-table-column label="状态" prop="review_status">
+						<template slot-scope="scope">
+							  <div class="yellow" v-if="scope.row.review_status == 0">待处理</div>
+							  <div class="green" v-if="scope.row.review_status ==1">已通过</div>
+							  <div class="red" v-if="scope.row.review_status == 2">已驳回</div>
+						</template>
+					</el-table-column>
+					<template slot="empty">
+						<noData></noData>
+					</template>
+				</el-table>
+			</div>
 
-    <el-drawer
-      :custom-class="'drawer_details'"
-      :visible.sync="completeShow"
-      wrapperClosable
-      :with-header="false"
-      size="500px">
-      <div class="details_title">完成任务</div>
-      <div class="details_content">
-        <el-form :model="detail_form" ref="detail_form" label-width="80px">
-          <el-form-item label="任务备注" prop="remark" :rules="[{ required: true, message: '请填写任务备注(限20字)', trigger: 'blur' }]">
-            <el-input v-model="detail_form.remark" type="textarea" max="20"></el-input>
-          </el-form-item>
-          <el-form-item>
-            <el-button @click="resetForm('detail_form')">取消</el-button>
-            <el-button type="primary" @click="onSubmit('detail_form')">提交</el-button>
-          </el-form-item>
-        </el-form>
-      </div>
-    </el-drawer>
+			<center style="padding: 20px 0;">
+				<el-pagination
+					background
+					@size-change="handleSizeChange"
+					@current-change="handleCurrentChange"
+					:page-sizes="[10, 20, 50, 100]"
+					layout="total, sizes, prev, pager, next"
+					:current-page="formData.page"
+					:page-size="formData.page_size"
+					:total="total"
+				></el-pagination>
+			</center>
+		</div>
 
-    <!-- 详情弹窗 -->
-    <taskDetailsPopup :visible.sync="showDetailPopup"  v-if="showDetailPopup" :id="detailId" :title="'任务详情'"></taskDetailsPopup>
+		<el-drawer :custom-class="'drawer_details'" :visible.sync="completeShow" wrapperClosable :with-header="false" size="500px">
+			<div class="details_title">完成任务</div>
+			<div class="details_content">
+				<el-form :model="detail_form" ref="detail_form" label-width="80px">
+					<el-form-item label="任务备注" prop="remark" :rules="[{ required: true, message: '请填写任务备注(限20字)', trigger: 'blur' }]">
+						<el-input v-model="detail_form.remark" type="textarea" max="20"></el-input>
+					</el-form-item>
+					<el-form-item>
+						<el-button @click="resetForm('detail_form')">取消</el-button>
+						<el-button type="primary" @click="onSubmit('detail_form')">提交</el-button>
+					</el-form-item>
+				</el-form>
+			</div>
+		</el-drawer>
 
-  </div>
+		<!-- 详情弹窗 -->
+		<taskDetailsPopup :visible.sync="showDetailPopup" v-if="showDetailPopup" :id="detailId" :title="'任务详情'"></taskDetailsPopup>
+	</div>
 </template>
 
 <script>
-  import noData from '@/components/noData';
-  import taskDetailsPopup from '@/views/common/taskDetailsPopup'
+import noData from '@/components/noData';
+import taskDetailsPopup from '@/views/common/taskDetailsPopup';
 
-  export default {
-    name: 'my_task',
-    data() {
-      return {
-        active: 'running',
-        tabsOption: [
-          { label: '待完成', name: 'running' },
-          { label: '待审批', name: 'complete' },
-          { label: '已审批', name: 'reviewed' },
-        ],
-        list: [],
-        loading: false,
-        total: null,
-        sort:[{id: 1,code: 'expire',name: '按截止时间'}, {id: 2,code: 'publish',name: '按发布时间'}],
-        point_type: null,
-        detail_form:{
-          id: '',
-          remark: ''
-        },
-        formData: {
-          status: "running",
-          pt_id: 0,
-          sort: 'publish',
-          today: '0',
-          page: 1,
-          page_size: 10,
-        },
-        completeShow: false,
-        showDetailPopup: false,
-        detailId: null,
-        showDetailPopup: false,
-        showRepetitiveTasksPopup: false,
-        showRewardTaskDetailsPopup: false
-      }
-    },
-    components: {taskDetailsPopup,noData},
-    watch:{
-      'formData.pt_id'(val){
-        this.get_list()
-      },
-      'formData.sort'(val){
-        this.get_list()
-      },
-      'formData.status'(val){
-        this.formData.page = 1
-        this.formData.pt_id = 0
-        this.formData.sort = 'expire'
-        this.list = []
-        this.get_list()
-      }
-    },
-    mounted() {
-      this.get_list()
-      this.point_type = this.getPointType()
-    },
-    methods: {
-      // 点击完成
-      completeBtn(data){
-        this.detail_form.id = data.id
-        this.completeShow = true
-      },
-      //提交完成任务
-      onSubmit(formName){
-        this.$refs[formName].validate((valid) => {
-          if (valid) {
-            let self = this
-            let data = {
-              work_id: self.detail_form.id,
-              progress: '100',
-              remark: self.detail_form.remark,
-              state:'1'
-            }
-            self.$axios('post','/api/integral/work',data).then(res => {
-              if (res.data.code == 1) {
-                self.$message.success(res.data.msg);
-                self.$refs[formName].resetFields();
-                self.completeShow = false
-                self.get_list()
-              } else {
-                self.$message.error(res.data.msg);
-              }
-            })
-          }
-        });
-      },
-      //重置表单
-      resetForm(formName){
-        this.$refs[formName].resetFields();
-        this.completeShow = false
-      },
-      getPointType(){
-        let point = window.plus?JSON.parse(puls.storage.getItem('types')):JSON.parse(localStorage.getItem('types'))
-        // point.splice(0,1)
-        point.unshift({code: "AF",id: 0,name: "全部"})
-        return point
-      },
-			// 页码变更
-      handleCurrentChange(val) {
-				this.formData.page = val
-				this.get_list()
+export default {
+	name: 'my_task',
+	data() {
+		return {
+			active: 'running',
+			tabsOption: [{ label: '待完成', name: 'running' }, { label: '待审批', name: 'complete' }, { label: '已审批', name: 'reviewed' }],
+			list: [],
+			loading: false,
+			total: null,
+			sort: [{ id: 1, code: 'expire', name: '按截止时间' }, { id: 2, code: 'publish', name: '按发布时间' }],
+			point_type: null,
+			detail_form: {
+				id: '',
+				remark: ''
+			},
+			formData: {
+				status: 'running',
+				pt_id: 0,
+				sort: 'publish',
+				today: '0',
+				page: 1,
+				page_size: 10
 			},
-      handleSizeChange(val){
-        this.formData.page_size = val
-        this.get_list()
-      },
-      openDetail(row){
-        this.detailId = parseInt(row.id)
-        this.showDetailPopup = true
-      },
-      get_list(){
-        let self = this
-        self.loading = true
-        let params = JSON.parse(JSON.stringify(this.formData))
-        if (params.pt_id == 0) {
-          delete params.pt_id
-        }
-        self.$axios('get','/api/integral/work/list',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
-        })
-      }
-    }
-  }
+			completeShow: false,
+			showDetailPopup: false,
+			detailId: null,
+			showRepetitiveTasksPopup: false,
+			showRewardTaskDetailsPopup: false
+		};
+	},
+	components: { taskDetailsPopup, noData },
+	watch: {
+		'formData.pt_id'(val) {
+			this.get_list();
+		},
+		'formData.sort'(val) {
+			this.get_list();
+		},
+		'formData.status'(val) {
+			this.formData.page = 1;
+			this.formData.pt_id = 0;
+			this.formData.sort = 'expire';
+			this.list = [];
+			this.get_list();
+		}
+	},
+	mounted() {
+		this.get_list();
+		this.point_type = this.getPointType();
+	},
+	methods: {
+		// 点击完成
+		completeBtn(data) {
+			this.detail_form.id = data.id;
+			this.completeShow = true;
+		},
+		//提交完成任务
+		onSubmit(formName) {
+			this.$refs[formName].validate(valid => {
+				if (valid) {
+					let self = this;
+					let data = {
+						work_id: self.detail_form.id,
+						progress: '100',
+						remark: self.detail_form.remark,
+						state: '1'
+					};
+					self.$axios('post', '/api/integral/work', data).then(res => {
+						if (res.data.code == 1) {
+							self.$message.success(res.data.msg);
+							self.$refs[formName].resetFields();
+							self.completeShow = false;
+							self.get_list();
+						} else {
+							self.$message.error(res.data.msg);
+						}
+					});
+				}
+			});
+		},
+		//重置表单
+		resetForm(formName) {
+			this.$refs[formName].resetFields();
+			this.completeShow = false;
+		},
+		getPointType() {
+			let point = window.plus ? JSON.parse(puls.storage.getItem('types')) : JSON.parse(localStorage.getItem('types'));
+			// point.splice(0,1)
+			point.unshift({ code: 'AF', id: 0, name: '全部' });
+			return point;
+		},
+		// 页码变更
+		handleCurrentChange(val) {
+			this.formData.page = val;
+			this.get_list();
+		},
+		handleSizeChange(val) {
+			this.formData.page_size = val;
+			this.get_list();
+		},
+		openDetail(row) {
+			this.detailId = parseInt(row.id);
+			this.showDetailPopup = true;
+		},
+		get_list() {
+			let self = this;
+			self.loading = true;
+			let params = JSON.parse(JSON.stringify(this.formData));
+			if (params.pt_id == 0) {
+				delete params.pt_id;
+			}
+			self.$axios('get', '/api/integral/work/list', params)
+				.then(res => {
+					if (res.data.code == 1) {
+						self.list = res.data.data.list;
+						self.total = res.data.data.total;
+					} else {
+						self.$message.error(res.data.data.msg);
+					}
+				})
+				.finally(() => {
+					self.loading = false;
+				});
+		}
+	}
+};
 </script>
 
 <style scoped lang="scss">
-  .box{
-    min-height: calc(100vh - 184px);
-    min-width: 800px;
-    background-color: #fff;
-    padding: 20px;
-  }
-   ::v-deep .el-table tr:hover{
-    cursor:pointer
-  }
-  .details_content {
-    padding: 20px;
-    height: calc(100vh - 60px);
-    overflow: auto;
-    .row_title {
-      position: relative;
-      margin: 0 0 20px 0;
-      padding-top: 12px;
-      font-size: 16px;
-      color: #303133;
-      line-height: 22px;
-    }
-    .row_title:before {
-      position: absolute;
-      top: 0;
-      content: ' ';
-      width: 100%;
-      border-top: 1px #f8f8f8 solid;
-    }
-    .el-row {
-      margin-bottom: 10px;
-      font-size: 14px;
-      .el-col-4 {
-        color: #606266;
-      }
-    }
-  }
-  .details_title {
-    font-size: 18px;
-    padding: 20px;
-    border-bottom: 1px #efefef solid;
-  }
+.box {
+	min-height: calc(100vh - 184px);
+	min-width: 800px;
+	background-color: #fff;
+	padding: 20px;
+}
+::v-deep .el-table tr:hover {
+	cursor: pointer;
+}
+.details_content {
+	padding: 20px;
+	height: calc(100vh - 60px);
+	overflow: auto;
+	.row_title {
+		position: relative;
+		margin: 0 0 20px 0;
+		padding-top: 12px;
+		font-size: 16px;
+		color: #303133;
+		line-height: 22px;
+	}
+	.row_title:before {
+		position: absolute;
+		top: 0;
+		content: ' ';
+		width: 100%;
+		border-top: 1px #f8f8f8 solid;
+	}
+	.el-row {
+		margin-bottom: 10px;
+		font-size: 14px;
+		.el-col-4 {
+			color: #606266;
+		}
+	}
+}
+.details_title {
+	font-size: 18px;
+	padding: 20px;
+	border-bottom: 1px #efefef solid;
+}
 </style>