Files
SIPAIIS_WMS_JSSW/WebRoot/jsp/kpi/resultStatistics.jsp
2026-01-16 14:13:44 +08:00

544 lines
23 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<%@page import="com.sipai.entity.base.ServerObject" %>
<%@ page language="java" pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ taglib uri="http://www.springsecurity.org/jsp" prefix="security" %>
<!DOCTYPE html >
<head>
<title><%= ServerObject.atttable.get("TOPTITLE")%>
</title>
<!-- 引用页头及CSS页-->
<jsp:include page="/jsp/inc.jsp"></jsp:include>
<style>
.drug-ele-td {
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.chosen-area-p,
.rightmouse-panel-div,
.panel-div-left,
.panel-div-right,
.drug-ele-td {
display: none;
}
.setting {
display: none;
}
.duiqifangsi {
display: none;
}
.title {
font-weight: bold;
font-size: 20px;
}
#resultStatisticsExcel {
background: white;
}
</style>
</head>
<script type="text/javascript">
var data = {
deptId: '',
periodYear: '',
periodType: '',
periodNo: '',
jobType: '',
}
$(function () {
initTreeView()
// 岗位类型数据填充
var selelct_1Data = jQuery.parseJSON('${jobTypeList}');
var selelct_1 = $("#jobType").select2({
data: selelct_1Data,
cache: false,
placeholder: '请选择',//默认文字提示
// allowClear: true,//允许清空
escapeMarkup: function (markup) {
return markup;
}, // 自定义格式化防止xss注入
language: "zh-CN",
minimumInputLength: 0,
minimumResultsForSearch: 10,//数据超过十个启用搜索框
formatResult: function formatRepo(repo) {
return repo.text;
}, // 函数用来渲染结果
formatSelection: function formatRepoSelection(repo) {
return repo.text;
} // 函数用于呈现当前的选择
});
$(".select2-selection--single").css({'height': '30px', 'paddingTop': '4px'});
selelct_1.val('0').trigger("change");
// 考核周期类型数据填充
var selelct_2Data = jQuery.parseJSON('${periodTypeList}');
var selelct_2 = $("#periodType").select2({
data: selelct_2Data,
cache: false,
placeholder: '请选择',//默认文字提示
// allowClear: true,//允许清空
escapeMarkup: function (markup) {
return markup;
}, // 自定义格式化防止xss注入
language: "zh-CN",
minimumInputLength: 0,
minimumResultsForSearch: 10,//数据超过十个启用搜索框
formatResult: function formatRepo(repo) {
return repo.text;
}, // 函数用来渲染结果
formatSelection: function formatRepoSelection(repo) {
return repo.text;
} // 函数用于呈现当前的选择
}).on('select2:select', function (evt) {
showPeriodNo();
});
$(".select2-selection--single").css({'height': '30px', 'paddingTop': '4px'});
selelct_2.val('0').trigger("change");
// 考核年份
var selelct_4Data = getYears()
// jQuery.parseJSON('[{"id":"2020","text":"2020"},{"id":"2021","text":"2021"},{"id":"2022","text":"2022"},{"id":"2023","text":"2023"},{"id":"2024","text":"2024"},{"id":"2025","text":"2025"},{"id":"2026","text":"2026"},{"id":"2027","text":"2027"},{"id":"2028","text":"2028"},{"id":"2029","text":"2029"},{"id":"2030","text":"2030"},{"id":"2031","text":"2031"},{"id":"2032","text":"2032"},{"id":"2033","text":"2033"},{"id":"2034","text":"2034"},{"id":"2035","text":"2035"},{"id":"2036","text":"2036"},{"id":"2037","text":"2037"},{"id":"2038","text":"2038"},{"id":"2039","text":"2039"},{"id":"2040","text":"2040"},{"id":"2041","text":"2041"},{"id":"2042","text":"2042"},{"id":"2043","text":"2043"},{"id":"2044","text":"2044"},{"id":"2045","text":"2045"},{"id":"2046","text":"2046"},{"id":"2047","text":"2047"},{"id":"2048","text":"2048"},{"id":"2049","text":"2049"},{"id":"2050","text":"2050"}]');
var selelct_4 = $("#periodYear").select2({
data: selelct_4Data,
cache: false,
placeholder: '请选择',//默认文字提示
// allowClear: true,//允许清空
escapeMarkup: function (markup) {
return markup;
}, // 自定义格式化防止xss注入
language: "zh-CN",
minimumInputLength: 0,
minimumResultsForSearch: 10,//数据超过十个启用搜索框
formatResult: function formatRepo(repo) {
return repo.text;
}, // 函数用来渲染结果
formatSelection: function formatRepoSelection(repo) {
return repo.text;
} // 函数用于呈现当前的选择
});
$(".select2-selection--single").css({'height': '30px', 'paddingTop': '4px'});
var date = new Date();
selelct_4.val(date.getFullYear()).trigger("change");
// 考核周期初始化数据
showPeriodNo();
});
function getYears() {
let list = []
let d = 2020
list.push({
id: String(d),
text: String(d)
})
let target = new Date().getFullYear()
for (let i = 1; Number(list[list.length - 1].text) < target; i++) {
list.push({
id: String(d + i),
text: String(d + i)
})
}
return list
}
//考核周期初始化
function showPeriodNo() {
var periodType = $("#periodType").val();
$.post(ext.contextPath + "/kpi/KpiPeriodInstance/periodNoList.do?periodType=" + periodType, function (data) {
$("#periodNo").select2({
data: data,
cache: false,
placeholder: '请选择',//默认文字提示
// allowClear: true,//允许清空
escapeMarkup: function (markup) {
return markup;
}, // 自定义格式化防止xss注入
language: "zh-CN",
minimumInputLength: 0,
minimumResultsForSearch: 10,//数据超过十个启用搜索框
formatResult: function formatRepo(repo) {
return repo.text;
}, // 函数用来渲染结果
formatSelection: function formatRepoSelection(repo) {
return repo.text;
} // 函数用于呈现当前的选择
});
$(".select2-selection--single").css({'height': '30px', 'paddingTop': '4px'});
$("#periodNo").val('1').trigger("change");
}, 'json');
}
function saveFun() {
$("#addForm").bootstrapValidator('validate');//提交验证
if ($("#addForm").data('bootstrapValidator').isValid()) {//获取验证结果,如果成功,执行下面代码
$.post(ext.contextPath + "/kpi/KpiPeriodInstance/save.do", $("#addForm").serialize(), function (data) {
if (data.res == 0) {
showAlert('d', '用户信息保存失败', 'subDiv');
} else {
$("#table").bootstrapTable('refresh');
closeModal('subModal');
}
}, 'json');
}
}
//获取部门树
var initTreeView = function () {
$.post(ext.contextPath + '/user/getAllParentByUnitId.do?unitId='+unitId, {ng: ''}, function (res) {
$('#companytree').treeview({
data: res,
showBorder: true,
levels: 3,
});
$('#companytree').on('nodeSelected', function (event, node) {
data.deptId = node.id;
// TODO 判断选中的是否为部门?
});
}, 'json');
};
function getExcelData() {
data.jobType = $('#jobType').val()
data.periodYear = $('#periodYear').val()
data.periodType = $('#periodType').val()
data.periodNo = $('#periodNo').val()
if (isNull(data.deptId) || isNull(data.periodYear) || isNull(data.periodType) || isNull(data.periodNo)) {
showAlert('d', '请先选择查询条件', 'mainAlertdiv');
} else {
$.post(ext.contextPath + '/kpi/KpiResult/getResultStatistics.do', data, function (res) {
let result = JSON.parse(res)
if (result.code == 0) {
console.log(result.data)
console.log(result.data.detailInfo)
if (result.data.detailInfo.userNumber === 0) {
showAlert('w', '暂无统计数据', 'mainAlertdiv')
// showExcel(result.data)
} else {
showExcel(result.data)
}
}
});
}
// getResultStatistics
}
function exportExcel() {
data.jobType = $('#jobType').val()
data.periodYear = $('#periodYear').val()
data.periodType = $('#periodType').val()
data.periodNo = $('#periodNo').val()
if (isNull(data.deptId) || isNull(data.periodYear) || isNull(data.periodType) || isNull(data.periodNo)) {
showAlert('d', '请先选择查询条件', 'mainAlertdiv');
} else {
window.open(ext.contextPath + '/kpi/KpiResult/getResultStatisticsExcel.do?deptId=' + data.deptId +
'&periodYear=' + data.periodYear +
'&periodType=' + data.periodType +
'&jobType=' + data.jobType +
'&periodNo=' + data.periodNo);
}
// getResultStatistics
}
function showExcel(data) {
document.documentElement.oncontextmenu = function (e) {
return false
}
$("#resultStatisticsExcel").wybExcel();
$('#resultStatisticsExcel').css("padding", "0 37px 37px")
initTable(data.detailInfo, data.listInfo)
}
function isNull(str) {
if (str === '') {
return true
}
if (str === null) {
return true
}
}
function initTable(detailInfo, list) {
$("#resultStatisticsExcel").setExcelHtml(
tableHeader('人员绩效考核结果汇总表') +
tableFristRow({
deptName: detailInfo.deptName,
time: detailInfo.periodName,
total: detailInfo.userNumber,
pointLevel1Number: detailInfo.pointLevel1Number,
pointLevel1Percent: detailInfo.pointLevel1Percent,
pointLevel2Number: detailInfo.pointLevel2Number,
pointLevel2Percent: detailInfo.pointLevel2Percent,
pointLevel3Number: detailInfo.pointLevel3Number,
pointLevel3Percent: detailInfo.pointLevel3Percent,
pointLevel4Number: detailInfo.pointLevel4Number,
pointLevel4Percent: detailInfo.pointLevel4Percent,
pointLevel5Number: detailInfo.pointLevel5Number,
pointLevel5Percent: detailInfo.pointLevel5Percent,
pointLevel6Number: detailInfo.pointLevel6Number,
pointLevel6Percent: detailInfo.pointLevel6Percent,
}) +
tableItem({list: list}) +
tableOther({}, true, false) +
tableFooter())
// $(".wyb-excel").initTable($(".wyb-excel").getExcelHtml(), {})
}
function tableFristRow({
deptName = '',
time = '',
total = '',
pointLevel1Number = 0,
pointLevel1Percent = '0',
pointLevel2Number = 0,
pointLevel2Percent = '0',
pointLevel3Number = 0,
pointLevel3Percent = '0',
pointLevel4Number = 0,
pointLevel4Percent = '0',
pointLevel5Number = 0,
pointLevel5Percent = '0',
pointLevel6Number = 0,
pointLevel6Percent = '0'
}) {
return `<tr style="height: 38px;text-align:left">
<td style="width: 80px;" colspan="4" readonly="readonly">部门名称: ` + deptName + `</td>
<td style="width: 80px;" colspan="4" readonly="readonly" >考核时间: ` + time + `</td>
</tr>
<tr style="height: 38px;">
<td colspan="2" readonly="readonly">参加考核人数</td>
<td colspan="6" readonly="readonly">` + total + `</td>
</tr>
<tr style="height: 38px;">
<td colspan="2" readonly="readonly">优秀人数(人)</td>
<td readonly="readonly">` + pointLevel1Number + `</td>
<td colspan="4" readonly="readonly">优秀员工占考核人数比例(%)</td>
<td readonly="readonly">` + pointLevel1Percent + `</td>
</tr>
<tr style="height: 38px;">
<td colspan="2" readonly="readonly">称职A级人数(人)</td>
<td readonly="readonly">` + pointLevel2Number + `</td>
<td colspan="4" readonly="readonly">称职A级人数占考核人数比例(%)</td>
<td readonly="readonly">` + pointLevel2Percent + `</td>
</tr>
<tr style="height: 38px;">
<td colspan="2" readonly="readonly">称职B级人数(人)</td>
<td readonly="readonly">` + pointLevel3Number + `</td>
<td colspan="4" readonly="readonly">称职B级人数占考核人数比例(%)</td>
<td readonly="readonly">` + pointLevel3Percent + `</td>
</tr>
<tr style="height: 38px;">
<td colspan="2" readonly="readonly">称职C级人数(人)</td>
<td readonly="readonly">` + pointLevel4Number + `</td>
<td colspan="4" readonly="readonly">称职C级人数占考核人数比例(%)</td>
<td readonly="readonly">` + pointLevel4Percent + `</td>
</tr>
<tr style="height: 38px;">
<td colspan="2" readonly="readonly">基本称职人数(人)</td>
<td readonly="readonly">` + pointLevel5Number + `</td>
<td colspan="4" readonly="readonly">基本称职人数占考核人数比例(%)</td>
<td readonly="readonly">` + pointLevel5Percent + `</td>
</tr>
<tr style="height: 38px;">
<td colspan="2" readonly="readonly">不称职人数(人)</td>
<td readonly="readonly">` + pointLevel6Number + `</td>
<td colspan="4" readonly="readonly">不称职占考核人数比例(%)</td>
<td readonly="readonly">` + pointLevel6Percent + `</td>
</tr>
<tr style="height: 38px;">
<td readonly="readonly">序号</td>
<td readonly="readonly">部门</td>
<td readonly="readonly">岗位</td>
<td readonly="readonly">姓名</td>
<td readonly="readonly">考核得分</td>
<td readonly="readonly">绩效等级</td>
<td readonly="readonly">绩效工资考核系数</td>
<td readonly="readonly">备注</td>
</tr>
`
}
function tableItem({list = []}) {
let tableItemStr = ''
for (let i = 0; i < list.length; i++) {
tableItemStr += `<tr>
<td colspan="1" readonly="readonly">` + (i + 1) + `</td>
<td colspan="1" readonly="readonly">` + list[i].deptName + `</td>
<td colspan="1" readonly="readonly">` + list[i].jobName + `</td>
<td colspan="1" readonly="readonly">` + list[i].userName + `</td>
<td colspan="1" readonly="readonly">` + list[i].resultPoint + `</td>
<td colspan="1" readonly="readonly">` + list[i].resultLevel + `</td>
<td colspan="1" readonly="readonly">` + list[i].resultLevelCoefficient + `</td>
<td colspan="1" readonly="readonly"></td>
</tr>`
}
return tableItemStr
}
function tableOther({
examiner = '',//考核人签名
sdate = '',
name = '',
tdate = '',
remark = '每项结果得分=直接上级评分×0.7+隔级上级评分×0.3)×各项目所占权重'
}, showRemark, showPerson) {
let remarkStr = `<tr style="text-align:left">
<td rowspan="1" colspan="8" readonly="readonly">注:` + remark + `</td>
</tr>`
let personStr = `
<tr style="text-align:left">
<td colspan="4" readonly="readonly">填报人:` + name + `</td>
<td colspan="4" readonly="readonly">审核人:` + examiner + `</td>
</tr>
<tr style="text-align:left">
<td rowspan="1" colspan="4" readonly="readonly">日期:` + tdate + `</td>
<td rowspan="1" colspan="4" readonly="readonly">日期:` + sdate + `</td>
</tr>`
let temp = ``
if (showRemark) {
temp += remarkStr
}
if (showPerson) {
temp += personStr
}
return temp
}
function tableHeader(title) {
return `<table width="100%" style="text-align:center"><tbody>
<tr><td class="title" colspan="8" readonly="readonly">` + title + `</td></tr>`
}
function tableFooter() {
return `</tbody></table>`
}
</script>
<body>
<div class="wrapper">
<div class="content-wrapper">
<!-- Content Header (Page header) -->
<section class="content-header">
<h1 id="head_title"></h1>
<ol class="breadcrumb">
<li><a id='head_firstlevel' href="#"><i class="fa fa-dashboard"></i> </a></li>
<!-- <li class="active">Here</li> -->
</ol>
</section>
<!-- Main content -->
<section class="content container-fluid">
<div id="mainAlertdiv"></div>
<div id="subDiv"></div>
<div id="position4Select"></div>
<div id="user4SelectDiv"></div>
<div id="menu4SelectDiv"></div>
<div>
<div class="box-body no-padding col-md-3">
<div id="companytree" style="height:550px;overflow:auto; "></div>
</div>
<div class="col-md-9">
<div class="form-group form-inline" style="padding:0;height: 30px;">
<div class="input-group input-group-sm " style="width:280px;">
<label class="col-sm-6 control-label"
style="padding:0px 10px 0px 10px;line-height:30px;">绩效(岗位)类型:</label>
<div class="col-sm-6 control-label" style="padding: 0px;">
<select class="form-control" id="jobType" name="jobType" style="width:120px;"></select>
</div>
</div>
<div class="form-group input-group-sm" style="width:230px;">
<label class="col-sm-5 control-label"
style="padding:0px 10px 0px 10px;line-height:30px;">考核年份:</label>
<div class="col-sm-7">
<select class="form-control" id="periodYear" name="periodYear"
style="width: 100px"></select>
</div>
</div>
<div class="form-group input-group-sm">
<label class="col-sm-5 control-label" style="padding:0px 10px 0px 10px;line-height:30px;">考核周期类型:</label>
<div class="col-sm-7">
<select class="form-control" name="periodType" id="periodType"
style="width: 150px"></select>
</div>
</div>
<div class="form-group input-group-sm">
<label class="col-sm-5 control-label"
style="padding:0px 10px 0px 10px;line-height:30px;">考核周期:</label>
<div class="col-sm-7">
<select class="form-control" name="periodNo" id="periodNo"
style="width: 120px"></select>
</div>
</div>
<div class="form-group input-group-sm" style="margin-left: 5px">
<button type="button" class="control-label btn btn-primary"
style="padding:0px 10px 0px 10px;line-height:30px;" onclick="getExcelData()">查询
</button>
</div>
<div class="form-group input-group-sm" style="margin-left: 5px">
<button type="button" class="control-label btn btn-primary"
style="padding:0px 10px 0px 10px;line-height:30px;" onclick="exportExcel()">导出Excel
</button>
</div>
</div>
<br>
<div id="resultStatisticsExcel" style="width:100%;margin: 0 auto;"></div>
</div>
</div>
</section>
<!-- /.content -->
</div>
<!-- /.modal-dialog -->
</div>
</body>
<link rel="stylesheet" href="<%=request.getContextPath()%>/plugins/bootstrap-daterangepicker/daterangepicker.css"/>
<link rel="stylesheet" href="<%=request.getContextPath()%>/plugins/xlsx/css/excel.css" type="text/css"/>
<link rel="stylesheet" href="<%=request.getContextPath()%>/plugins/xlsx/css/font-awesome.min.css"/>
<script type="text/javascript" src="<%=request.getContextPath()%>/plugins/xlsx/js/excel.min.js"
charset="utf-8"></script>
<script type="text/javascript" src="<%=request.getContextPath()%>/plugins/bootstrap-daterangepicker/moment.min.js"
charset="utf-8"></script>
<script type="text/javascript" src="<%=request.getContextPath()%>/plugins/bootstrap-daterangepicker/daterangepicker.js"
charset="utf-8"></script>
</html>