|
@@ -7,13 +7,13 @@
|
|
|
<el-form :inline="true">
|
|
|
<el-form-item label="时间">
|
|
|
<el-col :span="8">
|
|
|
- <el-select size="medium" v-model="time_type" placeholder="请选择分类" style="width: 100px;">
|
|
|
+ <el-select size="medium" v-model="time_type" placeholder="请选择分类" style="width: 100px;">
|
|
|
<el-option v-for="item in time_types" :key="item.label" :label="item.label" :value="item.value"></el-option>
|
|
|
</el-select>
|
|
|
</el-col>
|
|
|
<el-col :span="16">
|
|
|
<el-date-picker
|
|
|
- size="medium"
|
|
|
+ size="medium"
|
|
|
v-show="time_type == '2'"
|
|
|
v-model="export_from.year"
|
|
|
class="date-picker-width"
|
|
@@ -22,7 +22,7 @@
|
|
|
placeholder="选择年份排名"
|
|
|
></el-date-picker>
|
|
|
<el-date-picker
|
|
|
- size="medium"
|
|
|
+ size="medium"
|
|
|
v-show="time_type == '1' || time_type == '月份'"
|
|
|
v-model="export_from.month"
|
|
|
class="date-picker-width"
|
|
@@ -35,11 +35,11 @@
|
|
|
</el-form-item>
|
|
|
<el-form-item label="部门">
|
|
|
<el-cascader
|
|
|
- size="medium"
|
|
|
+ size="medium"
|
|
|
class="date-picker-width"
|
|
|
v-model="dept_name"
|
|
|
:options="dept_tree"
|
|
|
- :props="{ checkStrictly: true,value:'id',label:'name',children:'_child'}"
|
|
|
+ :props="{ checkStrictly: true, value: 'id', label: 'name', children: '_child' }"
|
|
|
ref="dept"
|
|
|
clearable
|
|
|
filterable
|
|
@@ -58,39 +58,39 @@
|
|
|
></el-cascader>-->
|
|
|
</el-form-item>
|
|
|
<el-form-item label="谁不参与排名">
|
|
|
- <el-select v-model="formData.exclusion" size="medium" multiple filterable collapse-tags placeholder="请选择员工">
|
|
|
+ <el-select v-model="formData.exclusion" size="medium" multiple filterable collapse-tags 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-form-item label="规则分类">
|
|
|
<el-cascader
|
|
|
size="medium"
|
|
|
class="date-picker-width"
|
|
|
v-model="rule_id"
|
|
|
:options="rule_trees"
|
|
|
- :props="props"
|
|
|
+ :props="props2"
|
|
|
ref="rule"
|
|
|
clearable
|
|
|
collapse-tags
|
|
|
placeholder="请选择规则分类"
|
|
|
></el-cascader>
|
|
|
- </el-form-item> -->
|
|
|
- <el-form-item label="积分分类">
|
|
|
- <el-select class="date-picker-width" size="medium" v-model="formData.pt_id" clearable placeholder="请选择积分分类">
|
|
|
- <el-option v-for="item in point_types" :key="item.name" :label="item.name" :value="item.id"></el-option>
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="积分分类">
|
|
|
+ <el-select class="date-picker-width" size="medium" v-model="formData.pt_id" clearable placeholder="请选择积分分类">
|
|
|
+ <el-option v-for="item in point_types" :key="item.name" :label="item.name" :value="item.id"></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
<el-form-item label="人员">
|
|
|
- <el-select size="medium" v-model="formData.position" style="width:150px" placeholder="请选择">
|
|
|
+ <el-select size="medium" v-model="formData.position" style="width:150px" placeholder="请选择">
|
|
|
<el-option v-for="item in positions" :key="item.id" :label="item.name" :value="item.age"></el-option>
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
<el-form-item>
|
|
|
<el-checkbox v-model="sort" size="medium" label="排名由低到高" border></el-checkbox>
|
|
|
- <el-button type="primary" size="medium" @click="selectBtn" style="margin-left:20px">查询</el-button>
|
|
|
+ <el-button type="primary" size="medium" @click="selectBtn" style="margin-left:20px">查询</el-button>
|
|
|
</el-form-item>
|
|
|
<el-form-item>
|
|
|
- <el-button type="primary" size="medium" plain @click="dialogVisible = true">导出排名</el-button>
|
|
|
+ <el-button type="primary" size="medium" plain @click="dialogVisible = true">导出排名</el-button>
|
|
|
<!-- <el-button type="primary" size="medium" plain @click="byRanking('byRankingData')">轮播排名</el-button> -->
|
|
|
</el-form-item>
|
|
|
</el-form>
|
|
@@ -105,10 +105,10 @@
|
|
|
</el-table-column>
|
|
|
<el-table-column label="姓名" align="left">
|
|
|
<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>
|
|
|
+ <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>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
<el-table-column :label="labelName" align="left" prop="point"></el-table-column>
|
|
@@ -140,7 +140,7 @@
|
|
|
<el-date-picker
|
|
|
v-model="Dc_Data.value1"
|
|
|
type="daterange"
|
|
|
- size="medium"
|
|
|
+ size="medium"
|
|
|
value-format="yyyy-MM-dd"
|
|
|
format="yyyy-MM-dd"
|
|
|
range-separator="至"
|
|
@@ -150,7 +150,7 @@
|
|
|
</el-form-item>
|
|
|
|
|
|
<el-form-item label="人员" style="margin-left:30px">
|
|
|
- <el-select size="medium" v-model="Dc_Data.DC_position" style="width:150px" placeholder="请选择">
|
|
|
+ <el-select size="medium" v-model="Dc_Data.DC_position" style="width:150px" placeholder="请选择">
|
|
|
<el-option v-for="item in positions" :key="item.id" :label="item.name" :value="item.age"></el-option>
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
@@ -160,7 +160,7 @@
|
|
|
class="date-picker-width cascader_bm"
|
|
|
v-model="Dc_Data.dept_name"
|
|
|
:options="dept_tree"
|
|
|
- :props="{ checkStrictly: true,value:'id',label:'name',children:'_child'}"
|
|
|
+ :props="{ checkStrictly: true, value: 'id', label: 'name', children: '_child' }"
|
|
|
ref="dept2"
|
|
|
size="medium"
|
|
|
clearable
|
|
@@ -171,11 +171,11 @@
|
|
|
<el-form-item label="规则分类" style="margin-left:20px">
|
|
|
<el-cascader
|
|
|
class="date-picker-width"
|
|
|
- @change="ruleInquiredialog"
|
|
|
+ @change="ruleInquiredialog"
|
|
|
v-model="rule_ids"
|
|
|
:options="rule_trees"
|
|
|
:props="props"
|
|
|
- size="medium"
|
|
|
+ size="medium"
|
|
|
ref="derive"
|
|
|
clearable
|
|
|
collapse-tags
|
|
@@ -184,8 +184,8 @@
|
|
|
</el-form-item>
|
|
|
</el-form>
|
|
|
<span slot="footer" class="dialog-footer">
|
|
|
- <el-button @click="dialogVisible = false" size="medium">取 消</el-button>
|
|
|
- <el-button type="primary" @click="exportExcel" size="medium">导 出</el-button>
|
|
|
+ <el-button @click="dialogVisible = false" size="medium">取 消</el-button>
|
|
|
+ <el-button type="primary" @click="exportExcel" size="medium">导 出</el-button>
|
|
|
</span>
|
|
|
</el-dialog>
|
|
|
|
|
@@ -194,15 +194,22 @@
|
|
|
<div>
|
|
|
<el-form :inline="true" ref="byRankingData" :model="byRankingData" :rules="byRankingDataRules" label-width="90px">
|
|
|
<el-form-item label="月份" prop="month">
|
|
|
- <el-date-picker v-model="byRankingData.month" size="medium" class="date-picker-width" type="month" value-format="yyyy-MM" placeholder="选择月份排名"></el-date-picker>
|
|
|
+ <el-date-picker
|
|
|
+ v-model="byRankingData.month"
|
|
|
+ size="medium"
|
|
|
+ class="date-picker-width"
|
|
|
+ type="month"
|
|
|
+ value-format="yyyy-MM"
|
|
|
+ placeholder="选择月份排名"
|
|
|
+ ></el-date-picker>
|
|
|
</el-form-item>
|
|
|
<el-form-item label="选择部门" prop="dept_id">
|
|
|
<el-cascader
|
|
|
- size="medium"
|
|
|
+ size="medium"
|
|
|
class="date-picker-width"
|
|
|
v-model="byRankingData.dept_id"
|
|
|
:options="dept_tree"
|
|
|
- :props="{ checkStrictly: true,value:'obj',label:'name',children:'_child'}"
|
|
|
+ :props="{ checkStrictly: true, value: 'obj', label: 'name', children: '_child' }"
|
|
|
ref="dept1"
|
|
|
clearable
|
|
|
filterable
|
|
@@ -210,7 +217,7 @@
|
|
|
></el-cascader>
|
|
|
</el-form-item>
|
|
|
<el-form-item label="人员范围" prop="position">
|
|
|
- <el-radio-group size="medium" v-model="byRankingData.position">
|
|
|
+ <el-radio-group size="medium" v-model="byRankingData.position">
|
|
|
<el-radio label="all">管理者和员工</el-radio>
|
|
|
<el-radio label="manager">只看管理者</el-radio>
|
|
|
<el-radio label="employee">只看员工</el-radio>
|
|
@@ -219,8 +226,8 @@
|
|
|
</el-form>
|
|
|
</div>
|
|
|
<span slot="footer">
|
|
|
- <el-button @click="byRankingShow = false" size="medium">取 消</el-button>
|
|
|
- <el-button type="primary" @click="swiperPage('byRankingData')" size="medium">开始轮播</el-button>
|
|
|
+ <el-button @click="byRankingShow = false" size="medium">取 消</el-button>
|
|
|
+ <el-button type="primary" @click="swiperPage('byRankingData')" size="medium">开始轮播</el-button>
|
|
|
</span>
|
|
|
</el-dialog>
|
|
|
</div>
|
|
@@ -231,7 +238,7 @@ import season from '@/components/season';
|
|
|
export default {
|
|
|
data() {
|
|
|
return {
|
|
|
- rule_ids:null,
|
|
|
+ rule_ids: null,
|
|
|
Dc_Data: {
|
|
|
//导出数据
|
|
|
value1: '', //时间
|
|
@@ -250,7 +257,7 @@ export default {
|
|
|
time_type: 1,
|
|
|
exclusion: [],
|
|
|
page: 1,
|
|
|
- rule_id: [],
|
|
|
+ rule_id: '',
|
|
|
page_size: 10,
|
|
|
position: 0 //部门多选删除这个
|
|
|
},
|
|
@@ -258,11 +265,12 @@ export default {
|
|
|
rule_trees: null,
|
|
|
rule_id: null,
|
|
|
list: null,
|
|
|
- point_types:[],
|
|
|
+ point_types: [],
|
|
|
point_type: [],
|
|
|
sort: false,
|
|
|
time_types: [{ label: '月份', value: '1' }, { label: '年份', value: '2' }, { label: '季度', value: '3' }],
|
|
|
props: { value: 'id', label: 'name', children: 'child', multiple: true },
|
|
|
+ props2: { value: 'id', label: 'name', children: 'child'},
|
|
|
time_type: '月份',
|
|
|
export_from: {
|
|
|
year: '',
|
|
@@ -284,7 +292,7 @@ export default {
|
|
|
dept_id: [{ required: true, message: '请选择部门', trigger: 'change' }],
|
|
|
position: [{ required: true, message: '请选择人员范围', trigger: 'change' }]
|
|
|
},
|
|
|
- labelName:'B分',
|
|
|
+ labelName: 'B分'
|
|
|
};
|
|
|
},
|
|
|
watch: {
|
|
@@ -319,46 +327,48 @@ export default {
|
|
|
this.$refs.dept2.dropDownVisible = false;
|
|
|
},
|
|
|
rule_id(val) {
|
|
|
- if (val.length !== 0) {
|
|
|
- this.formData.rule_id = [];
|
|
|
- val.forEach((element, index) => {
|
|
|
- this.formData.rule_id.push(element[element.length - 1]);
|
|
|
- });
|
|
|
- } else {
|
|
|
- this.formData.rule_id !== undefined ? delete this.formData.rule_id : '';
|
|
|
+ if(val.length==0){
|
|
|
+ this.formData.rule_id='';
|
|
|
+ return false
|
|
|
+ }
|
|
|
+
|
|
|
+ if(val.length==1){
|
|
|
+ this.formData.rule_id=JSON.stringify(val)
|
|
|
+ }else{
|
|
|
+ this.formData.rule_id=JSON.stringify([val[val.length-1]]);
|
|
|
}
|
|
|
}
|
|
|
},
|
|
|
components: { season },
|
|
|
methods: {
|
|
|
- ruleInquiredialog(){
|
|
|
- this.ruleUtif("derive")
|
|
|
+ ruleInquiredialog() {
|
|
|
+ this.ruleUtif('derive');
|
|
|
},
|
|
|
- ruleUtif(rule){
|
|
|
- let ruleList = this.$refs[rule].getCheckedNodes()
|
|
|
- let ruleId = []
|
|
|
- ruleList.forEach(item=>{
|
|
|
- ruleId.push(item.value)
|
|
|
- })
|
|
|
- if(rule == 'ruleinquire'){
|
|
|
- this.formData.rule_id = ruleId
|
|
|
- }else{
|
|
|
- this.Dc_Data.rule_id = ruleId
|
|
|
+ ruleUtif(rule) {
|
|
|
+ let ruleList = this.$refs[rule].getCheckedNodes();
|
|
|
+ let ruleId = [];
|
|
|
+ ruleList.forEach(item => {
|
|
|
+ ruleId.push(item.value);
|
|
|
+ });
|
|
|
+ if (rule == 'ruleinquire') {
|
|
|
+ this.formData.rule_id = ruleId;
|
|
|
+ } else {
|
|
|
+ this.Dc_Data.rule_id = ruleId;
|
|
|
}
|
|
|
- this.$nextTick(()=>{
|
|
|
- if(this.$refs[rule].presentTags[1]){
|
|
|
- this.$refs[rule].presentTags[1].text = '+ '+(ruleId.length-1).toString()
|
|
|
- }else{
|
|
|
- if(ruleId.length>1){
|
|
|
- let list = {
|
|
|
- closable: false,
|
|
|
- key: -1,
|
|
|
- text: '+ '+(ruleId.length-1).toString()
|
|
|
+ this.$nextTick(() => {
|
|
|
+ if (this.$refs[rule].presentTags[1]) {
|
|
|
+ this.$refs[rule].presentTags[1].text = '+ ' + (ruleId.length - 1).toString();
|
|
|
+ } else {
|
|
|
+ if (ruleId.length > 1) {
|
|
|
+ let list = {
|
|
|
+ closable: false,
|
|
|
+ key: -1,
|
|
|
+ text: '+ ' + (ruleId.length - 1).toString()
|
|
|
+ };
|
|
|
+ this.$refs[rule].presentTags[1] = list;
|
|
|
}
|
|
|
- this.$refs[rule].presentTags[1] = list
|
|
|
}
|
|
|
- }
|
|
|
- })
|
|
|
+ });
|
|
|
},
|
|
|
// 轮播页面跳转
|
|
|
swiperPage(formName) {
|
|
@@ -371,7 +381,7 @@ export default {
|
|
|
type: '2',
|
|
|
position: this.byRankingData.position,
|
|
|
dept_id: this.byRankingData.dept_id[0].id,
|
|
|
- dept_name:this.byRankingData.dept_id[0].name,
|
|
|
+ dept_name: this.byRankingData.dept_id[0].name,
|
|
|
pt_id: 3
|
|
|
}
|
|
|
});
|
|
@@ -381,12 +391,12 @@ export default {
|
|
|
},
|
|
|
// 轮播排名弹窗
|
|
|
byRanking() {
|
|
|
- this.byRankingData={
|
|
|
+ (this.byRankingData = {
|
|
|
month: '',
|
|
|
dept_id: '',
|
|
|
position: 'all'
|
|
|
- },
|
|
|
- this.byRankingShow = true;
|
|
|
+ }),
|
|
|
+ (this.byRankingShow = true);
|
|
|
},
|
|
|
// 提示信息
|
|
|
tips_close() {
|
|
@@ -415,10 +425,11 @@ export default {
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
let data = JSON.parse(JSON.stringify(this.formData));
|
|
|
- var employee_ids =data.exclusion.join(',');
|
|
|
- data.exclusion=employee_ids;
|
|
|
+ console.log(data);
|
|
|
+ var employee_ids = data.exclusion.join(',');
|
|
|
+ data.exclusion = employee_ids;
|
|
|
data.page = 1;
|
|
|
data.page_size = 10;
|
|
|
this.$nextTick(() => {
|
|
@@ -460,25 +471,26 @@ export default {
|
|
|
let self = this;
|
|
|
self.loading = true;
|
|
|
data ? '' : (data = this.formData);
|
|
|
-
|
|
|
+
|
|
|
data.position = data.position == 'manager' ? 'manager' : data.position == 'employee' ? 'employee' : 'all';
|
|
|
- self.$axios('get','/api/integral/statistics/ranking',data,'v2').then(res => {
|
|
|
- this.labelName=this.formData.pt_id==2? 'A分':'B分';
|
|
|
- if (res.data.code == 1) {
|
|
|
- self.list = res.data.data.list;
|
|
|
- self.total = res.data.data.total;
|
|
|
- } else {
|
|
|
- self.$message.error(res.data.data.msg);
|
|
|
- }
|
|
|
- })
|
|
|
- .finally(() => {
|
|
|
- self.loading = false;
|
|
|
- });
|
|
|
+ self.$axios('get', '/api/integral/statistics/ranking', data, 'v2')
|
|
|
+ .then(res => {
|
|
|
+ this.labelName = this.formData.pt_id == 2 ? 'A分' : 'B分';
|
|
|
+ if (res.data.code == 1) {
|
|
|
+ self.list = res.data.data.list;
|
|
|
+ self.total = res.data.data.total;
|
|
|
+ } else {
|
|
|
+ self.$message.error(res.data.data.msg);
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .finally(() => {
|
|
|
+ self.loading = false;
|
|
|
+ });
|
|
|
},
|
|
|
// 获取积分规则
|
|
|
get_rule_tree() {
|
|
|
- this.$axios('get','/api/integral/rule/trees',{ cycle_type: '1'}).then(res => {
|
|
|
- this.rule_trees =this.getRuleTreeData(res.data.data.rule_tree);
|
|
|
+ this.$axios('get', '/api/integral/rule/trees', { cycle_type: '1' }).then(res => {
|
|
|
+ this.rule_trees = this.getRuleTreeData(res.data.data.rule_tree);
|
|
|
});
|
|
|
},
|
|
|
// 规则递归 children
|
|
@@ -497,7 +509,7 @@ export default {
|
|
|
// 递归判断列表,把最后的children设为undefined
|
|
|
getTreeData(data) {
|
|
|
for (var i = 0; i < data.length; i++) {
|
|
|
- data[i].obj={id:data[i].id,name:data[i].name};
|
|
|
+ data[i].obj = { id: data[i].id, name: data[i].name };
|
|
|
if (data[i]._child.length < 1) {
|
|
|
// children若为空数组,则将children设为undefined
|
|
|
data[i]._child = undefined;
|
|
@@ -510,18 +522,19 @@ export default {
|
|
|
},
|
|
|
getEmployeeList() {
|
|
|
let self = this;
|
|
|
- self.$axios('get','/api/employee/list',{ dept_id: self.formData.dept_id }).then(res => {
|
|
|
+ self.$axios('get', '/api/employee/list', { dept_id: self.formData.dept_id }).then(res => {
|
|
|
if (res.data.code == 1) {
|
|
|
this.employee_map = res.data.data.list;
|
|
|
} else {
|
|
|
self.$message.error(res.data.data.msg);
|
|
|
}
|
|
|
- })
|
|
|
+ });
|
|
|
},
|
|
|
|
|
|
exportExcel() {
|
|
|
//人员
|
|
|
- this.Dc_Data.DC_position =this.Dc_Data.DC_position == 'manager' ? 'manager' : this.Dc_Data.DC_position == 'employee' ? 'employee' : this.Dc_Data.DC_position == '全部' ? 'all' : 'all';
|
|
|
+ this.Dc_Data.DC_position =
|
|
|
+ this.Dc_Data.DC_position == 'manager' ? 'manager' : this.Dc_Data.DC_position == 'employee' ? 'employee' : this.Dc_Data.DC_position == '全部' ? 'all' : 'all';
|
|
|
//部门
|
|
|
let dept_name;
|
|
|
for (let i in this.Dc_Data.dept_name) {
|
|
@@ -546,18 +559,18 @@ export default {
|
|
|
if (this.Dc_Data.rule_id.length > 0) {
|
|
|
data += '&rule_id=' + this.Dc_Data.rule_id;
|
|
|
}
|
|
|
- window.open(process.env.VUE_APP_BASE_API + 'api/download/ranking/v2?pt_id='+this.formData.pt_id+'&employee_id='+this.$getUserData().id+ data, '_blank');
|
|
|
+ window.open(process.env.VUE_APP_BASE_API + 'api/download/ranking/v2?pt_id=' + this.formData.pt_id + '&employee_id=' + this.$getUserData().id + data, '_blank');
|
|
|
this.dialogVisible = false;
|
|
|
},
|
|
|
//获取部门
|
|
|
getDepartment() {
|
|
|
- this.$axios('get','/api/department/tree').then(res => {
|
|
|
- this.dept_tree =this.getTreeData(res.data.data.list);
|
|
|
+ this.$axios('get', '/api/department/tree').then(res => {
|
|
|
+ this.dept_tree = this.getTreeData(res.data.data.list);
|
|
|
});
|
|
|
- },
|
|
|
+ }
|
|
|
},
|
|
|
mounted() {
|
|
|
- this.point_types=this.$getTyps();
|
|
|
+ this.point_types = this.$getTyps();
|
|
|
this.tips_show = JSON.parse(localStorage.getItem('dept_rank_tips')) ? false : true;
|
|
|
this.getDepartment();
|
|
|
this.getEmployeeList();
|