Browse Source

'1.3.1.0'

哥哥玩剑魂呢 4 years ago
parent
commit
c4dfa43ed5

+ 154 - 1
src/home.vue

@@ -388,9 +388,44 @@
 						</div>
 					</div>
 				</el-row>
+				
+				<el-row>
+					<div class="right-all-style" v-loading="announLoad" style="background:#fff;padding: 20px 20px 20px 20px;">
+						<div style="display:flex;justify-content: space-between;">
+							<span class="title">系统公告</span>
+							<span v-if="announcement.title" @click="$router.push({ path: '/update_notice' })" class="announcementc" style="font-size:13px;">查看详情</span>
+						</div>
+						<div v-if="announcement.title" class="announs">
+							<b style="font-size:15px;margin:10px 0 0 10px;display: inline-block;">{{announcement.title}}</b>
+							<div class="announDetails" style="padding:0 0 0 30px;margin-top:10px;" v-html="announcement.focus"></div>
+						</div>
+						<div v-else class="nopoint_box">
+							<div class="noimg"></div>
+							<span class="title1" style="padding-bottom:10px;">暂无系统公告</span>
+						</div>
+
+
+					</div>
+				</el-row>
+				
 			</el-col>
 		</el-row>
 		<!-- </div> -->
+		<div class="updateNotice">
+			<el-dialog
+				title="系统公告"
+				:visible.sync="updateVisible"
+				width="500px"
+				top="20vh"
+				:before-close="updateClose">
+				<b style="font-size:16px;margin:0 0 10px 0;display: inline-block;">{{announcement.title}}</b>
+				<div class="announDetails" style="padding:0 0 0 0" v-html="announcement.focus"></div>
+				
+  				<span slot="footer" class="dialog-footer">
+  					<el-button @click="$router.push({ path: '/update_notice' })" type="primary" round>查看详情</el-button>
+  				</span>
+			</el-dialog>
+		</div>
 	</div>
 </template>
 
@@ -399,6 +434,11 @@ var bool = true; // 五秒执行一次变量
 export default {
 	data() {
 		return {
+			announLoad:false,
+			announcement:{},
+
+			updateVisible:false,
+
 			employeeRout:this.$authoritys('employee'),
 
 			authorityManagerHeaderLoad: false, //管理员头部loading
@@ -519,6 +559,7 @@ export default {
 			} else {
 				this.authorityManagerHeader();
 			}
+			this.noticeList()//系统公告
 			this.integralForm(); //积分构成
 			this.getDepartment(); //获取部门列表
 			this.rankingListname(); //获取自定义排行榜名
@@ -529,6 +570,35 @@ export default {
 			this.highestPrizeBuckle(); //奖扣分最高积分事件
 		},
 
+		noticeList(){//系统公告
+			this.announLoad = true
+			let params = {
+				page:1,
+				page_size:10,
+			}
+			this.$axios('get','/api/announcement/list',params).then((res)=>{
+				if(res.data.code == 1){
+					let list = res.data.data.list[0]
+					if(localStorage.getItem('noticeId')){
+						console.log(list.id)
+						if(localStorage.getItem('noticeId') != list.id){
+							this.updateVisible = true
+							localStorage.setItem("noticeId",list.id);
+						}
+					}else{
+						localStorage.setItem("noticeId",list.id);
+						this.updateVisible = true
+					}
+					this.announcement = list
+				}
+				console.log(res)
+			}).finally(()=>{
+				this.announLoad = false
+			})
+		},
+		updateClose(none){
+			none()
+		},
 		//echarts自适应
 		selfAdaption() {
 			var myChart1 = this.$echarts.init(this.$refs.monthlyIntegralChart);
@@ -1282,6 +1352,35 @@ export default {
 </script>
 
 <style scoped="scoped" lang="scss">
+.updateNotice ::v-deep .el-dialog{
+	border-radius: 10px;
+	.el-dialog__header{
+		padding: 13px 20px;
+		text-align: center;
+		background-color: #3193fc;
+		border-radius: 8px 8px 0 0;
+		.el-dialog__title{
+			font-size: 16px;
+			color: #fff;
+		}
+		.el-icon-close{
+			color: #fff;
+
+		}
+	}
+	.el-dialog__body{
+		padding:20px 20px 30px 20px;
+	}
+	.el-dialog__footer{
+		.dialog-footer{
+			.is-round{
+				padding: 10px 19px;
+				border-radius: 15px;
+			}
+		}
+	}
+}
+
 .refresh {
 	margin-top: 100px;
 	width: 100px;
@@ -1340,7 +1439,6 @@ export default {
 		color: #409eff;
 	}
 }
-
 .right-all-style {
 	background: #fff;
 	border-radius: 5px;
@@ -1507,4 +1605,59 @@ export default {
   .inCommonUseStyle:hover b{
     color : #409EFF;
   }
+  .announs{
+	padding:0 0 10px 0;
+	border: 1px solid rgb(236, 236, 236);
+	border-radius: 10px;
+	overflow: hidden;
+	cursor: default;
+	// min-height: calc(60vh - 160px);
+	margin: 10px 0 0 0;
+  }
+  .announDetails{
+	max-height: 410px;
+  	overflow-y: auto;
+	//   div,p,span,ul,li{
+	// 		color: springgreen;
+	//   }
+  }
+//   .announDetails *{
+// 			color: springgreen;
+//   }
+.announDetails::-webkit-scrollbar {
+	width: 9px;
+	height: 9px;
+}
+	.announDetails::-webkit-scrollbar-track {
+		width: 6px;
+		background-color: #fff0;
+		-webkit-border-radius: 2em;
+		-moz-border-radius: 2em;
+		border-radius: 2em;
+	}
+	.announDetails::-webkit-scrollbar-thumb {
+		background-color: #fff0;
+		background-clip: padding-box;
+		min-height: 28px;
+		-webkit-border-radius: 2em;
+		-moz-border-radius: 2em;
+		border-radius: 2em;
+	}
+	.announDetails:hover::-webkit-scrollbar-thumb {
+		overflow-x: none;
+		background-color: rgba(144, 147, 153, 0.3);
+	}
+	.announcementc{
+	display: block;
+	text-align: right;
+	font-size: 13px;
+	color: #909399;
+	cursor: pointer;
+}
+.announcementc:hover {
+	color: #409eff;
+}
+.announcementc:active {
+	color: #409eff;
+}
 </style>

+ 6 - 4
src/index.vue

@@ -216,11 +216,13 @@ export default {
 			let obj = []
 			let supAuthority = this.$supremeAuthority()
 			data.forEach(item=>{
-				if(!item.meta.jurisdiction){
-					obj.push(item)
-				}else{
-					if(item.meta.jurisdiction.indexOf(supAuthority)==-1){
+				if(!item.hidden){
+					if(!item.meta.jurisdiction){
 						obj.push(item)
+					}else{
+						if(item.meta.jurisdiction.indexOf(supAuthority)==-1){
+							obj.push(item)
+						}
 					}
 				}
 			})

+ 10 - 1
src/init.vue

@@ -10,7 +10,7 @@
 		<el-dialog title="通知" :visible.sync="dialogFormVisible" width="480px" :show-close="false" :close-on-click-modal="false">
 			<div>
 				<div style="font-size: 18px;">尊敬的用户:</div>
-				<div style="margin: 10px 0;">您当前的套餐已到期,如需继续使用,请联系客服或扫描下方二维码进行续费。</div>
+				<div style="margin: 10px 0;">您当前的套餐已到期,如需继续使用,请<span @click="bundleOfServices" style="color:#409EFF;cursor:pointer;">联系客服</span>或扫描下方二维码进行续费。</div>
 			</div>
 			<div style="border-radius: 15px;border: 1px solid #f1f1f1;padding: 10px; width: 276px;box-sizing: border-box;margin: 0 auto;">
 				<img src="./assets/image/code.png"/>
@@ -43,6 +43,15 @@ export default {
 		}
 	},
 	methods: {
+		bundleOfServices(){
+			this.$dd.biz.util.openLink({
+				url:"https://page.dingtalk.com/wow/dingtalk/act/serviceconversation?wh_biz=tm&showmenu=false&goodsCode=DT_GOODS_881607043109331&corpId="+localStorage.getItem('corpId')+"&token=5784a3e6b5e025ee891517ea814180f4",
+				onSuccess : function(result) {
+				/**/
+				},
+				onFail : function(err) {}
+			})
+		},
 		//重新登录
 		openLogin() {
 			var num = 10;

+ 33 - 0
src/router/index.js

@@ -100,6 +100,16 @@ const routes = [{
 					  identification:3,
 				  }
 			  },
+			  {
+				  path: '/attendance_rating',
+				  name: '考勤分排名',
+				  component: () => import(/* webpackChunkName: "attendance_rating" */'@/views/ranking/attendance_rating.vue'),
+				  meta: {
+					  icon: 'icon-shezhi_jiaose',
+					  groupCode:'ranking',
+					  identification:3,
+				  }
+			  },
 			  {
 				  path: '/custom_rank',
 				  name: '自定义分组B分排名',
@@ -231,6 +241,29 @@ const routes = [{
 					jurisdiction :['dept_manager','employee']
 				}
 			},
+			{
+				path: '/systemLayout',
+				name: '系统配置',
+				component: () => import(/* webpackChunkName: "systemLayout" */'@/views/set/systemLayout.vue'),
+				meta: {
+					icon: 'icon-shezhi_xitongpeizhi',
+					groupCode:'set',
+					identification:4,
+					jurisdiction :['dept_manager','employee']
+				}
+			},
+			
+			{
+				path: '/update_notice',
+				name: '公告列表',
+				component: () => import(/* webpackChunkName: "home" */'@/views/subassembly/update_notice.vue'),
+				hidden: true,//侧边栏隐藏
+				meta: {
+					icon: 'icon-shezhi_gongdaolbiao',
+					groupCode:'abPoint',
+					identification:1,
+				}
+			},
 		]
 	},
 	{

+ 1 - 1
src/views/abPoint/apply_list.vue

@@ -103,7 +103,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="pageLimit"
 				:total="total"

+ 1 - 1
src/views/abPoint/award_punish.vue

@@ -81,7 +81,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="pageLimit"
 				:total="formData.total"

+ 482 - 0
src/views/ranking/attendance_rating.vue

@@ -0,0 +1,482 @@
+<template>
+  <div>
+    <div class="integral_statistics_box" v-loading="attendload">
+      <el-row :gutter="10" style="margin-right:8px;">
+        <el-form :inline="true">
+          <el-form-item label="考勤组">
+            <el-select
+              v-model="formData.group_id"
+              @change="selectgroupId"
+              filterable
+              :clearable="false"
+              placeholder="请选择考勤组"
+            >
+              <el-option
+                v-for="item in checkingInGroup"
+                :key="item.id"
+                :label="item.name"
+                :value="item.id"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+
+          <el-form-item label="排名类型">
+            <el-select
+                
+              v-model="formData.event_type"
+              @change="selectgroupId"
+              style="width:110px"
+              placeholder="请选择"
+            >
+              <el-option
+                v-for="(item, index) in event_type"
+                :key="index"
+                :label="item.name"
+                :value="item.id"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+
+          <el-form-item label="时间">
+            
+            <!-- <el-date-picker
+              v-model="Month_range"
+              class="date-picker-width"
+              type="month"
+              :clearable='false'
+              value-format="yyyy-MM"
+              placeholder="选择月份排名"
+              @change="onFilterChanged"
+            ></el-date-picker> -->
+
+            <el-date-picker
+              style="width:290px"
+              class="first-element-btn"
+              :clearable="false"
+              v-model="time_range"
+              type="daterange"
+              value-format="yyyy-MM-dd"
+              range-separator="至"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+              :picker-options="instantPickerOptions"
+              @change="onFilterChanged"
+            ></el-date-picker>
+
+
+          </el-form-item>
+
+          <el-form-item>
+            <el-button type="primary" plain @click="exportRanking"
+              >导出排名</el-button
+            >
+          </el-form-item>
+        </el-form>
+      </el-row>
+
+      <el-table
+        :data="all_integral_list"
+        style="width: 100%"
+        v-loading="loading"
+      >
+        <el-table-column label="名次" width="100" align="center">
+          <template slot-scope="scope">
+            <img
+              v-if="scope.row.rank === 1"
+              src="@/assets/image/statistics_NO1.png"
+              alt
+            />
+            <img
+              v-if="scope.row.rank === 2"
+              src="@/assets/image/statistics_NO2.png"
+              alt
+            />
+            <img
+              v-if="scope.row.rank === 3"
+              src="@/assets/image/statistics_NO3.png"
+              alt
+            />
+            <span v-if="scope.row.rank > 3">{{ scope.row.rank }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="姓名" align="left">
+          <template slot-scope="scope">
+            <div style="display:flex;">
+              <userImage
+                class="fl"
+                :id="scope.row.id"
+                :user_name="scope.row.name"
+                :img_url="scope.row.img_url"
+                width="50px"
+                height="50px"
+              ></userImage>
+              <span style="line-height: 50px; padding-left: 10px;">{{
+                scope.row.name
+              }}</span>
+            </div>
+          </template>
+        </el-table-column>
+        <el-table-column prop="point" label="B分" align="left">
+          <template slot-scope="scope">
+            <b style="font-size:15px;color:#909399">{{ scope.row.point }}</b>
+          </template>
+        </el-table-column>
+        <!-- <template slot="empty">
+          <div class="nopoint_box">
+            <div class="noimg noperson"></div>
+            <span class="title">没有对应的数据</span>
+          </div>
+        </template> -->
+        <template slot="empty">
+          <noData :content="checkingInGroup.length==0?'请先开启钉钉考勤':'暂无数据'"></noData>
+        </template>
+      </el-table>
+
+      <center style="padding: 20px 0;">
+        <el-pagination
+          background
+          @size-change="handleSizeChange1"
+          @current-change="handleCurrentChange"
+          :current-page="formData.page"
+          :page-sizes="[10, 20, 50, 100]"
+          layout="total, sizes, prev, pager, next"
+          :page-size="pageLimit1"
+          :total="total"
+        >
+        </el-pagination>
+      </center>
+    </div>
+
+    <!-- 导出弹窗 -->
+    <el-dialog title="导出排名" :visible.sync="dialogVisible" width="730px">
+      <div style="font-size:15px;margin:20px 0 20px 0;">
+        系统将按以下已选条件导出对应的排名报表
+      </div>
+      <div v-loading="exportLoad">
+        <el-form :inline="true">
+          <el-form-item label="考勤组">
+            <el-select
+              v-model="exportData.group_id"
+              @change="selectgroupId"
+              filterable
+              :clearable="false"
+              placeholder="请选择考勤组"
+            >
+              <el-option
+                v-for="item in checkingInGroup"
+                :key="item.id"
+                :label="item.name"
+                :value="item.id"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+
+          <el-form-item label="排名类型">
+            <el-select
+              v-model="exportData.event_type"
+              style="width:150px"
+              placeholder="请选择"
+            >
+              <el-option
+                v-for="(item, index) in event_type"
+                :key="index"
+                :label="item.name"
+                :value="item.id"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+
+          <el-form-item label="时间">
+            
+            <!-- <el-date-picker
+              v-model="exportMonth_range"
+              class="date-picker-width"
+              type="month"
+              :clearable='false'
+              value-format="yyyy-MM"
+              placeholder="选择月份排名"
+            ></el-date-picker> -->
+
+            <el-date-picker
+              class="first-element-btn"
+              :clearable="false"
+              v-model="exportTime_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>
+        <span class="dialog-footer" style="display:flex;justify-content: flex-end;">
+          <el-button @click="dialogVisible = false">取 消</el-button>
+          <el-button type="primary" @click="exportExcel">导 出</el-button>
+        </span>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+<script>
+import noData from '@/components/noData';
+export default {
+  data() {
+    return {
+      exportLoad:false,
+      dialogVisible: false,
+      checkingInGroup: [],
+      event_type: [
+        { id: 0, name: "全部" },
+        { id: 1, name: "迟到" },
+        { id: 2, name: "早退" },
+        { id: 6, name: "准时打卡" },
+        { id: 20, name: "上班缺卡" },
+        { id: 21, name: "下班缺卡" },
+        { id: 16, name: "加班 " },
+        { id: 10, name: "缺勤" },
+      ],
+      attendload: false,
+      loading: false,
+      all_integral_list: null,
+      Month_range:this.$moment().format("YYYY-MM"),
+      time_range: [
+        this.$moment()
+          .startOf("month")
+          .format("YYYY-MM-DD"),
+        this.$moment()
+          .endOf("month")
+          .format("YYYY-MM-DD")
+      ],
+      formData: {
+        group_id: "",
+        // date_type: 3,
+        page: 1,
+        page_size: 10,
+        event_type: 0
+      },
+      exportMonth_range:this.$moment().format("YYYY-MM"),
+      exportTime_range: [
+        this.$moment()
+          .startOf("month")
+          .format("YYYY-MM-DD"),
+        this.$moment()
+          .endOf("month")
+          .format("YYYY-MM-DD")
+      ],
+      exportData: {
+        group_id: "",
+        event_type: 0
+      },
+      total: 0,
+      dept_tree: [],
+      dept_name: [],
+      pageLimit1: 10,
+      instantPickerOptions: {
+        shortcuts: [
+          {
+            text: "本周",
+            onClick(picker) {
+              const now = new Date();
+              const start = new Date();
+              start.setTime(
+                now.getTime() - (now.getDay() - 1) * 24 * 60 * 60 * 1000
+              );
+              now.setTime(start.getTime() + 6 * 24 * 60 * 60 * 1000 - 1000);
+              picker.$emit("pick", [start, now]);
+            }
+          },
+          {
+            text: "上周",
+            onClick(picker) {
+              const end = new Date();
+              const start = new Date();
+              start.setTime(
+                start.getTime() - (start.getDay() + 6) * 3600 * 1000 * 24
+              );
+              end.setTime(start.getTime() + 6 * 24 * 60 * 60 * 1000 - 1000);
+              picker.$emit("pick", [start, end]);
+            }
+          },
+          {
+            text: "本月",
+            onClick(picker) {
+              const now = new Date();
+              const startDate = new Date(now.getFullYear(), now.getMonth(), 1);
+              const endDate = new Date(
+                now.getFullYear(),
+                now.getMonth() + 1,
+                0
+              );
+              picker.$emit("pick", [startDate, endDate]);
+            }
+          },
+          {
+            text: "上月",
+            onClick(picker) {
+              const now = new Date();
+              const startDate = new Date(
+                now.getFullYear() - (now.getMonth() > 0 ? 0 : 1),
+                (now.getMonth() + 11) % 12,
+                1
+              );
+              const endDate = new Date(now.getFullYear(), now.getMonth(), 0);
+              picker.$emit("pick", [startDate, endDate]);
+            }
+          }
+        ]
+      }
+    };
+  },
+  components: {noData},
+  watch: {},
+  mounted() {
+    this.checkingIn_group(); //考勤组
+  },
+  methods: {
+    exportRanking(){
+        if(this.checkingInGroup.length>0){
+            this.exportData.group_id = this.checkingInGroup[0].id
+        }
+        this.dialogVisible = true
+    },
+    exportExcel() {
+      window.open(process.env.VUE_APP_BASE_API + 'api/download/groups_ranking/export?start_date='+
+      this.exportTime_range[0]+
+      '&end_date='+this.exportTime_range[1]+
+      '&page='+1+
+      '&page_size='+2000+
+      '&group_id='+this.exportData.group_id+
+      '&event_type='+this.exportData.event_type+
+      '&employee_id='+this.$getUserData().id, '_blank');
+
+      // this.exportLoad = true
+      // let params = this.exportData;
+
+      // params.date_type = 3,
+      // params.month_date = this.exportMonth_range
+      // params.date_type = 2,
+
+      // params.start_date = this.exportTime_range[0];
+      // params.end_date = this.exportTime_range[1];
+      // params.page = 1,
+      // params.page_size = 2000,
+
+      
+      // this.$axios('get',"/api/ad/groups_ranking/export", params).then((res)=>{
+      //   if(res.data.code == 1){
+      //     window.open('/ad/statistics/group_rank_export?code='+res.data.data.code,'_blank')
+      //     this.dialogVisible = false
+      //   }else{
+      //     this.$message.error(res.data.msg);
+      //   }
+      // }).finally(()=>{
+      //     this.exportLoad = false
+      // })
+    },
+    selectgroupId() {
+      this.get_all_integral();
+    },
+    onFilterChanged() {
+      this.get_all_integral();
+    },
+    //分页
+    handleSizeChange1(val) {
+      this.pageLimit1 = val;
+      this.formData.page_size = this.pageLimit1;
+      this.get_all_integral();
+    },
+    handleCurrentChange(val) {
+      this.formData.page = val;
+      this.get_all_integral();
+    },
+    //请求数据
+    checkingIn_group() {
+      this.attendload = true;
+      let self = this;
+      let params = {
+        page: 1,
+        page_size: 2000
+      };
+      this.$axios('get',"/api/ad/groups",params)
+        .then(res => {
+          if (res.data.code == 1) {
+            let list = res.data.data.list
+            let datas = []
+            for(let key in list){
+              let obj = {}
+              obj.id = key
+              obj.name = list[key]
+              datas.push(obj)
+            }
+            console.log(datas)
+            this.checkingInGroup = datas
+            this.formData.group_id = datas[0].id;
+          }
+        })
+        .finally(() => {
+          this.get_all_integral();
+          this.attendload = false;
+        });
+    },
+    //请求数据
+    get_all_integral() {
+      let self = this;
+      self.loading = true;
+      // let data = self.formData;
+      let data = {
+        group_id:this.formData.group_id,
+        // date_type:this.formData.date_type,
+        page:this.formData.page,
+        page_size:this.formData.page_size,
+        event_type:this.formData.event_type,
+        // month_date:this.Month_range,
+      }
+      // data.month_date = this.Month_range
+      data.start_date = this.time_range[0];
+      data.end_date = this.time_range[1];
+      // data.page = data.page-1
+      this.$axios("post","/api/ad/rank",data)
+        .then(res => {
+          if (res.data.code == 1) {
+            self.all_integral_list = res.data.data.list;
+            this.total =  res.data.data.total
+          } else {
+            self.$message.error(res.data.data.msg);
+          }
+        })
+        .finally(() => {
+          self.loading = false;
+        });
+    }
+  }
+};
+</script>
+
+<style scoped>
+.el-date-editor.el-input {
+  width: auto;
+}
+.date-picker-width {
+  width: 145px !important;
+}
+.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 lang="scss" scoped>
+.integral_statistics_box {
+  min-width:780px;
+  background-color: #ffffff;
+  padding: 20px;
+  min-height: calc(100vh - 160px);
+}
+
+::v-deep .el-dialog__body {
+  padding: 0px 20px 30px;
+}
+</style>

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

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

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

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

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

@@ -124,7 +124,7 @@
 					background
 					@size-change="handleSizeChange"
 					@current-change="handleCurrentChange"
-					: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"

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

@@ -52,12 +52,18 @@
 			  <el-form-item>
 				  <el-button v-if="employeeOrdept" type="success" size="medium" @click="excelImportShow = true" plain>导入数据</el-button>
 				  <el-button type="primary" size="medium" @click="exportExcel" plain>导出当前数据</el-button>
+          		  <el-button class="first-element-btn" v-if="employeeOrdept" :disabled='deleteDisabled' @click="deleteInBatches" type="danger" >批量删除</el-button>
 				  <!-- <el-button type="primary" size="medium" plain @click="swiperShow = true">轮播事件</el-button> -->
 			  </el-form-item>
 			</el-form> 
 			 <!-- 表格 -->
 			<div>
-				<el-table :data="list" style="width: 100%" v-loading="loading" @row-click="open_detail">
+				<el-table :data="list" style="width: 100%" v-loading="loading" @row-click="open_detail" @selection-change="deleteEvents">
+					<el-table-column
+						v-if="employeeOrdept"
+						type="selection"
+						width="55">
+					</el-table-column>
 					<el-table-column prop="employee_name" label="姓名" align="left" width="200px">	
 						<template slot-scope="scope">
 							<div class="flex-box">
@@ -100,7 +106,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="pageLimit"
 						:total="total"
@@ -270,6 +276,7 @@ import noData from '@/components/noData';
 export default {
 	data() {
 		return {
+			deleteDisabled:true,
 			action:process.env.VUE_APP_BASE_API+'api/integral/import',
 			ATOKEN: { 'A-TOKEN': this.$getToken(),'Accept':'application/vnd.test.v2+json' },
 			
@@ -300,6 +307,8 @@ export default {
 			importErrorInfoShow: false,
 			fileList: [],
 			employeeOrdept:!this.$authoritys('employee') && !this.$authoritys('dept_manager'),
+			
+      		selectionID:[],//删除的事件ID
 		};
 	},
 	components: { noData },
@@ -310,6 +319,13 @@ export default {
 		this.get_integral_list(this.formData);
 	},
 	watch: {
+		selectionID(){
+			if(this.selectionID.length==0){
+				this.deleteDisabled = true
+			}else{
+				this.deleteDisabled = false
+			}
+		},
 		'formData.pt_id'(val, old_val) {
 			this.formData.page = 1;
 			!val ? delete this.formData.pt_id : '';
@@ -444,6 +460,46 @@ export default {
 		cuttString(data) {
 			return data.substring(5);
 		},
+		deleteInBatches(){
+			if (this.selectionID.length < 1) {
+				return false
+			}
+			this.$confirm('此操作将永久删除选中的积分事件, 确认要删除吗?', '批量删除事件', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning'
+			}).then(() => {
+				this.loading = true
+				this.$axios('POST','/api/integral/statistics/integral/many',{event_ids:this.selectionID}).then((res)=>{
+				if(res.data.code == 1){
+					this.$message({
+						message: res.data.msg,
+						type: 'success'
+					});
+					if(this.selectionID.length == this.list.length){
+						if(this.formData.page > 1){
+							this.formData.page = this.formData.page-1;
+						}
+					}
+					this.get_integral_list(this.formData)
+				}else{
+					this.$message.error(res.data.msg);
+				};
+				}).catch(()=>{
+					this.loading = false
+				}).finally(()=>{
+				})
+			}).catch(() => {
+
+			})
+		},
+		deleteEvents(selection){
+			let listId = []
+			selection.forEach(item=>{
+				listId.push(item.id)
+			})
+      		this.selectionID = listId
+		},
 		open_detail(item) {
 			this.detail_popup = true;
 			let data = {

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

@@ -91,7 +91,7 @@
             @size-change="handleSizeChange1"
             @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="pageLimit1"
             :total="total"

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

@@ -117,6 +117,7 @@
               @size-change="handleSizeChange_xq"
               @current-change="handleCurrentChange_xq"
               :current-page="condition.page"
+				      :page-sizes="[10, 20, 50, 100]"
               layout="total, sizes, prev, pager, next"
               :page-size="condition.page_size"
               :total="totals"
@@ -179,7 +180,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"

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

@@ -57,7 +57,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="pageLimit"
 					:total="total"

+ 62 - 1
src/views/set/framework.vue

@@ -70,6 +70,12 @@
 							</template>
 						</el-table-column>
 						<el-table-column prop="accedence_time" label="入职时间"></el-table-column>
+						<el-table-column prop="accedence_time" label="是否参与排名" align="center">
+							<template slot-scope="scope">
+								<span class="participateRank" :style="scope.row.is_ranking==1?'color:#409eff':'color:rgb(255 83 70)'" @click="rankingtakePartIn(scope.row.id,scope.row.is_ranking)">{{ scope.row.is_ranking==1?'参与':'不参与' }}</span>
+								<!-- <span>不参与</span> -->
+							</template>
+						</el-table-column>
 						<el-table-column label="启用积分管理">
 							<template slot="header" slot-scope="scope">
 								  <el-popover
@@ -104,7 +110,7 @@
 							@size-change="handleSizeChange"
 							@current-change="handleCurrentChange"
 							:current-page="page"
-							:page-sizes="[10, 20, 30, 40, 50, 100]"
+							:page-sizes="[10, 20, 50, 100]"
 							:page-size="perPage"
 							layout="total,sizes, prev, pager, next"
 							:total="total"
@@ -113,6 +119,23 @@
 				</div>
 			</div>
 		</div>
+		<el-dialog
+		title="设置是否参与排名"
+		:visible.sync="dialogVisible"
+		top="30vh"
+		width="520px"
+		:before-close="handleClose">
+		<div style="margin-left:20px;">
+			<el-radio v-for="(item,index) in radioLi" :key="index" v-model="radio" :label="item.id">
+				<span style="font-size:17px;">{{item.name}}</span>
+				<p style="font-size:14px;margin:8px 0 0 24px;">{{item.kam}}</p>
+			</el-radio>
+		</div>
+		<span slot="footer" class="dialog-footer">
+			<el-button @click="dialogVisible = false">取 消</el-button>
+			<el-button type="primary" @click="setRanking" :disabled="rangLoad">确 定</el-button>
+		</span>
+		</el-dialog>
 	</div>
 </template>
 
@@ -143,6 +166,15 @@ export default {
 			visible:false,
 			
 			ruleDeprt:false,
+			dialogVisible:false,
+			rankingtakePartInId:'',
+			radio: '1',
+			
+			rangLoad:false,
+			radioLi:[
+				{id:'1',name:'参与排名',kam:'在排名中展示此人'},
+				{id:'0',name:'不参与排名',kam:'排名不展示此人(自定义排名除外)'},
+			],
 		};
 	},
 	components: {
@@ -168,6 +200,32 @@ export default {
 		});
 	},
 	methods: {
+		setRanking(){
+			this.rangLoad = true
+			let data = {
+				employee_id:this.rankingtakePartInId,
+				switch:Number(this.radio)
+			}
+			this.$axios('post','/api/employee/ranking_switch',data).then((res)=>{
+				if(res.data.code == 1){
+					this.$message.success({ message: res.data.msg });
+					this.getEmployee()
+				}
+			}).finally(()=>{
+				this.dialogVisible = false
+				setTimeout(()=>{
+					this.rangLoad = false
+				},200)
+			})
+		},
+		rankingtakePartIn(id,is_ranking){
+			this.radio = is_ranking.toString()
+			this.rankingtakePartInId = id
+			this.dialogVisible = true
+		},
+		handleClose(done){
+			done()
+		},
 		//同步信息
 		tb() {
 			this.$confirm('下次同步时间需在10分钟之后,是否同步?', '提示', {
@@ -432,4 +490,7 @@ export default {
 	// 	transition: 0.35s ease-in-out;
 	// }
 }
+.participateRank{
+	cursor:pointer;
+}
 </style>

+ 154 - 0
src/views/set/systemLayout.vue

@@ -0,0 +1,154 @@
+<template>
+  <div class="all" v-loading="loading">
+    <el-tabs v-model="activeName" @tab-click="handleClick" class="tab-container" style="padding:20px 0 0 30px;">
+        <el-tab-pane label="基本设置" name="first">
+            <div class="integralApproval">
+                <b>积分审批</b>
+                <p>当前系统审批流程<a>查看图例</a></p>
+                <div style="margin-top:10px;"><span>指定规则的审批或奖扣分,均可直接通过</span>
+					<el-tooltip placement="top">
+					  <div class="toolCont" slot="content">开启后,按照系统已有的积分规则制度提交的审批或者奖扣可即使审批人/录分人的权限分不足,也能审批通过</div>
+					  <span class="initia_mark">?</span>
+					</el-tooltip>
+                    <el-switch style="margin-left:30px;" v-model="examine" active-color="#13ce66" inactive-color="rgb(202 202 202)"></el-switch></div>
+            </div>
+            <el-button type="primary" class="save" @click="saveFirst('first')">保存</el-button>
+        </el-tab-pane>
+        <el-tab-pane label="通知设置" name="second">
+            <div class="integralApproval">
+                <div v-for="(item,index) in informText" :key="index" style="margin-top:30px;">
+                    <p><b style="font-size:16px;">{{item.title}}</b>
+                    <el-switch v-if="item.switchs == 0" style="margin:-6px 0 0 30px;" v-model="individualPoints" active-color="#13ce66" inactive-color="rgb(202 202 202)"></el-switch>
+                    <el-switch v-if="item.switchs == 1" style="margin:-6px 0 0 30px;" v-model="pointManagement" active-color="#13ce66" inactive-color="rgb(202 202 202)"></el-switch>
+                    <el-switch v-if="item.switchs == 2" style="margin:-6px 0 0 30px;" v-model="taskToInform" active-color="#13ce66" inactive-color="rgb(202 202 202)"></el-switch>
+                    <el-switch v-if="item.switchs == 3" style="margin:-6px 0 0 30px;" v-model="approvalNotice" active-color="#13ce66" inactive-color="rgb(202 202 202)"></el-switch>
+                    </p>
+                    <p>{{item.ram}}</p>
+                    <p v-if="item.checkboxs && individualPoints"><el-checkbox v-model="checked">{{item.checkboxs}}</el-checkbox></p>
+                </div>
+            </div>
+            <el-button type="primary" class="save" @click="saveFirst('second')">保存</el-button>
+        </el-tab-pane>
+    </el-tabs>
+  </div>
+</template>
+<script>
+export default {
+  data() {
+    return {
+        loading: false,
+        activeName: 'first',
+        examine:false,
+
+        
+        checked:false,//积分日报展示A分数据
+        individualPoints:false,//个人积分日报
+        pointManagement:false,//积分管理周报
+        taskToInform:false,//任务通知
+        approvalNotice:false,//审批通知
+        informText:[
+            {title:'个人积分通知',switchs:0,ram:'每天推送个人积分的排名和奖扣分情况(不参与积分排名的除外)',checkboxs:'积分日报展示A分数据'},
+            {title:'管理者奖扣分执行情况通知',switchs:1,ram:'每周给管理者推送当月的奖扣分执行情况'},
+            {title:'任务通知',switchs:2,ram:'每天定时推送收到任务的通知'},
+            {title:'审批通知',switchs:3,ram:'每天定时推送收到审批的通知'},
+        ]
+    };
+  },
+  components: {
+      
+  },
+  watch:{
+  },
+  created() {},
+  mounted() {
+      this.cheakAx('first')
+  },
+  methods: {
+    handleClick(tab, event) {
+        this.cheakAx(this.activeName)
+    },
+    saveFirst(name){
+        this.loading = true
+        let data = {}
+        if(name == 'first'){
+            data.rule_limit_check = this.examine?0:1
+        }else{
+            console.log(this.individualPoints)
+            console.log(this.pointManagement)
+            console.log(this.taskToInform)
+            console.log(this.approvalNotice)
+            data.report_integral_daily = this.individualPoints?1:0
+            this.individualPoints?data.report_integral_daily_a = this.checked?1:0:''
+            data.report_integral_weekly = this.pointManagement?1:0
+            data.report_work_daily = this.taskToInform?1:0
+            data.report_review_daily = this.approvalNotice?1:0
+        }
+        this.$axios('post',"/api/integral/site/config",data).then((res) => {
+            if(res.data.code == 1){
+                this.$message({
+                    message: res.data.msg,
+                    type: 'success'
+                });
+            }
+        }).finally(()=>{
+            this.loading = false
+        })
+    },
+    cheakAx(name){
+      this.loading = true;
+      this.$axios('get',"/api/integral/site/config").then((res) => {
+        let data = res.data.data
+        if(name == 'first'){
+            this.examine = data.rule_limit_check == 0?true : false
+        }else{
+            this.individualPoints = data.report_integral_daily == 1?true : false
+            this.checked = this.individualPoints?data.report_integral_daily_a == 1? true : false : false
+            this.pointManagement = data.report_integral_weekly == 1?true : false
+            this.taskToInform = data.report_work_daily == 1?true : false
+            this.approvalNotice = data.report_review_daily == 1?true : false
+        }
+      }).finally(err=>{
+        this.loading = false;
+    });
+    }
+  },
+};
+</script>
+
+<style  scoped lang="scss">
+.integralApproval{
+    margin-top: 20px;
+
+    b{font-size:16px;}
+    p{margin-top: 10px;
+        a{color:#1795f9;padding-left:15px;cursor:pointer;}}
+    .initia_mark {
+        background: #191919;
+        border-radius: 50%;
+        width: 14px;
+        height: 14px;
+        color: #fff;
+        display: inline-block;
+        font-size: 12px;
+        line-height: 14px;
+        text-align: center;
+        margin-left: 4px;
+        cursor: default;
+    }
+}
+.toolCont{
+    max-width:280px;
+}
+
+.save{
+    margin-top: 30px;
+    width:100px;
+    font-size:15px;
+}
+.tab-container ::v-deep .el-tabs__item{
+    font-size: 16px;
+}
+.tab-container ::v-deep .el-tabs__nav-wrap::after {
+    background: #fff
+}
+</style>

+ 1 - 0
src/views/set/voluntarilyPoint.vue

@@ -88,6 +88,7 @@
 								layout="total, prev, pager, next"
 								:current-page="page"
 								@current-change="handleCurrentChange"
+								:page-sizes="[10, 20, 50, 100]"
 								:page-size.sync="pagesize"
 								:hide-on-single-page="true"
 								:total="total"

+ 230 - 0
src/views/subassembly/update_notice.vue

@@ -0,0 +1,230 @@
+<template>
+    <div class="integral_statistics_box" v-loading="noticeLoad">
+        <el-row>
+			<el-col :span="24" style="height:60px;line-height:60px;">
+				<el-col :span="6" style="color:#9e9d9d;padding-left:25px;max-width: 280px;">系统公告列表</el-col>
+				<el-col :span="18" style="padding-left:30px;">
+					<span style="font-size:16px;">{{articleOne.title?articleOne.title:''}}</span>
+					<span style="font-size:15px;margin-left:25px;color:#9e9d9d">{{articleOne.publish_time?articleOne.publish_time:''}}</span>
+				</el-col>
+			</el-col>
+		</el-row>
+
+		<el-row class="architecture">
+			<el-col :span="6" class="rule_class_box RuleLeft" style="height:700px;max-width: 280px;">
+        		<div >
+					<el-tree v-show="announcement.length != 0" ref="tree" :data="announcement" :props="defaultProps" node-key="id"
+					@node-click="dept_click" :expand-on-click-node="false" :highlight-current="true" class="cate-tree"></el-tree>
+					<div v-show="announcement.length == 0" class="" style="margin-top: 100px;">
+						<div style="color:#909399; text-align: center; line-height:50px">暂无数据</div>
+					</div>
+				</div>
+			</el-col>
+			<el-col :span="17" class="contentRig RuleRight" style="height:700px;overflow-y:auto" v-loading="detailsLoad">
+				<div v-if="announcement.length!=0" v-html="aAtripOfDetails.update_msg" style="padding:15px 0 0 15px;"></div>
+				<div v-else style="text-align:center;margin-top:100px;">
+      				<img src="@/assets/image/nodata.png" style="width: 266px;height: 182px;margin: 30px auto;">
+					<div style="color:#909399;">暂无数据</div>
+				</div>
+			</el-col>
+		</el-row>
+    </div>
+</template>
+
+<script>
+export default {
+	data() {
+		return {
+			articleOne:{},
+			announcement:[],
+
+			noticeLoad:false,
+
+			defaultProps: {
+				label: 'title',
+			},
+			aAtripOfDetails:{},
+			detailsLoad:false,
+		};
+	},
+  	components: {},
+	watch: {
+	},
+	created() {
+	},
+	mounted() {
+		this.noticeList()
+	},
+	methods: {
+		noticeList(){
+			this.noticeLoad = true
+			let params = {
+				page:1,
+				page_size:2000,
+			}
+			this.$axios('get','/api/announcement/list',params).then((res)=>{
+				if(res.data.code == 1){
+					let list = res.data.data.list
+					this.announcement = list
+					this.$nextTick(() => {
+						if(list[0]){
+							this.articleOne = list[0]
+						}
+						this.$refs.tree.setCurrentKey(this.articleOne.id);
+						this.noticeDetails()
+					});
+				}
+			}).finally(()=>{
+				this.noticeLoad = false
+			})
+		},
+		noticeDetails(){
+			this.detailsLoad = true
+			this.$axios('get','/api/announcement/info',{announcement_id:this.articleOne.id}).then((res)=>{
+				if(res.data.code == 1){
+					this.aAtripOfDetails = res.data.data
+				}
+			}).finally(()=>{
+				this.detailsLoad = false
+			})
+		},
+
+		dept_click(item) {
+			this.articleOne = item
+			this.noticeDetails()
+		},
+	},
+};
+</script>
+
+<style scoped lang="scss">
+.integral_statistics_box {
+  min-width:980px;
+  background-color: #ffffff;
+  padding: 0 20px 0 0;
+  min-height: calc(100vh - 160px);
+}
+
+
+//   .cate-tree {
+//     margin-top: 16px;
+//   }
+  .cate-tree ::v-deep .is-focusable .el-tree-node__content:hover{
+    background:#F5F7FA !important;
+  }
+
+  
+
+  .rule_class_box{
+	  border-top: 1px solid #f0f0f0;
+  }
+ .rule_class_box ::v-deep .el-tree--highlight-current{
+     .el-tree-node{
+      border-bottom:1px #f0f0f0 solid;
+    }
+     .el-tree-node__content{
+	  background-color: rgb(255, 255, 255);
+      height:56px;
+      line-height:56px;
+    }
+    .is-current{
+		.el-tree-node__content{
+			.el-icon-caret-right{
+				// color:#409EFF !important;
+			}
+			.el-tree-node__label{
+				color:#409EFF !important;
+			}
+		}
+		.el-tree-node__children{
+			.el-icon-caret-right{
+				color:#C0C4CC !important;
+			}
+			.el-tree-node__label{
+				color:#606266 !important;
+			}
+		}
+	}
+ }
+ .contentRig{
+	margin-left: 20px;
+    border-top:1px #f0f0f0 solid;
+ }
+
+ 
+.architecture {
+  display: flex;
+//   text-align: center;
+  // margin-top:20px;
+  padding-left: 0px;
+  background-color: #fff;
+  width: 100%;
+  overflow: hidden;
+  cursor: default;
+  min-height: calc(60vh - 160px);
+}
+.architecture .RuleLeft {
+  overflow-x: hidden;
+  display: block;
+  text-align: center;
+//   padding: 20px 10px;
+  border-right: none;
+  overflow-y: auto;
+  overflow-x: none;
+}
+/*滚动条的宽度*/
+
+.architecture .RuleLeft::-webkit-scrollbar {
+  width: 9px;
+  height: 9px;
+}
+.architecture .RuleRight::-webkit-scrollbar {
+  width: 9px;
+  height: 9px;
+}
+
+/*外层轨道。可以用display:none让其不显示,也可以添加背景图片,颜色改变显示效果*/
+
+.architecture .RuleLeft::-webkit-scrollbar-track {
+  width: 6px;
+  background-color: #fff0;
+  -webkit-border-radius: 2em;
+  -moz-border-radius: 2em;
+  border-radius: 2em;
+}
+.architecture .RuleRight::-webkit-scrollbar-track {
+  width: 6px;
+  background-color: #fff0;
+  -webkit-border-radius: 2em;
+  -moz-border-radius: 2em;
+  border-radius: 2em;
+}
+
+/*滚动条的设置*/
+
+.architecture .RuleLeft::-webkit-scrollbar-thumb {
+  background-color: #fff0;
+  background-clip: padding-box;
+  min-height: 28px;
+  -webkit-border-radius: 2em;
+  -moz-border-radius: 2em;
+  border-radius: 2em;
+}
+.architecture .RuleRight::-webkit-scrollbar-thumb {
+  background-color: #fff0;
+  background-clip: padding-box;
+  min-height: 28px;
+  -webkit-border-radius: 2em;
+  -moz-border-radius: 2em;
+  border-radius: 2em;
+}
+/*滚动条移上去的背景*/
+
+.architecture .RuleLeft:hover::-webkit-scrollbar-thumb {
+  overflow-x: none;
+  background-color: rgba(144, 147, 153, 0.3);
+}
+.architecture .RuleRight:hover::-webkit-scrollbar-thumb {
+  background-color: rgba(115, 118, 124, 0.3);
+}
+</style>

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

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

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

@@ -220,7 +220,7 @@
           background
           @size-change="handleSizeChange"
           @current-change="handleCurrentChange"
-          :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"
           :current-page="formData.page"

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

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