Commit 8e2957ce authored by ww-xxy's avatar ww-xxy

修改绩效目标

parent 33eafaaf
......@@ -21,26 +21,52 @@ export default {
},
styleObj: {
type: Object,
default: () => {},
default: () => { },
},
parameter: {
type: Object,
default: () => { }
}
},
data() {
return {};
return {
myChart: null
};
},
watch: {
title(val) {
console.log(val);
this.drawLine();
this.myChart && this.myChart.setOption({title:{text:val}})
},
parameter: {
handler: function (v) {
this.drawLine(v)
},
deep: true
}
},
mounted() {
this.drawLine();
},
methods: {
drawLine() {
drawLine(obj) {
if (obj && this.myChart) {
// 更新
this.myChart.setOption({
xAxis: {
data: obj.x
},
series: [
{
data: obj.y,
},
]
})
return
}
// 基于dom,初始化echarts实例
let myChart = this.$echarts.init(document.getElementById(this.id));
this.myChart = myChart
// 绘制图表
myChart.setOption({
title: {
......@@ -50,7 +76,7 @@ export default {
fontSize: this.legendName == "旷工率" ? 24 : 18,
},
},
color:'#6e98ed',
color: '#6e98ed',
legend: {
orient: "horizontal",
right: "50px",
......@@ -65,7 +91,7 @@ export default {
},
tooltip: {},
xAxis: {
data: ["部门1", "部门2", "部门3", "部门4", "部门5", "部门6"],
data: [],
},
grid: {
left: "5%",
......@@ -79,9 +105,9 @@ export default {
{
name: this.legendName,
type: "bar",
data: [5, 20, 36, 10, 10, 20],
data: [],
itemStyle: {
lineStyle: {
type: "dotted", //'dotted'虚线 'solid'实线
},
......
......@@ -3,130 +3,109 @@
<el-dialog :title="title" :visible.sync="open" width="90%" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="180px">
<el-row>
<Field
label="负责人id号"
prop="ownerId"
v-model="form.ownerId"
placeholder="请输入负责人id号"
/>
<Field
label="负责人名称"
prop="ownerName"
v-model="form.ownerName"
placeholder="请输入负责人名称"
/>
<Field
label="窗口工作人员id号"
prop="staffId"
v-model="form.staffId"
placeholder="请输入窗口工作人员id号"
/>
<Field
label="请假类型"
prop="assessmentType"
v-model="form.assessmentType"
type="select"
:enumData="dict.assessmentType"
placeholder="请选择请假类型"
/>
<Field
label="考核范围"
prop="assessmentScope"
v-model="form.assessmentScope"
type="select"
:enumData="dict.assessmentScope"
placeholder="请选择考核范围"
/>
<Field
label="考比较类型"
prop="compareScope"
v-model="form.compareScope"
type="select"
:enumData="dict.compareScope"
placeholder="请选择考比较类型"
/>
<Field
label="比例"
prop="ratio"
v-model="form.ratio"
placeholder="请输入比例"
/>
<Field
label="周期类型"
prop="periodType"
v-model="form.periodType"
type="select"
:enumData="dict.periodType"
placeholder="请选择周期类型"
/>
<Field
label="年"
prop="year"
v-model="form.year"
placeholder="请输入年"
/>
<Field
label="月"
prop="month"
v-model="form.month"
type="select"
:enumData="dict.month"
placeholder="请选择月"
/>
<Field
label="半年类型"
prop="halfYear"
v-model="form.halfYear"
type="select"
:enumData="dict.halfYear"
placeholder="请选择半年类型"
/>
<Field
label="半年类型"
prop="halfYear"
v-model="form.halfYear"
type="select"
:enumData="dict.halfYear"
placeholder="请选择半年类型"
/>
<Field
label="季度类型"
prop="quarter"
v-model="form.quarter"
type="select"
:enumData="dict.quarter"
placeholder="请选择季度类型"
/>
<Field
label="负责人,多个逗号分割"
prop="leaders"
v-model="form.leaders"
type="textarea"
placeholder="请输入负责人,多个逗号分割"
/>
<Field
label="负责人电话,多个逗号分割"
prop="leaderMobiles"
v-model="form.leaderMobiles"
type="textarea"
placeholder="请输入负责人电话,多个逗号分割"
/>
<Field
label="备注"
prop="remark"
v-model="form.remark"
type="textarea"
placeholder="请输入备注"
/>
<el-col :span="8">
<Field label="请假类型" :span="24" prop="assessmentType" v-model="form.assessmentType" type="select"
:enumData="dict.assessmentType" placeholder="请选择请假类型" />
</el-col>
<el-col :span="6">
<Field label="考比较类型" :span="24" prop="compareScope" v-model="form.compareScope" type="select"
:enumData="dict.compareScope" placeholder="请选择考比较类型" />
</el-col>
<el-col :span="6">
<Field :span="24" label="比例" prop="ratio" v-model="form.ratio" placeholder="请输入比例" />
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="周期" prop="year">
<el-date-picker style="width: 100%;" v-model="form.year" type="year" placeholder="选择年">
</el-date-picker>
</el-form-item>
<!-- <Field label="年" :span="24" prop="year" v-model="form.year" placeholder="请输入年" /> -->
</el-col>
<el-col :span="6">
<Field label="周期类型" :span="24" prop="periodType" v-model="form.periodType" type="select"
:enumData="dict.periodType" placeholder="请选择周期类型" />
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<Field label="考核范围" :span="24" prop="assessmentScope" v-model="form.assessmentScope" type="select"
:enumData="dict.assessmentScope" placeholder="请选择考核范围" />
</el-col>
</el-row>
<el-row v-if="form.assessmentScope == 1">
<el-col :span="8">
<el-form-item label="选择部门">
<el-select v-model="deptId" filterable multiple collapse-tags style="width: 100%;" placeholder="请选择">
<el-option v-for="item in deptArr" :key="item.id" :label="item.deptName" :value="item.id">
</el-option>
</el-select>
<!-- <el-button type="primary">选择部门</el-button> -->
</el-form-item>
</el-col>
</el-row>
<el-row v-if="form.assessmentScope == 2">
<el-col :span="8">
<el-form-item label="选择个人">
<el-select v-model="staffId" filterable multiple collapse-tags style="width: 100%;" placeholder="请选择">
<el-option v-for="item in staffArr" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
<!-- <el-button type="primary">选择个人</el-button> -->
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="负责人">
<el-row v-for="(item, index) in ownerList" :key="index" :style="{ 'margin-top': index > 0 ? '10px' : '' }">
<el-col :span="8">
<el-input v-model="item.ownerName" placeholder="请输入姓名"></el-input>
</el-col>
<el-col :span="12" style="padding:0 10px">
<el-input v-model="form.leaderMobiles" placeholder="请输入电话"></el-input>
</el-col>
<el-col :span="2">
<el-button type="primary" icon="el-icon-plus" circle v-if="index == 0" @click="addOwner"></el-button>
<el-button type="danger" icon="el-icon-delete" circle v-else @click="delOwner(index)"></el-button>
</el-col>
</el-row>
</el-form-item>
</el-col>
</el-row>
<!-- <el-row>
<Field label="负责人id号" prop="ownerId" v-model="form.ownerId" placeholder="请输入负责人id号" />
<Field label="负责人名称" prop="ownerName" v-model="form.ownerName" placeholder="请输入负责人名称" />
<Field label="窗口工作人员id号" prop="staffId" v-model="form.staffId" placeholder="请输入窗口工作人员id号" />
<Field label="请假类型" prop="assessmentType" v-model="form.assessmentType" type="select"
:enumData="dict.assessmentType" placeholder="请选择请假类型" />
<Field label="考核范围" prop="assessmentScope" v-model="form.assessmentScope" type="select"
:enumData="dict.assessmentScope" placeholder="请选择考核范围" />
<Field label="考比较类型" prop="compareScope" v-model="form.compareScope" type="select" :enumData="dict.compareScope"
placeholder="请选择考比较类型" />
<Field label="比例" prop="ratio" v-model="form.ratio" placeholder="请输入比例" />
<Field label="周期类型" prop="periodType" v-model="form.periodType" type="select" :enumData="dict.periodType"
placeholder="请选择周期类型" />
<Field label="年" prop="year" v-model="form.year" placeholder="请输入年" />
<Field label="月" prop="month" v-model="form.month" type="select" :enumData="dict.month" placeholder="请选择月" />
<Field label="半年类型" prop="halfYear" v-model="form.halfYear" type="select" :enumData="dict.halfYear"
placeholder="请选择半年类型" />
<Field label="半年类型" prop="halfYear" v-model="form.halfYear" type="select" :enumData="dict.halfYear"
placeholder="请选择半年类型" />
<Field label="季度类型" prop="quarter" v-model="form.quarter" type="select" :enumData="dict.quarter"
placeholder="请选择季度类型" />
<Field label="负责人,多个逗号分割" prop="leaders" v-model="form.leaders" type="textarea" placeholder="请输入负责人,多个逗号分割" />
<Field label="负责人电话,多个逗号分割" prop="leaderMobiles" v-model="form.leaderMobiles" type="textarea"
placeholder="请输入负责人电话,多个逗号分割" />
<Field label="备注" prop="remark" v-model="form.remark" type="textarea" placeholder="请输入备注" />
</el-row> -->
</el-form>
<div slot="footer" class="dialog-footer">
<el-button
type="primary"
v-if="pageInfo.type !== 'view'"
@click="submitForm"
>确 定</el-button
>
<el-button type="primary" v-if="pageInfo.type !== 'view'" @click="submitForm">确 定</el-button>
<el-button @click="cancel">取 消</el-button>
</div>
</el-dialog>
......@@ -163,10 +142,47 @@ export default {
year: [{ required: true, message: "请输入年", trigger: "blur" }],
month: [{ required: true, message: "请输入月", trigger: "blur" }],
},
// 负责人
ownerList: [
{ ownerId: "", ownerName: "", leaderMobiles: "" }
],
deptArr:[],//部门下拉
staffArr:[],//人员下拉
deptId:[],//部门选中
staffId:[],//人员选中数据
};
},
created() {
this.deptList()
this.staffList()
},
methods: {
// 查询部门列表
deptList(){
this.$post("/dept/list", {page:1,size:-1}).then((res) => {
const {code,data,dict} = res
if(code == 1){
this.deptArr = data.data
}
});
},
// 查询部门列表
staffList(){
this.$post("/staff/list", {page:1,size:-1}).then((res) => {
const {code,data,dict} = res
if(code == 1){
this.staffArr = data.data
}
});
},
/** 负责人添加 */
addOwner() {
this.ownerList.push({ ownerId: "", ownerName: "", leaderMobiles: "" })
},
/** 负责人删除 */
delOwner(index) {
this.ownerList.splice(index, 1)
},
/** 编辑 */
edit(row) {
this.reset();
......
......@@ -4,13 +4,13 @@
<el-tab-pane label="目标看板" name="1">
<div class="content">
<div class="top search_top">
<el-radio-group v-model="type">
<el-radio-button label="1">按部门</el-radio-button>
<el-radio-button label="2">按个人</el-radio-button>
<el-radio-group v-model="type" @change="onAssessmentScope">
<el-radio-button :label="1">按部门</el-radio-button>
<el-radio-button :label="2">按个人</el-radio-button>
</el-radio-group>
<div class="search_box">
<el-select
v-model="dateValue"
v-model="boardQuery.month"
placeholder="请选择"
style="margin: 0 10px;"
>
......@@ -32,6 +32,7 @@
:title="'绩效总分排名'"
:id="'jixiaozongfen'"
:legendName="'绩效总分'"
:parameter="depStatObj.totalScore"
:styleObj="{ width: '100%', height: '300px' }"
/>
</div>
......@@ -49,6 +50,7 @@
<bar-charts
:title="'部门加分排名TOP10'"
:id="'top_10'"
:parameter="depStatObj.attendScoreAdd"
:legendName="'部门加分分值'"
:styleObj="{ width: '100%', height: '300px' }"
/>
......@@ -84,12 +86,12 @@
<el-tab-pane label="目标对齐" name="2">
<div class="content">
<div class="top search_top">
<el-radio-group v-model="type">
<el-radio-button label="1">按部门</el-radio-button>
<el-radio-button label="2">按个人</el-radio-button>
<el-radio-group v-model="type1" @change="onAssessmentScope1">
<el-radio-button :label="1">按部门</el-radio-button>
<el-radio-button :label="2">按个人</el-radio-button>
</el-radio-group>
<div class="search_box">
<el-select v-model="value" placeholder="请选择">
<el-select v-model="value" @change="deptList" placeholder="请选择">
<el-option
v-for="item in options"
:key="item.value"
......@@ -99,7 +101,8 @@
</el-option>
</el-select>
<el-select
v-model="dateValue"
@change="deptList"
v-model="StatQuery.month"
placeholder="请选择"
style="margin: 0 10px;"
>
......@@ -111,16 +114,15 @@
>
</el-option>
</el-select>
<el-button type="primary">搜索</el-button>
<el-button type="primary" @click="deptList">搜索</el-button>
</div>
</div>
<div class="bar_content">
<bar-charts
:title="
`${type == 1 ? '各部门' : '个人'}${dateValue}月旷工率对齐情况`
"
:title="`${type1 == 1 ? '各部门' : '个人'}${StatQuery.month}月${alignmentName}对齐情况`"
:id="'bar_content'"
:legendName="'旷工率'"
:parameter="depStatObj.alignment"
:styleObj="{ width: '1800px', height: '650px' }"
/>
</div>
......@@ -129,9 +131,9 @@
<el-tab-pane label="目标管理" name="3">
<div class="content">
<div class="top">
<el-radio-group v-model="type">
<el-radio-button label="1">按部门</el-radio-button>
<el-radio-button label="2">按个人</el-radio-button>
<el-radio-group v-model="type2">
<el-radio-button :label="1">按部门</el-radio-button>
<el-radio-button :label="2">按个人</el-radio-button>
</el-radio-group>
<el-button type="primary" style="margin: 0 20px;" @click="addGoal">
+ 创建目标</el-button
......@@ -146,21 +148,21 @@
</span>
</div>
<p class="goal_txt">
<span>{{ type == 1 ? "目标部门:" : "目标个人:" }}</span
<span>{{ type2 == 1 ? "目标部门:" : "目标个人:" }}</span
><span>{{
type == 1 ? "全部部门" : "张三、李四、王武、陈真"
type2 == 1 ? "全部部门" : "张三、李四、王武、陈真"
}}</span>
</p>
<p class="goal_txt">
<span>周期:</span><span>2023年/全年</span>
<span>周期:</span><span>{{val.periodType}}</span>
</p>
<p class="goal_txt">
<span>负责人:</span><span>张三、李四、王武 </span>
<span>负责人:</span><span>{{val.leaders}}</span>
</p>
<p class="goal_txt">
<span>最近更新:</span><span>2023-05-11 10:00:00</span>
<span>最近更新:</span><span>{{val.updateTime}}</span>
</p>
<p class="goal_txt"><span>更新人员:</span><span>言若海</span></p>
<p class="goal_txt"><span>更新人员:</span><span>{{val.updateUserId}}</span></p>
<div class="button_box">
<el-button
type="primary"
......@@ -191,6 +193,7 @@ import BarCharts from "./components/BarCharts.vue";
import LineCharts from "./components/LineCharts.vue";
import PieCharts from "./components/PieCharts.vue";
import dialogShow from "./dialogshow";
import moment from 'moment'
export default {
components: {
......@@ -203,8 +206,116 @@ export default {
created() {
this.getData();
this.deptList()
this.statList()
},
methods: {
// 个人绩效分数统计
staffStatList(){
this.$post("/staff/perform/stat/list", this.boardQuery).then((res) => {
const {code,data,dict} = res
if(code == 1){
const row = data.data || []
// this.statArr = row
const x = []
const y = []
row.forEach(element => {
x.push(element.deptName)
y.push(element.totalScore)
});
this.depStatObj.totalScore.x = x
this.depStatObj.totalScore.y = y
}
});
// 加分top10
const top10 = {...this.boardQuery,size:10}
this.$post("/staff/perform/stat/list", top10).then((res) => {
const {code,data,dict} = res
if(code == 1){
const row = data.data || []
// this.statArr = row
const x = []
const y = []
row.forEach(element => {
x.push(element.deptName)
y.push(element.attendScoreAdd)
});
this.depStatObj.attendScoreAdd.x = x
this.depStatObj.attendScoreAdd.y = y
}
});
},
// 部门绩效分数统计
statList(){
this.$post("/dept/perform/stat/list",this.boardQuery).then((res) => {
const {code,data,dict} = res
if(code == 1){
const row = data.data || []
// this.statArr = row
const x = []
const y = []
const xTop10 = []
row.forEach(element => {
x.push(element.deptName)
y.push(element.totalScore)
});
this.depStatObj.totalScore.x = x
this.depStatObj.totalScore.y = y
}
});
// 加分top10
const top10 = {...this.boardQuery,size:10}
this.$post("/staff/perform/stat/list", top10).then((res) => {
const {code,data,dict} = res
if(code == 1){
const row = data.data || []
// this.statArr = row
const x = []
const y = []
row.forEach(element => {
x.push(element.deptName)
y.push(element.attendScoreAdd)
});
this.depStatObj.attendScoreAdd.x = x
this.depStatObj.attendScoreAdd.y = y
console.log(this.depStatObj.attendScoreAdd,"`````",data)
}
});
},
// 部门目标对齐
deptList(){
this.$post("/perform/perpose/dept/stat/list", this.StatQuery).then((res) => {
const {code,data,dict} = res
if(code == 1){
const row = data.data || []
const x = []
const y = []
row.forEach(element => {
x.push(element.deptName)
y.push(element[this.value])
});
this.depStatObj.alignment.x = x
this.depStatObj.alignment.y = y
}
});
},
// 个人对齐方式
staffList(){
this.$post("/perform/perpose/staff/stat/list", this.StatQuery).then((res) => {
const {code,data,dict} = res
if(code == 1){
const row = data.data || []
const x = []
const y = []
row.forEach(element => {
x.push(element.deptName)
y.push(element[this.value])
});
this.depStatObj.alignment.x = x
this.depStatObj.alignment.y = y
}
});
},
handleClick(tab, event) {
console.log(tab, event);
},
......@@ -222,7 +333,7 @@ export default {
});
},
getData() {
this.$post("/perform/perpose/list").then((res) => {
this.$post("/perform/perpose/list",this.query).then((res) => {
console.log(res);
if (res.code == 1) {
this.dataList = res.data.data;
......@@ -231,106 +342,171 @@ export default {
}
});
},
// TAB个人/法人
onAssessmentScope(v){
if(v == 1){
this.statList()
}else{
this.staffStatList()
}
},
// 目标看齐
onAssessmentScope1(v){
if(v == 1){
this.deptList()
}else{
this.staffList()
}
}
},
computed: {
alignmentName:function(){
const obj = this.options.find(v=>v.value == this.value)
return obj.label
}
},
data() {
return {
activeName: "1",
type: "1",
type: 1,//目标看板
type1: 1,//目标对齐
type2: 1,//目标管理
dateValue: "1",
options: [
{
value: "1",
value: "absentRate",
label: "旷工率",
},
{
value: "2",
value: "absenceRate",
label: "缺卡率",
},
{
value: "3",
value: "lateRate",
label: "迟到率",
},
{
value: "4",
value: "earlyRate",
label: "早退率",
},
{
value: "5",
value: "leaveRate",
label: "请假率",
},
{
value: "6",
value: "turnoverRate",
label: "离岗率",
},
{
value: "7",
value: "sleepRate",
label: "睡觉率",
},
{
value: "8",
value: "playPhoneRate",
label: "玩手机率",
},
{
value: "9",
value: "expireWorkRate",
label: "办件超期率",
},
{
value: "10",
value: "negaReviewRate",
label: "差评率",
},
],
optionsMonths: [
{
value: "1",
value: 1,
label: "1月",
},
{
value: "2",
value: 2,
label: "2月",
},
{
value: "3",
value: 3,
label: "3月",
},
{
value: "4",
value: 4,
label: "4月",
},
{
value: "5",
value: 5,
label: "5月",
},
{
value: "6",
value: 6,
label: "6月",
},
{
value: "7",
value: 7,
label: "7月",
},
{
value: "8",
value: 8,
label: "8月",
},
{
value: "9",
value: 9,
label: "9月",
},
{
value: "10",
value: 10,
label: "10月",
},
{
value: "11",
value: 11,
label: "11月",
},
{
value: "12",
value: 12,
label: "12月",
},
],
value: "",
value: "lateRate",//默认显示迟到类型
dataList: [],
depStatObj:{
totalScore:{
x:[],
y:[]
},//绩效总分排名
totalAverage:{
x:[],
y:[]
},//绩效平均排名
attendScoreAdd:{
x:[],
y:[]
},//加分
attendScoreSub:{
x:[],
y:[]
},//减分
alignment:{
x:[],
y:[]
},//目标对齐
},//按部门
month:"",//月份
boardQuery:{
page:1,
size:-1,
// year:parseInt(moment().format('YYYY')),
// month:parseInt(moment().format('MM')),
},//看板查询条件
query:{
page:1,
size:-1,
// assessmentScope:1//考核范围(1.部门,2.个人)
},//目标管理查询条件
StatQuery:{
page:1,
size:-1,
year:parseInt(moment().format('YYYY')),
month:parseInt(moment().format('MM')),
},//对齐方式入参
};
},
};
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment