|
@@ -182,6 +182,84 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
|
+ <div class="raiders_box" >
|
|
|
+ <div class="flex-box-ce">
|
|
|
+ <div class="flex-1">
|
|
|
+ <b class="title">
|
|
|
+ 部门排名
|
|
|
+ <el-tooltip placement="top">
|
|
|
+ <div slot="content">统计同级部门积分数据</div>
|
|
|
+ <i class="el-icon-question fontColorC"></i>
|
|
|
+ </el-tooltip>
|
|
|
+ </b>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <el-form :inline="true" v-if="this.supAuthority !== 'employee'" style="margin-top: 10px">
|
|
|
+ <el-form-item label="时间区间">
|
|
|
+ <el-date-picker
|
|
|
+ v-model="deptRankForm.timeRange"
|
|
|
+ type="daterange"
|
|
|
+ align="right"
|
|
|
+ unlink-panels
|
|
|
+ range-separator="至"
|
|
|
+ start-placeholder="开始日期"
|
|
|
+ end-placeholder="结束日期"
|
|
|
+ value-format="yyyy-MM-dd"
|
|
|
+ editable
|
|
|
+ ></el-date-picker>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="部门">
|
|
|
+ <el-cascader
|
|
|
+ v-model="dept_name4"
|
|
|
+ :options="dept_tree"
|
|
|
+ @change="deptRankChange"
|
|
|
+ ref="dept4"
|
|
|
+ filterable
|
|
|
+ change-on-select
|
|
|
+ placeholder="公司顶级部门"
|
|
|
+ clearable
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="子部门">
|
|
|
+ <el-checkbox v-model="deptRankForm.deptIncludeSub">包含</el-checkbox>
|
|
|
+ </el-form-item>
|
|
|
+ <br/>
|
|
|
+ <el-form-item label="规则分类">
|
|
|
+ <el-cascader
|
|
|
+ ref="deptRankRule"
|
|
|
+ v-model="rule"
|
|
|
+ @change="deptRankRuleChange"
|
|
|
+ :options="ruleTrees"
|
|
|
+ :props="{value:'id',label:'name',children:'child'}"
|
|
|
+ clearable
|
|
|
+ filterable
|
|
|
+ change-on-select
|
|
|
+ placeholder="规则分类"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="子分类">
|
|
|
+ <el-checkbox v-model="deptRankForm.ruleIncludeSub">包含</el-checkbox>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="积分类型">
|
|
|
+ <el-select v-model="deptRankForm.ptId" placeholder="请选择积分类型">
|
|
|
+ <el-option v-for="item in $getTyps()" :key="item.id" :label="item.name" :value="item.id"></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ </el-form>
|
|
|
+ <div v-loading="deptRankLoading">
|
|
|
+ <NoData v-if="deptRankList.length === 0" :isSolt="true">
|
|
|
+ <span class="title1">
|
|
|
+ 暂无积分数据
|
|
|
+ <span v-if="supAuthority !== 'employee'" @click="$router.push({path:'/award_punish'})" style="color:#409EFF;cursor:pointer;">,去奖扣积分</span>
|
|
|
+ </span>
|
|
|
+ </NoData>
|
|
|
+ <div>
|
|
|
+ <div ref="deptFormChart" :style="{ width: '100%', height: '400px' }"></div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
<div class="raiders_box">
|
|
|
<div style="position: relative;">
|
|
|
<div><b class="title" style="margin-bottom:15px;display:block">积分构成
|
|
@@ -382,6 +460,8 @@ export default {
|
|
|
},
|
|
|
data() {
|
|
|
return {
|
|
|
+ ruleTrees:[],
|
|
|
+ rule:[],
|
|
|
noticeRole: !this.$supremeAuthority('dept_manager')&&!this.$supremeAuthority('employee'),
|
|
|
innerVisible: false,
|
|
|
experience_data: false, //是否体验账号
|
|
@@ -451,6 +531,7 @@ export default {
|
|
|
ManagerSAwardnone: false, //管理者奖扣执行情况为空或报错,展示的开关
|
|
|
dept_name2: [], //本月积分情况--部门
|
|
|
dept_name3: [], //管理者统计数据--部门
|
|
|
+ dept_name4:[], //部门排名
|
|
|
dept_tree: [], //部门
|
|
|
RankingPush: '',
|
|
|
tabPositionLoad: false, //排名分类loading
|
|
@@ -538,7 +619,28 @@ export default {
|
|
|
}
|
|
|
}
|
|
|
]
|
|
|
- }
|
|
|
+ },
|
|
|
+
|
|
|
+ deptRankLoading: false,
|
|
|
+ deptRankChart:null,
|
|
|
+ deptRankForm:{
|
|
|
+ ptId:this.$getTyps().filter(item => item.code === 'BF')[0].id,
|
|
|
+ // startDate:this.$moment().startOf('week').format('YYYY-MM-DD'),
|
|
|
+ // endDate:this.$moment().format('YYYY-MM-DD'),
|
|
|
+ timeRange:[
|
|
|
+ this.$moment().startOf('week').format('YYYY-MM-DD'),
|
|
|
+ this.$moment().format('YYYY-MM-DD')
|
|
|
+ ],
|
|
|
+ ruleId:0,
|
|
|
+ ruleIncludeSub:false,
|
|
|
+ deptId:0,
|
|
|
+ deptIncludeSub:false,
|
|
|
+ itemId:0
|
|
|
+ },
|
|
|
+ deptRankTimeScope:[],
|
|
|
+ deptRankList: [
|
|
|
+ // {name:'',point:0} //echart必须要有初始化数据后面才可以正常渲染图形,不知道为什么
|
|
|
+ ],
|
|
|
};
|
|
|
},
|
|
|
watch: {
|
|
@@ -558,6 +660,38 @@ export default {
|
|
|
},
|
|
|
pkTimeScope(val){
|
|
|
if (this.pkList.length > this.activeDoc) this.getPkRankList(this.pkList[this.activeDoc].id);
|
|
|
+ },
|
|
|
+ deptRankTimeScope(val){
|
|
|
+ this.deptRankForm.startDate = val[0];
|
|
|
+ this.deptRankForm.endDate = val[1];
|
|
|
+ },
|
|
|
+ deptRankList(value){
|
|
|
+ if (value.length === 0) {
|
|
|
+ this.$refs.deptFormChart.style.display = 'none';
|
|
|
+ }else {
|
|
|
+ this.$refs.deptFormChart.style.display = 'block';
|
|
|
+ }
|
|
|
+ this.drawDeptRank();
|
|
|
+ },
|
|
|
+ 'deptRankForm.ptId'(val,oVal){
|
|
|
+ if (val === oVal) return;
|
|
|
+ this.getDeptRank();
|
|
|
+ },
|
|
|
+ 'deptRankForm.deptId'(val,oVal){
|
|
|
+ if (val === oVal) return;
|
|
|
+ this.getDeptRank();
|
|
|
+ },
|
|
|
+ 'deptRankForm.timeRange'(val,oVal){
|
|
|
+ this.getDeptRank();
|
|
|
+ },
|
|
|
+ 'deptRankForm.deptIncludeSub'(val,oVal){
|
|
|
+ this.getDeptRank();
|
|
|
+ },
|
|
|
+ 'deptRankForm.ruleId'(val,oVal){
|
|
|
+ this.getDeptRank();
|
|
|
+ },
|
|
|
+ 'deptRankForm.ruleIncludeSub'(val,oVal){
|
|
|
+ this.getDeptRank();
|
|
|
}
|
|
|
},
|
|
|
computed: {
|
|
@@ -578,8 +712,11 @@ export default {
|
|
|
selfAdaption() {
|
|
|
var myChart1 =ECharts.init(this.$refs.monthlyIntegralChart);
|
|
|
var myChart2 =ECharts.init(this.$refs.IntegralFormChart);
|
|
|
+ // var myChart3 = ECharts.init(this.$refs.deptFormChart);
|
|
|
myChart1.resize();
|
|
|
myChart2.resize();
|
|
|
+ this.deptRankChart.resize();
|
|
|
+ // myChart3.resize();
|
|
|
},
|
|
|
//点击轮播图
|
|
|
bannerImagePush(item) {
|
|
@@ -1447,8 +1584,131 @@ export default {
|
|
|
this.rwTotal=res[1].data.data.total;//任务数量
|
|
|
})
|
|
|
},
|
|
|
+ deptRankChange(val){
|
|
|
+ if (val.length === 0){
|
|
|
+ this.deptRankForm.deptId = 0;
|
|
|
+ }else {
|
|
|
+ this.deptRankForm.deptId = val[val.length - 1];
|
|
|
+ }
|
|
|
+ this.$nextTick(() => {
|
|
|
+ this.$refs.dept4.dropDownVisible = false;
|
|
|
+ })
|
|
|
+ },
|
|
|
+ getDeptRank(){
|
|
|
+ if (!this.deptRankForm.timeRange || this.deptRankForm.timeRange.length !== 2 || this.deptRankForm.ptId <= 0) return;
|
|
|
+
|
|
|
+ this.deptRankLoading = true;
|
|
|
+ let msg = {
|
|
|
+ type: 'dr',
|
|
|
+ start_date:this.deptRankForm.timeRange[0],
|
|
|
+ end_date:this.deptRankForm.timeRange[1],
|
|
|
+ pt_id:this.deptRankForm.ptId,
|
|
|
+ dept_id:this.deptRankForm.deptId,
|
|
|
+ dept_include_sub:this.deptRankForm.deptIncludeSub ? 1 : 0,
|
|
|
+ rule_id:this.deptRankForm.ruleId,
|
|
|
+ rule_include_sub:this.deptRankForm.ruleIncludeSub ? 1 : 0,
|
|
|
+ item_id:this.deptRankForm.itemId
|
|
|
+ };
|
|
|
+ this.$socketApiTow.sendData(msg,(res) => {
|
|
|
+ if (res.type !== msg.type || res.code !== 1) return;
|
|
|
+ this.deptRankList = res.result.list;
|
|
|
+ this.deptRankLoading = false;
|
|
|
+ })
|
|
|
+ },
|
|
|
+ drawDeptRank() {
|
|
|
+ if (!this.deptRankChart) return;
|
|
|
+ //正负条形图
|
|
|
+ let itemStyle = {color:'#91CC75',shadowColor: '#91cc75',borderType: 'dashed'};
|
|
|
+
|
|
|
+ let option = {
|
|
|
+ tooltip:{
|
|
|
+ trigger:'axis',
|
|
|
+ axisPointer: {
|
|
|
+ type:'shadow'
|
|
|
+ }
|
|
|
+ },
|
|
|
+ grid: {
|
|
|
+ left: '1%',
|
|
|
+ right: '4%',
|
|
|
+ bottom: '3%',
|
|
|
+ containLabel: true
|
|
|
+ },
|
|
|
+ xAxis:{
|
|
|
+ type:'value'
|
|
|
+ },
|
|
|
+ yAxis:{
|
|
|
+ type: 'category',
|
|
|
+ axisTick: {
|
|
|
+ show: false
|
|
|
+ },
|
|
|
+ data:[]
|
|
|
+ },
|
|
|
+ series:{
|
|
|
+ name:'积分',
|
|
|
+ type:'bar',
|
|
|
+ label:{
|
|
|
+ show:true,
|
|
|
+ position:'inside'
|
|
|
+ },
|
|
|
+ data:[
|
|
|
+ ]
|
|
|
+ }
|
|
|
+ };
|
|
|
+ option.yAxis.data = [];
|
|
|
+ option.series.data = [];
|
|
|
+ let colorOk = '#409EFF';
|
|
|
+ let colorBad = '#F36F2A';
|
|
|
+ let colorNone = '#FECB09';
|
|
|
+ this.deptRankList.forEach(item => {
|
|
|
+ option.yAxis.data.push(item.name);
|
|
|
+
|
|
|
+ let value = {
|
|
|
+ value: item.point,
|
|
|
+ itemStyle:{color:item.point > 0 ? colorOk : (item.point === 0 ? colorNone : colorBad)}
|
|
|
+ }
|
|
|
+ option.series.data.push(value)
|
|
|
+ })
|
|
|
+
|
|
|
+ //生成图像
|
|
|
+ this.deptRankChart.setOption(option);
|
|
|
+ },
|
|
|
+ deptRankRuleChange(val){
|
|
|
+ if (val.length === 0){
|
|
|
+ this.deptRankForm.ruleId = 0;
|
|
|
+ }else {
|
|
|
+ this.deptRankForm.ruleId = val[val.length - 1];
|
|
|
+ }
|
|
|
+ this.$nextTick(() => {
|
|
|
+ this.$refs.deptRankRule.dropDownVisible = false;
|
|
|
+ })
|
|
|
+ },
|
|
|
+ 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;
|
|
|
+ },
|
|
|
+ getRuleTrees(){
|
|
|
+ let self = this;
|
|
|
+ self.$axiosUser('get', '/api/pro/integral/rule/trees',{ cycle_type: '1' }).then(res => {
|
|
|
+ if (res.data.code == 1) {
|
|
|
+ let arr = res.data.data.rule_tree;
|
|
|
+ self.ruleTrees = self.getRuleTreeData(arr);
|
|
|
+ } else {
|
|
|
+ self.$message.error(res.data.data.msg);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
},
|
|
|
created() {
|
|
|
+
|
|
|
this.$store.dispatch('get_dept_tree',true).then(res => {
|
|
|
this.$nextTick(() => {
|
|
|
this.dept_tree = this.getTreeData(this.$getCache('dept_tree'));
|
|
@@ -1466,12 +1726,15 @@ export default {
|
|
|
|
|
|
const pkStartData = new Date();
|
|
|
const pkEndData = new Date();
|
|
|
- pkStartData.setTime(pkStartData.getTime() - 3600 * 1000 * 24 * 30);
|
|
|
+ pkStartData.setTime(pkEndData.getTime() - 3600 * 1000 * 24 * 30);
|
|
|
this.pkTimeScope[0] = this.$moment(pkStartData).format("YYYY-MM-DD");
|
|
|
this.pkTimeScope[1] = this.$moment(pkEndData).format("YYYY-MM-DD");
|
|
|
|
|
|
+ this.getRuleTrees();
|
|
|
},
|
|
|
mounted() {
|
|
|
+ this.deptRankChart = ECharts.init(this.$refs.deptFormChart); //初始化部门排名图形对象
|
|
|
+
|
|
|
this.inCommonUse.forEach((item,index)=>{
|
|
|
if(this.supAuthority=='employee'&&(index==1||index==4||index==5)){
|
|
|
item.isShow=true;
|
|
@@ -1482,13 +1745,19 @@ export default {
|
|
|
if (this.$getCache('Experience_data')) {
|
|
|
this.experience_data =this.$getCache('Experience_data').if; //是否体验账号
|
|
|
}
|
|
|
- window.addEventListener('resize', this.selfAdaption);
|
|
|
+ window.addEventListener('resize', this.selfAdaption); //浏览器窗口大小变化触发图形对象重新自适应计算大小
|
|
|
// 修改请求接口顺序
|
|
|
|
|
|
this.getNum();// 获取审批和任务数量
|
|
|
this.authorityManagerHeader(); //管理员header
|
|
|
this.rankingListname(); //获取自定义排行榜名
|
|
|
- this.getPkDocList(); //pk档案列表
|
|
|
+
|
|
|
+ //websocket数据统一处理
|
|
|
+ this.$socketApiTow.authWebSocket(() => {
|
|
|
+ this.getPkDocList(); //pk档案列表
|
|
|
+ this.getDeptRank(); //获取部门排名数据
|
|
|
+ });
|
|
|
+
|
|
|
this.integralForm(); //积分构成
|
|
|
|
|
|
this.weekChecking_in(); //本周考勤
|