guojy 1 year ago
parent
commit
6849ab53cc

+ 0 - 1
src/App.vue

@@ -6,7 +6,6 @@
 <style>
   @import "assets/css/reset.css";
   @import "assets/css/iconfont.css";
-  /* @import "assets/css/iconfont.js"; */
 </style>
 <style lang="scss">
 	#app{

+ 2 - 1
src/home.vue

@@ -868,7 +868,8 @@ export default {
 				type: 'waiting',
 				page: 1,
 				pt_id: 0,
-				page_size: 3
+				page_size: 3,
+				reviewer_id:this.$getUserData().id,
 			};
 			this.$axios('get', '/api/integral/review/list', params)
 				.then(res => {

+ 12 - 2
src/router/index.js

@@ -244,7 +244,6 @@ const routes = [{
 					icon: 'icon-shezhi_jifenguize',
 					groupCode: 'ranking',
 					groupName: "统计",
-
 				}
 			},
 			{
@@ -433,7 +432,7 @@ const routes = [{
 			{
 				path: '/alreadySp',
 				name: 'alreadySp',
-				title: '已审批',
+				title: '已审批',
 				component: () => import( /* webpackChunkName: "alreadySp" */
 					'@/views/workbench/alreadySp.vue'),
 				meta: {
@@ -441,6 +440,17 @@ const routes = [{
 					groupCode: 'workbench',
 				}
 			},
+			{
+				path: '/approvalAll',
+				name: 'approvalAll',
+				title: '审批跟进',
+				component: () => import( /* webpackChunkName: "approvalAll" */'@/views/workbench/approvalAll.vue'),
+				meta: {
+					icon: 'icon-shezhi_gongdaolbiao',
+					groupCode: 'workbench',
+					jurisdiction: ['dept_manager', 'employee']
+				}
+			},
 			{
 				path: '/review',
 				name: 'review',

+ 4 - 0
src/screen.vue

@@ -445,6 +445,10 @@ export default {
 						this.$message.error('窗口链接数量超过限制');
 						this.quit();
 					}
+					if(e.code=='0'){
+						this.$message.error('公司不可用');
+						this.quit();
+					}
 				} else {
 					if(!this.preview){
 						this.$setCache('code', this.code);

+ 4 - 0
src/screenSan.vue

@@ -552,6 +552,10 @@ export default {
 						this.$message.warning('窗口链接数量超过限制,请选择其他大屏');
 						this.isShowList=true;
 					}
+					if(e.code=='0'){
+						this.$message.error('公司不可用');
+						this.quit();
+					}
 				} else {
 					this.result = e.result;
 					if(!this.result.config.ranking_type||this.result.config.ranking_type=='ranking'){

+ 2 - 2
src/views/common/taskDetailsPopup.vue

@@ -106,11 +106,11 @@
 					</li>
 					<li class="flex-box" v-if="workDetailData.complete_task && workDetailData.complete_task.time">
 						<div class="label">完成时间</div>
-						<div class="content_text">{{ workDetailData.complete_task.time }}</div>
+						<div class="content_text">{{$moment(workDetailData.complete_task.time).format('YYYY-MM-DD HH:mm')}}</div>
 					</li>
 					<li class="flex-box" v-if="workDetailData.complete_task && workDetailData.complete_task.remark">
 						<div class="label">完成备注</div>
-						<div class="content_text">{{ workDetailData.complete_task.remark }}</div>
+						<div class="content_text">{{workDetailData.complete_task.remark }}</div>
 					</li>
 					<li class="flex-box" v-if="workDetailData.complete_task && workDetailData.complete_task.files && workDetailData.complete_task.files.length > 0">
 						<div class="label"></div>

+ 16 - 0
src/views/ranking/integral_event.vue

@@ -95,6 +95,16 @@
 						</el-select>
 					</div>
 				</div>
+				<div class="form-item">
+					<div class="form-label">奖扣分值</div>
+					<div class="form-search">
+						<el-select class="date-picker-width" size="medium" v-model="formData.add_subtract"  placeholder="请选择复核状态">
+							<el-option  label="全部" :value="0"></el-option>
+							<el-option  label="奖分" :value="1"></el-option>
+							<el-option  label="扣分" :value="2"></el-option>
+						</el-select>
+					</div>
+				</div>
 				<div class="form-item">
 					<div class="form-label">内容搜索</div>
 					<div class="form-search">
@@ -417,6 +427,7 @@ export default {
 				status:1,
 				dc_status:JSON.stringify([1]),
 				is_enable:1,
+				add_subtract:0,
 				// order_key:'update_time',
 			},
 			time_slot: null,
@@ -500,6 +511,10 @@ export default {
 				this.deleteDisabled = false;
 			}
 		},
+		'formData.add_subtract'(val, old_val) {
+			this.formData.page = 1;
+			this.get_integral_list(this.formData);
+		},
 		'formData.is_enable'(val, old_val) {
 			this.formData.page = 1;
 			this.get_integral_list(this.formData);
@@ -707,6 +722,7 @@ export default {
 					(this.formData.start_day ? '&start_day=' + this.formData.start_day : '') +
 					(this.formData.end_day ? '&end_day=' + this.formData.end_day : '') +
 					(this.formData.dc_status ? '&dc_status=' + this.formData.dc_status : '') +
+					(this.formData.add_subtract ? '&add_subtract=' + this.formData.add_subtract : '') +
 					(this.formData.keyword ? '&keyword=' + this.formData.keyword : ''),
 				'_blank'
 			);

+ 60 - 1
src/views/task/my_issue.vue

@@ -172,7 +172,7 @@
 							</span>
 						</template>
 						<template slot-scope="scope">
-							<span v-if="scope.row.total_chance">{{ scope.row.total_chance-scope.row.chance }}/{{ scope.row.total_chance }}</span>
+							<span v-if="scope.row.total_chance" @click.stop="openTable(scope.row)" class="qd-num">{{ scope.row.total_chance-scope.row.chance }}/{{ scope.row.total_chance }}</span>
 							<span v-else>--</span>
 						</template>
 					</el-table-column>
@@ -318,6 +318,42 @@
 
 		<!-- 抢单任务详情弹窗 -->
 		<rewardTaskDetailsPopup :visible.sync="showRewardTaskDetailsPopup" v-if="showRewardTaskDetailsPopup" :id="detailId" :title="'任务详情'"></rewardTaskDetailsPopup>
+	
+		<!-- 对齐我的目标详情 -->
+		<el-dialog title="抢单人员详情" :visible.sync="isShowTable" :append-to-body="true" width="750px" top="5%">
+		  <div>
+		      <div class="fontColorC" style="padding: 10px;font-size: 16px;">
+				  {{tableList.length}}人已抢单,其中<span class="blue">{{returnNum}}</span>人已完成
+			  </div>
+			  <el-table :data="tableList" style="width: 100%;height: 550px;overflow: auto;">
+					<el-table-column prop="name" label="执行人">
+					  <template slot-scope="scope">
+						  <div class="flex-box">
+							<userImage :user_name="scope.row.employee_name" :img_url="scope.row.img_url" width="40px" height="40px"></userImage>
+							<span style="line-height: 40px; padding-left: 10px;">{{ scope.row.employee_name }}</span>
+						  </div>
+					  </template>
+					</el-table-column>
+					<el-table-column label="部门" prop="dept"></el-table-column>
+					<el-table-column label="抢单时间" prop="create_time"></el-table-column>
+					<el-table-column label="执行情况" width="100px">
+					  <template slot-scope="scope">
+						 <span v-if="scope.row.status==1" class="orange">进行中</span>
+						 <span v-if="scope.row.status==2" class="blue">已完成</span>
+						 <span v-if="scope.row.status==3" class="fontColorB">退回</span>
+						 <span v-if="scope.row.status==4" class="green">已审批</span>
+						 <span v-if="scope.row.status==5" class="fontColorB">发布者已撤回</span>
+					  </template>
+					</el-table-column>
+					<template slot="empty">
+						<noData></noData>
+					</template>
+			  </el-table>
+		  </div>
+		  <div class="flex-box-end" style="margin-top: 20px;">
+		  	<el-button @click="isShowTable=false">关 闭</el-button>
+		  </div>
+		</el-dialog>
 	</div>
 </template>
 
@@ -390,9 +426,23 @@ export default {
 			//重复任务复用
 			isFy:false,
 			fyData:{},
+			
+			isShowTable:false,
+			tableList:[],
 		};
 	},
 	components: {temporaryTask, rewardTask, rewardTaskAmend, temporaryTaskAmend, taskDetailsPopup, repeatTaskDetailsPopup, rewardTaskDetailsPopup },
+	computed:{
+		returnNum(){
+			let num=0
+			this.tableList.forEach(item=>{
+				if(item.status==2||item.status==4){
+				   num++
+				}
+			})
+			return num
+		}
+	},
 	watch: {
 		dialogVisible(val){
 			if(!val){
@@ -471,6 +521,12 @@ export default {
 		this.getEmployee(); //员工列表
 	},
 	methods: {
+		openTable(item){
+			this.$axios('get', '/api/integral/task/work', { task_id:item.id }).then(res => {
+				this.isShowTable=true;
+				this.tableList=res.data.data.list;
+			});
+		},
 		enable(item){
 			this.$axios('post', '/api/integral/schedule/enable', { schedule_id:item.id }).then(res => {
 				this.$message.success(item.enable==1? '已暂停':'已启用');
@@ -685,6 +741,9 @@ export default {
 </script>
 
 <style scoped lang="scss">
+.qd-num:hover{
+	color: #26A2FF;
+}	
 .box {
 	min-height: calc(100vh - 184px);
 	min-width: 800px;

+ 6 - 4
src/views/workbench/alreadySp.vue

@@ -57,18 +57,19 @@
 					<el-table-column label="时间" prop="event_time" width="150"></el-table-column>
 					<el-table-column label="积分" prop="review_point" width="120">
 						<template slot-scope="scope">
-							<span v-show="scope.row.review_point < 0" class="green">
+							<span v-if="scope.row.review_point < 0" class="green">
 								{{ scope.row.review_point }}
 								<span>{{ $getTypsName(scope.row.pt_id) }}</span>
 							</span>
-							<span class="red" v-show="scope.row.review_point >= 0">
-								+{{ scope.row.review_point }}
-								<span>{{ $getTypsName(scope.row.pt_id) }}</span>
+							<span class="red" v-else-if="scope.row.review_point > 0">
+								+{{ scope.row.review_point }}<span>{{ $getTypsName(scope.row.pt_id) }}</span>
 							</span>
+							<span v-else>--</span>
 						</template>
 					</el-table-column>
 					<el-table-column label="状态" prop="review_status" width="80">
 						<template slot-scope="scope">
+							<!-- <span v-show="scope.row.review_status == 0">待审批</span> -->
 							<span v-show="scope.row.review_status == 1" class="green">审批通过</span>
 							<span v-show="scope.row.review_status == 2" class="red">审批驳回</span>
 						</template>
@@ -113,6 +114,7 @@ export default {
 				page_size: 10,
 				page: 1,
 				keyword:'',
+				reviewer_id:this.$getUserData().id,
 			},
 			total: null,
 			list: null,

+ 250 - 0
src/views/workbench/approvalAll.vue

@@ -0,0 +1,250 @@
+<template>
+	<div>
+		<div class="all padding-20">
+			<FormBox>
+				<div class="form-item">
+					<div class="form-label">姓名搜索</div>
+					<div class="form-search">
+						<el-select size="medium" v-model="formData.target_id" filterable clearable placeholder="请输入或选择人员">
+						  <el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
+						</el-select>
+					</div>
+				</div>
+				<div class="form-item">
+					<div class="form-label">审批人</div>
+					<div class="form-search">
+						<el-select size="medium" v-model="formData.reviewer_id" filterable clearable placeholder="请输入或选择人员">
+						  <el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
+						</el-select>
+					</div>
+				</div>
+				<div class="form-item">
+					<div class="form-label">审批来源</div>
+					<div class="form-search">
+						  <el-select size="medium" v-model="formData.source_type" placeholder="请选择排序">
+							<el-option v-for="item in sourceList" :key="item.id" :label="item.name" :value="item.id"></el-option>
+						  </el-select>
+					</div>
+				</div>
+				<div class="form-item">
+					<div class="form-label">积分类型</div>
+					<div class="form-search">
+						<el-select size="medium" v-model="formData.pt_id" placeholder="请选择排序">
+							<el-option v-for="item in point_types" :key="item.id" :label="item.name" :value="item.id"></el-option>
+						</el-select>
+					</div>
+				</div>
+<!-- 				<div class="form-item">
+					<div class="form-label">审批状态</div>
+					<div class="form-search">
+						<el-select size="medium" v-model="formData.type" placeholder="请选择排序">
+							<el-option v-for="item in stateList" :key="item.id" :label="item.name" :value="item.id"></el-option>
+						</el-select>
+					</div>
+				</div> -->
+				<div class="form-item">
+					<div class="form-label">内容搜索</div>
+					<div class="form-search">
+						<el-input size="medium" max="20" v-model="formData.keyword" placeholder="请输入" clearable></el-input>
+					</div>
+				</div>
+			</FormBox>
+			<div>
+				<div class="orange" style="padding-left: 10px;" v-if="config.event_review_status">仅展示待审批中的记录,方便快速查阅当前审批阻塞的节点和相关负责人</div>
+				<el-table :data="list" style="cursor: pointer;" v-loading="loading" class="listTable" @row-click="openDetail">
+					<el-table-column label="" prop="task_name">
+						<template slot-scope="scope">
+							<div class="flex-box flex-v-ce">
+								<userImage width="50px" height="50px" :id="scope.row.employee_id" :user_name="scope.row.employee_name"></userImage>
+								<div style="margin-left: 5px;">
+									<span class="tableTitle" v-show="scope.row.source_type == 1">{{ scope.row.employee_name }}的积分任务</span>
+									<span class="tableTitle" v-show="scope.row.source_type == 2">{{ scope.row.employee_name }}的积分申请</span>
+									<span class="tableTitle" v-show="scope.row.source_type == 3">{{ scope.row.employee_name }}的积分奖扣</span>
+									<span class="tableTitle" v-show="scope.row.source_type == 4">{{ scope.row.employee_name }}的绩效工作</span>
+								</div>
+							</div>
+						</template>
+					</el-table-column>
+					<el-table-column label="审批内容" prop="remark.rule">
+						<template slot-scope="scope">
+							<span class="font-flex-word" style="max-width: 200px;">{{ scope.row.remark.customize || scope.row.remark.rule }}</span>
+						</template>
+					</el-table-column>
+					<el-table-column label="时间" prop="event_time" width="150"></el-table-column>
+<!-- 					<el-table-column label="积分" prop="review_point" width="120">
+						<template slot-scope="scope">
+							<span v-if="scope.row.review_point < 0" class="green">
+								{{ scope.row.review_point }}
+								<span>{{ $getTypsName(scope.row.pt_id) }}</span>
+							</span>
+							<span class="red" v-else-if="scope.row.review_point > 0">
+								+{{ scope.row.review_point }}<span>{{ $getTypsName(scope.row.pt_id) }}</span>
+							</span>
+							<span v-else>--</span>
+						</template>
+					</el-table-column> -->
+<!-- 					<el-table-column label="状态" prop="review_status" width="80">
+						<template slot-scope="scope">
+							<span v-show="scope.row.review_status == 0">待审批</span>
+							<span v-show="scope.row.review_status == 1" class="green">审批通过</span>
+							<span v-show="scope.row.review_status == 2" class="red">审批驳回</span>
+						</template>
+					</el-table-column> -->
+					<template slot="empty">
+						<div class="nopoint_box">
+							<div class="noimg noperson"></div>
+							<span class="title">没有对应的数据</span>
+						</div>
+					</template>
+				</el-table>
+			</div>
+
+			<center style="padding: 20px 0;">
+				<el-pagination
+					background
+					@size-change="handleSizeChange"
+					@current-change="handleCurrentChange"
+					:current-page="formData.page"
+					:page-sizes="[10, 20, 50, 100]"
+					layout="total, sizes, prev, pager, next"
+					:page-size="formData.page_size"
+					:total="total"
+				></el-pagination>
+			</center>
+		</div>
+		<examinePopup :title="'审核详情'" :id="detail_id" :show.sync="detailShow"></examinePopup>
+	</div>
+</template>
+
+<script>
+import examinePopup from '@/components/examinePopup.vue';
+import { _debounce, getToken } from '@/api/auth';
+export default {
+	data() {
+		return {
+			formData: {
+				type: 'waiting',
+				source_type: '0',
+				target_id:null,
+				pt_id: 0,
+				page_size: 10,
+				page: 1,
+				keyword:'',
+				reviewer_id:null,
+			},
+			total: null,
+			list: null,
+			loading: false,
+			point_types: null,
+			detailShow: false,
+			detail_id: null,
+			employee_map: this.$getCache("userList"),
+			sourceList: [{ name: '全部', id: '0' }, { name: '积分任务', id: '1' }, { name: '积分申请', id: '2' }, { name: '积分奖扣', id: '3' }],
+			config:{},
+			stateList: [{ name: '全部', id: 'all' }, { name: '待审批', id: 'waiting' }, { name: '已结束', id: 'reviewed' }],
+		};
+	},
+	watch: {
+		'formData.keyword': {
+			deep: true,
+			handler: _debounce(function(val) {
+				this.formData.page = 1;
+				this.getSpList();
+			}, 1000)
+		},
+		'formData.pt_id'() {
+			this.formData.page = 1;
+			this.getSpList();
+		},
+		// 'formData.type'() {
+		// 	this.formData.page = 1;
+		// 	this.getSpList();
+		// },
+		'formData.source_type'() {
+		  this.formData.page = 1;
+		  this.getSpList();
+		},
+		'formData.target_id'(val) {
+		  if(!val){
+		    this.formData.target_id = null;
+		  }
+		  this.formData.page = 1;
+		  this.getSpList();
+		},
+		'formData.reviewer_id'(val) {
+		  if(!val){
+		    this.formData.reviewer_id = null;
+		  }
+		  this.formData.page = 1;
+		  this.getSpList();
+		}
+	},
+	components: { examinePopup },
+	mounted() {
+		this.getSpList();
+		this.config=this.$store.state.config;
+		this.point_types = this.getPointTypes();
+	},
+	methods: {
+		openDetail(item) {
+			this.detail_id = item.id;
+			this.detailShow = true;
+		},
+		getTypes() {
+			var arr = this.$getTyps();
+			return arr.filter(function(item) {
+				return item.code != 'JX';
+			});
+		},
+		// 获取积分类型
+		getPointTypes() {
+			let point = this.getTypes();
+			point.unshift({ code: 'all', id: 0, name: '全部' });
+			return point;
+		},
+		// 页码变更
+		handleCurrentChange(val) {
+			this.formData.page = val;
+			this.getSpList();
+		},
+		handleSizeChange(val) {
+			this.formData.page_size = val;
+			this.getSpList();
+		},
+		getSpList() {
+			let self = this;
+			self.loading = true;
+			let params = JSON.parse(JSON.stringify(this.formData));
+			self.$axios('get', '/api/integral/review/list', params)
+				.then(res => {
+					if (res.data.code == 1) {
+						self.list = res.data.data.list;
+						self.total = res.data.data.total;
+					}
+				})
+				.finally(e => {
+					self.loading = false;
+				});
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+.box {
+	min-height: calc(100vh - 140px);
+	width: 100%;
+	background-color: #fff;
+	padding: 20px;
+	& .listTable {
+		& .tableTitle {
+			line-height: 50px;
+			padding-left: 10px;
+		}
+	}
+}
+.popperSPBOX {
+	max-width: calc(100vh - 400px);
+	background-color: #fff;
+}
+</style>

+ 2 - 1
src/views/workbench/approval_batch.vue

@@ -152,7 +152,8 @@ export default {
 				page: 1,
 				pt_id: '0',
 				page_size: 10,
-				source_type: '0'
+				source_type: '0',
+				reviewer_id:this.$getUserData().id,
 			},
 			loading: false,
 			list: [],

+ 1 - 0
src/views/workbench/approval_list.vue

@@ -104,6 +104,7 @@
 					page_size: 10,
 					page: 1,
 					keyword: '',
+					reviewer_id:this.$getUserData().id,
 				},
 				total: null,
 				list: null,