544 lines
23 KiB
Plaintext
544 lines
23 KiB
Plaintext
<%@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>
|