MySQL, Oracle, Linux, 软件架构及大数据技术知识分享平台

网站首页 > 精选文章 / 正文

JS在线小工具实现岗位月报的工时内容统计

2025-03-06 15:33 huorong 精选文章 5 ℃ 0 评论

摘要:

工作中,需要每月写岗位月报,写明自己每月参与的工作项目和每个项目投入的时间,以及工作的饱和度。

每月统计工作的时候,就需要:

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 += ""; result += 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 += ""; } result += ""; result += ""; if (addGroupFlag) { result += ""; } if (i == 0) { result += ""; result += ""; result += ""; } result += ""; } result += ""; result += "
序号内容工时合计总计天数饱和度
" + groupName + "" + drawTextArea("", item.text, "100") + "" + item.hour + "" + groupTotal + "" + totalHour + "" + totalDays + "" + workPercent + "
"; return result; } function onOkClick() { let dataResult = getInputResult(); let theHtml = drawTableHtml(dataResult); $("#div_result").html(theHtml); } function toolPageLoad() { } $(function() { toolPageLoad(); }); </script>

访问链接:

「链接」

Tags:th:style

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言