Kaynağa Gözat

Merge branch 'dev'

guojy 1 yıl önce
ebeveyn
işleme
7683a6e576
37 değiştirilmiş dosya ile 1930 ekleme ve 874 silme
  1. 9 0
      src/api/auth.js
  2. 2 2
      src/api/axios.js
  3. 2 2
      src/api/websocketTow.js
  4. BIN
      src/assets/image/09.png
  5. 8 2
      src/components/EmployeeSelector.vue
  6. 2 2
      src/components/Steps.vue
  7. 8 5
      src/components/UserImage.vue
  8. 20 5
      src/components/bonusPointsPopup.vue
  9. 15 8
      src/components/examinePopup.vue
  10. 12 22
      src/home.vue
  11. 1 1
      src/index.vue
  12. 2 1
      src/main.js
  13. 15 15
      src/router/index.js
  14. 8 2
      src/views/abPoint/apply_list.vue
  15. 12 10
      src/views/abPoint/award_punish.vue
  16. 4 1
      src/views/abPoint/lottery_ticket.vue
  17. 205 409
      src/views/award/grantAward.vue
  18. 354 116
      src/views/award/lotteryTicket_statistics.vue
  19. 360 65
      src/views/award/myAward.vue
  20. 461 3
      src/views/award/myGrantAward.vue
  21. 332 97
      src/views/award/print.vue
  22. 1 1
      src/views/common/taskDetailsPopup.vue
  23. 1 1
      src/views/common/temporaryTask.vue
  24. 4 1
      src/views/ranking/JfDetail.vue
  25. 18 7
      src/views/ranking/custom_rank.vue
  26. 6 61
      src/views/ranking/individual_statistics.vue
  27. 4 1
      src/views/ranking/integral_event.vue
  28. 4 1
      src/views/ranking/integral_event_two.vue
  29. 4 2
      src/views/ranking/manager_statistics.vue
  30. 17 6
      src/views/set/framework.vue
  31. 4 1
      src/views/task/allTask.vue
  32. 19 14
      src/views/task/get_task.vue
  33. 4 1
      src/views/task/my_task.vue
  34. 4 4
      src/views/workbench/alreadySp.vue
  35. 2 2
      src/views/workbench/approval_batch.vue
  36. 1 1
      src/views/workbench/approval_list.vue
  37. 5 2
      src/views/workbench/review.vue

+ 9 - 0
src/api/auth.js

@@ -98,6 +98,15 @@ export function supremeAuthority() { //获取当前角色最高权限     判断
 export function authoritys(key) { //判断是否为某项权限:this.$authoritys('dept_manager')
 	return supremeAuthority() == key
 }
+export function getEmployeeMapItem(id){
+   let map=getCache('userList')
+   if(map[id]){
+      return map[id]
+   }else{
+      return {}
+   }
+}
+
 //过滤绩效分
 function GlTypes(arr) {
 	return arr.filter(function(item) {

+ 2 - 2
src/api/axios.js

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

+ 2 - 2
src/api/websocketTow.js

@@ -1,6 +1,6 @@
 
-// let wsurl='wss://' + process.env.VUE_APP_WEBSCOKET + '/ws2/';
-let wsurl='wss://app55493.eapps.dingtalkcloud.com/ws2/';
+let wsurl='wss://' + process.env.VUE_APP_WEBSCOKET + '/ws2/';
+// let wsurl='wss://app55493.eapps.dingtalkcloud.com/ws2/';
 let ws = null
 let weboscket_callback = null
 import {getToken,generateUUID } from '@/api/auth';

BIN
src/assets/image/09.png


+ 8 - 2
src/components/EmployeeSelector.vue

@@ -27,7 +27,10 @@
 									<div class="employee_cell flex-box flex-v-ce" v-show="can_select_employee" @click.prevent.stop="select_employee(item)">
 										<div class="employee_checkbox"><el-checkbox v-model="item.checked"></el-checkbox></div>
 										<img :src="item.img_url" width="30" height="30" class="imgUrl" v-if="item.img_url">
-										<div class="imgUrl" v-else style="background: #238DFA;color: #fff;">{{item.name.substring(item.name.length-2)}}</div>
+										<div class="imgUrl" v-else style="background: #238DFA;color: #fff;">
+											{{item.name}}
+										<!-- {{item.name.substring(item.name.length-2)}} -->
+										</div>
 										<div class="employee_name">{{ item.name }}</div>
 									</div>
 								</div>
@@ -51,7 +54,9 @@
 							<div class="flex-box-ce employee_cell2" v-for="(item, index) in employee_selected_list" :key="index">
 								<div class="flex-box-ce flex-1">
 									<img :src="item.img_url" width="30" height="30" style="margin-right: 8px;" class="imgUrl" v-if="item.img_url">
-									<div class="imgUrl" v-else style="background: #238DFA;color: #fff;margin-right: 8px;">{{item.name.substring(item.name.length-2)}}</div>
+									<div class="imgUrl" v-else style="background: #238DFA;color: #fff;margin-right: 8px;">
+										<span v-if="item.name">{{item.name.substring(item.name.length-2)}}</span>
+									</div>
 									<div class="userName font-flex-word">{{ item.name }}</div>
 								</div>
 								<i class="el-icon-error deleteUser" v-if="!item.is_creator || !createDimness" @click="employee_cancel(item, true)"></i>
@@ -187,6 +192,7 @@ export default {
 		},
 		selected(val) {
 			let selected = JSON.parse(JSON.stringify(val));
+			console.log(selected)
 			this.employee_selected = [];
 			this.dept_selected = [];
 			this.employee_selected_list = selected.employee;

+ 2 - 2
src/components/Steps.vue

@@ -16,8 +16,8 @@
                   {{ item.name }}
                   <span style="margin: 0 5px;">
                     <span v-if="item.remark == '待审核'" style="color:#E6A23C;font-size:13px">待审批</span>
-                    <span v-else-if="item.remark == '审通过'" style="color:#67C23A;font-size:13px">审批通过</span>
-                    <span v-else-if="item.remark == '审驳回'" style="color:#F56C6C;font-size:13px">审批驳回</span>
+                    <span v-else-if="item.remark == '审通过'" style="color:#67C23A;font-size:13px">审批通过</span>
+                    <span v-else-if="item.remark == '审驳回'" style="color:#F56C6C;font-size:13px">审批驳回</span>
                     <span v-else>{{ item.remark }}</span>
                   </span>
                   <strong style="font-weight: 500;">

+ 8 - 5
src/components/UserImage.vue

@@ -65,8 +65,14 @@
     // 方法
     methods:{
       name_no(){
-		 this.imgUrl=this.img_url
-		 this.name=this.user_name
+		let name='';
+		if(this.id&&this.employeeMap){
+		  this.imgUrl=this.employeeMap[this.id]? this.employeeMap[this.id].img_url:""
+		  name=this.employeeMap[this.id]? this.employeeMap[this.id].name:""
+		}else{
+		  this.imgUrl=this.img_url
+		}  
+		this.name=this.user_name||name
 		let pattern = new RegExp("^[\u4E00-\u9FA5]+");
 		if(this.name.length > 2){
 		  if(pattern.test(this.name)){
@@ -75,9 +81,6 @@
 		    this.name = this.name.substring(0,2)
 		  }
 		}  
-        if(!this.imgUrl&&this.id&&this.employeeMap){
-          this.imgUrl=this.employeeMap[this.id]? this.employeeMap[this.id].img_url:""
-        }
       }
     },
   }

+ 20 - 5
src/components/bonusPointsPopup.vue

@@ -87,9 +87,15 @@
 								value-format="yyyy-MM-dd"
 							></el-date-picker>
 						</el-form-item>
-<!-- 						<el-form-item label="发放奖票">
-							<el-switch  :disabled="ruleOnoff" @change="switchChange(index, item.rule_switch)" v-model="item.rule_switch"></el-switch>
-						</el-form-item> -->
+						<el-form-item label="发放奖票">
+							<template slot="label">
+								<el-tooltip  effect="dark" placement="top">
+								  <div slot="content">选择递交审批人时,发放奖票将失效,由审批上级来发放奖票</div>
+								  <span>发放奖票<i style="padding-left: 5px;font-size: 16px;" class="el-icon-question fontColorD"></i></span>
+								</el-tooltip>
+							</template>
+							<el-switch  :disabled="item.approvalName? true:false" :active-value="1" :inactive-value="0" v-model="item.ticket_count"></el-switch>
+						</el-form-item>
 						<el-form-item
 							label="事件内容"
 							:prop="'items.' + index + '.remark'"
@@ -320,6 +326,7 @@ export default {
 				members: [],
 				items: [
 					{
+						ticket_count:0,//奖票
 						rule_switch: true,
 						rule_id: '',
 						item_id: '',
@@ -650,6 +657,7 @@ export default {
 				return false;
 			}
 			this.dialogData.items.push({
+				ticket_count:0,//奖票
 				rule_switch: true,
 				rule_id: '',
 				item_id: '',
@@ -750,7 +758,8 @@ export default {
 							rule_name:element.rule_name,
 							item_name:element.rule_item_details.name,
 							reviewer_id: element.reviewer_id || 0,
-							files: element.files
+							files: element.files,
+							ticket_count:element.ticket_count,
 						});
 					});
 				} else {
@@ -784,6 +793,7 @@ export default {
 								files: element.files,
 								rule_name:element.rule_name,
 								item_name:element.rule_item_details.name,
+								ticket_count:element.ticket_count,
 							});
 						} else {
 							this.$message.error('第' + (index + 1) + '条输入积分分值超出权限,请选择审批人递交');
@@ -892,7 +902,11 @@ export default {
 		approval_confirm(data) {
 			const item = this.dialogData.items[this.itemIndex];
 			item.approvalName = '';
-			item.approval_selected.employee = { dept: [], employee: [] };
+			if(item.ticket_count){
+				this.$message('选择递交审批人时,发放奖票将失效,由审批上级来发放奖票');
+			}
+			item.ticket_count=0;
+			item.approval_selected = { dept: [], employee: [] };
 			item.reviewer_id = '';
 			if (data.employee !== null && data.employee.length != 0) {
 				item.approvalName = data.employee[0].name;
@@ -907,6 +921,7 @@ export default {
 			//关闭重置窗口状态
 			this.dialogData.items = [
 				{
+					ticket_count:0,//奖票
 					rule_switch: true,
 					rule_id: '',
 					item_id: '',

+ 15 - 8
src/components/examinePopup.vue

@@ -12,7 +12,7 @@
 							<template>
 								<div class="flex-box flex-v-ce">
 									<span style="line-height:50px; margin-left:10px;margin-right:10px;">{{ detail_info.employee_name }}</span>
-									<span class="point" v-if="detail_info.status == 1">
+									<span class="point" v-if="detail_info.review_status == 1">
 										<span class="red" v-if="detail_info.review_point > 0">+{{ detail_info.review_point }}</span>
 										<span v-else class="green">{{ detail_info.review_point }}</span>
 										<span style="margin-left: 5px;">{{ $getTypsName(detail_info.pt_id) }}</span>
@@ -25,13 +25,11 @@
 										</template>
 									</span>
 									<div style="margin-left: 5px;">
-										<span v-if="detail_info.status == 1" class="green">审批通过</span>
-										<span v-else-if="detail_info.status == 2" class="red">审批驳回</span>
-										<span v-else-if="detail_info.status == 0" class="orange">待审批</span>
+										<span v-if="detail_info.review_status == 1" class="green">审批通过</span>
+										<span v-else-if="detail_info.review_status == 2" class="red">审批驳回</span>
+										<span v-else-if="detail_info.review_status == 0" class="orange">待审批</span>
 										<span v-else></span>
 									</div>
-									
-									
 								</div>
 							</template>
 						</el-col>
@@ -53,6 +51,10 @@
 						</el-col>
 						<el-col :span="20" v-else>{{ item.value }}</el-col>
 					</el-row>
+					<el-row :gutter="10" v-if="detail_info.ticket_count">
+						<el-col :span="4">奖票</el-col>
+						<el-col :span="20" class="blue">1</el-col>
+					</el-row>
 					<el-row :gutter="10" v-if="detail_info.files != null && detail_info.files > 0">
 						<el-col :span="4">图片</el-col>
 						<el-col :span="20"><el-image style="width: 100px; height: 100px" :src="detail_info.files[0]" :preview-src-list="detail_info.files"></el-image></el-col>
@@ -218,8 +220,10 @@
 				<el-form-item v-if="detail_info.source_type == 4" label="审批意见" prop="remark" :rules="[{ required: true,message:'请输入审批意见',trigger: 'blur' },{ max: 100, message: '长度不能超过 100 个字符', trigger: 'blur' }]">
 					<el-input :rows="4" type="textarea" v-model="adoptForm.remark" placeholder="说点什么(限100字)"></el-input>
 				</el-form-item>
-				<el-form-item label="发放奖票"><el-switch v-model="adoptForm.switch"></el-switch></el-form-item>
-				<div style="padding-left: 80px;position: relative;top: -26px;">奖票用于优秀表现和重要事项的表彰</div>
+				<template v-if="!detail_info.pid">
+					<el-form-item label="发放奖票"><el-switch v-model="adoptForm.switch"></el-switch></el-form-item>
+					<div style="padding-left: 80px;position: relative;top: -26px;">奖票用于优秀表现和重要事项的表彰</div>
+				</template>
 				<el-form-item label="递交审批" v-if="$getUserData().is_creator == 0">
 					<el-row>
 						<el-col :span="18">
@@ -499,6 +503,9 @@ export default {
 					if (res.data.code == 1) {
 						self.detail_info = res.data.data;
 						self.detail_info.rule_id ? (self.adoptForm.rule_id = self.detail_info.rule_id) : '';
+						if(!self.detail_info.pid){
+							self.adoptForm.switch = self.detail_info.ticket_count==1? true:false;
+						}
 						if (res.data.data.item_id) {
 							self.adoptForm.item_id = self.detail_info.item_id;
 							self.adoptForm.showPoint = self.detail_info.point;

+ 12 - 22
src/home.vue

@@ -80,7 +80,7 @@
 						<el-col :gutter="50" style="margin:0;padding:0;" class="quick_button_box">
 							<div style="display:flex;justify-content: space-around;">
 								<p style="text-align:center;cursor:pointer;margin: 0;" @click="$router.push({ path: '/individual_statistics' })">
-									<b style="color:#26A2FF;font-size:27px;">{{ headDayBs.b ? headDayBs.b : '0' }}</b>
+									<b style="color:#26A2FF;font-size:27px;">{{ authorityManagerHeaders.b_today ? authorityManagerHeaders.b_today : '0' }}</b>
 									<br />
 									<span style="color:#606266;font-size:14px;padding-top:8px;display: inline-block;">今日B分</span>
 								</p>
@@ -95,13 +95,7 @@
 									<span style="color:#606266;font-size:14px;padding-top:8px;display: inline-block;">本月A分</span>
 								</p>
 								<p style="text-align:center;cursor:pointer;margin: 0;" @click="$router.push({ path: '/my_task' })">
-									<b style="color:#26A2FF;font-size:27px;">
-										{{
-											authorityManagerHeaders.performance
-												? authorityManagerHeaders.performance.complete_count + '/' + authorityManagerHeaders.performance.total_count
-												: '0/0'
-										}}
-									</b>
+									<b style="color:#26A2FF;font-size:27px;">{{ authorityManagerHeaders.work_complete + '/' + authorityManagerHeaders.work_total}}</b>
 									<br />
 									<span style="color:#606266;font-size:14px;padding-top:8px;display: inline-block;">本月任务进度</span>
 								</p>
@@ -112,8 +106,8 @@
 
 				<el-row class="left-all-style">
 					<el-row>
-						<el-col :span="22"><span class="title">排行榜</span></el-col>
-						<el-col :span="2"><span class="noremind" @click="$router.push({ path: RankingPush })">查看详情</span></el-col>
+						<el-col :span="20"><span class="title">排行榜</span></el-col>
+						<el-col :span="4"><span class="noremind" @click="$router.push({ path: RankingPush })">查看排名详情</span></el-col>
 					</el-row>
 					<div v-loading="tabPositionLoad">
 						<div style="width:100%;height:30px;margin-top:20px;">
@@ -132,8 +126,8 @@
 								<div class="noimg" style="margin:0;"></div>
 								<span class="title1" style="margin:0;">暂无积分数据</span>
 							</div>
-							<div v-else v-for="(item, index) in rankingListDetails" :key="index" style="text-align:center;width:80px;cursor:pointer;margin:0 20px;">
-								<div class="" style="cursor:pointer;position: relative;height: 60px;">
+							<div v-else v-for="(item, index) in rankingListDetails" :key="index" style="cursor: pointer; text-align:center;width:80px;margin:0 20px;" @click="$router.push({ path: RankingPush })">
+								<div  style="position: relative;height: 60px;">
 									<svg-icon
 										v-if="item.rank <= 3"
 										:icon-class="item.rank == 1 ? 'first' : item.rank == 2 ? 'secondPlace' : item.rank == 3 ? 'third' : ''"
@@ -526,8 +520,7 @@ export default {
 			employeeRout: this.$authoritys('employee'),
 
 			authorityManagerHeaderLoad: false, //管理员头部loading
-			authorityManagerHeaders: {}, //管理员头部 数据
-			headDayBs: {},//管理员头部 数据 天
+			authorityManagerHeaders: {work_complete:0,work_total:0}, //管理员头部 数据
 			creatorJurisdiction: this.$getIsCreator('creator'), //是否系统管理员
 
 			widths: '100%',
@@ -853,10 +846,10 @@ export default {
 		selfAdaption() {
 			var myChart1 = this.$echarts.init(this.$refs.monthlyIntegralChart);
 			var myChart2 = this.$echarts.init(this.$refs.IntegralFormChart);
-			var myChart3 = this.$echarts.init(this.$refs.ManagerSAwardChart);
+			// var myChart3 = this.$echarts.init(this.$refs.ManagerSAwardChart);
 			myChart1.resize();
 			myChart2.resize();
-			myChart3.resize();
+			// myChart3.resize();
 		},
 		openGzd(val) {
 			val ? this.$router.push({ path: val }) : '';
@@ -881,11 +874,8 @@ export default {
 		//管理员头部
 		authorityManagerHeader() {
 			this.authorityManagerHeaderLoad = true;
-			let params1 = this.$axios('get', '/api/integral/statistics/', {employee_id: this.user_info.id, month: this.$moment().format('YYYY-MM')}, 'v2')
-			let params2 = this.$axios('get', '/api/integral/statistics/', {employee_id: this.user_info.id, day: this.$moment().format('YYYY-MM-DD')}, 'v2')
-			Promise.all([params1, params2]).then(res => {
-				this.authorityManagerHeaders = res[0].data.data;
-				this.headDayBs = res[1].data.data;
+			this.$axios('get', '/api/integral/statistics/', {employee_id: this.user_info.id, month: this.$moment().format('YYYY-MM')}, 'v3').then(res => {
+				this.authorityManagerHeaders = res.data.data;
 			})
 			.finally(() => {
 				this.authorityManagerHeaderLoad = false;
@@ -908,7 +898,7 @@ export default {
 					: date_interval == 3
 					? this.$moment().format('YYYY')
 					: '0';
-			this.$axios('get', '/api/integral/statistics/groups/rank', data)
+			this.$axios('get', '/api/integral/statistics/groups/rank', data,'v2')
 				.then(res => {
 					let lists = res.data.data.list;
 					let rankingList = [];

+ 1 - 1
src/index.vue

@@ -401,7 +401,7 @@ export default {
 				{ name: 'A/B分', children: this.returnRoutersArr('abPoint'), icon: 'icon-PC_gongzuotai_ABfen' },
 				{ name: '任务', children: this.returnRoutersArr('task'), icon: 'icon-kaoqin_kaoqinyuebaobiao' },
 				{ name: '统计', children: this.returnRoutersArr('ranking'), icon: 'icon-dingdingPC_tongji1' },
-				// { name: '奖票', children: this.returnRoutersArr('award'), icon: 'icon-piao' },
+				{ name: '奖票', children: this.returnRoutersArr('award'), icon: 'icon-piao' },
 			];
 			//this.$authoritys('权限名') 判断权限
 			if (this.$authoritys('creator') || this.$authoritys('admin') || this.$authoritys('point_manager') || this.$authoritys('dept_manager')) {

+ 2 - 1
src/main.js

@@ -13,7 +13,7 @@ import service from './api/axios'
 import echarts from 'echarts'
 import NProgress from 'nprogress';
 import 'nprogress/nprogress.css'
-import {returnDeptName, getToken, setToken,getUserData,setUserData,getTyps,setTyps,getIsCreator,supremeAuthority,authoritys,getTypsName,generateUUID,getCache,setCache,removeCache} from './api/auth';
+import {returnDeptName, getToken, setToken,getUserData,setUserData,getTyps,setTyps,getIsCreator,supremeAuthority,authoritys,getTypsName,generateUUID,getCache,setCache,removeCache,getEmployeeMapItem} from './api/auth';
 import * as socketApi from './api/websocket'
 import * as socketApiTow from './api/websocketTow'
 import print from "./api/print.js";
@@ -51,6 +51,7 @@ Vue.prototype.$getCache = getCache
 Vue.prototype.$setCache = setCache
 Vue.prototype.$removeCache = removeCache
 Vue.prototype.$returnDeptName = returnDeptName
+Vue.prototype.$getEmployeeMapItem = getEmployeeMapItem
 
 // 上传相关
 Vue.prototype.$action = 'https://integralsys.oss-cn-shenzhen.aliyuncs.com'

+ 15 - 15
src/router/index.js

@@ -111,7 +111,7 @@ const routes = [{
 				meta: {
 					icon: 'icon-shezhi_jichushezhi',
 					groupCode: 'award',
-					jurisdiction: ['dept_manager', 'employee']
+					jurisdiction: ['employee']
 				}
 			},
 			{
@@ -121,7 +121,7 @@ const routes = [{
 				meta: {
 					icon: 'icon-shezhi_jichushezhi',
 					groupCode: 'award',
-					jurisdiction: ['dept_manager', 'employee']
+					jurisdiction: ['employee']
 				}
 			},
 			{
@@ -141,7 +141,7 @@ const routes = [{
 				meta: {
 					icon: 'icon-shezhi_jichushezhi',
 					groupCode: 'award',
-					jurisdiction: ['dept_manager', 'employee']
+					jurisdiction: ['employee']
 				}
 			},
 			{
@@ -152,7 +152,7 @@ const routes = [{
 				meta: {
 					icon: 'icon-shezhi_jichushezhi',
 					groupCode: 'award',
-					jurisdiction: ['dept_manager', 'employee']
+					jurisdiction: ['employee']
 				}
 			},
 			
@@ -190,7 +190,7 @@ const routes = [{
 			},
 			{
 				path: '/custom_rank',
-				name: '自定义分组B分排名',
+				name: '自定义B分排名',
 				component: () => import( /* webpackChunkName: "custom_rank" */
 					'@/views/ranking/custom_rank.vue'),
 				meta: {
@@ -264,16 +264,16 @@ const routes = [{
 					jurisdiction: ['employee']
 				}
 			},
-			{
-				path: '/lotteryTicket_statistics',
-				name: '奖票统计',
-				component: () => import( /* webpackChunkName: "lotteryTicket_statistics" */'@/views/award/lotteryTicket_statistics'),
-				meta: {
-					icon: 'icon-shezhi_jichushezhi',
-					groupCode: 'ranking',
-					jurisdiction: ['dept_manager', 'employee']
-				}
-			},
+			// {
+			// 	path: '/lotteryTicket_statistics',
+			// 	name: '奖票统计',
+			// 	component: () => import( /* webpackChunkName: "lotteryTicket_statistics" */'@/views/award/lotteryTicket_statistics'),
+			// 	meta: {
+			// 		icon: 'icon-shezhi_jichushezhi',
+			// 		groupCode: 'ranking',
+			// 		jurisdiction: ['dept_manager', 'employee']
+			// 	}
+			// },
 			{
 				path: '/balanceA',
 				name: 'A分余额',

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

@@ -130,7 +130,10 @@
 		</center>
 
 		<el-drawer :visible.sync="detailShow" :with-header="false" :size="'600px'">
-			<div class="drawer_title">申请详情</div>
+			<div class="drawer_title flex-box-ce">
+				<span class="flex-1">申请详情</span>
+				<i  @click="detailShow=false" style="cursor: pointer;" class="el-icon-close"></i>
+			</div>
 			<div class="detail_popup" v-loading="detail_loading" v-if="detail_info !== null">
 				<el-row :gutter="10" style="padding-bottom:10px;border-bottom:1px #f8f8f8 solid;">
 					<el-col :span="24" class="flex-box flex-v-ce">
@@ -201,7 +204,10 @@
 		
 		
 		<el-drawer title="事件详情" :visible.sync="detail_popup" ref="drawer" :with-header="false" :width="'500px'" direction="rtl">
-			<div class="drawer_title">事件详情</div>
+			<div class="drawer_title flex-box-ce">
+				<span class="flex-1">事件详情</span>
+				<i  @click="detail_popup=false" style="cursor: pointer;" class="el-icon-close"></i>
+			</div>
 			<div class="detail_popup" v-loading="detail_loading" v-if="detail_info2 !== null">
 				<el-row style="padding-bottom:10px;border-bottom:1px #f8f8f8 solid;">
 					<div class="flex-box flex-v-ce">

+ 12 - 10
src/views/abPoint/award_punish.vue

@@ -108,7 +108,10 @@
 		</center>
 
 		<el-drawer :title="tabs != 'review'? '奖扣详情':'事件详情'" :visible.sync="drawer" ref="drawer" :with-header="false" :size="'600px'" direction="rtl">
-			<div class="drawer_title">{{tabs != 'review'? '奖扣详情':'事件详情'}}</div>
+			<div class="drawer_title flex-box-ce">
+				<span class="flex-1">{{tabs != 'review'? '奖扣详情':'事件详情'}}</span>
+				<i  @click="drawer=false" style="cursor: pointer;" class="el-icon-close"></i>
+			</div>
 			<div class="detail_popup" v-loading="detail_loading" v-if="detail_info !== null">
 				<el-row :gutter="10" style="padding-bottom:10px;border-bottom:1px #f8f8f8 solid;">
 					<el-col :span="24">
@@ -181,9 +184,8 @@
 				<div v-show="detail_info.process">
 					<Steps :process="detail_info.process"></Steps>
 				</div>
-				<div v-show="detail_info.dc_remark.flow"><Review :process="detail_info.dc_remark.flow" :status="detail_info.dc_status"></Review></div>
-				<template v-if="tabs == 'success'&&detail_info.dc_remark">
-					<div v-show="detail_info.dc_remark.flow"><Review :process="detail_info.dc_remark.flow" :status="detail_info.dc_status"></Review></div>
+				<template v-if="tabs == 'success'||tabs == 'review'">	
+					<div v-if="detail_info.dc_remark"><Review :process="detail_info.dc_remark.flow" :status="detail_info.dc_status"></Review></div>
 				</template>
 				<template v-if="tabs != 'review'">
 					<div class="btn_danger flex-box flex-center-center" v-if="detail_info.process.length==1&&(detail_info.event_type==3||detail_info.event_type==4)">
@@ -194,7 +196,10 @@
 		</el-drawer>
 
 		<el-drawer title="奖扣详情" :visible.sync="detailShow" :with-header="false" :size="'600px'" direction="rtl">
-			<div class="drawer_title">奖扣详情</div>
+			<div class="drawer_title flex-box-ce">
+				<span class="flex-1">奖扣详情</span>
+				<i  @click="detailShow=false" style="cursor: pointer;" class="el-icon-close"></i>
+			</div>
 			<div class="detail_popup" v-loading="detail_loading" v-if="detail_info !== null">
 				<el-row :gutter="10" style="padding-bottom:10px;border-bottom:1px #f8f8f8 solid;">
 					<el-col :span="24" >
@@ -256,10 +261,8 @@
 				<div v-show="detail_info.process">
 					<Steps :process="detail_info.process"></Steps>
 				</div>
-				<div v-show="detail_info.dc_remark.flow"><Review :process="detail_info.dc_remark.flow" :status="detail_info.dc_status"></Review></div>
-<!-- 				<div v-if="detail_info.dc_remark.flow">
-					<Review :process="detail_info.dc_remark.flow" :status="detail_info.dc_status"></Review>
-				</div> -->
+				<div v-if="detail_info.dc_remark"><Review :process="detail_info.dc_remark.flow" :status="detail_info.dc_status"></Review></div>
+
 				<div class="btn_danger flex-box flex-center-center" v-if="detail_info.applyor_id==userId&&detail_info.status==0&&detail_info.source_type==3">
 				  <el-button type="danger" class="danger" @click="revocation2" :loading="cx_loading">撤销</el-button>
 				</div>
@@ -559,7 +562,6 @@ export default {
 			}
 			this.$axios('get', (this.tabs == 'success'||this.tabs == 'review') ? '/api/integral/statistics/integral' : '/api/integral/review/entry/list', data)
 				.then(res => {
-					console.log()
 					if (res.data.code == 1) {
 						if(this.tabs == 'success'||this.tabs == 'review'){
 							this.dataList = res.data.data.list;

+ 4 - 1
src/views/abPoint/lottery_ticket.vue

@@ -118,7 +118,10 @@
 			</div>
 		</div>
 		<el-drawer title="事件详情" :visible.sync="detail_popup" ref="drawer" :with-header="false" :width="'500px'" direction="rtl">
-			<div class="drawer_title">事件详情</div>
+			<div class="drawer_title flex-box-ce">
+				<span class="flex-1">事件详情</span>
+				<i  @click="detail_popup=false" style="cursor: pointer;" class="el-icon-close"></i>
+			</div>
 			<div class="detail_popup" v-loading="detail_loading" v-if="detail_info !== null">
 				<el-row style="padding-bottom:10px;border-bottom:1px #f8f8f8 solid;">
 					<div class="flex-box flex-v-ce">

+ 205 - 409
src/views/award/grantAward.vue

@@ -1,19 +1,19 @@
 <template>
 	<div>
 		<div class="all padding-20">
-			<el-form ref="form" :inline="true" label-width="80px">
+			<el-form ref="form" :inline="true">
 				<el-form-item label="人员">
-					<el-select size="medium" v-model="select_employee_id" filterable clearable placeholder="请输入或选择人员" style="width: 250px;margin-right: 10px;">
+					<el-select size="medium" multiple v-model="formData.employee_ids"  filterable clearable placeholder="请输入或选择人员" style="width: 200px;">
 						<el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
 					</el-select>
 				</el-form-item>
 				<el-form-item label="发放状态">
-					<el-select class="date-picker-width" size="medium" v-model="formData.status"  placeholder="请选择复核状态">
+					<el-select class="date-picker-width" size="medium" v-model="formData.has_ticket">
 						<el-option v-for="item in dcArr" :key="item.name" :label="item.name" :value="item.id"></el-option>
 					</el-select>
 				</el-form-item>
-				<el-form-item label="相关性">
-					<el-select class="date-picker-width" size="medium" v-model="formData.status"  placeholder="请选择复核状态">
+				<el-form-item label="相关性" v-if="employeeOrdept">
+					<el-select class="date-picker-width" size="medium" v-model="formData.iSrecorder">
 						<el-option v-for="item in source_type" :key="item.name" :label="item.name" :value="item.id"></el-option>
 					</el-select>
 				</el-form-item>
@@ -29,10 +29,10 @@
 					></el-date-picker>
 				</el-form-item>
 				<el-form-item>
-					<el-input size="medium" v-model="formData.keyword" placeholder="输入关键字查找" max="200"></el-input>
+					<el-input size="medium" v-model="formData.keyword" placeholder="输入关键字查找" maxlength="20" clearable></el-input>
 				</el-form-item>
 				<el-form-item>
-					<el-button class="first-element-btn" size="medium" v-if="employeeOrdept" :disabled="deleteDisabled" @click="deleteInBatches" type="danger">批量删除</el-button>
+					<el-button size="medium" :disabled="selectionID.length==0? true:false" @click="deleteInBatches()" type="primary">批量发放奖票</el-button>
 				</el-form-item>
 
 				<div class="diy-tip1" style="margin-bottom: 10px;">
@@ -42,22 +42,19 @@
 
 			<!-- 表格 -->
 			<div>
-				<el-table :data="list" style="width: 100%;cursor: pointer;" v-loading="loading" @row-click="open_detail" @selection-change="deleteEvents">
-					<el-table-column v-if="employeeOrdept" type="selection" width="55"></el-table-column>
-					<el-table-column prop="employee_name" label="姓名" align="left" min-width="125px">
+				<el-table :data="list" style="width: 100%;" v-loading="loading"  @selection-change="deleteEvents">
+					<el-table-column  type="selection" width="55" :selectable="selectable"></el-table-column>
+					<el-table-column prop="employee_name" label="姓名" align="left" min-width="150px">
 						<template slot-scope="scope">
 							<div class="flex-box">
 								<userImage :user_name="scope.row.employee_name" :img_url="scope.row.employee_img_url" width="50px" height="50px"></userImage>
-								<span style="line-height: 50px; padding-left: 10px;">{{ scope.row.employee_name }}</span>
+								<div style="height: 50px;padding-left: 10px;" class="flex-box-v flex-h-zhu">
+									<div>{{ scope.row.employee_name }}</div>
+									<div v-if="scope.row.dept"  style="font-size: 12px;max-width: 150px;" class="fontColorC font-flex-word">{{ scope.row.dept }}</div>
+								</div>
 							</div>
 						</template>
 					</el-table-column>
-					<el-table-column prop="dept" show-overflow-tooltip label="部门" align="left" min-width="120px"></el-table-column>
-					<el-table-column prop="point" label="积分" align="left" min-width="120px">
-						<template slot-scope="scope">
-							<span :class="scope.row.point < 0 ? 'green' : 'red'">{{ scope.row.point }} {{ point_name(scope.row.pt_id) }}</span>
-						</template>
-					</el-table-column>
 					<el-table-column prop="remark" label="事件内容" align="left" min-width="280px">
 						<template slot-scope="scope">
 							<el-tooltip class="item" effect="dark" placement="top">
@@ -66,7 +63,11 @@
 							</el-tooltip>
 						</template>
 					</el-table-column>
-					<el-table-column prop="rule_name" show-overflow-tooltip label="规则分类" align="left" min-width="140px"></el-table-column>
+					<el-table-column prop="point" label="积分" align="left" min-width="120px">
+						<template slot-scope="scope">
+							<span :class="scope.row.point < 0 ? 'green' : 'red'">{{ scope.row.point }} {{ point_name(scope.row.pt_id) }}</span>
+						</template>
+					</el-table-column>
 					<el-table-column prop="create_time" label="事件发生时间" align="left" min-width="140px">
 						<template slot-scope="scope">
 							{{ scope.row.event_time }}
@@ -92,13 +93,18 @@
 							<span v-show="scope.row.source_type > 10">其他</span>
 						</template>
 					</el-table-column>
-					<el-table-column prop="update_time" label="录入时间" align="left" width="140px">
+					<el-table-column prop="update_time" label="发放状态" align="left" width="140px">
 						<template slot-scope="scope">
-							<!-- {{ cuttString(scope.row.create_time) }} -->
-							{{ scope.row.update_time }}
+							<span class="green" v-if="scope.row.has_ticket">已发放</span>
+							<span class="fontColorC" v-else>未发放</span>
+						</template>
+					</el-table-column>
+					<el-table-column width="150" label="操作">
+						<template slot-scope="scope">
+							<span class="blue" style="cursor: pointer;padding-right: 10px;" @click="open_detail(scope.row)">查看详情</span>
+							<span class="blue" style="cursor: pointer;" v-if="!scope.row.has_ticket" @click="deleteInBatches(scope.row)">发放奖票</span>
 						</template>
 					</el-table-column>
-
 					<template slot="empty">
 						<noData></noData>
 					</template>
@@ -111,21 +117,25 @@
 						:current-page="formData.page"
 						:page-sizes="[10, 20, 50, 100]"
 						layout="total, sizes, prev, pager, next"
-						:page-size="pageLimit"
+						:page-size="formData.page_size"
 						:total="total"
 					></el-pagination>
 				</center>
 			</div>
 		</div>
-		<el-drawer title="事件详情" :visible.sync="detail_popup" ref="drawer" :with-header="false" :width="'500px'" direction="rtl">
-			<div class="drawer_title">事件详情</div>
+		
+		<el-drawer title="事件详情" :visible.sync="detail_popup" ref="drawer" show-close :with-header="false" :width="'500px'">
+			<div class="drawer_title flex-box-ce">
+				<span class="flex-1">事件详情</span>
+				<i  @click="detail_popup=false" style="cursor: pointer;" class="el-icon-close"></i>
+			</div>
 			<div class="detail_popup" v-loading="detail_loading" v-if="detail_info !== null">
 				<el-row style="padding-bottom:10px;border-bottom:1px #f8f8f8 solid;">
 					<div class="flex-box flex-v-ce">
 						<userImage :user_name="detail_info.employee_name" :img_url="detail_info.img_url" width="50px" height="50px" fontSize="1"></userImage>
 						<span style="font-size: 18px;line-height:50px; margin-left:10px;margin-right:4px;">{{ detail_info.employee_name }}</span>
-						<span class="red point" v-show="detail_info.point >= 0">+{{ detail_info.point }} {{ point_name(detail_info.pt_id) }}</span>
-						<span class="green point" v-show="detail_info.point < 0">{{ detail_info.point }} {{ point_name(detail_info.pt_id) }}</span>
+						<span class="red point" v-if="detail_info.point >= 0">+{{ detail_info.point }} {{ point_name(detail_info.pt_id) }}</span>
+						<span class="green point" v-if="detail_info.point < 0">{{ detail_info.point }} {{ point_name(detail_info.pt_id) }}</span>
 					</div>
 				</el-row>
 
@@ -160,7 +170,6 @@
 					<el-col :span="6">记录人</el-col>
 					<el-col :span="18">{{ detail_info.recorder_name }}</el-col>
 				</el-row>
-
 				<el-row v-show="detail_info.date">
 					<el-col :span="6">事件时间</el-col>
 					<el-col :span="18">{{ detail_info.date }}</el-col>
@@ -200,51 +209,68 @@
 					</el-row>
 					<el-row>
 						<el-col :span="6">积分</el-col>
-						<el-col :span="18" v-show="detail_info.rule_item.min_point == detail_info.rule_item.max_point">{{ detail_info.rule_item.min_point }}</el-col>
+						<el-col :span="18" v-show="detail_info.rule_item.min_point == detail_info.rule_item.max_point">{{ detail_info.rule_item.min_point }} {{ point_name(detail_info.pt_id) }}</el-col>
 						<el-col :span="18" v-show="detail_info.rule_item.min_point != detail_info.rule_item.max_point">
-							{{ detail_info.rule_item.min_point }} ~ {{ detail_info.rule_item.max_point }}
+							{{ detail_info.rule_item.min_point }} ~ {{ detail_info.rule_item.max_point }} {{ point_name(detail_info.pt_id) }}
 						</el-col>
 					</el-row>
 				</div>
+				
 				<div v-show="detail_info.process"><Steps :process="detail_info.process"></Steps></div>
+				
 				<div v-show="detail_info.dc_remark.flow"><Review :process="detail_info.dc_remark.flow" :status="detail_info.dc_status"></Review></div>
-				<div style="text-align: center;margin-top: 30px;" v-if="detail_info.source_type == 10 && see_log">
-					<el-button type="primary" size="medium" @click="showLog = true">
-						查看日志详情内容
-						<span style=";padding-left:5px;">»</span>
-					</el-button>
-				</div>
 			</div>
-			<div v-if="!this.$authoritys('employee') && !this.$authoritys('dept_manager')" style="position: absolute; bottom: 20px; display: block; right: 20px;">
-				<el-button @click="close_integral_event">取消</el-button>
-				<el-button type="danger" @click="del_integral_event(detail_info)">删除</el-button>
+			<div  style="position: absolute; bottom: 20px;right: 20px;left: 20px;" class="flex-box-ce">
+				<el-button type="primary" v-if="!detail_info.has_ticket" @click="deleteInBatches({id:detail_info.event_id},true)">发放奖票</el-button>
+				<el-button type="primary" v-else @click="openDetail({id:detail_info.event_id})">查看奖票</el-button>
+				<div class="flex-1"></div>
+				<el-button @click="detail_popup=false">取消</el-button>
 			</div>
 		</el-drawer>
-
-		<el-dialog title="查看日志详情" width="600px" :visible.sync="showLog">
-			<div class="title">{{ ding_report.creator_name }}的{{ ding_report.template_name }}</div>
-			<div v-if="ding_report.contents.length > 0">
-				<div class="contents" v-for="(item, index) in ding_report.contents" :key="index">
-					<div class="key">{{ item.key }}</div>
-					<div class="value fontColorC">
-						<span v-if="item.value">{{ item.value }}</span>
-						<span v-else>未填写</span>
-					</div>
-				</div>
-			</div>
-			<div v-if="ding_report.images.length > 0">
-				<div class="key" style="margin-bottom: 20px;">图片</div>
-				<div class="flex-box flex-d-wrap">
-					<el-image
-						v-for="(item, index) in ding_report.images"
-						:key="index"
-						style="width: 100px; height: 100px;margin-right:8px"
-						:src="item"
-						:preview-src-list="ding_report.images"
-					></el-image>
+		<!-- 检查单详情 -->
+		<BrawerBox :showDrawer.sync="isShowDetail"  drawerTitle="奖票详情">
+		  <template slot="main">
+			<div>
+			  <div class="flex-box-v">
+				<div class="message-box">
+				  <div class="flex-box-ce">
+					<div class="fontColorC">奖票对象</div>
+					<div class="flex-1">{{detail.employee_name}}</div>
+				  </div>
+				  <div class="flex-box-ce">
+					<div class="fontColorC">事件时间</div>
+					<div class="flex-1">{{$moment(detail.date+'').format("YYYY-MM-DD")}}</div>
+				  </div>
+				  <div class="flex-box-ce">
+					<div class="fontColorC">发放人</div>
+					<div class="flex-1">{{detail.publisher_name||'--'}}</div>
+				  </div>
+				  <div class="flex-box-ce">
+					<div class="fontColorC">发放时间</div>
+					<div class="flex-1">{{detail.ct}}</div>
+				  </div>
+				  <div class="flex-box-ce">
+					<div class="fontColorC">奖票事件</div>
+					<div class="flex-1">{{detail.remark.customize||detail.remark.rule}}</div>
+				  </div>
 				</div>
+			  </div>
+			  <div class="message-box" v-if="detail.event">
+				 <div style="font-size: 16px;margin-bottom: 20px;">对应积分事件</div>
+				 <div class="flex-box" style="background-color: rgb(248, 252, 255);margin-bottom: 14px;position: relative;padding: 8px;border-radius: 5px;">
+					 <div class="flex-1" style="padding-right: 20px;">{{detail.event.remark.customize||detail.event.remark.rule}}</div>
+					 <div class="red" v-if="detail.event.point>0">+{{detail.event.point}} {{detail.event.pt_id==3? 'B分':'A分'}}</div>
+					 <div class="green" v-else>{{detail.event.point}} {{detail.event.pt_id==3? 'B分':'A分'}}</div>
+				 </div>
+			  </div>
 			</div>
-		</el-dialog>
+		  </template>
+		  <template slot="footer">
+			  <el-button type="danger" plain @click="deleteItem" v-if="detail.publisher_id==$getUserData().id||($supremeAuthority()!='dept_manager'&&$supremeAuthority()!='employee')">{{detail.publisher_id==$getUserData().id ?'撤回奖票':'删除奖票'}}</el-button>
+			  <div class="flex-1"></div>
+			  <el-button  plain @click="isShowDetail=false">关 闭</el-button>
+		  </template>
+		</BrawerBox>
 
 	</div>
 </template>
@@ -255,105 +281,70 @@ import toLead from '@/components/toLead';
 export default {
 	data() {
 		return {
-			isDevelopment:process.env.NODE_ENV === 'development',
-			deleteDisabled: true,
-			action: process.env.VUE_APP_BASE_API + 'api/integral/import',
-			ATOKEN: { 'A-TOKEN': this.$getToken(), Accept: 'application/vnd.test.v2+json' },
-
 			loading: false,
-			page_size: 10,
-			point_types: this.$getTyps(),
-			dept_name: [],
-			dept_tree: [],
 			formData: {
 				page: 1,
 				page_size: 10,
 				status:1,
 				dc_status:JSON.stringify([1]),
-				// order_key:'update_time',
+				iSrecorder:0,
+				keyword:'',
+				has_ticket:0,
+				add_subtract:1,
 			},
 			time_slot: null,
-			rule_trees: [],
-			props: { checkStrictly: true, value: 'id', label: 'name', children: 'child' },
-			rule: [],
 			list: [],
+			
 			total: null,
-			detail_info: null,
+			detail_info: {complete_task:{},remark:{},rule_item:{},dc_remark:{},pt_id:3},
 			detail_popup: false,
 			detail_loading: false,
-			pageLimit: 10,
-			excelImportShow: false,
-			update_btn: false,
-			error_list: [],
-			importErrorInfoShow: false,
-			fileList: [],
+			
 			employeeOrdept: !this.$authoritys('employee') && !this.$authoritys('dept_manager'),
-			select_employee_id: '',
-			employee_map: [],
+			employee_map: this.$getCache('userList'),
 			selectionID: [], //删除的事件ID
-			// 查看日志
-			showLog: false,
-			see_log: 1,
-			ding_report: {
-				contents: [],
-				images: []
-			},
 			source_type: [
-			  { id: 0, name: '我奖扣的' },
-			  { id: 1, name: '全部事件' },
+			  { id: 0, name: '全部事件' },
+			  { id: 1, name: '我奖扣的' },
 			],
 			dcArr: [
-			  { id: 0, name: '全部' },
+			  { id: -1, name: '全部' },
 			  { id: 1, name: '已发放' },
-			  { id: 2, name: '未放发' },
+			  { id: 0, name: '未发放' },
 			],
-			u_start:null
+			isShowDetail:false,
+			detail:{remark:{},event:{remark:{}},date:''},
 		};
 	},
 	components: { Steps, toLead,Review },
-	created() {
-		this.getEmployee();
-	},
 	mounted() {
-		this.deriveRestrict();
-		this.getDepartment();
-		this.get_rule_trees();
-		this.get_integral_list(this.formData);
-		this.see_log = this.$store.state.config.see_log;
-		this.point_types = this.getTypes();
+		this.get_integral_list();
 	},
 	watch: {
-		selectionID() {
-			if (this.selectionID.length == 0) {
-				this.deleteDisabled = true;
-			} else {
-				this.deleteDisabled = false;
+		detail_popup(val){
+			if(!val){
+				this.get_integral_list();
 			}
 		},
-		'formData.pt_id'(val, old_val) {
+		'formData.has_ticket'(val) {
+			this.formData.page = 1;
+			this.get_integral_list();
+		},
+		'formData.keyword'(val) {
 			this.formData.page = 1;
-			!val ? delete this.formData.pt_id : '';
-			this.get_integral_list(this.formData);
+			this.get_integral_list();
 		},
 		'formData.status'(val) {
-			this.formData.dc_status=JSON.stringify([val]);
-			// if(val==0){
-			// 	this.formData.dc_status=JSON.stringify([1,2]);
-			// }else if(val==1){
-			// 	this.formData.dc_status=JSON.stringify([1]);
-			// }else{
-			// 	this.formData.dc_status=JSON.stringify([2]);
-			// }
 			this.formData.page = 1;
-			this.get_integral_list(this.formData);
+			this.get_integral_list();
 		},
-		'formData.page'(val, old_val) {
-			this.get_integral_list(this.formData);
+		'formData.employee_ids'(val) {
+		  this.formData.page = 1;
+		  this.get_integral_list();
 		},
-		select_employee_id(val) {
+		'formData.iSrecorder'(val) {
 		  this.formData.page = 1;
-		  this.formData.employee_ids = val;
-		  this.get_integral_list(this.formData);
+		  this.get_integral_list();
 		},
 		time_slot(val, old_val) {
 			this.formData.page = 1;
@@ -364,221 +355,65 @@ export default {
 				delete this.formData.start_day;
 				delete this.formData.end_day;
 			}
-			this.get_integral_list(this.formData);
-		},
-		u_start(val, old_val) {
-			this.formData.page = 1;
-			if (val !== null) {
-				this.formData.u_start_day = val[0];
-				this.formData.u_end_day = val[1];
-			} else {
-				delete this.formData.u_start_day;
-				delete this.formData.u_end_day;
-			}
-			this.get_integral_list(this.formData);
-		},
-		dept_name(val, old_val) {
-			this.formData.page = 1;
-			if (val.length !== 0) {
-				this.formData.dept_ids = val[val.length - 1];
-			} else {
-				this.formData.dept_ids = 0;
-			}
-			this.$nextTick(() => {
-				this.$refs.dept.dropDownVisible = false;
-				this.get_integral_list(this.formData);
-			});
+			this.get_integral_list();
 		},
 	},
 	methods: {
-		//获取员工列表
-		getEmployee() {
-			this.$axios('get', '/api/employee/index', { dept_id: 0, keywords: '', page: 1, page_size: 3000, is_official: 1 }).then(res => {
-				let list = res.data.data.list;
-				this.employee_map = list;
-			});
-		},
-		deriveRestrict() {
-			this.deriveNum = 0;
-			this.$axios('GET', '/api/site/info').then(res => {
-				if (res.data.code == 1) {
-					this.deriveNum = Number(res.data.data.export_max_num);
-				}
-			});
-		},
-		getTypes() {
-			var arr = this.$getTyps();
-			return arr.filter(function(item) {
-				return item.code != 'JX';
-			});
-		},
-		handleRemove(file, fileList) {
-			// if (fileList !== null && fileList.length != 0) {
-			// 	this.import_btn_show = true;
-			// } else {
-			// 	this.import_btn_show = false;
-			// }
-		},
-		// 导入相关
-		close_import() {
-			this.excelImportShow = false;
-			this.$refs.upload.clearFiles();
-		},
-		// keyword
-		keyWordSelect() {
-			this.formData.page = 1;
-			this.get_integral_list(this.formData);
-		},
-		downloadTemplate() {
-			window.open(process.env.VUE_APP_BASE_API + 'api/download/integral/template');
-		},
-		uploadFile() {
-			let params = {};
-			params.file = this.file;
-			this.update_btn = true;
-			this.$axios('post', '/api/integral/import', params, 'v2')
-				.then(res => {
-					if (res.data.code == 1) {
-						if (res.data.data.error.length == 0) {
-							this.$message({ type: 'success', message: '导入成功' });
-							this.excelImportShow = false;
-						} else {
-							this.$message({ type: 'error', message: '导入错误' });
-							this.error_list = res.data.data.error;
-							this.importErrorInfoShow = true;
-						}
-					} else {
-						this.$message({ type: 'error', message: res.data.msg });
-					}
+		deleteItem(){
+			this.$confirm(`确定${this.detail.publisher_id==this.$getUserData().id? '撤回':'删除'}此奖票?`, '提示', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning'
+			}).then(() => {
+				this.$axios("post", "/api/integral/ticket/del",{id:this.detail.id}).then(res => {
+					this.$message.success(this.detail.publisher_id==this.$getUserData().id? "已撤回":'已删除');
+					this.open_detail({id:this.detail_info.event_id});
+					this.isShowDetail=false;
 				})
-				.finally(() => {
-					setTimeout(() => {
-						this.update_btn = false;
-					}, 3000);
-				});
-		},
-		tealConfirm() {
-			this.keyWordSelect();
-		},
-		handleOnthecross(event, file, fileList) {
-			this.nowIndex = 2;
-		},
-		handlePictureCardPrediv(response) {
-			if (response.code == 1) {
-				response.data.id = 1;
-			} else {
-				response.data.id = 0;
-				response.data.name = response.msg;
-			}
-			this.toleadResult = response.data;
-			this.nowIndex = 3;
-			return;
-			// this.nowIndex = 3
-			if (response.code == 1) {
-				if (response.data.error.length > 0) {
-					var htmls = response.data.error;
-					var str = "<div class='red'></div>";
-					htmls.forEach(item => {
-						str += `<div>${item}</div>`;
-					});
-					// this.close_import();
-					this.$notify.error({
-						title: '导入错误',
-						dangerouslyUseHTMLString: true,
-						message: str,
-						duration: 0,
-						offset: 50,
-						customClass: 'notifyBox'
-					});
-				} else {
-					this.file = response.data;
-					this.$message.success({ message: response.msg });
-					this.keyWordSelect();
-					this.close_import();
-				}
-			} else {
-				this.$message.error({ message: response.msg });
-			}
+			}).catch(() => {});
 		},
-		beforeFilesUpload(file) {
-			const $ext_list = ['xlsx', 'xls'];
-			let len = file.name.split('.').length - 1;
-			const $ext_name = file.name.split('.')[len];
-			if ($ext_list.indexOf($ext_name) != -1) {
-			} else {
-				this.toleadResult.id = 0;
-				this.toleadResult.name = '文件格式上传错误,仅支持上传xlsx,xls)';
-				this.nowIndex = 3;
-				// this.$message.warning('文件格式上传错误,仅支持上传xlsx,xls)');
+		selectable(row) {
+			if (row.has_ticket) {
 				return false;
+			}  else {
+				return true;
 			}
 		},
-		exportExcel() {
-			if (this.deriveNum > 0 && this.total >= this.deriveNum) {
-				this.$message.warning('当前数据已超出' + this.deriveNum + '条,请拆分时间段分批导出');
-				return;
-			}
-			window.open(
-				process.env.VUE_APP_BASE_API +
-					'api/download/integral?employee_id=' +
-					this.$getUserData().id +
-					'&page=' +
-					this.formData.page +
-					'&page_size=' +	
-					this.formData.page_size +
-					(this.formData.employee_ids ? '&employee_ids=' + this.formData.employee_ids : '') +
-					(this.formData.rule_id ? '&rule_id=' + this.formData.rule_id : '') +
-					(this.formData.pt_id ? '&pt_id=' + this.formData.pt_id : '') +
-					(this.formData.dept_ids ? '&dept_ids=' + this.formData.dept_ids : '') +
-					(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.keyword ? '&keyword=' + this.formData.keyword : ''),
-				'_blank'
-			);
-		},
-		// end 文件上传
-		handleSizeChange(val) {
-			this.pageLimit = val;
-			this.formData.page_size = this.pageLimit;
-			this.get_integral_list(this.formData);
-		},
-		cuttString(data) {
-			return data.substring(5);
+		openDetail(item){
+			this.$axios("get", "/api/integral/ticket/info",{event_id:item.id}).then(res => {
+				this.detail=res.data.data;
+				this.isShowDetail=true;
+			})
 		},
-		deleteInBatches() {
-			if (this.selectionID.length < 1) {
-				return false;
-			}
-			this.$confirm('此操作将永久删除选中的积分事件, 确认要删除吗?', '批量删除事件', {
+		deleteInBatches(item,is){
+			this.$confirm('你确定发放奖票?', '提示', {
 				confirmButtonText: '确定',
 				cancelButtonText: '取消',
-				type: 'warning'
-			})
-				.then(() => {
-					this.loading = true;
-					this.$axios('POST', '/api/integral/statistics/integral/many', { event_ids: this.selectionID })
-						.then(res => {
-							if (res.data.code == 1) {
-								this.$message({
-									message: res.data.msg,
-									type: 'success'
-								});
-								if (this.selectionID.length == this.list.length) {
-									if (this.formData.page > 1) {
-										this.formData.page = this.formData.page - 1;
-									}
-								}
-								this.get_integral_list(this.formData);
-							} else {
-								this.$message.error(res.data.msg);
-							}
-						})
-						.finally(() => {
-							this.loading = false;
-						});
+				type: 'info'
+			}).then(() => {
+				let data={}
+				if(item){
+					data={event_ids:item.id}
+				}else{
+					data={event_ids:this.selectionID.toString()}
+				}
+				this.$axios("post", "/api/integral/ticket/create",data,'v2').then(res => {
+					if(is){
+						this.$message.success("已发放");
+						this.open_detail({id:this.detail_info.event_id});
+						this.openDetail(item);
+					}else{
+						this.$message.success("已发放");
+						this.get_integral_list();
+					}
 				})
-				.catch(() => {});
+			}).catch(() => {});
+		},
+		getTypes() {
+			var arr = this.$getTyps();
+			return arr.filter(function(item) {
+				return item.code != 'JX';
+			});
 		},
 		deleteEvents(selection) {
 			let listId = [];
@@ -597,10 +432,6 @@ export default {
 				.then(res => {
 					if (res.data.code == 1) {
 						this.detail_info = res.data.data;
-						var ding_report = res.data.data.remark.ding_report;
-						if (Object.keys(ding_report).length != 0) {
-							this.ding_report = res.data.data.remark.ding_report;
-						}
 					} else {
 						this.$message.error(res.data.data.msg);
 					}
@@ -609,48 +440,34 @@ export default {
 					this.detail_loading = false;
 				});
 		},
-		//获取部门
-		getDepartment() {
-			this.$axios('get', '/api/department/tree').then(res => {
-				this.dept_tree = this.getTreeData(res.data.data.list);
-			});
-		},
-		//获取规则
-		get_rule_trees() {
-			this.$axios('get', '/api/integral/rule/trees').then(res => {
-				this.rule_trees = this.getRuleTreeData(res.data.data.rule_tree);
-			});
-		},
-		get_integral_list(data) {
+		get_integral_list() {
 			this.loading = true;
-			this.$axios('get', '/api/integral/statistics/integral', data)
-				.then(res => {
-					if (res.data.code == 1) {
-						this.list = res.data.data.list;
-						if(data.page==1){
-							this.total = res.data.data.total;
-						}
-					} else {
-						this.$message.error(res.data.data.msg);
-					}
-				})
-				.finally(() => {
-					this.loading = false;
-				});
+			let data=JSON.parse(JSON.stringify(this.formData))
+			if(this.employeeOrdept){
+				if(this.formData.iSrecorder==1){
+					data.recorder_id=this.$getUserData().id
+				}
+			}else{
+				data.recorder_id=this.$getUserData().id
+			}
+			data.employee_ids=data.employee_ids.toString()
+			this.$axios('get', '/api/integral/statistics/integral',data).then(res => {
+				this.list = res.data.data.list;
+				if(data.page==1){
+					this.total = res.data.data.total;
+				}
+			}).finally(() => {
+				this.loading = false;
+			});
 		},
 		handleCurrentChange(val) {
-			this.formData.page = val;
+		  this.formData.page = val;
+		  this.get_integral_list();
 		},
-		rule_null(val) {
-			if (val.length == 0) {
-				this.formData.rule_id = 0;
-			} else {
-				this.formData.rule_id = this.rule[this.rule.length - 1];
-			}
-			this.$nextTick(() => {
-				this.$refs.rule.dropDownVisible = false;
-				this.get_integral_list(this.formData);
-			});
+		handleSizeChange(val) {
+		  this.formData.page_size =val;
+		  this.formData.page = 1;
+		  this.get_integral_list();
 		},
 		del_integral_event(item) {
 			this.$confirm('删除事件的同时也会撤销积分,确定删除吗?', '提示', {
@@ -659,56 +476,35 @@ export default {
 				type: 'warning'
 			}).then(() => {
 				this.$axios('post', '/api/integral/statistics/integral/destroy', { event_id: item.event_id }).then(res => {
-					if (res.data.code == 1) {
-						this.$message.success(res.data.msg);
-						this.detail_popup = false;
-						this.get_integral_list(this.formData);
-					} else {
-						this.$message.error(res.data.msg);
-					}
+					this.$message.success(res.data.msg);
+					this.detail_popup = false;
+					this.get_integral_list();
 				});
 			});
 		},
-		close_integral_event() {
-			this.detail_popup = false;
-		},
 		point_name(id) {
-			return this.point_types.find(item => {
+			let point_types=this.$getTyps();
+			return point_types.find(item => {
 				if (item.id == id) {
 					return item.name;
 				}
 			}).name;
 		},
-		// 递归判断列表,把最后的children设为undefined
-		getTreeData(data) {
-			for (var i = 0; i < data.length; i++) {
-				if (data[i]._child.length < 1) {
-					// children若为空数组,则将children设为undefined
-					data[i]._child = undefined;
-				} else {
-					// children若不为空数组,则继续 递归调用 本方法
-					this.getTreeData(data[i]._child);
-				}
-			}
-			return data;
-		},
-		// 规则递归 children
-		getRuleTreeData(data) {
-			for (var i = 0; i < data.length; i++) {
-				if (data[i].child.length < 1) {
-					// children若为空数组,则将children设为undefined
-					data[i].child = undefined;
-				} else {
-					// children若不为空数组,则继续 递归调用 本方法
-					this.getRuleTreeData(data[i].child);
-				}
-			}
-			return data;
-		}
 	}
 };
 </script>
 <style scoped lang="scss">
+  .message-box .label{
+    font-size: 18px;
+    font-weight: 600;
+    margin-bottom: 20px;
+  }
+  .message-box .flex-box-ce{
+    margin-bottom:16px ;
+  }
+  .message-box .fontColorC{
+    width: 100px;
+  }	
 .remark {
 	display: -webkit-box;
 	-webkit-box-orient: vertical;

+ 354 - 116
src/views/award/lotteryTicket_statistics.vue

@@ -2,19 +2,20 @@
   <div>
     <div class="flex-box flex-d-center">
 	  <div class="flex-box-ce">
-		  <div><el-date-picker v-model="formData.month" type="month" placeholder="请选择月份" value-format="yyyy-MM"></el-date-picker></div>
+		  <div><el-date-picker v-model="formData.month" :clearable="false" :disabled="checked" type="month" placeholder="请选择月份" value-format="yyyy-MM"></el-date-picker></div>
 		  <div style="width:200px;margin: 0 10px;">
 		    <el-cascader
 		      v-model="dept_name"
 		      :options="dept_tree"
-		      @change="dept1_null"
+		      @change="changeDept"
 		      :props="{
 		        checkStrictly: true,
 		        value: 'id',
 		        label: 'name',
+				
 		        children: '_child',
 		      }"
-		      ref="dept1"
+		      ref="deptRef"
 		      filterable
 		      change-on-select
 		      placeholder="全公司"
@@ -22,40 +23,41 @@
 		    ></el-cascader>
 		  </div>
 		  <div class="search">
-		    <el-input v-model="formData.keywords"  placeholder="输入同事姓名"  @keyup.enter.native="get_all_integral"><el-button class="buttonCLo" slot="append" @click="get_all_integral" icon="el-icon-search"></el-button></el-input>
+		    <el-input v-model="formData.keyword" clearable placeholder="姓名" maxlength="20"></el-input>
 		  </div>
+		  <div style="margin: 0 10px;"><el-checkbox v-model="checked">查看所有累计奖票</el-checkbox></div>
 	  </div>
-	  <!-- <div><el-button type="primary" plain size="medium" style="margin-left:20px">打印奖票</el-button></div> -->
+	  <!-- <div><el-button type="primary" plain size="medium" style="margin-left:20px" @click="$router.push({path:'print'})">打印奖票</el-button></div> -->
     </div>
 
     <div class="all">
       <div>
         <el-table :data="all_integral_list" style="width: 100%" v-loading="loading">
-          <el-table-column prop="employee_name" label="姓名" align="left" width="200">
-            <template slot-scope="scope">
-              <div style="display:flex">
-                <span class="fl">
-                  <userImage  width="50px"  height="50px" fontSize="1" :user_name="scope.row.name" :img_url="scope.row.img_url"></userImage>
-                </span>
-                <span style="margin-left: 20px; line-height: 50px; display: inline-block">{{ scope.row.name }}</span >
-              </div>
-            </template>
-          </el-table-column>
-          <el-table-column prop="performance" label="部门" align="left">
-            <template slot-scope="scope">
-              <span>{{ scope.row.dept_name }}</span>
-            </template>
+          <el-table-column prop="employee_name" label="姓名" align="left">
+			  <template slot-scope="scope">
+			  	<div class="flex-box">
+			  		<userImage :user_name="scope.row.name" :img_url="scope.row.img_url" width="50px" height="50px"></userImage>
+			  		<div style="height: 50px;padding-left: 10px;" class="flex-box-v flex-h-zhu">
+			  			<span>{{ scope.row.name }}</span>
+			  		</div>
+			  	</div>
+			  </template>
           </el-table-column>
-          <el-table-column prop="a" label="奖票数量" align="left">
+		  <el-table-column prop="count" label="部门">
+		  	<template slot-scope="scope">
+		  		<span style="font-size: 12px;max-width: 200px;" class="fontColorC font-flex-word">{{ scope.row.dept||'--' }}</span>
+		  	</template>
+		  </el-table-column>
+          <el-table-column prop="count" label="奖票数量" align="left">
             <template slot-scope="scope">
-              <span>{{ scope.row.ticketNumber }}</span>
+              <span>{{ scope.row.count }}</span>
             </template>
           </el-table-column>
-<!-- 		  <el-table-column width="150">
+		  <el-table-column>
 		  	<template slot-scope="scope">
-		  		<span  class="blue" style="cursor: pointer;" @click="openTable(scope.row)">查看奖票明细</span>
+		  		<span class="blue" style="cursor: pointer;" @click="openTable(scope.row)">查看奖票明细</span>
 		  	</template>
-		  </el-table-column> -->
+		  </el-table-column>
           <template slot="empty">
             <noData></noData>
           </template>
@@ -69,32 +71,34 @@
     </div>
   
 	<!-- 对齐我的目标详情 -->
-	<el-dialog title="临时奖扣分明细" :visible.sync="isShowTable" :append-to-body="true" width="1000px" top="5%">
+	<el-dialog title="奖票明细" :visible.sync="isShowTable" :append-to-body="true" width="900px" top="5%">
+	  <div class="flex-box-ce" style="margin-bottom: 20px;">
+		  <h1 class="flex-1" style="font-size: 18px;">{{selectItem.name}}的奖票明细-{{checked? '所有奖票':formData.month}}</h1>
+		  <el-input v-model="keywordTabel" size="small" clearable placeholder="搜索内容" style="width: 250px;" maxlength="20"></el-input>
+	  </div>
 	  <div>
-	      <div>
-	        <el-table :data="tableList" style="width: 100%;" v-loading="loading">
-	            <el-table-column prop="name" min-width="300" label="奖扣记录">
-	              <template slot-scope="scope">
-	                 <span>{{scope.row.remark.item_name}}</span>
-	              </template>
-	            </el-table-column>
-	            <el-table-column prop="point" label="分值">
-	              <template slot-scope="scope">
-	                 <span :class="scope.row.point>0?'red':'green'"><span v-if="scope.row.point>0">+</span> {{scope.row.point}}分</span>
-	              </template>
-	            </el-table-column>
-	            <el-table-column prop="ct" label="创建时间"></el-table-column>
-	            <el-table-column label="操作">
-	              <template slot-scope="scope">
-	                 <el-link type="primary" :underline="false" @click="openDetail(scope.row)">查看详情</el-link>
-	              </template>
-	            </el-table-column>
-	            <template slot="empty">
-	            	<noData></noData>
-	            </template>
-	        </el-table>
-	      </div>
-	      <el-pagination style="text-align: center;margin-top: 20px;"  :current-page.sync="page" :page-sizes="[5,10,15]"  layout="total,prev,pager,next,sizes" :total="total" @size-change="handleSizeChange2"  @current-change="handleCurrentChange2" :page-size="page_size"></el-pagination>
+	    <el-table :data="tableList" style="width: 100%;" v-loading="loading2">
+			<el-table-column prop="name" min-width="300" label="奖票事件">
+			  <template slot-scope="scope">
+				 <span>{{scope.row.remark.customize||scope.row.remark.rule}}</span>
+			  </template>
+			</el-table-column>
+			<el-table-column prop="ct" label="事件时间" width="100">
+				<template slot-scope="scope">
+					<span>{{$moment(scope.row.date+'').format("YYYY-MM-DD")}}</span>
+				</template>
+			</el-table-column>
+			<el-table-column label="操作" align="right">
+			  <template slot-scope="scope">
+				 <el-link type="primary" :underline="false" @click="openDetail(scope.row)">查看详情</el-link>
+				 <el-link v-if="scope.row.publisher_id==$getUserData().id||($supremeAuthority()!='dept_manager'&&$supremeAuthority()!='employee')" type="danger" :underline="false" @click="deleteItem(scope.row.id,scope.row.publisher_id)" style="padding-left: 10px;">{{scope.row.publisher_id==$getUserData().id ?'撤回奖票':'删除奖票'}}</el-link>
+			  </template>
+			</el-table-column>
+			<template slot="empty">
+				<noData></noData>
+			</template>
+	    </el-table>
+	    <el-pagination style="text-align: center;margin-top: 20px;"  :current-page.sync="page" :page-sizes="[5,10,15]"  layout="total,prev,pager,next,sizes" :total="total2" @size-change="handleSizeChange2"  @current-change="handleCurrentChange2" :page-size="page_size"></el-pagination>
 	  </div>
 	  <div class="flex-box-end" style="margin-top: 20px;">
 	  	<el-button @click="isShowTable=false">关 闭</el-button>
@@ -102,75 +106,162 @@
 	</el-dialog>
 	
 	<!-- 检查单详情 -->
-	<BrawerBox :showDrawer.sync="isShowDetail"  drawerTitle="奖扣分详情">
+	<BrawerBox :showDrawer.sync="isShowDetail"  drawerTitle="奖详情">
 	  <template slot="main">
 	    <div>
 	      <div class="flex-box-v">
 	        <div class="message-box">
 	          <div class="flex-box-ce">
-	            <div class="fontColorC">奖扣分对象</div>
-	            <!-- <div class="flex-1">{{$getEmployeeMapItem(detail.employee_id).name}}</div> -->
-	          </div>
-	          <div class="flex-box-ce">
-	            <div class="fontColorC">分值</div>
-	            <div class="flex-1" :class="detail.point>0?'red':'green'"><span v-if="detail.point>0">+</span>{{detail.point}}分</div>
+	            <div class="fontColorC">奖票对象</div>
+	            <div class="flex-1">{{detail.employee_name}}</div>
 	          </div>
-	          <div class="flex-box-ce">
-	            <div class="fontColorC">备注</div>
-	            <div class="flex-1">{{detail.remark.remark||'无'}}</div>
-	          </div>
-	          <div v-if="detail.files.length>0" class="flex-box">
-	              <div class="fontColorC">图片</div>
-	              <div class="files-box flex-box-ce" v-for="(f,index) in detail.files" :key="index" style="margin-right: 10px;">
-	                <el-image style="width: 40px; height: 40px;cursor: pointer;border-radius: 5px;" :src="f.file" :preview-src-list="[f.file]"></el-image>
-	              </div>
-	          </div>
-	          <div class="flex-box-ce">
-	            <div class="fontColorC">提交人</div>
-	            <!-- <div class="flex-1">{{$getEmployeeMapItem(detail.publisher_id).name}}</div> -->
-	          </div>
-	          <div class="flex-box-ce">
-	            <div class="fontColorC">提交时间</div>
-	            <div class="flex-1">{{ detail.ct }}</div>
-	          </div>
-	        </div>
+			  <div class="flex-box-ce">
+				<div class="fontColorC">事件时间</div>
+				<div class="flex-1">{{$moment(detail.date+'').format("YYYY-MM-DD")}}</div>
+			  </div>
+			  <div class="flex-box-ce">
+				<div class="fontColorC">发放人</div>
+				<div class="flex-1">{{detail.publisher_name||'--'}}</div>
+			  </div>
+			  <div class="flex-box-ce">
+				<div class="fontColorC">发放时间</div>
+				<div class="flex-1">{{detail.ct}}</div>
+			  </div>
+			  <div class="flex-box-ce">
+			    <div class="fontColorC">奖票事件</div>
+			    <div class="flex-1">{{detail.remark.customize||detail.remark.rule}}</div>
+			  </div>
+			</div>
 	      </div>
-	      <div class="message-box" style="margin-top: 20px;">
-	        <div class="label">检查标准</div>
-	        <div class="flex-box">
-	          <div class="fontColorC">检查项</div>
-	          <div class="flex-1">{{detail.remark.item_name}}</div>
-	        </div>
-	        <div class="flex-box" style="margin: 16px 0;">
-	          <div class="fontColorC">标准分值</div>
-	          <div class="flex-1">{{Math.abs(detail.point)}}分</div>
-	        </div>
-	        <div class="flex-box">
-	          <div class="fontColorC">检查项内容</div>
-	          <div class="flex-1">{{detail.remark.item_desc}}</div>
-	        </div>
+	      <div class="message-box" v-if="detail.event">
+			 <div style="font-size: 16px;margin-bottom: 20px;">对应积分事件</div>
+			 <div class="flex-box" @click="open_detail()" style="cursor: pointer;background-color: rgb(248, 252, 255);margin-bottom: 14px;position: relative;padding: 8px;border-radius: 5px;">
+				 <div class="flex-1" style="padding-right: 20px;">
+					 {{detail.event.remark.customize||detail.event.remark.rule}}
+				 </div>
+				 <div class="red" v-if="detail.event.point>0">+{{detail.event.point}} {{detail.event.pt_id==3? 'B分':'A分'}}</div>
+				 <div class="green" v-else>{{detail.event.point}} {{detail.event.pt_id==3? 'B分':'A分'}}</div>
+			 </div>
 	      </div>
 	    </div>
 	  </template>
 	  <template slot="footer">
-	      <el-button type="danger" v-if="detail.can_delete" plain @click="deleteUser">删除</el-button>
+	      <el-button type="danger" plain @click="deleteItem()" v-if="detail.publisher_id==$getUserData().id||($supremeAuthority()!='dept_manager'&&$supremeAuthority()!='employee')">{{detail.publisher_id==$getUserData().id ?'撤回奖票':'删除奖票'}}</el-button>
 	      <div class="flex-1"></div>
 	      <el-button  plain @click="isShowDetail=false">关 闭</el-button>
 	  </template>
 	</BrawerBox>
+  
+	<el-drawer title="事件详情" :visible.sync="detail_popup" ref="drawer" :with-header="false" :width="'500px'" direction="rtl">
+		<div class="drawer_title flex-box-ce">
+			<span class="flex-1">事件详情</span>
+			<i  @click="detail_popup=false" style="cursor: pointer;" class="el-icon-close"></i>
+		</div>
+		<div class="detail_popup" v-loading="detail_loading" v-if="detail_info !== null">
+			<el-row style="padding-bottom:10px;border-bottom:1px #f8f8f8 solid;">
+				<div class="flex-box flex-v-ce">
+					<userImage :user_name="detail_info.employee_name" :img_url="detail_info.img_url" width="50px" height="50px" fontSize="1"></userImage>
+					<span style="font-size: 18px;line-height:50px; margin-left:10px;margin-right:4px;">{{ detail_info.employee_name }}</span>
+					<span class="red point" v-if="detail_info.point >= 0">+{{ detail_info.point }} {{ point_name(detail_info.pt_id) }}</span>
+					<span class="green point" v-if="detail_info.point < 0">{{ detail_info.point }} {{ point_name(detail_info.pt_id) }}</span>
+				</div>
+			</el-row>
+			<el-row >
+				<el-col :span="6">事件内容</el-col>
+				<el-col :span="18" v-if="detail_info.remark">{{ detail_info.remark && (detail_info.remark.customize || detail_info.remark.rule) }}</el-col>
+			</el-row>
+			<el-row v-show="detail_info.files && detail_info.files.length > 0">
+				<el-col :span="18" :offset="6">
+					<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>
+			<el-row v-show="detail_info.rule_list">
+				<el-col :span="6">规则分类</el-col>
+				<el-col :span="18">{{ detail_info.rule_list }}</el-col>
+			</el-row>
+			<el-row v-show="detail_info.source_type_mark">
+				<el-col :span="6">来源类型</el-col>
+				<el-col :span="18">{{ detail_info.source_type_mark }}</el-col>
+			</el-row>
+			<el-row v-show="detail_info.recorder_name">
+				<el-col :span="6">记录人</el-col>
+				<el-col :span="18">{{ detail_info.recorder_name }}</el-col>
+			</el-row>
+			<el-row v-show="detail_info.date">
+				<el-col :span="6">事件时间</el-col>
+				<el-col :span="18">{{ detail_info.date }}</el-col>
+			</el-row>
+			<el-row v-show="detail_info.complete_task.time">
+				<el-col :span="6">完成时间</el-col>
+				<el-col :span="18">{{ detail_info.complete_task.time }}</el-col>
+			</el-row>
+			<el-row v-show="detail_info.complete_task.remark">
+				<el-col :span="6">完成备注</el-col>
+				<el-col :span="18">{{ detail_info.complete_task.remark }}</el-col>
+			</el-row>
+			<el-row v-show="detail_info.complete_task && detail_info.complete_task.files && detail_info.complete_task.files.length > 0">
+				<el-col :span="18" :offset="6">
+					<el-image
+						v-for="(itme, index) in detail_info.complete_task.files"
+						:key="index"
+						style="width: 80px; height: 80px;margin: 0 5px;"
+						:src="itme"
+						:preview-src-list="detail_info.complete_task.files"
+					></el-image>
+				</el-col>
+			</el-row>
+			<div v-show="detail_info.rule_id">
+				<p class="row_title">规则依据</p>
+				<el-row>
+					<el-col :span="6">规则分类</el-col>
+					<el-col :span="18">{{ detail_info.rule_list }}</el-col>
+				</el-row>
+				<el-row v-show="detail_info.remark.rule">
+					<el-col :span="6">积分规则</el-col>
+					<el-col :span="18">{{ detail_info.remark.rule }}</el-col>
+				</el-row>
+				<el-row>
+					<el-col :span="6">积分</el-col>
+					<el-col :span="18" v-show="detail_info.rule_item.min_point == detail_info.rule_item.max_point">{{ detail_info.rule_item.min_point }} {{ point_name(detail_info.pt_id) }}</el-col>
+					<el-col :span="18" v-show="detail_info.rule_item.min_point != detail_info.rule_item.max_point">
+						{{ detail_info.rule_item.min_point }} ~ {{ detail_info.rule_item.max_point }} {{ point_name(detail_info.pt_id) }}
+					</el-col>
+				</el-row>
+			</div>
+			<div v-show="detail_info.process"><Steps :process="detail_info.process"></Steps></div>
+			<div v-show="detail_info.dc_remark.flow"><Review :process="detail_info.dc_remark.flow" :status="detail_info.dc_status"></Review></div>
+		</div>
+		<div  style="position: absolute; bottom: 20px;right: 20px;left: 20px;" class="flex-box-ce">
+<!-- 			<el-button type="primary" v-if="!detail_info.has_ticket" @click="deleteInBatches({id:detail_info.event_id},true)">发放奖票</el-button>
+			<el-button type="primary" v-else @click="openDetail({id:detail_info.event_id})">查看奖票</el-button> -->
+			<div class="flex-1"></div>
+			<el-button @click="detail_popup=false">取消</el-button>
+		</div>
+	</el-drawer>
   </div>
 </template>
 <script>
-
+import {_debounce} from '@/api/auth';
+import Steps from '@/components/Steps';
+import Review from '@/components/Review';
+import toLead from '@/components/toLead';
 export default {
+  components:{Steps,Review,toLead},
   data() {
     return {
+	 checked:false,
       loading: false,
       all_integral_list: null,
       formData: {
         month: this.$moment().format("YYYY-MM"),
-        keywords: "",
-        dept_id: "",
+        keyword: "",
+        dept_ids: "",
         page: 1,
         page_size: 10
       },
@@ -181,12 +272,20 @@ export default {
       pageLimit1: 10,
 	  
 	  page: 1,
-	  total: 0,
+	  total2: 0,
 	  page_size: 10,
+	  keywordTabel:'',
 	  isShowTable:false,
 	  tableList:[],
+	  loading2:false,
 	  isShowDetail:false,
-	  detail:{remark:{},files:[]},
+	  detail:{remark:{},event:{remark:{}},date:''},
+	  selectItem:{},
+	  detail_info: {complete_task:{},remark:{},rule_item:{},dc_remark:{},pt_id:3},
+	  detail_popup: false,
+	  detail_loading: false,
+	  
+	  
     };
   },
   watch: {
@@ -194,34 +293,125 @@ export default {
       this.formData.page = 1;
       this.get_all_integral();
     },
-    "formData.dept_id"(val, old_val) {
+    "formData.dept_ids"(val, old_val) {
       if (!val) {
-        this.formData.dept_id = 0;
+        this.formData.dept_ids = 0;
       }
       this.formData.page = 1;
       this.get_all_integral();
-    }
+    },
+	'formData.keyword': {
+	  deep: true,
+	  handler: _debounce(function(val) {
+		  this.formData.page = 1;
+		  this.get_all_integral();
+	  },1000)
+	},
+	'keywordTabel':{
+	  deep: true,
+	  handler: _debounce(function(val) {
+		  this.getUserAwardList();
+	  },1000)
+	},
+	checked(){
+		this.formData.page = 1;
+		this.get_all_integral();
+	}
+  },
+  created() {
+  	this.getDepartment(); //部门
   },
   mounted() {
     this.get_all_integral();
-    this.getDepartment(); //部门
   },
   methods: {
+	point_name(id) {
+	  	let point_types=this.$getTyps();
+	  	return point_types.find(item => {
+	  		if (item.id == id) {
+	  			return item.name;
+	  		}
+	  	}).name;
+	},
+	open_detail() {
+		this.detail_popup = true;
+		let data = {event_id:this.detail.event_id};
+		this.detail_loading = true;
+		this.$axios('get', '/api/integral/statistics/integral/info',data).then(res => {
+			this.detail_info = res.data.data;
+		}).finally(() => {
+			this.detail_loading = false;
+		});
+	},
+	deleteItem(id,is){
+		
+		let str='';
+		let num=1;
+		if(is==this.$getUserData().id||this.detail.publisher_id==this.$getUserData().id){
+			str='确定撤回此奖票?';
+		}else {
+			str='确定删除此奖票?';
+			num=2;
+		}
+		
+		this.$confirm(str, '提示', {
+			confirmButtonText: '确定',
+			cancelButtonText: '取消',
+			type: 'warning'
+		}).then(() => {
+			this.$axios("post", "/api/integral/ticket/del",{id:id||this.detail.id}).then(res => {
+				
+				this.$message.success(num==1? "已撤回":'已删除');
+				this.getUserAwardList();
+				this.isShowDetail=false;
+			})
+		}).catch(() => {});
+	},
 	openTable(item){
-		this.isShowDetail=true;
+		this.isShowTable=true;
+		this.selectItem=item;
+		this.page_size=10;
+		this.keywordTabel="";
+		this.getUserAwardList();
 	},
 	openDetail(item){
-		
+		this.$axios("get", "/api/integral/ticket/info",{id:item.id}).then(res => {
+			this.detail=res.data.data;
+			this.isShowDetail=true;
+		})
 	},
-	//分页
-	handleSizeChange2(val) {
-	  this.pageLimit1 = val;
-	  this.formData.page_size = this.pageLimit1;
-	  this.get_all_integral();
+	getUserAwardList(is){
+		this.loading2 = true;
+		!is? this.page=1:'';
+		let formData={
+			page: this.page,
+			page_size: this.page_size,
+			employee_id:this.selectItem.id,
+			keyword:this.keywordTabel,
+		}
+		if(this.checked){
+			// formData.start_date="2010-01-01";
+			// formData.end_date=this.$moment().format('YYYY-MM-DD')
+		}else{
+			formData.month=this.formData.month
+		}
+		
+		this.$axios("get", "/api/integral/ticket", formData,'v2').then(res => {
+		  this.tableList = res.data.data.list;
+		  this.total2 = res.data.data.total;
+		}).finally(() => {
+			this.loading2 = false;
+		});
 	},
+	// 页面变更
 	handleCurrentChange2(val) {
-	  this.formData.page = val;
-	  this.get_all_integral();
+	  this.page = val;
+	  this.getUserAwardList(true);
+	},
+	// 页面跳转
+	handleSizeChange2(val) {
+	  this.page_size = val;
+	  this.getUserAwardList();
 	},
     //分页
     handleSizeChange(val) {
@@ -236,7 +426,11 @@ export default {
     //请求数据
     get_all_integral() {
       this.loading = true;
-      this.$axios("get", "/api/integral/statistics/ticket", this.formData).then(res => {
+	  let formData=JSON.parse(JSON.stringify(this.formData));
+	  if(this.checked){
+		delete formData.month
+	  }
+      this.$axios("get", "/api/integral/ticket/statistics", formData).then(res => {
           if (res.data.code == 1) {
             this.all_integral_list = res.data.data.list;
             this.total = res.data.data.total;
@@ -247,17 +441,31 @@ export default {
           this.loading = false;
         });
     },
-    dept1_null(val) {
+    changeDept(val) {
+	  
       //部门
       if (val.length == 0) {
-        this.formData.dept_id = 0;
+        this.formData.dept_ids = 0;
       } else {
-        this.formData.dept_id = this.dept_name[this.dept_name.length - 1];
+		let nodes=this.$refs.deptRef.getCheckedNodes();
+		if(nodes.length==1){
+			let ids=[nodes[0].value];
+			this.returnArr(nodes[0].children,ids);
+			this.formData.dept_ids = ids.toString();
+		}
       }
       this.$nextTick(() => {
-        this.$refs.dept1.dropDownVisible = false;
+        this.$refs.deptRef.dropDownVisible = false;
       });
     },
+	returnArr(child,arr){
+	  if(child.length>0){
+		child.forEach(item=>{
+		  arr.push(item.value)
+		  this.returnArr(item.children,arr)
+		})
+	  }
+	},
     //获取部门
     getDepartment() {
       this.$axios("get", "/api/department/tree").then((res) => {
@@ -282,6 +490,11 @@ export default {
 </script>
 
 <style scoped lang="scss">
+	.drawer_title {
+		font-size: 18px;
+		padding: 20px;
+		border-bottom: 1px #efefef solid;
+	}
   .message-box .label{
     font-size: 18px;
     font-weight: 600;
@@ -309,9 +522,34 @@ export default {
 .search ::v-deep .el-input-group__append:active .el-icon-search {
   color: #fff;
 }
-</style>
-<style scoped="scoped" lang="scss">
-
+.detail_popup {
+	padding: 20px;
+	height: calc(100vh - 140px);
+	overflow: auto;
+	padding-bottom: 100px;
+	.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;
+		}
+	}
+}
   .all{
     margin-top:10px;
     padding:10px 20px 0px 20px;

+ 360 - 65
src/views/award/myAward.vue

@@ -1,81 +1,376 @@
 <template>
-	<div>
-		<button @click="insert">insert at random index</button>
-		<button @click="reset">reset</button>
-		<TransitionGroup tag="ul" name="fade" class="container">
-		  <div v-for="item in items" class="item" :key="item">
-		    {{ item }}
-		    <button @click="remove(item)">x</button>
-		  </div>
-		</TransitionGroup>
-	</div>
-</template>
+  <div>
+    <div class="flex-box flex-d-center">
+	  <div class="flex-box-ce">
+		  <div><el-date-picker v-model="month" :disabled="checked" type="month" :clearable="false" placeholder="请选择月份" value-format="yyyy-MM"></el-date-picker></div>
+		  <div class="search"><el-input v-model="keyword" clearable  placeholder="内容搜索" maxlength="20"></el-input></div>
+		  <div><el-checkbox v-model="checked">查看所有累计奖票</el-checkbox></div>
+	  </div>
+    </div>
 
+    <div class="all">
+      <div>
+        <el-table :data="list" style="width: 100%" v-loading="loading">
+			<el-table-column prop="name" min-width="300" label="奖票事件">
+			  <template slot-scope="scope">
+				 <span>{{scope.row.remark.customize||scope.row.remark.rule}}</span>
+			  </template>
+			</el-table-column>
+			<el-table-column prop="ct" label="事件时间" width="100">
+				<template slot-scope="scope">
+					<span>{{$moment(scope.row.date+'').format("YYYY-MM-DD")}}</span>
+				</template>
+			</el-table-column>
+			<el-table-column label="操作" align="right">
+			  <template slot-scope="scope">
+				 <el-link type="primary" :underline="false" @click="openDetail(scope.row)">查看详情</el-link>
+			  </template>
+			</el-table-column>
+			<template slot="empty">
+				<noData></noData>
+			</template>
+        </el-table>
+        <center style="padding: 20px 0;">
+          <el-pagination background  @size-change="handleSizeChange" @current-change="handleCurrentChange"  :current-page="page" 
+		  :page-sizes="[10, 20, 50, 100]"  layout="total, sizes, prev, pager, next" :page-size="page_size"  :total="total"> 
+		  </el-pagination>
+        </center>
+      </div>
+    </div>
+  
+	<!-- 检查单详情 -->
+	<BrawerBox :showDrawer.sync="isShowDetail"  drawerTitle="奖票详情">
+	  <template slot="main">
+	    <div>
+	      <div class="flex-box-v">
+	        <div class="message-box">
+	          <div class="flex-box-ce">
+	            <div class="fontColorC">奖票对象</div>
+	            <div class="flex-1">{{detail.employee_name}}</div>
+	          </div>
+			  <div class="flex-box-ce">
+				<div class="fontColorC">事件时间</div>
+				<div class="flex-1">{{$moment(detail.date+'').format("YYYY-MM-DD")}}</div>
+			  </div>
+			  <div class="flex-box-ce">
+				<div class="fontColorC">发放人</div>
+				<div class="flex-1">{{detail.publisher_name||'--'}}</div>
+			  </div>
+			  <div class="flex-box-ce">
+				<div class="fontColorC">发放时间</div>
+				<div class="flex-1">{{detail.ct}}</div>
+			  </div>
+			  <div class="flex-box-ce">
+			    <div class="fontColorC">奖票事件</div>
+			    <div class="flex-1">{{detail.remark.customize||detail.remark.rule}}</div>
+			  </div>
+			</div>
+	      </div>
+	      <div class="message-box" v-if="detail.event">
+			 <div style="font-size: 16px;margin-bottom: 20px;">对应积分事件</div>
+			 <div class="flex-box" @click="open_detail()" style="cursor: pointer;background-color: rgb(248, 252, 255);margin-bottom: 14px;position: relative;padding: 8px;border-radius: 5px;">
+				 <div class="flex-1" style="padding-right: 20px;">
+					 {{detail.event.remark.customize||detail.event.remark.rule}}
+				 </div>
+				 <div class="red" v-if="detail.event.point>0">+{{detail.event.point}} {{detail.event.pt_id==3? 'B分':'A分'}}</div>
+				 <div class="green" v-else>{{detail.event.point}} {{detail.event.pt_id==3? 'B分':'A分'}}</div>
+			 </div>
+	      </div>
+	    </div>
+	  </template>
+	  <template slot="footer">
+	      <el-button type="danger" plain @click="deleteItem" v-if="detail.publisher_id==$getUserData().id||($supremeAuthority()!='dept_manager'&&$supremeAuthority()!='employee')">{{detail.publisher_id==$getUserData().id ?'撤回奖票':'删除奖票'}}</el-button>
+	      <div class="flex-1"></div>
+	      <el-button  plain @click="isShowDetail=false">关 闭</el-button>
+	  </template>
+	</BrawerBox>
+  
+	  <el-drawer title="事件详情" :visible.sync="detail_popup" ref="drawer"  :with-header="false" :width="'500px'" direction="rtl">
+		<div class="drawer_title flex-box-ce">
+			<span class="flex-1">事件详情</span>
+			<i  @click="detail_popup=false" style="cursor: pointer;" class="el-icon-close"></i>
+		</div>
+		<div class="detail_popup" v-loading="detail_loading" v-if="detail_info !== null">
+			<el-row style="padding-bottom:10px;border-bottom:1px #f8f8f8 solid;">
+				<div class="flex-box flex-v-ce">
+					<userImage :user_name="detail_info.employee_name" :img_url="detail_info.img_url" width="50px" height="50px" fontSize="1"></userImage>
+					<span style="font-size: 18px;line-height:50px; margin-left:10px;margin-right:4px;">{{ detail_info.employee_name }}</span>
+					<span class="red point" v-if="detail_info.point >= 0">+{{ detail_info.point }} {{ point_name(detail_info.pt_id) }}</span>
+					<span class="green point" v-if="detail_info.point < 0">{{ detail_info.point }} {{ point_name(detail_info.pt_id) }}</span>
+				</div>
+			</el-row>
+			<el-row >
+				<el-col :span="6">事件内容</el-col>
+				<el-col :span="18" v-if="detail_info.remark">{{ detail_info.remark && (detail_info.remark.customize || detail_info.remark.rule) }}</el-col>
+			</el-row>
+			<el-row v-show="detail_info.files && detail_info.files.length > 0">
+				<el-col :span="18" :offset="6">
+					<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>
+			<el-row v-show="detail_info.rule_list">
+				<el-col :span="6">规则分类</el-col>
+				<el-col :span="18">{{ detail_info.rule_list }}</el-col>
+			</el-row>
+			<el-row v-show="detail_info.source_type_mark">
+				<el-col :span="6">来源类型</el-col>
+				<el-col :span="18">{{ detail_info.source_type_mark }}</el-col>
+			</el-row>
+			<el-row v-show="detail_info.recorder_name">
+				<el-col :span="6">记录人</el-col>
+				<el-col :span="18">{{ detail_info.recorder_name }}</el-col>
+			</el-row>
+			<el-row v-show="detail_info.date">
+				<el-col :span="6">事件时间</el-col>
+				<el-col :span="18">{{ detail_info.date }}</el-col>
+			</el-row>
+			<el-row v-show="detail_info.complete_task.time">
+				<el-col :span="6">完成时间</el-col>
+				<el-col :span="18">{{ detail_info.complete_task.time }}</el-col>
+			</el-row>
+			<el-row v-show="detail_info.complete_task.remark">
+				<el-col :span="6">完成备注</el-col>
+				<el-col :span="18">{{ detail_info.complete_task.remark }}</el-col>
+			</el-row>
+			<el-row v-show="detail_info.complete_task && detail_info.complete_task.files && detail_info.complete_task.files.length > 0">
+				<el-col :span="18" :offset="6">
+					<el-image
+						v-for="(itme, index) in detail_info.complete_task.files"
+						:key="index"
+						style="width: 80px; height: 80px;margin: 0 5px;"
+						:src="itme"
+						:preview-src-list="detail_info.complete_task.files"
+					></el-image>
+				</el-col>
+			</el-row>
+			<div v-show="detail_info.rule_id">
+				<p class="row_title">规则依据</p>
+				<el-row>
+					<el-col :span="6">规则分类</el-col>
+					<el-col :span="18">{{ detail_info.rule_list }}</el-col>
+				</el-row>
+				<el-row v-show="detail_info.remark.rule">
+					<el-col :span="6">积分规则</el-col>
+					<el-col :span="18">{{ detail_info.remark.rule }}</el-col>
+				</el-row>
+				<el-row>
+					<el-col :span="6">积分</el-col>
+					<el-col :span="18" v-show="detail_info.rule_item.min_point == detail_info.rule_item.max_point">{{ detail_info.rule_item.min_point }} {{ point_name(detail_info.pt_id) }}</el-col>
+					<el-col :span="18" v-show="detail_info.rule_item.min_point != detail_info.rule_item.max_point">
+						{{ detail_info.rule_item.min_point }} ~ {{ detail_info.rule_item.max_point }} {{ point_name(detail_info.pt_id) }}
+					</el-col>
+				</el-row>
+			</div>
+			<div v-show="detail_info.process"><Steps :process="detail_info.process"></Steps></div>
+			<div v-show="detail_info.dc_remark.flow"><Review :process="detail_info.dc_remark.flow" :status="detail_info.dc_status"></Review></div>
+		</div>
+		<div  style="position: absolute; bottom: 20px;right: 20px;left: 20px;" class="flex-box-ce">
+<!-- 			<el-button type="primary" v-if="!detail_info.has_ticket" @click="deleteInBatches({id:detail_info.event_id},true)">发放奖票</el-button>
+			<el-button type="primary" v-else @click="openDetail({id:detail_info.event_id})">查看奖票</el-button> -->
+			<div class="flex-1"></div>
+			<el-button @click="detail_popup=false">取消</el-button>
+		</div>
+	  </el-drawer>
+  </div>
+</template>
 <script>
+import {_debounce} from '@/api/auth';
+import Steps from '@/components/Steps';
+import Review from '@/components/Review';
+import toLead from '@/components/toLead';
 export default {
-	data() {
-		return {
-			getInitialItems:[1, 2, 3, 4, 5],
-			items:[1, 2, 3, 4, 5],
-			id:6
-		}
+ components:{Steps,Review,toLead},
+  data() {
+    return {
+	  checked:false,
+      loading: false,
+      list: null,
+	  month: this.$moment().format("YYYY-MM"),
+	  page:1,
+	  page_size:10,
+      total: 0,
+	  keyword:'',
+      //部门
+      dept_name: [],
+      dept_tree: [],
+	  
+	  isShowDetail:false,
+	  detail:{remark:{},event:{remark:{}},date:''},
+	  selectItem:{},
+	  
+	  detail_info: {complete_task:{},remark:{},rule_item:{},dc_remark:{},pt_id:3},
+	  detail_popup: false,
+	  detail_loading: false,
+    };
+  },
+  watch: {
+	'keyword': {
+	  deep: true,
+	  handler: _debounce(function(val) {
+		  this.getUserAwardList();
+	  },1000)
 	},
-	methods: {
-		insert() {
-		  const i = Math.round(Math.random() * this.items.length)
-		  this.items.splice(i, 0, this.id++)
-		},
-		reset() {
-		  this.items=[1, 2, 3, 4, 5];
-		},
-		remove(item) {
-		  const i = this.items.indexOf(item)
-		  if (i > -1) {
-			this.items.splice(i, 1)
-		  }
-		}
+    month(val, old_val) {
+      this.getUserAwardList();
+    },
+	checked(){
+	  this.getUserAwardList();
+	}
+  },
+  mounted() {
+    this.getUserAwardList();
+  },
+  methods: {
+	  point_name(id) {
+	    	let point_types=this.$getTyps();
+	    	return point_types.find(item => {
+	    		if (item.id == id) {
+	    			return item.name;
+	    		}
+	    	}).name;
+	  },
+	 open_detail() {
+	 	this.detail_popup = true;
+	 	let data = {event_id:this.detail.event_id};
+	 	this.detail_loading = true;
+	 	this.$axios('get', '/api/integral/statistics/integral/info',data).then(res => {
+	 		this.detail_info = res.data.data;
+	 	}).finally(() => {
+	 		this.detail_loading = false;
+	 	});
+	 }, 
+	deleteItem(){
+		this.$confirm(`确定${this.detail.publisher_id==this.$getUserData().id? '撤回':'删除'}此奖票?`, '提示', {
+			confirmButtonText: '确定',
+			cancelButtonText: '取消',
+			type: 'warning'
+		}).then(() => {
+			this.$axios("post", "/api/integral/ticket/del",{id:this.detail.id}).then(res => {
+				this.$message.success(this.detail.publisher_id==this.$getUserData().id? "已撤回":'已删除');
+				this.getUserAwardList(true);
+				this.isShowDetail=false;
+			})
+		}).catch(() => {});
 	},
-	created() {
-
+	openDetail(item){
+		this.$axios("get", "/api/integral/ticket/info",{id:item.id}).then(res => {
+			this.detail=res.data.data;
+			this.isShowDetail=true;
+		})
 	},
-	mounted() {
-		
+	getUserAwardList(is){
+		this.loading2 = true;
+		!is? this.page=1:'';
+		let formData={
+			page: this.page,
+			page_size: this.page_size,
+			employee_id:this.$getUserData().id,
+			keyword:this.keyword,
+		}
+		if(this.checked){
+			formData.start_date="2010-01-01";
+			formData.end_date=this.$moment().format('YYYY-MM-DD')
+		}else{
+			formData.month=this.month
+		}
 		
-	}
+		this.$axios("get", "/api/integral/ticket", formData,'v2').then(res => {
+		  this.list = res.data.data.list;
+		  this.total = res.data.data.total;
+		}).finally(() => {
+			this.loading2 = false;
+		});
+	},
+	// 页面变更
+	handleCurrentChange(val) {
+	  this.page = val;
+	  this.getUserAwardList(true);
+	},
+	// 页面跳转
+	handleSizeChange(val) {
+	  this.page_size = val;
+	  this.getUserAwardList();
+	},
+  }
 };
 </script>
 
-<style scoped>
-.container {
-  position: relative;
-  padding: 0;
+<style scoped lang="scss">
+	.drawer_title {
+		font-size: 18px;
+		padding: 20px;
+		border-bottom: 1px #efefef solid;
+	}
+	.detail_popup {
+		padding: 20px;
+		height: calc(100vh - 140px);
+		overflow: auto;
+		padding-bottom: 100px;
+		.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;
+			}
+		}
+	}
+  .message-box .label{
+    font-size: 18px;
+    font-weight: 600;
+    margin-bottom: 20px;
+  }
+  .message-box .flex-box-ce{
+    margin-bottom:16px ;
+  }
+  .message-box .fontColorC{
+    width: 100px;
+  }
+.el-date-editor.el-input {
+  width: auto;
 }
-
-.item {
-  width: 100%;
-  height: 30px;
-  background-color: #f3f3f3;
-  border: 1px solid #666;
-  box-sizing: border-box;
+.date-picker-width {
+  width: 145px !important;
 }
-
-/* 1. 声明过渡效果 */
-.fade-move,
-.fade-enter-active,
-.fade-leave-active {
-  transition: all 0.5s cubic-bezier(0.55, 0, 0.1, 1);	
+.search{
+	margin: 0 10px;
 }
-
-/* 2. 声明进入和离开的状态 */
-.fade-enter-from,
-.fade-leave-to {
-  opacity: 0;
-  transform: scaleY(0.01) translate(30px, 0);
+.search ::v-deep .el-input-group__append{
+  background: #FFF;
 }
-
-/* 3. 确保离开的项目被移除出了布局流
-      以便正确地计算移动时的动画效果。 */
-.fade-leave-active {
-  position: absolute;
+.search ::v-deep .el-input-group__append:active {
+  background: #26a2ff;
+}
+.search ::v-deep .el-input-group__append:active .el-icon-search {
+  color: #fff;
 }
-</style>
+</style>
+<style scoped="scoped" lang="scss">
+
+  .all{
+    margin-top:10px;
+    padding:10px 20px 0px 20px;
+    min-height: calc(100vh - 204px);
+    
+  }
+</style>

+ 461 - 3
src/views/award/myGrantAward.vue

@@ -1,8 +1,466 @@
 <template>
-</template>
+  <div>
+    <div class="flex-box flex-d-center">
+	  <div class="flex-box-ce">
+		  <div>
+			  <el-date-picker  value-format="yyyy-MM-dd" :picker-options="pickerOptions" v-model="date" type="daterange" range-separator="至" start-placeholder="开始日期"	end-placeholder="结束日期"> </el-date-picker>
+		  </div>
+		  <el-select style="margin: 0 10px;" v-model="formData.employee_id" size="medium" filterable placeholder="请输入或选择人员" clearable>
+		  	<el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
+		  </el-select>
+		  <div class="search"><el-input v-model="formData.keyword" clearable placeholder="内容搜索"  maxlength="20"></el-input></div>
+	  </div>
+    </div>
 
+    <div class="all">
+      <div>
+        <el-table :data="list" style="width: 100%" v-loading="loading">
+			<el-table-column prop="employee_name" label="姓名" align="left" width="200">
+				  <template slot-scope="scope">
+					<div class="flex-box">
+						<userImage :img_url="scope.row.employee_img_url" :user_name="scope.row.employee_name" width="50px" height="50px"></userImage>
+						<div style="height: 50px;padding-left: 10px;" class="flex-box-v flex-h-zhu">
+							<span>{{scope.row.employee_name}}</span>
+<!-- 							<div class="fontColorD" style="font-size: 12px;" v-if="scope.row.userInfo.employee_detail.dept_list.length>0">
+								<span v-for="(item, index) in scope.row.userInfo.employee_detail.dept_list" :key="index">
+									{{ item.dept_name }}<span v-if="scope.row.userInfo.employee_detail.dept_list.length - index > 1">,</span>
+								</span>
+							</div> -->
+						</div>
+					</div>
+				  </template>
+			</el-table-column>
+			<el-table-column prop="name" min-width="300" label="奖票事件">
+			  <template slot-scope="scope">
+				 <span>{{scope.row.remark.customize||scope.row.remark.rule}}</span>
+			  </template>
+			</el-table-column>
+			<el-table-column prop="ct" label="事件时间" width="100">
+				<template slot-scope="scope">
+					<span>{{$moment(scope.row.date+'').format("YYYY-MM-DD")}}</span>
+				</template>
+			</el-table-column>
+			<el-table-column label="操作" align="right">
+			  <template slot-scope="scope">
+				 <el-link type="primary" :underline="false" @click="openDetail(scope.row)">查看详情</el-link>
+			  </template>
+			</el-table-column>
+			<template slot="empty">
+				<noData></noData>
+			</template>
+        </el-table>
+        <center style="padding: 20px 0;">
+          <el-pagination background  @size-change="handleSizeChange" @current-change="handleCurrentChange"  :current-page="page" 
+		  :page-sizes="[10, 20, 50, 100]"  layout="total, sizes, prev, pager, next" :page-size="page_size"  :total="total"> 
+		  </el-pagination>
+        </center>
+      </div>
+    </div>
+  
+	<!-- 检查单详情 -->
+	<BrawerBox :showDrawer.sync="isShowDetail"  drawerTitle="奖票详情">
+	  <template slot="main">
+	    <div>
+	      <div class="flex-box-v">
+	        <div class="message-box">
+	          <div class="flex-box-ce">
+	            <div class="fontColorC">奖票对象</div>
+	            <div class="flex-1">{{detail.employee_name}}</div>
+	          </div>
+			  <div class="flex-box-ce">
+				<div class="fontColorC">事件时间</div>
+				<div class="flex-1">{{$moment(detail.date+'').format("YYYY-MM-DD")}}</div>
+			  </div>
+			  <div class="flex-box-ce">
+				<div class="fontColorC">发放人</div>
+				<div class="flex-1">{{detail.publisher_name||'--'}}</div>
+			  </div>
+			  <div class="flex-box-ce">
+				<div class="fontColorC">发放时间</div>
+				<div class="flex-1">{{detail.ct}}</div>
+			  </div>
+			  <div class="flex-box-ce">
+			    <div class="fontColorC">奖票事件</div>
+			    <div class="flex-1">{{detail.remark.customize||detail.remark.rule}}</div>
+			  </div>
+			</div>
+	      </div>
+	      <div class="message-box" v-if="detail.event">
+			 <div style="font-size: 16px;margin-bottom: 20px;">对应积分事件</div>
+			 <div class="flex-box" @click="open_detail()" style="cursor: pointer;background-color: rgb(248, 252, 255);margin-bottom: 14px;position: relative;padding: 8px;border-radius: 5px;">
+				 <div class="flex-1" style="padding-right: 20px;">
+					 {{detail.event.remark.customize||detail.event.remark.rule}}
+				 </div>
+				 <div class="red" v-if="detail.event.point>0">+{{detail.event.point}} {{detail.event.pt_id==3? 'B分':'A分'}}</div>
+				 <div class="green" v-else>{{detail.event.point}} {{detail.event.pt_id==3? 'B分':'A分'}}</div>
+			 </div>
+	      </div>
+	    </div>
+	  </template>
+	  <template slot="footer">
+	      <el-button type="danger" plain @click="deleteItem" v-if="detail.publisher_id==$getUserData().id||($supremeAuthority()!='dept_manager'&&$supremeAuthority()!='employee')">{{detail.publisher_id==$getUserData().id ?'撤回奖票':'删除奖票'}}</el-button>
+	      <div class="flex-1"></div>
+	      <el-button  plain @click="isShowDetail=false">关 闭</el-button>
+	  </template>
+	</BrawerBox>
+	<el-drawer title="事件详情" :visible.sync="detail_popup" ref="drawer" :with-header="false" :width="'500px'" direction="rtl">
+			<div class="drawer_title flex-box-ce">
+				<span class="flex-1">事件详情</span>
+				<i  @click="detail_popup=false" style="cursor: pointer;" class="el-icon-close"></i>
+			</div>
+			<div class="detail_popup" v-loading="detail_loading" v-if="detail_info !== null">
+				<el-row style="padding-bottom:10px;border-bottom:1px #f8f8f8 solid;">
+					<div class="flex-box flex-v-ce">
+						<userImage :user_name="detail_info.employee_name" :img_url="detail_info.img_url" width="50px" height="50px" fontSize="1"></userImage>
+						<span style="font-size: 18px;line-height:50px; margin-left:10px;margin-right:4px;">{{ detail_info.employee_name }}</span>
+						<span class="red point" v-if="detail_info.point >= 0">+{{ detail_info.point }} {{ point_name(detail_info.pt_id) }}</span>
+						<span class="green point" v-if="detail_info.point < 0">{{ detail_info.point }} {{ point_name(detail_info.pt_id) }}</span>
+					</div>
+				</el-row>
+				<el-row >
+					<el-col :span="6">事件内容</el-col>
+					<el-col :span="18" v-if="detail_info.remark">{{ detail_info.remark && (detail_info.remark.customize || detail_info.remark.rule) }}</el-col>
+				</el-row>
+				<el-row v-show="detail_info.files && detail_info.files.length > 0">
+					<el-col :span="18" :offset="6">
+						<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>
+				<el-row v-show="detail_info.rule_list">
+					<el-col :span="6">规则分类</el-col>
+					<el-col :span="18">{{ detail_info.rule_list }}</el-col>
+				</el-row>
+				<el-row v-show="detail_info.source_type_mark">
+					<el-col :span="6">来源类型</el-col>
+					<el-col :span="18">{{ detail_info.source_type_mark }}</el-col>
+				</el-row>
+				<el-row v-show="detail_info.recorder_name">
+					<el-col :span="6">记录人</el-col>
+					<el-col :span="18">{{ detail_info.recorder_name }}</el-col>
+				</el-row>
+				<el-row v-show="detail_info.date">
+					<el-col :span="6">事件时间</el-col>
+					<el-col :span="18">{{ detail_info.date }}</el-col>
+				</el-row>
+				<el-row v-show="detail_info.complete_task.time">
+					<el-col :span="6">完成时间</el-col>
+					<el-col :span="18">{{ detail_info.complete_task.time }}</el-col>
+				</el-row>
+				<el-row v-show="detail_info.complete_task.remark">
+					<el-col :span="6">完成备注</el-col>
+					<el-col :span="18">{{ detail_info.complete_task.remark }}</el-col>
+				</el-row>
+				<el-row v-show="detail_info.complete_task && detail_info.complete_task.files && detail_info.complete_task.files.length > 0">
+					<el-col :span="18" :offset="6">
+						<el-image
+							v-for="(itme, index) in detail_info.complete_task.files"
+							:key="index"
+							style="width: 80px; height: 80px;margin: 0 5px;"
+							:src="itme"
+							:preview-src-list="detail_info.complete_task.files"
+						></el-image>
+					</el-col>
+				</el-row>
+				<div v-show="detail_info.rule_id">
+					<p class="row_title">规则依据</p>
+					<el-row>
+						<el-col :span="6">规则分类</el-col>
+						<el-col :span="18">{{ detail_info.rule_list }}</el-col>
+					</el-row>
+					<el-row v-show="detail_info.remark.rule">
+						<el-col :span="6">积分规则</el-col>
+						<el-col :span="18">{{ detail_info.remark.rule }}</el-col>
+					</el-row>
+					<el-row>
+						<el-col :span="6">积分</el-col>
+						<el-col :span="18" v-show="detail_info.rule_item.min_point == detail_info.rule_item.max_point">{{ detail_info.rule_item.min_point }} {{ point_name(detail_info.pt_id) }}</el-col>
+						<el-col :span="18" v-show="detail_info.rule_item.min_point != detail_info.rule_item.max_point">
+							{{ detail_info.rule_item.min_point }} ~ {{ detail_info.rule_item.max_point }} {{ point_name(detail_info.pt_id) }}
+						</el-col>
+					</el-row>
+				</div>
+				<div v-show="detail_info.process"><Steps :process="detail_info.process"></Steps></div>
+				<div v-show="detail_info.dc_remark.flow"><Review :process="detail_info.dc_remark.flow" :status="detail_info.dc_status"></Review></div>
+			</div>
+			<div  style="position: absolute; bottom: 20px;right: 20px;left: 20px;" class="flex-box-ce">
+				<!-- <el-button type="primary" v-if="!detail_info.has_ticket" @click="deleteInBatches({id:detail_info.event_id},true)">发放奖票</el-button> -->
+				<!-- <el-button type="primary" v-else @click="openDetail({id:detail_info.event_id})">查看奖票</el-button> -->
+				<div class="flex-1"></div>
+				<el-button @click="detail_popup=false">取消</el-button>
+			</div>
+	</el-drawer>
+  </div>
+</template>
 <script>
+import {_debounce} from '@/api/auth';
+import moment from 'moment' // 时间库
+import Steps from '@/components/Steps';
+import Review from '@/components/Review';
+import toLead from '@/components/toLead';
+export default {
+  components:{Steps,Review,toLead},
+  data() {
+    return {
+	  pickerOptions: {
+		shortcuts: [
+			{
+				text: '今天',
+				onClick(picker) {
+					const now = new Date(new Date().toLocaleDateString());
+					const start = now.getTime();
+					picker.$emit('pick', [moment(start).format('YYYY-MM-DD'), moment(start).format('YYYY-MM-DD')]);
+				}
+			},
+			{
+				text: '昨天',
+				onClick(picker) {
+					const now = new Date(new Date().toLocaleDateString());
+					const start = now.getTime() - 60 * 60 * 24 * 1000;
+					picker.$emit('pick', [moment(start).format('YYYY-MM-DD'),moment(start).format('YYYY-MM-DD')]);
+				}
+			},
+			{
+				text: '本周',
+				onClick(picker) {
+					const now = new Date(new Date().toLocaleDateString());
+					const start = now.getTime() - (now.getDay() - 1) * 24 * 60 * 60 * 1000;
+					const end = start + 7 * 24 * 60 * 60 * 1000 - 1000;
+					picker.$emit('pick', [moment(start).format('YYYY-MM-DD'), moment(end).format('YYYY-MM-DD')]);
+				}
+			},
+			{
+				text: '上周',
+				onClick(picker) {
+					const now = new Date(new Date().toLocaleDateString());
+					const start = now.getTime() - (now.getDay() + 6) * 24 * 60 * 60 * 1000;
+					const end = start + 7 * 24 * 60 * 60 * 1000 - 1000;
+					picker.$emit('pick', [moment(start).format('YYYY-MM-DD'), moment(end).format('YYYY-MM-DD')]);
+				}
+			},
+			{
+				text: '本月',
+				onClick(picker) {
+				const now = new Date();
+					const startDate = new Date(now.getFullYear(), now.getMonth(), 1);
+					const endDate = new Date(now.getFullYear(), now.getMonth() + 1, 0);
+					picker.$emit('pick', [moment(startDate.getTime()).format('YYYY-MM-DD'), moment(endDate.getTime()).format('YYYY-MM-DD')]);
+				}
+			},
+			{
+				text: '上月',
+				onClick(picker) {
+					const now = new Date();
+					const startDate = new Date(now.getFullYear() - (now.getMonth() > 0 ? 0 : 1), (now.getMonth() + 11) % 12, 1);
+					const endDate = new Date(now.getFullYear(), now.getMonth(), 0);
+					picker.$emit('pick', [moment(startDate.getTime()).format('YYYY-MM-DD'), moment(endDate.getTime()).format('YYYY-MM-DD')]);
+				}
+			},
+			{
+				text: '本季',
+				onClick(picker) {
+					const quarter=Math.ceil((new Date().getMonth()+1)/3)
+					let str=moment().format(`YYYY-${(quarter-1)*3+1}-01`);
+					let ent=moment(moment().format(`YYYY-${(quarter-1)*3+1}-01`)).add(2,`month`).endOf('month').format("YYYY-MM-DD");
+					console.log(str,ent)
+					picker.$emit('pick',[str,ent]);
+				}
+			},
+			{
+				text: '本年',
+				onClick(picker) {
+					let year=moment().format('YYYY');
+					picker.$emit('pick', [year+'-01-01',year+'-12-31']);
+				}
+			},
+		],
+	  },		
+      loading: false,
+      list: null,
+	  formData: {
+	    keyword: "",
+		employee_id:'',
+	    publisher_id: this.$getUserData().id,
+	  },
+	  page:1,
+	  page_size:10,
+      total: 0,
+      employee_map: [],
+	  date:'',
+	  
+	  isShowDetail:false,
+	  detail:{remark:{},event:{remark:{}},date:''},
+	  selectItem:{},
+	  
+	  detail_info: {complete_task:{},remark:{},rule_item:{},dc_remark:{},pt_id:3},
+	  detail_popup: false,
+	  detail_loading: false,
+	  
+    };
+  },
+  watch: {
+	'formData.keyword': {
+	  deep: true,
+	  handler: _debounce(function(val) {
+		  this.getUserAwardList();
+	  },1000)
+	},
+    date(val) {
+      this.getUserAwardList();
+    },
+	'formData.employee_id'(){
+	  this.getUserAwardList();
+	}
+  },
+  mounted() {
+	this.employee_map = this.$getCache('userList');
+    this.getUserAwardList();
+  },
+  methods: {
+	point_name(id) {
+		let point_types=this.$getTyps();
+		return point_types.find(item => {
+			if (item.id == id) {
+				return item.name;
+			}
+		}).name;
+	},
+	 open_detail() {
+	 	this.detail_popup = true;
+	 	let data = {event_id:this.detail.event_id};
+	 	this.detail_loading = true;
+	 	this.$axios('get', '/api/integral/statistics/integral/info',data).then(res => {
+	 		this.detail_info = res.data.data;
+	 	}).finally(() => {
+	 		this.detail_loading = false;
+	 	});
+	 }, 
+	deleteItem(){
+		this.$confirm(`确定${this.detail.publisher_id==this.$getUserData().id? '撤回':'删除'}此奖票?`, '提示', {
+			confirmButtonText: '确定',
+			cancelButtonText: '取消',
+			type: 'warning'
+		}).then(() => {
+			this.$axios("post", "/api/integral/ticket/del",{id:this.detail.id}).then(res => {
+				this.$message.success(this.detail.publisher_id==this.$getUserData().id? "已撤回":'已删除');
+				this.getUserAwardList();
+				this.isShowDetail=false;
+			})
+		}).catch(() => {});
+	},
+	openDetail(item){
+		this.$axios("get", "/api/integral/ticket/info",{id:item.id}).then(res => {
+			this.detail=res.data.data;
+			this.isShowDetail=true;
+		})
+	},
+	getUserAwardList(is){
+		this.loading2 = true;
+		!is? this.page=1:'';
+		let formData={
+			page: this.page,
+			page_size: this.page_size,
+			employee_id:this.formData.employee_id||0,
+			publisher_id:this.formData.publisher_id,
+			keyword:this.formData.keyword,
+		}
+		if(this.date){
+			formData.start_date=moment(this.date[0]).format('YYYY-MM-DD')
+			formData.end_date=this.date[1]
+		}
+		
+		this.$axios("get", "/api/integral/ticket", formData,'v2').then(res => {
+		  let list = res.data.data.list;
+		  this.list = list;
+		  this.total = res.data.data.total;
+		}).finally(() => {
+			this.loading2 = false;
+		});
+	},
+	// 页面变更
+	handleCurrentChange(val) {
+	  this.page = val;
+	  this.getUserAwardList(true);
+	},
+	// 页面跳转
+	handleSizeChange(val) {
+	  this.page_size = val;
+	  this.getUserAwardList();
+	},
+  }
+};
 </script>
 
-<style>
-</style>
+<style scoped lang="scss">
+	.drawer_title {
+		font-size: 18px;
+		padding: 20px;
+		border-bottom: 1px #efefef solid;
+	}
+	.detail_popup {
+		padding: 20px;
+		height: calc(100vh - 140px);
+		overflow: auto;
+		padding-bottom: 100px;
+		.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;
+			}
+		}
+	}
+  .message-box .label{
+    font-size: 18px;
+    font-weight: 600;
+    margin-bottom: 20px;
+  }
+  .message-box .flex-box-ce{
+    margin-bottom:16px ;
+  }
+  .message-box .fontColorC{
+    width: 100px;
+  }
+.el-date-editor.el-input {
+  width: auto;
+}
+.date-picker-width {
+  width: 145px !important;
+}
+.search ::v-deep .el-input-group__append{
+  background: #FFF;
+}
+.search ::v-deep .el-input-group__append:active {
+  background: #26a2ff;
+}
+.search ::v-deep .el-input-group__append:active .el-icon-search {
+  color: #fff;
+}
+  .all{
+    margin-top:10px;
+    padding:10px 20px 0px 20px;
+    min-height: calc(100vh - 204px);
+    
+  }
+</style>
+

+ 332 - 97
src/views/award/print.vue

@@ -1,61 +1,87 @@
 <template>
 	<div>
+		<div class="diy_tip_bg">
+		  <el-alert class="diy-tip" type="success" description>
+		    <p><b>使用说明:</b></p>
+		    <div class="headLi">1、参考“奖票示例”制作好实体奖票模版(最大尺寸22*9cm)</div>
+		    <div class="headLi">2、前往【打印配置】调整对应文本的打印位置</div>
+		    <div class="headLi">3、连接打印机,勾选对应的奖票进行打印</div>
+			<div class="headLi">4、打印成功后,标识对应的奖票“已打印”</div>
+		  </el-alert>
+		</div>
 		<div>
 			<div ref="print" v-if="isPrint">
-				<div v-for="(item,index) in selectionItems" :key="item.id" style="width: 100%;height: 100%;">
+				<div v-for="(item,index) in selectionItems2" :key="item.id" style="width: 100%;height: 100%;">
 					<div :style="{width:printW+'cm',height:printH+'cm'}" style="position: relative;">
-						
-						
-						<template v-for="item in inputs">
-							<div class="input-item" :style="{left:item.x+'cm',top:item.y+'cm',width:item.w? item.w+'cm':'auto'}" style="z-index: 2;height: 2.33rem;">
-								 {{item.name}}
+						<template v-for="(e,index2) in item">
+							<div class="input-item" :style="{left:e.x+'cm',top:e.y+'cm',width:e.w? e.w+'cm':'auto',height:e.id==2? '2.33rem':'auto'}" style="z-index: 2;">
+								 {{e.val}}
 							</div>
 						</template>
-						
 					</div>
 				</div>
 			</div>
 		</div>
 		<div class="all padding-20">
-			<el-form :inline="true" label-width="60px">
-				<el-form-item label="时间">
-					<el-date-picker
-						size="medium"
-						v-model="formData.time_range"
-						type="daterange"
-						value-format="yyyy-MM-dd"
-						range-separator="至"
-						:clearable="false"
-						start-placeholder="开始日期"
-						end-placeholder="结束日期"
-						:picker-options="instantPickerOptions"
-					></el-date-picker>
+			<el-form :inline="true" label-width="80px">
+				<el-form-item>
+					<el-select size="medium" v-model="selectType" placeholder="请选择分类" style="width: 100px;">
+						<el-option label="部门" :value="1"></el-option>
+						<el-option label="人员" :value="2"></el-option>
+					</el-select>
 				</el-form-item>
-				<el-form-item label="部门">
+				<el-form-item>
 					<el-cascader
+						v-if="selectType==1"
 						size="medium"
+						style="width: 300px;"
 						v-model="dept_name"
 						:options="dept_tree"
-						:props="{ checkStrictly: true, value: 'id', label: 'name', children: '_child' }"
+						:props="{ multiple: true,value: 'id', label: 'name', children: '_child' }"
 						ref="dept"
+						collapse-tags
 						clearable
 						filterable
 						placeholder="全公司"
 					></el-cascader>
-				</el-form-item>
-				<el-form-item label="人员">
-					<el-select style="width: 300px;" size="medium" multiple  v-model="employeeId" placeholder="请输入或选择人员">
+					<el-select v-else size="medium" style="width: 300px;" filterable multiple clearable  v-model="formData.employee_id" placeholder="请输入或选择人员">
 						<el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
 					</el-select>
 				</el-form-item>
+				<el-form-item label="时间">
+					<el-date-picker
+						size="medium"
+						v-model="time_range"
+						type="daterange"
+						value-format="yyyy-MM-dd"
+						range-separator="至"
+						start-placeholder="开始日期"
+						end-placeholder="结束日期"
+						:picker-options="instantPickerOptions"
+					></el-date-picker>
+				</el-form-item>
+				<el-form-item label="打印状态">
+					<el-select size="medium" v-model="formData.has_print">
+						<el-option v-for="item in source_type" :key="item.id" :label="item.name" :value="item.id"></el-option>
+					</el-select>
+				</el-form-item>
+				<el-form-item>
+					<el-input v-model="formData.keyword" size="medium" clearable placeholder="内容搜索" maxlength="20"></el-input>
+				</el-form-item>
 			</el-form>
-			<div  class="flex-box-end">
-				<el-button size="small" @click="dialogVisible=true"  plain type="primary">打印配置</el-button>
-				<el-button size="small"  type="primary" @click="printFn">打印</el-button>
+			<div class="flex-box-ce">
+				<el-button size="small" @click="printFn"  type="primary">打印当前已选中的奖票</el-button>
+				<div class="flex-1"></div>
+				<el-popover placement="top-end" width="640" trigger="click">
+				  <div><img src="@/assets/image/09.png" style="width: 100%;"/></div>
+				  <div class="blue cursor" slot="reference"  style="margin-right: 10px;cursor: pointer;">奖票示例</div>
+				</el-popover>
+				<el-button size="small"  type="primary" plain @click="dialogVisible=true">打印配置</el-button>
+				<el-button size="small"  type="primary" plain @click="openPrint">批量修改状态</el-button>
 			</div>
 			<el-table :data="list" style="width: 100%;cursor: pointer;" v-loading="loading" @selection-change="deleteEvents">
 				<el-table-column width="50" type="selection"></el-table-column>
-				<el-table-column label="姓名" align="left">
+				<el-table-column label="姓名" align="left" width="250px">
 					<template slot-scope="scope">
 						<div class="flex-box">
 							<userImage :user_name="scope.row.employee_name" :img_url="scope.row.employee_img_url" width="50px" height="50px"></userImage>
@@ -63,14 +89,21 @@
 						</div>
 					</template>
 				</el-table-column>
-				<el-table-column show-overflow-tooltip label="部门" align="left" min-width="120px" prop="deptName"></el-table-column>
-				<el-table-column label="奖票事件" align="left" prop="point"></el-table-column>
-				<el-table-column label="积分" align="left" prop="point"></el-table-column>
-				<el-table-column label="奖票时间" align="left" prop="point"></el-table-column>
-				<el-table-column label="发放人" align="left" prop="point"></el-table-column>
-				<el-table-column label="状态">
+				<el-table-column label="部门" align="left" width="250px" prop="employee_dept"></el-table-column>
+				<el-table-column label="奖票事件" align="left" prop="point">
 					<template slot-scope="scope">
-						<span  class="blue" style="cursor: pointer;">查看详情</span>
+						<span >{{scope.row.remark.customize||scope.row.remark.rule}}</span>
+					</template>
+				</el-table-column>
+				<el-table-column label="事件时间" align="left" prop="dateStr"  width="130"></el-table-column>
+				<el-table-column label="发放人" align="left" prop="publisher_name"  width="130">
+					
+				</el-table-column>
+				<el-table-column label="状态" width="160">
+					<template slot-scope="scope">
+						<span  class="green" v-if="scope.row.has_print">已打印</span>
+						<span  class="fontColorC"  v-else>未打印</span>
+						<el-switch style="padding-left: 10px;" @change="changePrint($event,scope.row)" v-model="scope.row.has_print" :active-value="1" :inactive-value="0"></el-switch>
 					</template>
 				</el-table-column>
 				<template slot="empty">
@@ -94,19 +127,19 @@
 			</center>
 		</div>
 		<!-- 打印配置 -->
-		<el-dialog title="打印配置" :visible.sync="dialogVisible" width="900px">
+		<el-dialog title="打印配置" :visible.sync="dialogVisible" width="900px" :close-on-press-escape="false" :close-on-click-modal	="false">
 			<div class="flex-box-ce">
 				<div class="flex-box-ce flex-1">
 					<div class="input-item" :class="selectInput.id==item.id? 'activeInput':''"  @click="selectInput=item" style="margin-right: 10px;position: relative;" v-for="item in inputs" :key="item.id">{{item.name}}</div>
 				</div>
 				<div class="flex-box-ce">
 					<div class="flex-box-ce">
-						<div class="label">奖票</div>
+						<div class="label">奖票</div>
 						<el-input style="width: 60px;" size="small" v-model="printW" @input="[checkCountry($event, 1),(printW = printW.match(/\d+(\.\d{0,1})?/) ? printW.match(/\d+(\.\d{0,1})?/)[0] : '')]"></el-input>
 						<span style="font-size: 12px;position: relative;top: 5px;left: 5px;">cm</span>
 					</div>
 					<div class="flex-box-ce" style="margin-left: 30px;">
-						<div class="label">奖票</div>
+						<div class="label">奖票</div>
 						<el-input style="width: 60px;" size="small" v-model="printH" @input="[checkCountry($event, 2),(printH = printH.match(/\d+(\.\d{0,1})?/) ? printH.match(/\d+(\.\d{0,1})?/)[0] : '')]"></el-input>
 						<span style="font-size: 12px;position: relative;top: 5px;left: 5px;">cm</span>
 					</div>
@@ -115,7 +148,7 @@
 			<div class="flex-box-ce" style="margin: 20px 0;">
 				<div class="flex-box-ce">
 					<div class="label">X</div>
-					<el-input style="width: 60px;" size="small" v-model.number="selectInput.x" @input="[checkCountry($event, 3),(selectInput.x = selectInput.x.match(/\d+(\.\d{0,1})?/) ? selectInput.x.match(/\d+(\.\d{0,1})?/)[0] : '')]"></el-input>
+					<el-input style="width: 60px;" size="small" v-model="selectInput.x" @input="[checkCountry($event, 3),(selectInput.x = selectInput.x.match(/\d+(\.\d{0,1})?/) ? selectInput.x.match(/\d+(\.\d{0,1})?/)[0] : '')]"></el-input>
 					<span style="font-size: 12px;position: relative;top: 5px;left: 5px;">cm</span>
 				</div>
 				<div class="flex-box-ce" style="margin-left: 20px;">
@@ -124,24 +157,24 @@
 					<span style="font-size: 12px;position: relative;top: 5px;left: 5px;">cm</span>
 				</div>
 				<div class="flex-box-ce" style="margin-left: 20px;" v-if="selectInput.id==2">
-					<div class="label"></div>
+					<div class="label"></div>
 					<el-input style="width: 60px;" size="small" v-model="selectInput.w" @input="[checkCountry($event, 5),(selectInput.w = selectInput.w.match(/\d+(\.\d{0,1})?/) ? selectInput.w.match(/\d+(\.\d{0,1})?/)[0] : '')]"></el-input>
 					<span style="font-size: 12px;position: relative;top: 5px;left: 5px;">cm</span>
 				</div>
 				<div class="flex-1"></div>
-				<el-popover placement="top-end" width="800" trigger="hover">
-				  <div><img src="@/assets/image/321.jpg" style="width: 100%;"/></div>
-				  <div class="blue cursor" slot="reference">检查单示例</div>
+				<el-popover placement="top-end" width="640" trigger="click">
+				  <div><img src="@/assets/image/09.png" style="width: 100%;"/></div>
+				  <div class="blue" slot="reference" style="cursor: pointer;">奖票示例</div>
 				</el-popover>
-				
+				<el-button type="primary" plain size="small" icon="el-icon-refresh-right" style="margin-left: 10px;" @click="reset">重置参数</el-button>
 			</div>
 			<div style="width: 100%;height: 10cm;background-color: #f1f1f1;position: relative;">
 				<div :style="{width:printW+'cm',height:printH+'cm'}" style="position:relative;background-color: #fff;margin: 0 auto;top: 50%;transform: translate(0, -50%);">
 					<template v-for="item in inputs">
-						<div class="input-item" style="height: 2.33rem;" v-if="item.id==2" :class="{activeInput:item.id==selectInput.id}" :style="{left:item.x+'cm',top:item.y+'cm',width:item.w? item.w+'cm':'auto'}">
+						<div @click="selectInput=item" class="input-item" style="height: 2.33rem;" v-if="item.id==2" :class="{activeInput:item.id==selectInput.id}" :style="{left:item.x+'cm',top:item.y+'cm',width:item.w? item.w+'cm':'auto'}">
 							 {{item.name}}
 						</div>
-						<div v-else class="input-item" :class="{activeInput:item.id==selectInput.id}" :style="{left:item.x+'cm',top:item.y+'cm',width:item.w? item.w+'cm':'auto'}">
+						<div v-else @click="selectInput=item" class="input-item" :class="{activeInput:item.id==selectInput.id}" :style="{left:item.x+'cm',top:item.y+'cm',width:item.w? item.w+'cm':'auto'}">
 							 {{item.name}}
 						</div>
 					</template>
@@ -149,7 +182,7 @@
 			</div>
 			<span slot="footer" class="dialog-footer">
 				<el-button @click="dialogVisible = false" size="medium">取 消</el-button>
-				<el-button type="primary" @click="sumbit" size="medium">保 持</el-button>
+				<el-button type="primary" @click="sumbitConfig" size="medium">保 存</el-button>
 			</span>
 		</el-dialog>
 		
@@ -159,11 +192,28 @@
 			</div>
 			<div style="margin-top: 10px;text-align: center;color: #666;">请使用钉钉APP扫描二维码</div>
 		</el-dialog>
+		
+		<el-dialog :visible.sync="isShowPl" width="444px">
+			<div>
+				<div style="margin-bottom: 20px;">批量修改状态为:</div>
+				<template>
+				  <el-radio-group v-model="radio">
+					<el-radio :label="true">已打印</el-radio>
+					<el-radio :label="false">未打印</el-radio>
+				  </el-radio-group>
+				</template>
+			</div>
+			<span slot="footer" class="dialog-footer">
+				<el-button @click="isShowPl = false" size="medium">取 消</el-button>
+				<el-button type="primary" @click="sumbitPrint" size="medium">保 存</el-button>
+			</span>
+		</el-dialog>
 	</div>
 </template>
 <script>
 import moment from 'moment';
 import QRCode from 'qrcodejs2';
+import {_debounce} from '@/api/auth';
 export default {
 	data() {
 		return {
@@ -253,56 +303,207 @@ export default {
 			        }
 				}
 			},
+			selectType:1,
 			total:0,
 			page: 1,
 			page_size: 10,
+			time_range: null,
 			formData: {
-				dept_id: '0',
-				time_range: []
+				dept_ids: '0',
+				has_print:-1,
+				keyword:'',
+				start_date:'',
+				end_date:'',
+				employee_id:0,
 			},
 			dept_name: [],
 			dept_tree: [],
 			loading: false,
 			list:[],
+			source_type: [
+			  { id: -1, name: '全部' },
+			  { id: 1, name: '已打印' },
+			  { id: 0, name: '未打印' },
+			],
 			employee_map: this.$getCache('SET_EMPLOYEE_MAP'),
 			employeeId:[],
+			selectionID:[],
 			dialogVisible:false,
+			
+			// 打印配置
+			
 			printW:18,
 			printH:7.5,
 			inputs:{
-				name:{name:'姓名',x:1,y:1.4,w:0,id:1},
-				event:{name:'奖票事件',x:1,y:2.4,w:15,id:2},
-				point:{name:'积分分值',x:1,y:3.9,w:0,id:3},
-				name2:{name:'发放人',x:15,y:4.9,w:0,id:4},
-				date:{name:'奖票日期',x:15,y:5.9,w:0,id:5},
+				employee_name:{name:'姓名(部门)',x:1.8,y:2,w:0,id:1},
+				remark:{name:'奖票事件',x:1.8,y:3.2,w:14,id:2},
+				publisher_name:{name:'发放人',x:14.7,y:5,w:0,id:3},
+				year:{name:'年',x:11.8,y:6.2,w:0,id:4},
+				month:{name:'月',x:13.6,y:6.2,w:0,id:5},
+				day:{name:'日',x:15,y:6.2,w:0,id:6},
 			},
-			selectInput:{name:'姓名',x:1,y:1.4,w:0,id:1},
+			
+			selectInput:{name:'姓名(部门)',x:1.8,y:2,w:0,id:1},
 			innerVisible:false,
-			selectionItems:[1,2,3,4,5,6],
+			selectionItems:[],
+			selectionItems2:[],
 			isPrint:false,
+			
+			isShowPl:false,
+			radio:true,
 		};
 	},
 	watch: {
-		'formData.time_range'(){
-			this.selectBtn();
+		'formData.keyword': {
+		  deep: true,
+		  handler: _debounce(function(val) {
+			  this.get_list();
+		  },1000)
+		},
+		selectType(){
+			this.get_list();
+		},
+		'formData.employee_id'(){
+			this.get_list();
+		},
+		'formData.has_print'(){
+			this.get_list();
+		},
+		time_range(val){
+			this.get_list();
 		},
 		dept_name(val) {
 			if (val.length !== 0) {
-				this.formData.dept_id = val[val.length - 1];
+				let dept_ids=[];
+				val.forEach((item)=>{
+					dept_ids.push(...item);
+				})
+				let set =new Set(dept_ids);
+				this.formData.dept_ids = [...set];
 			} else {
-				this.formData.dept_id = 0;
+				this.formData.dept_ids = 0;
 			}
 			this.employeeId=[];
 			this.$nextTick(() => {
-				this.$refs.dept.dropDownVisible = false;
-				this.getEmployeeList();
-				this.selectBtn();
+				this.get_list();
 			});
 		},
+		dialogVisible(val){
+			if(val){
+				let siteConfig=this.$getCache('siteConfig');
+				if(siteConfig.ticket_template){
+					let ticket_template=JSON.parse(siteConfig.ticket_template);
+					this.selectInput=ticket_template.inputs.employee_name
+					this.printW=ticket_template.printW;
+					this.printH=ticket_template.printH;
+					this.inputs=ticket_template.inputs;
+				}
+			}
+		}
 	},
 	methods: {
+		reset(){
+			this.selectInput={name:'姓名(部门)',x:1.8,y:2,w:0,id:1};
+			this.printW=18;
+			this.printH=7.5;
+			this.inputs={
+				employee_name:{name:'姓名(部门)',x:1.8,y:2,w:0,id:1},
+				remark:{name:'奖票事件',x:1.8,y:3.2,w:14,id:2},
+				publisher_name:{name:'发放人',x:14.7,y:5,w:0,id:3},
+				year:{name:'年',x:11.8,y:6.2,w:0,id:4},
+				month:{name:'月',x:13.6,y:6.2,w:0,id:5},
+				day:{name:'日',x:15,y:6.2,w:0,id:6},
+			};
+		},
+		sumbitConfig(is){
+			let template={};
+			if(is){
+				template={
+					printW:this.printW,
+					printH:this.printH,
+					inputs:JSON.parse(JSON.stringify(this.inputs))
+				}
+			}else{
+				template={
+					printW:18,
+					printH:7.5,
+					inputs:{
+						employee_name:{name:'姓名(部门)',x:1.8,y:2,w:0,id:1},
+						remark:{name:'奖票事件',x:1.8,y:3.2,w:14,id:2},
+						publisher_name:{name:'发放人',x:14.7,y:5,w:0,id:3},
+						year:{name:'年',x:11.8,y:6.2,w:0,id:4},
+						month:{name:'月',x:13.6,y:6.2,w:0,id:5},
+						day:{name:'日',x:15,y:6.2,w:0,id:6},
+					},
+				}
+			}
+			this.$axios('post', 'api/integral/ticket/template',{template:JSON.stringify(template)}).then(res => {
+					if(is){
+						this.$message.success("已设置")
+						this.dialogVisible=false;
+					}
+					this.cheakAx();
+			});
+		},
+		openPrint(){
+			if(this.selectionID.length==0){
+				this.$message.error("请选择奖票")
+				return false
+			}
+			this.isShowPl = true;
+		},
+		sumbitPrint(){
+			this.$axios('post', 'api/integral/ticket/mark',{ids:this.selectionID.toString(),status:this.radio? 1:0}).then(res => {
+				this.$message.success("已修改")
+				this.isShowPl = false;
+				this.radio=true;
+				this.get_list();
+			});
+		},
+		changePrint(is,item){
+			this.$axios('post', 'api/integral/ticket/mark',{ids:item.id,status:is}).then(res => {
+				this.$message.success("已修改")
+				this.get_list();
+			});
+		},
 		printFn() {
+			if(this.selectionID.length==0){
+				this.$message.error("请选择奖票")
+				return false
+			}
 			//传入dom结构即可
+			let selectionItems=[];
+			this.selectionItems.map((item)=>{
+				let obj={}
+				for(let key in item){
+					if(key=='employee_name'){
+						obj.employee_name=JSON.parse(JSON.stringify(this.inputs.employee_name)) 
+						if(item.employee_dept){
+							obj.employee_name.val=item[key]+'('+item.employee_dept+')'
+						}else{
+							obj.employee_name.val=item[key]
+						}
+					}
+					if(key=='remark'){
+						obj.remark=JSON.parse(JSON.stringify(this.inputs.remark)) 
+						obj.remark.val=item[key].customize||item[key].rule
+					}
+					if(key=='publisher_name'){
+						obj.publisher_name=JSON.parse(JSON.stringify(this.inputs.publisher_name)) 
+						obj.publisher_name.val=item[key]||'--'
+					}
+					if(key=='dateStr'){
+						obj.year=JSON.parse(JSON.stringify(this.inputs.year)) 
+						obj.year.val=this.$moment(item[key]).format('YYYY')
+						obj.month=JSON.parse(JSON.stringify(this.inputs.month))
+						obj.month.val=this.$moment(item[key]).format('MM')
+						obj.day=JSON.parse(JSON.stringify(this.inputs.day))
+						obj.day.val=this.$moment(item[key]).format('DD')
+					}
+				}
+				selectionItems.push(obj)
+			})
+			this.selectionItems2 = selectionItems;
 			this.isPrint=true;
 			this.$nextTick(()=>{
 				this.$print(this.$refs.print);
@@ -356,35 +557,40 @@ export default {
 				return item.id;
 			});
 		},
-		selectBtn(){
-			this.page=1;
-			this.get_list();
-		},
 		getEmployeeList() {
-			this.$axios('get', '/api/employee/list', { dept_id: this.formData.dept_id }).then(res => {
+			this.$axios('get', '/api/employee/list').then(res => {
 				this.employee_map = res.data.data.list;
 			});
-		},
-		sumbit(){
-			
 		},
 		//请求数据
-		get_list() {
+		get_list(is) {
+			!is? this.page=1:'';
 			let data={
 				page:this.page,
-				page_size:this.page_size
+				page_size:this.page_size,
+				keyword:this.formData.keyword,
+				has_print:this.formData.has_print,
+				has_print:this.formData.has_print
 			};
+			if(this.selectType==1){
+				data.dept_ids=this.formData.dept_ids.toString();
+			}else{
+				data.employee_id=this.formData.employee_id.toString();
+			}
+			if(this.time_range){
+				data.start_date=this.$moment(this.time_range[0]).format('YYYY-MM-DD')
+				data.end_date=this.time_range[1]
+			}
 			this.loading = true;
-			this.$axios('get', '/api/integral/statistics/ranking', data, 'v2').then(res => {
-				this.labelName = this.formData.pt_id == 2 ? 'A分' : 'B分';
-				if (res.data.code == 1) {
-					this.list =this.$returnDeptName(res.data.data.list);
-					this.total = res.data.data.total;
-				} else {
-					this.$message.error(res.data.data.msg);
-				}
-			})
-			.finally(() => {
+			this.$axios('get', '/api/integral/ticket', data, 'v2').then(res => {
+				let list=res.data.data.list;
+				list.forEach(item=>{
+					item.dateStr=this.$moment(item.date+'').format('YYYY-MM-DD');
+					
+				})
+				this.list = list
+				this.total = res.data.data.total;
+			}).finally(() => {
 				this.loading = false;
 			});
 		},
@@ -410,16 +616,32 @@ export default {
 		},
 		// 页面变更
 		handleCurrentChange(val) {
-			this.page = val;
-			this.get_list();
+		  this.page = val;
+		  this.get_list(true);
 		},
+		// 页面跳转
 		handleSizeChange(val) {
-			this.page = 1;
-			this.page_size = val;
-			this.get_list();
+		  this.page_size = val;
+		  this.get_list();
+		},
+		cheakAx() {
+			this.$axios('get', '/api/integral/site/config').then(res => {
+				this.$store.dispatch('setConfig', res.data.data);
+			})
 		},
 	},
 	created() {
+		let siteConfig=this.$getCache('siteConfig');
+		if(siteConfig.ticket_template){
+			let ticket_template=JSON.parse(siteConfig.ticket_template);
+			this.selectInput=ticket_template.inputs.employee_name
+			this.printW=ticket_template.printW;
+			this.printH=ticket_template.printH;
+			this.inputs=ticket_template.inputs;
+		}else{
+			this.sumbitConfig(false);
+		}
+			
 		if(this.$getToken()){
 			this.getEmployeeList();
 			this.getDepartment();
@@ -428,12 +650,31 @@ export default {
 		}
 	},
 	mounted() {
-		
-	    
+		this.get_list();
 	}
 };
 </script>
 <style scoped lang="scss">
+.diy_tip_bg {
+  background: #f5f6f9;
+  overflow: hidden;
+  .diy-tip {
+    margin-bottom: 10px;
+    border: 1px solid #67c23a;
+    padding: 20px 16px;
+    p {
+      color: #67c23a !important;
+      font-size: 15px;
+      margin: 0 !important;
+      padding-bottom: 4px;
+    }
+  }
+}
+.headLi {
+  padding: 4px;
+  list-style: disc;
+  font-size: 14px;
+}
 .print_img{
   width: 20cm;
   height: 10cm;
@@ -583,18 +824,12 @@ export default {
 		}
 	}
 }
-::v-deep .el-dialog {
-	// top: 21%;
-}
 .picker_er {
 	margin-top: 20px;
 }
 .el-range-editor--medium.el-input__inner {
 	width: 280px;
 }
-::v-deep .el-cascader .el-input .el-input__inner {
-	width: 150px;
-}
 .el-checkbox.is-bordered.el-checkbox--medium {
 	padding: 9px 20px 7px 10px;
 }

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

@@ -36,7 +36,7 @@
 									<span class="fontColorC">{{item.review_time}}</span>
 								</div>
 								<div class="record-content">
-									<pre class="pre fontColorC">{{ item.remark || '无备注' }}</pre>
+									<div class="pre fontColorC">{{ item.remark || '无备注' }}</div>
 								</div>
 							</div>
 						</div>

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

@@ -458,7 +458,7 @@ export default {
 			this.fileList = filtList
 			this.fileFun('', filtList)
 			// 指定了规则
-			console.log(this.modifyData.point_config)
+			// console.log(this.modifyData.point_config)
 			if(this.modifyData.point_config.item_info){
 				let itemInfo = this.modifyData.point_config.item_info
 				this.arr=[itemInfo.id];

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

@@ -98,7 +98,10 @@
 			</div>
 		</div>
 		<el-drawer title="事件详情" :visible.sync="detail_popup" ref="drawer" :with-header="false" :width="'500px'" direction="rtl">
-			<div class="drawer_title">事件详情</div>
+			<div class="drawer_title flex-box-ce">
+				<span class="flex-1">事件详情</span>
+				<i  @click="detail_popup=false" style="cursor: pointer;" class="el-icon-close"></i>
+			</div>
 			<div class="detail_popup" v-loading="detail_loading" v-if="detail_info !== null">
 				<el-row style="padding-bottom:10px;border-bottom:1px #f8f8f8 solid;">
 					<div class="flex-box flex-v-ce">

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

@@ -42,7 +42,7 @@
 							<Season ref="Seasons" :defaultHint="true" :isActive="true" class="date-picker-width" @confirm="export_quarter_confirm"></Season>
 						</el-form-item>
 						<el-form-item><el-checkbox v-model="sort" size="medium" label="由低到高" border></el-checkbox></el-form-item>
-						<el-button type="primary" @click="exportExcel"  size="medium">导 出</el-button>
+						<el-button type="primary" @click="exportExcel" v-if="table_list.length > 0"  size="medium">导 出</el-button>
 						<el-alert
 							v-if="lastUpdateTime != undefined || lastUpdateTime"
 							:title="
@@ -400,7 +400,7 @@ export default {
 					? this.time.year
 					: '';	
 			let str='&group_id='+data.group_id+'&date='+data.date+'&sort='+data.sort;
-			window.open(process.env.VUE_APP_BASE_API + 'api/download/groups_export?employee_id='+this.$getUserData().id+str, '_blank');
+			window.open(process.env.VUE_APP_BASE_API + 'api/download/groups_export/v2?employee_id='+this.$getUserData().id+str, '_blank');
 		},
 		submitEmployee() {
 			this.$refs.Employee.confirm(); //调用组件的confirm();
@@ -754,7 +754,7 @@ export default {
 		},
 		saveFun() {
 			let self = this;
-			self.saveLoad = true;
+			
 			let data = JSON.parse(JSON.stringify(self.newGroupForm));
 			if (!self.popupType) {
 				data.group_id = self.clickItem.id;
@@ -762,6 +762,11 @@ export default {
 			if(data.items.length==0){
 				data.items=this.valuesOrLength
 			}
+			if(data.employees.length==0){
+				this.$message.error("分组人员不能为空");
+				return false
+			}
+			self.saveLoad = true;
 			self.$axios('POST', this.popupType ? '/api/integral/statistics/groups/create' : '/api/integral/statistics/groups', data)
 				.then(res => {
 					if (res.data.code == 1) {
@@ -865,7 +870,7 @@ export default {
 					: this.newGroupForm.date_interval == '3'
 					? this.time.year
 					: '';
-			self.$axios('get', '/api/integral/statistics/groups/rank', data)
+			self.$axios('get', '/api/integral/statistics/groups/rank', data,'v2')
 				.then(res => {
 					if (res.data.code == 1) {
 						this.table_list =this.$returnDeptName(res.data.data.list);
@@ -896,9 +901,15 @@ export default {
 								if (item.employees.length == 0) {
 									data.push(item);
 								} else {
-									if (item.employees.indexOf(user.toString()) != -1) {
-										data.push(item);
-									}
+									item.employees.forEach(id=>{
+										if(id==user){
+											data.push(item);
+										}
+									})
+									
+									// if (item.employees.indexOf(user.toString()) != -1) {
+									// 	data.push(item);
+									// }
 								}
 							});
 							this.$nextTick(()=>{

+ 6 - 61
src/views/ranking/individual_statistics.vue

@@ -64,7 +64,7 @@
 							<el-col :gutter="50" style="margin:0;padding:0;" class="quick_button_box">
 								<div style="display:flex;justify-content: space-around;">
 									<p style="text-align:center;cursor:pointer;margin: 0;">
-										<b style="color:#26A2FF;font-size:27px;">{{ headDayBs.b ? headDayBs.b : '0' }}</b>
+										<b style="color:#26A2FF;font-size:27px;">{{ authorityManagerHeaders.b_today ? authorityManagerHeaders.b_today : '0' }}</b>
 										<br />
 										<span style="color:#606266;font-size:14px;padding-top:8px;display: inline-block;">今日B分</span>
 									</p>
@@ -79,13 +79,7 @@
 										<span style="color:#606266;font-size:14px;padding-top:8px;display: inline-block;">{{ yearhORmontStr }}度A分</span>
 									</p>
 									<p style="text-align:center;cursor:pointer;margin: 0;">
-										<b style="color:#26A2FF;font-size:27px;">
-											{{
-												authorityManagerHeaders.performance
-													? authorityManagerHeaders.performance.complete_count + '/' + authorityManagerHeaders.performance.total_count
-													: '0/0'
-											}}
-										</b>
+										<b style="color:#26A2FF;font-size:27px;">{{ authorityManagerHeaders.work_complete + '/' + authorityManagerHeaders.work_total}}</b>
 										<br />
 										<span style="color:#606266;font-size:14px;padding-top:8px;display: inline-block;">任务进度</span>
 									</p>
@@ -214,7 +208,7 @@
 														style="padding-left:10px;display:flex;flex-wrap:wrap;overflow: hidden;text-overflow: ellipsis;display: -webkit-box;-webkit-box-orient: vertical;-webkit-line-clamp: 1;"
 													>
 														<el-popover trigger="hover" placement="top" popper-class="popperSPBOX">
-															<div style="font-size:14px;color:#828282;">{{ scope.row.remark.customize || scope.row.remark.rule }}</div>
+															<div style="font-size:14px;color:#828282;max-width: 300px;">{{ scope.row.remark.customize || scope.row.remark.rule }}</div>
 															<div slot="reference" class="name-wrapper">
 																<span style="font-size:14px;color:#828282;">{{ scope.row.remark.customize || scope.row.remark.rule }}</span>
 															</div>
@@ -279,8 +273,7 @@ export default {
 			//人员详情
 			personnel: {},
 			authorityManagerHeaderLoad: false, //人员loading
-			authorityManagerHeaders: {}, //人员数据
-			headDayBs: {}, //人员数据 -天
+			authorityManagerHeaders: {work_complete:0,work_total:0}, //管理员头部 数据
 			personnelMessage: false, //人员信息loading
 
 			//饼图
@@ -346,61 +339,21 @@ export default {
 			this.formData.year = val;
 			this.executiveFunction();
 		},
-		// "formData.month"(val, old_val) {
-		//   this.executiveFunction();
-		//   console.log(this.formData);
-		// },
 		//不包含自动积分加分项
 		exclusiveMonthChecked() {
 			this.monthlyIntegral();
 		}
-
-		// select_employee_id(val) {
-		// 	this.formData.employee_id = val;
-		// 	this.executiveFunction(true);
-		// }
 	},
 	mounted() {
 		window.addEventListener('resize', this.selfAdaption);
 		this.getEmployee()
 			.then(res => {
-				// if (this.$getUserData()) {
-				// 	this.personnel = this.$getUserData();
-				// 	let dept_li = this.personnel.employee_detail.dept_list;
-				// 	let dept_ = '';
-				// 	for (let i in dept_li) {
-				// 		dept_ += dept_li[i].dept_name + ' ';
-				// 	}
-				// 	this.dept_list = dept_;
-				// } else {
-				// 	this.personnelDetails(); //获取人员详情
-				// }
 				this.formData.month = this.$moment().format('YYYY-MM');
 				this.executiveFunction();
 			})
 			.catch(err => {
 				console.log(err);
 			});
-		// if(JSON.parse(localStorage.getItem("SET_EMPLOYEE_MAP"))){
-		//   this.employee_map = JSON.parse(localStorage.getItem("SET_EMPLOYEE_MAP"))
-		// }else{
-		//   this.$store.dispatch('get_employee_map').then((res) => {
-		//     this.$nextTick(() => {
-		//       this.employee_map = JSON.parse(localStorage.getItem("SET_EMPLOYEE_MAP"))
-		//     })
-		//   })
-		// }
-		// if (this.$store.getters.user_info) {
-		//   this.personnel = this.$store.getters.user_info;
-		//   let dept_li = this.personnel.employee_detail.dept_list;
-		//   let dept_ = "";
-		//   for (let i in dept_li) {
-		//     dept_ += dept_li[i].dept_name + " ";
-		//   }
-		//   this.dept_list = dept_;
-		// } else {
-		//   this.personnelDetails(); //获取人员详情
-		// }
 	},
 	methods: {
 		selectEmployeeChange(val) {
@@ -410,7 +363,6 @@ export default {
 		getType(id) {
 			return this.$getTyps(id).name;
 		},
-
 		//获取员工列表
 		getEmployee() {
 			return new Promise((resolve, reject) => {
@@ -448,10 +400,6 @@ export default {
 								this.personnelDetails(); //获取人员详情
 							}
 						}
-						// this.employee_map = list;
-						// for(let i in list){
-
-						// }
 					})
 					.finally(err => {
 						this.personnelMessage = false;
@@ -464,7 +412,6 @@ export default {
 		selfAdaption() {
 			var myChart1 = this.$echarts.init(this.$refs.monthlyIntegralChart);
 			var myChart2 = this.$echarts.init(this.$refs.IntegralFormChart);
-			// myChart.setOption(option);
 			myChart1.resize();
 			myChart2.resize();
 		},
@@ -517,12 +464,10 @@ export default {
 				//年
 				params.year = this.formData.year;
 			}
-			let params1 = this.$axios('get', '/api/integral/statistics/', params, 'v2');
-			let params2 = this.$axios('get', '/api/integral/statistics/', { employee_id: this.formData.employee_id, day: this.$moment().format('YYYY-MM-DD') }, 'v2');
-			Promise.all([params1, params2])
+			let params1 = this.$axios('get', '/api/integral/statistics/', params, 'v3');
+			Promise.all([params1])
 				.then(res => {
 					this.authorityManagerHeaders = res[0].data.data;
-					this.headDayBs = res[1].data.data;
 				})
 				.finally(() => {
 					this.authorityManagerHeaderLoad = false;

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

@@ -165,7 +165,10 @@
 			</div>
 		</div>
 		<el-drawer title="事件详情" :visible.sync="detail_popup" ref="drawer" :with-header="false" :width="'500px'" direction="rtl">
-			<div class="drawer_title">事件详情</div>
+			<div class="drawer_title flex-box-ce">
+				<span class="flex-1">事件详情</span>
+				<i  @click="detail_popup=false" style="cursor: pointer;" class="el-icon-close"></i>
+			</div>
 			<div class="detail_popup" v-loading="detail_loading" v-if="detail_info !== null">
 				<el-row style="padding-bottom:10px;border-bottom:1px #f8f8f8 solid;">
 					<div class="flex-box flex-v-ce">

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

@@ -116,7 +116,10 @@
 			</div>
 		</div>
 		<el-drawer title="事件详情" :visible.sync="detail_popup" ref="drawer" :with-header="false" :width="'500px'" direction="rtl">
-			<div class="drawer_title">事件详情</div>
+			<div class="drawer_title flex-box-ce">
+				<span class="flex-1">事件详情</span>
+				<i  @click="detail_popup=false" style="cursor: pointer;" class="el-icon-close"></i>
+			</div>
 			<div class="detail_popup" v-loading="detail_loading" v-if="detail_info !== null">
 				<el-row style="padding-bottom:10px;border-bottom:1px #f8f8f8 solid;">
 					<div class="flex-box flex-v-ce">

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

@@ -109,12 +109,12 @@
 								<!-- <div v-else style="padding-left:21px">—</div> -->
 							</template>
 						</el-table-column>
-						<el-table-column label="人次目标" prop="deduct_count">
+						<el-table-column label="奖扣人次" prop="deduct_count">
 							<template slot-scope="scope">
 								<b>{{ scope.row.exec.count }}&nbsp;</b>
 								<span :class="scope.row.exec.status == 1 ? 'green' : ''">{{ scope.row.exec.status == 1 ? '达标' : '' }}</span>
 								<br />
-								<span class="span_h">人次目标 {{ scope.row.exec.target }}人次</span>
+								<span class="span_h">奖扣人次 {{ scope.row.exec.target }}人次</span>
 							</template>
 						</el-table-column>
 						<el-table-column>
@@ -412,6 +412,7 @@ export default {
 						this.exportExcelArr=list;
 					}else{
 						this.last = res.result.list;
+						console.log(this.last)
 						this.totals = res.result.total;
 						this.$nextTick(()=>{
 							this.loading2 = false;
@@ -497,6 +498,7 @@ export default {
 		},
 		//搜索框
 		search_box() {
+			this.condition.page = 1;
 			this.get_last();
 		},
 		//导出报表

+ 17 - 6
src/views/set/framework.vue

@@ -344,9 +344,10 @@
 		</el-dialog>
 		<!-- 未授权人员 -->
 		<el-drawer :visible.sync="showDrawerTow" :append-to-body="true" :with-header="false">
-		  <header class="drawer-header flex-box-ce">
-		    <span class="flex-1">未授权人员</span>
-		  </header>
+		  <div class="drawer-header flex-box-ce">
+		  	<span class="flex-1">未授权人员</span>
+		  	<i  @click="showDrawerTow=false" style="cursor: pointer;" class="el-icon-close"></i>
+		  </div>
 		  <div class="drawer-main">
 				<div class="flex-box-ce"><el-input prefix-icon="el-icon-search"  maxlength="10" show-word-limit  placeholder="人员搜索" clearable v-model="userName"></el-input></div>
 				<ul class="ul"  v-loading="tableToading2">
@@ -590,6 +591,7 @@ export default {
 		this.getEmployeeList();
 	},
 	mounted() {
+		console.log(this.$moment('2023-06').endOf('month').format('YYYY-MM-DD'))
 		this.$nextTick(function() {
 			if (this.$getCache('rule')) {
 				this.tips_show = false;
@@ -909,11 +911,20 @@ export default {
 		},
 		//导出规则按钮
 		derivedRule(){
-		  let status=this.status=='-1'? '':this.statu
+		  let status=this.status=='-1'? '':this.status
+		  let str='';
 		  if(status){
-			  var str='&is_official='+status+'&dept_id='+this.dept_id+'&keywords='+this.keywords;
+			  if(this.dept_id){
+				  str='&is_official='+status+'&dept_id='+this.dept_id+'&keywords='+this.keywords;
+			  }else{
+				  str='&is_official='+status+'&keywords='+this.keywords;
+			  }
 		  }else{
-			  var str='&dept_id='+this.dept_id+'&keywords='+this.keywords;
+			  if(this.dept_id){
+			  	str='&dept_id='+this.dept_id+'&keywords='+this.keywords;
+			  }else{
+			  	str='&keywords='+this.keywords;
+			  }
 		  }
 		  let userData=this.$getUserData();
 		  window.open(process.env.VUE_APP_BASE_API+'/api/download/employee_status_export?employee_id='+userData.id+str)

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

@@ -109,7 +109,10 @@
 		</div>
 
 		<el-drawer :custom-class="'drawer_details'" :visible.sync="completeShow" wrapperClosable :with-header="false" size="500px">
-			<div class="details_title">完成任务</div>
+			<div class="details_title flex-box-ce">
+				<span class="flex-1">完成任务</span>
+				<i  @click="completeShow=false" style="cursor: pointer;" class="el-icon-close"></i>
+			</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' }]">

+ 19 - 14
src/views/task/get_task.vue

@@ -78,8 +78,11 @@
 				></el-pagination>
 			</center>
 
-			<el-drawer title="我是标题" :custom-class="'drawer_details'" :visible.sync="detailShow" :with-header="false" size="500px">
-				<div class="details_title">任务详情</div>
+			<el-drawer  :custom-class="'drawer_details'" :visible.sync="detailShow" :with-header="false" size="500px">
+				<div class="details_title flex-box-ce">
+					<span class="flex-1">任务详情</span>
+					<i  @click="detailShow=false" style="cursor: pointer;" class="el-icon-close"></i>
+				</div>
 				<div class="details_content" v-loading="detail_loading">
 					<el-row style="padding-bottom:10px;border-bottom:1px #f8f8f8 solid;">
 						<el-col :span="24">
@@ -122,21 +125,21 @@
 							></el-image>
 						</el-col>
 					</el-row>
-					<!-- <el-row v-if="detailInfo.task_file_list !== null && detailInfo.task_file_list.length !== 0">
-						<el-col :span="20" :offset="4">
-							<el-image style="width: 100px; height: 100px" :src="detailInfo.task_file_list[0]" :preview-src-list="detailInfo.task_file_list"></el-image>
-						</el-col>
-					</el-row> -->
 
 					<el-row v-if="detailInfo.type_mark !== ''">
 						<el-col :span="4">任务类型</el-col>
 						<el-col :span="20">{{ detailInfo.type_mark }}</el-col>
 					</el-row>
 
-					<el-row v-if="$getTypsName(detailInfo.pt_id) !== ''">
-						<el-col :span="4">积分类型</el-col>
-						<el-col :span="20">{{ $getTypsName(detailInfo.pt_id) }}</el-col>
+					<el-row>
+						<el-col :span="4">任务积分</el-col>
+						<el-col :span="20">
+						<span class="red point" v-show="detailInfo.point_config.base_point >= 0">+{{ detailInfo.point_config.base_point }}</span>
+						<span class="green point" v-show="detailInfo.point_config.base_point < 0">{{ detailInfo.point_config.base_point }}</span>
+						
+						{{ $getTypsName(detailInfo.pt_id) }}</el-col>
 					</el-row>
+					
 					<el-row v-if="detailInfo.reviewer_name">
 						<el-col :span="4">审批人</el-col>
 						<el-col :span="20">{{ detailInfo.reviewer_name }}</el-col>
@@ -155,13 +158,15 @@
 						<el-col :span="4">截止时间</el-col>
 						<el-col :span="20">{{ detailInfo.expire_time }}</el-col>
 					</el-row>
+					
 					<el-row v-if="detailInfo.point_config.ahead_award_point">
 						<el-col :span="4">提前奖分</el-col>
-						<el-col :span="20">{{ detailInfo.point_config.ahead_award_point }}/天</el-col>
+						<el-col :span="20">{{ detailInfo.point_config.ahead_award_point }}{{ $getTypsName(detailInfo.pt_id) }}/天</el-col>
 					</el-row>
+					
 					<el-row v-if="detailInfo.point_config.timeout_deduction_point">
 						<el-col :span="4">逾期扣分</el-col>
-						<el-col :span="20">{{detailInfo.point_config.timeout_deduction_point}}/天</el-col>
+						<el-col :span="20">{{detailInfo.point_config.timeout_deduction_point}}{{ $getTypsName(detailInfo.pt_id) }}/天</el-col>
 					</el-row>
 					
 					<div v-show="detailInfo.point_config && detailInfo.point_config.item_info">
@@ -176,9 +181,9 @@
 						</el-row>
 						<el-row v-if="detailInfo.point_config.item_info">
 							<el-col :span="4">积分</el-col>
-							<el-col :span="19" v-show="detailInfo.point_config.item_info.min_point == detailInfo.point_config.item_info.max_point">{{ detailInfo.point_config.item_info.min_point }}</el-col>
+							<el-col :span="19" v-show="detailInfo.point_config.item_info.min_point == detailInfo.point_config.item_info.max_point">{{ detailInfo.point_config.item_info.min_point }} {{ $getTypsName(detailInfo.pt_id) }}</el-col>
 							<el-col :span="19" v-show="detailInfo.point_config.item_info.min_point != detailInfo.point_config.item_info.max_point">
-								{{ detailInfo.point_config.item_info.min_point }} ~ {{ detailInfo.point_config.item_info.max_point }}
+								{{ detailInfo.point_config.item_info.min_point }} ~ {{ detailInfo.point_config.item_info.max_point }} {{ $getTypsName(detailInfo.pt_id) }}
 							</el-col>
 						</el-row>
 					</div>

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

@@ -103,7 +103,10 @@
 		</div>
 
 		<el-drawer :custom-class="'drawer_details'" :visible.sync="completeShow" wrapperClosable :with-header="false" size="500px">
-			<div class="details_title">完成任务</div>
+			<div class="details_title flex-box-ce">
+				<span class="flex-1">完成任务</span>
+				<i  @click="completeShow=false" style="cursor: pointer;" class="el-icon-close"></i>
+			</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: '请填写任务备注(限200字)', trigger: 'blur' }]">

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

@@ -51,10 +51,10 @@
 							</span>
 						</template>
 					</el-table-column>
-					<el-table-column label="状态" prop="status" width="80">
+					<el-table-column label="状态" prop="review_status" width="80">
 						<template slot-scope="scope">
-							<span v-show="scope.row.status == 1" class="green">审批通过</span>
-							<span v-show="scope.row.status == 2" class="red">审批驳回</span>
+							<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">
@@ -72,7 +72,7 @@
 					@size-change="handleSizeChange"
 					@current-change="handleCurrentChange"
 					:current-page="formData.page"
-					:page-sizes="[10, 20, 30, 40, 50, 100]"
+					:page-sizes="[10, 20, 50, 100]"
 					layout="total, sizes, prev, pager, next"
 					:page-size="formData.page_size"
 					:total="total"

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

@@ -39,8 +39,8 @@
 					</el-table-column>
 				<el-table-column prop="point" label="积分" align="center">
 					<template slot-scope="scope">
-						<span class="red" v-if="scope.row.point > 0">+{{ scope.row.point }}{{$getTyps(scope.row.pt_id).name}}</span>
-						<span class="green" v-else>{{ scope.row.point }}{{$getTyps(scope.row.pt_id).name}}</span>
+						<span class="red" v-if="scope.row.point > 0">+{{ scope.row.point }} {{$getTyps(scope.row.pt_id).name}}</span>
+						<span class="green" v-else>{{ scope.row.point }} {{$getTyps(scope.row.pt_id).name}}</span>
 					</template>
 				</el-table-column>
 				<el-table-column label="审批内容" prop="remark" min-width="200">

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

@@ -60,7 +60,7 @@
 					@size-change="handleSizeChange"
 					@current-change="handleCurrentChange"
 					:current-page="formData.page"
-					:page-sizes="[10, 20, 30, 40, 50, 100]"
+					:page-sizes="[10, 20, 50, 100]"
 					layout="total, sizes, prev, pager, next"
 					:page-size="formData.page_size"
 					:total="total"

+ 5 - 2
src/views/workbench/review.vue

@@ -161,7 +161,7 @@
 			</div>
 		</div>
 		<!-- 不通过 -->
-		<el-dialog title="填写理由" width="480px" top="15vh" :visible.sync="isNo" :close-on-click-modal="false">
+		<el-dialog title="填写原因" width="480px" top="15vh" :visible.sync="isNo" :close-on-click-modal="false">
 			<el-form ref="newForm" label-width="110px">
 				<el-form-item label="不通过原因" prop="content">
 					<el-input v-model="comment" placeholder="请输入不通过原因" type="textarea" rows="4" maxlength="50" show-word-limit></el-input>
@@ -190,7 +190,10 @@
 		</el-dialog>
 		
 		<el-drawer title="事件详情" :visible.sync="detail_popup" ref="drawer" :with-header="false" :width="'500px'" direction="rtl">
-			<div class="drawer_title">事件详情</div>
+			<div class="drawer_title flex-box-ce">
+				<span class="flex-1">事件详情</span>
+				<i  @click="detail_popup=false" style="cursor: pointer;" class="el-icon-close"></i>
+			</div>
 			<div class="detail_popup" v-loading="detail_loading" v-if="detail_info !== null">
 				<el-row style="padding-bottom:10px;border-bottom:1px #f8f8f8 solid;">
 					<div class="flex-box flex-v-ce">