摘要:
工作中,需要每月写岗位月报,写明自己每月参与的工作项目和每个项目投入的时间,以及工作的饱和度。
每月统计工作的时候,就需要:
1、写明每个工作项用的小时数
2、统计总共用了多少小时数
3、跟工作日乘以8小时时长比较自我统计工时饱和度
在没有小工具之前,每次都要自行去计算和统计,不便捷,于是,针对该需求,开发了一个小工具。
如下图:
界面效果
相关源码:
岗位月报工时统计
列项:
工作天数:
|
小时时长:
输入:
<script language="JavaScript" type="text/javascript">
function onExampleClick() {
let text = "";
text += "完成A任务开发(32H)\n";
text += "完成B任务开发(36H)\n";
text += "完成C任务开发(8H)\n";
text += "完成D任务开发(21H)\n";
text += "\n";
text += "完成H项目的运维(8H)\n";
text += "完成J项目的运维(8H)\n";
$("#txt_monthWorkDay").val(20);
$("#txt_input").val(text);
}
function getWorkItemArray() {
let data = $.trim($("#txt_workItem").val());
let result = [];
if (data == "") {
return result;
}
let sA = data.split(',');
let iLen = sA.length;
let item = null;
let i = 0;
for (i = 0; i < iLen; ++i) {
item = sA[i];
if (item == null) {
continue;
}
item = $.trim(item);
if (item == "") {
continue;
}
result.push(item);
}
return result;
}
function getWorkItemText(workItem, idx) {
let workItemLen = workItem.length;
if (idx < 0 idx>= workItemLen) {
return "";
}
return workItem[idx];
}
function getEndCharType(data) {
let enChar = "(";
let cnChar = "(";
let enIdx = data.lastIndexOf(enChar);
let cnIdx = data.lastIndexOf(cnChar);
if (enIdx == -1 && cnIdx == -1) {
return "";
}
if (enIdx > cnIdx) {
return "en";
}
return "cn";
}
function getInputTextHour(data, cnFlag) {
let leftChar = "(";
let rightChar = ")";
if (cnFlag) {
leftChar = "(";
rightChar = ")";
}
let idx = data.lastIndexOf(leftChar);
if (idx == -1) {
return 0;
}
let text = data.substring(idx + 1);
idx = data.indexOf(rightChar);
if (idx == -1) {
return 0;
}
text = text.substring(0, idx);
text = $.trim(text);
if (text == "") {
return 0;
}
return parseInt(text, 10);
}
function getInputItemResult(workItemText, inputItem) {
let endCharType = getEndCharType(inputItem);
let workHour = 0;
switch (endCharType) {
case "cn":
workHour = getInputTextHour(inputItem, true);
break;
case "en":
workHour = getInputTextHour(inputItem, false);
break;
default:
break;
}
return {
"group": workItemText,
"text": inputItem,
"hour": workHour
};
}
function getInputResult() {
// 重点工作,日常工作,阶段性工作,临时性交办工作,其他 //
let workItem = getWorkItemArray();
let input = $.trim($("#txt_input").val());
let sA = input.split('\n');
let result = [];
let workItemIndex = 0;
let iLen = sA.length;
let i = 0;
let item = null;
let workItemText = null;
let resultItem = null;
for (i = 0; i < iLen; ++i) {
item = sA[i];
if (item == null) {
item = "";
} else {
item = $.trim(item);
}
if (item == "") {
++workItemIndex;
continue;
}
workItemText = getWorkItemText(workItem, workItemIndex);
resultItem = getInputItemResult(workItemText, item);
result.push(resultItem);
}
return result;
}
function getGroupTotal(data, groupName, actionName) {
let iLen = data.length;
let i = 0;
let result = 0;
let item = null;
for (i = 0; i < iLen; ++i) {
item = data[i];
if (groupName != item.group) {
continue;
}
switch (actionName) {
case "rowNum":
++result;
break;
case "hour":
result += item.hour;
break;
default:
break;
}
}
return result;
}
function getGroupRowNum(data, groupName) {
return getGroupTotal(data, groupName, "rowNum");
}
function getGroupTotalHour(data, groupName) {
return getGroupTotal(data, groupName, "hour");
}
function sumTotalHour(data) {
let iLen = data.length;
let result = 0;
let i = 0;
for (i = 0; i < iLen; ++i) {
result += data[i].hour;
}
return result;
}
function drawTextArea(ctrlId, ctrlText, ctrlHeight, cssClass, cssStyle) {
// webUtil.htmlFn.drawTextArea
// 绘制TextArea //
if (ctrlHeight == null || ctrlHeight == "" || ctrlHeight == 0) {
ctrlHeight = "170";
}
if (cssStyle == undefined || cssStyle == null) {
cssStyle = "";
}
let result = "";
if (ctrlText == null || ctrlText == undefined) {
ctrlText = "";
} else {
ctrlText = webUtil.strFn.strReplace(ctrlText, "&", "&");
ctrlText = webUtil.strFn.strReplace(ctrlText, "<", "<"); ctrltext='webUtil.strFn.strReplace(ctrlText,'>", ">");
ctrlText = webUtil.strFn.strReplace(ctrlText, "'", "'");
ctrlText = webUtil.strFn.strReplace(ctrlText, "\"", """);
}
result += "";
return result;
}
function drawTableHtml(data) {
let iLen = data.length;
let i = 0;
let item = null;
let result = "";
let totalHour = sumTotalHour(data);
let dayWorkHour = parseInt($("#txt_dayWorkHour").val(), 10);
let monthWorkDay = parseInt($("#txt_monthWorkDay").val(), 10);
let totalDays = (totalHour / dayWorkHour).toFixed(2);
let workPercent = ((totalHour * 100) / (monthWorkDay * dayWorkHour)).toFixed(2) + "%";
result += "";
result += "";
result += "";
result += "序号 ";
result += "组 ";
result += "内容 ";
result += "工时 ";
result += "合计 ";
result += "总计 ";
result += "天数 ";
result += "饱和度 ";
result += " ";
let groupName = null;
let groupRowNum = 0;
let groupTotal = 0;
let addGroupFlag = true;
for (i = 0; i < ilen i item='data[i];' if item.group addgroupflag='true;' grouprownum='getGroupRowNum(data,' item.group grouptotal='getGroupTotalHour(data,' item.group groupname='item.group;' else addgroupflag='false;' result result center\>" + (i + 1) + "";
if (addGroupFlag) {
result += "" + groupName + " ";
}
result += "" + drawTextArea("", item.text, "100") + " ";
result += "" + item.hour + " ";
if (addGroupFlag) {
result += "" + groupTotal + " ";
}
if (i == 0) {
result += "" + totalHour + " ";
result += "" + totalDays + " ";
result += "" + workPercent + " ";
}
result += "";
}
result += "";
result += "
";
return result;
}
function onOkClick() {
let dataResult = getInputResult();
let theHtml = drawTableHtml(dataResult);
$("#div_result").html(theHtml);
}
function toolPageLoad() {
}
$(function() {
toolPageLoad();
});
</script>
访问链接:
Tags:th:style