Files
SIPAIIS_WMS_JSSW/WebRoot/jsp/kpi/resultStatistics.jsp

544 lines
23 KiB
Plaintext
Raw Permalink Normal View History

2026-01-16 14:13:44 +08:00
<%@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>