关键事项、邮件管理、任务管理

This commit is contained in:
2025-03-13 10:52:32 +08:00
parent 7a242ed776
commit c73bb1124d
99 changed files with 9738 additions and 3791 deletions
+1 -1
View File
@@ -8,7 +8,7 @@
<TreeNode id="6769098A-53D7-4585-87CC-2DADBCBC2C74" Text="类似项目施工经验总结清单" NavigateUrl="CQMS/QualityPlanning/ConExperienceSummary.aspx"></TreeNode>
</TreeNode>
<TreeNode id="3B322232-38A1-4291-9832-CD4A01C2A975" Text="检验试验计划/单位分部分项工程划分" NavigateUrl=""><TreeNode id="1025D812-2325-4FE9-A1E9-D53F2CAACDC6" Text="现场控制点裁剪(新)" NavigateUrl="CQMS/WBS/Control/PointCropping.aspx"></TreeNode>
<TreeNode id="0E1CCE60-6F9D-419D-B763-E9E0AF5621E6" Text="单位分部分项工程划分、裁剪" NavigateUrl=""><TreeNode id="17E206A1-E06B-40C0-8DCB-E3AAA2E3B339" Text="分部分项工程数据库" NavigateUrl="CQMS/WBS/Control/DivisionSubProjectsNew.aspx"></TreeNode>
<TreeNode id="0E1CCE60-6F9D-419D-B763-E9E0AF5621E6" Text="单位分部分项工程划分、裁剪" NavigateUrl=""><TreeNode id="17E206A1-E06B-40C0-8DCB-E3AAA2E3B339" Text="分部分项工程数据库" NavigateUrl="CQMS/WBS/Control/DivisionSubProjects.aspx"></TreeNode>
<TreeNode id="FB94A120-921B-4AAB-B54F-EC11B6F561FD" Text="单位分部分项工程划分、裁剪" NavigateUrl="CQMS/WBS/Control/DivisionDivideAndCrop.aspx"></TreeNode>
<TreeNode id="BA250432-492B-49A3-8BB6-D04BF74D2EDD" Text="单位分部分项工程划分表" NavigateUrl="CQMS/WBS/Control/DivisionDivideList.aspx"></TreeNode>
</TreeNode>
+3 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Tree>
<TreeNode id="858E83E9-ADE5-452E-BD65-82D8DFF872C0" Text="分部、工作项及费用清单裁剪" NavigateUrl="JDGL/WBS/WBSSetAudit.aspx">
<TreeNode id="858E83E9-ADE5-452E-BD65-82D8DFF872C0" Text="工作包及检测点" NavigateUrl="JDGL/WBS/WBSSetAudit.aspx">
</TreeNode>
<TreeNode id="82E1EB3B-3589-4C32-9C20-40125CE6EAB4" Text="设备材料分类" NavigateUrl=""><TreeNode id="F2BC1293-8639-4BD6-8759-648BCF6346E9" Text="设备材料大类" NavigateUrl="JDGL/WBS/EquipmentMaterialBigType.aspx"></TreeNode>
<TreeNode id="D00B3C53-2972-4D24-B88F-B38880D4A24F" Text="设备材料分类" NavigateUrl="JDGL/WBS/EquipmentMaterialType.aspx"></TreeNode>
@@ -22,4 +22,6 @@
<TreeNode id="7EC1FBAF-BEC9-46CD-9E3B-0D0093B4E1C2" Text="仪表完成情况" NavigateUrl="JDGL/Check/MeterCompletion.aspx"></TreeNode>
<TreeNode id="C7037A5D-D8A6-4C1C-A5B8-2083C31C0A7B" Text="全厂地下管网完成情况" NavigateUrl="JDGL/Check/UndergroundPipeCompletion.aspx"></TreeNode>
</TreeNode>
<TreeNode id="1FBC729D-0A8E-423C-B133-B64583BF9611" Text="进度软件(新)" NavigateUrl=""><TreeNode id="368DB90C-8A47-44F7-A69A-D2D60A6E338C" Text="费用项裁剪" NavigateUrl="JDGL/Progress/WbsManager.aspx"></TreeNode>
</TreeNode>
</Tree>
+2 -1
View File
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<Tree>
<TreeNode id="168A94C7-E37D-4B9C-8684-51DF4F8C5134" Text="关键事项(内部)" NavigateUrl="">
<TreeNode id="4A9E60ED-24FF-4410-B3B7-2A5079615A78" Text="待我处理" NavigateUrl="PZHGL/GJSX/GJSXList.aspx?classify=1">
<TreeNode id="0BEA2126-7A48-40EB-8E21-99148E91A22B" Text="我创建的" NavigateUrl="PZHGL/GJSX/GJSXList.aspx?classify=0">
</TreeNode>
<TreeNode id="4A9E60ED-24FF-4410-B3B7-2A5079615A78" Text="待我处理" NavigateUrl="PZHGL/GJSX/GJSXList.aspx?classify=1"></TreeNode>
<TreeNode id="BEF7850D-1BA5-45F9-BD40-E52F6D813E7C" Text="我已处理" NavigateUrl="PZHGL/GJSX/GJSXList.aspx?classify=2"></TreeNode>
<TreeNode id="3C129205-F6A9-480D-B36C-E35DED5D7CEC" Text="我参与的" NavigateUrl="PZHGL/GJSX/GJSXList.aspx?classify=3"></TreeNode>
</TreeNode>
@@ -6,7 +6,4 @@
<TreeNode id="C6EF06E5-9019-4583-8122-EA94FCC545C6" Text="员工总结" NavigateUrl=""></TreeNode>
<TreeNode id="AAF841AA-2EE8-4FEC-B1FB-B978736C6E1F" Text="员工责任书" NavigateUrl="Personal/PersonDuty.aspx"></TreeNode>
<TreeNode id="CB373458-30B0-4850-ABFF-B38D40A04D43" Text="员工绩效考核结果" NavigateUrl="Personal/PersonCheckInfo.aspx"></TreeNode>
<TreeNode id="522EAECC-3D40-4804-A066-A43BA8F6BFC1" Text="员工出差记录" NavigateUrl="Personal/BusinessTrip.aspx"></TreeNode>
<TreeNode id="16229932-671B-4E04-BB61-A5C7DE4CE47F" Text="员工开车绩效记录" NavigateUrl="Personal/TestRunPerformance.aspx"></TreeNode>
<TreeNode id="F0792B77-AEE4-4834-82C2-E5B75D0B0AB7" Text="开车月技术总结" NavigateUrl="Personal/TestRunMonthSummary.aspx"></TreeNode>
</Tree>
+4 -1
View File
@@ -22,7 +22,8 @@
<TreeNode id="179F286B-6DF8-414E-947F-82267076D4C8" Text="施工方案类型" NavigateUrl="BaseInfo/SolutionTempleteType.aspx"></TreeNode>
<TreeNode id="2181FB42-22F2-4342-B604-96F5770FE892" Text="分部分项工程定义" NavigateUrl="BaseInfo/SpecialSchemeType.aspx"></TreeNode>
<TreeNode id="D95CA72C-182C-4718-92A4-3F665E0FB660" Text="项目亮点类型定义" NavigateUrl="BaseInfo/PictureType.aspx"></TreeNode>
<TreeNode id="3044D68E-5018-4B57-BFC4-FBE4BCCA8B8B" Text="问题类别定义" NavigateUrl="BaseInfo/QuestionType.aspx"></TreeNode>
<TreeNode id="3044D68E-5018-4B57-BFC4-FBE4BCCA8B8B" Text="紧急程度定义" NavigateUrl="BaseInfo/QuestionType.aspx"></TreeNode>
<TreeNode id="C7E69F5F-04A8-41F9-8EA1-C41B13248421" Text="关键事项类别定义" NavigateUrl="BaseInfo/GJSXType.aspx"></TreeNode>
<TreeNode id="F0DF2F2B-7C12-4A0F-B7D4-0B00BADE1D64" Text="文档类别定义" NavigateUrl="BaseInfo/DocType.aspx"></TreeNode>
<TreeNode id="D0850615-BF32-4CFA-84CA-EEA261676EA8" Text="移交专业设置" NavigateUrl="BaseInfo/TransferMajor.aspx"></TreeNode>
</TreeNode>
@@ -64,6 +65,8 @@
</TreeNode>
<TreeNode id="24A40837-0756-49B0-8B3C-EFB8A9879336" Text="合同设置" NavigateUrl=""><TreeNode id="E40C8FCE-3530-47D6-85EB-5C7E7E0A89FC" Text="施工分包方式定义" NavigateUrl=""></TreeNode>
</TreeNode>
<TreeNode id="88E597DD-D725-4991-8253-22C2626233D0" Text="邮箱管理" NavigateUrl=""><TreeNode id="32009B4F-3802-4C2F-824B-DBAA62876E7C" Text="邮箱配置" NavigateUrl="Email_Send/Email_Pop_Edit.aspx"></TreeNode>
</TreeNode>
</TreeNode>
<TreeNode id="75AA6177-8AAD-4AA4-BC4E-3883FB095A65" Text="项目设置" NavigateUrl=""><TreeNode id="B830399C-CA36-4C23-A170-21E556D052DD" Text="项目成立" NavigateUrl="ProjectData/ProjectSet.aspx"></TreeNode>
</TreeNode>
@@ -69,9 +69,11 @@
<TreeNode id="0217CE50-3ABB-44F8-A38A-C9792C436639" Text="试车管理" NavigateUrl=""><TreeNode id="E3E38073-1DF4-4C02-AFC0-5C93EE7C23A8" Text="系统划分" NavigateUrl="TestRun/TestRunManage/DeviceRun.aspx"></TreeNode>
<TreeNode id="4B964B32-D5CC-48A2-8750-48BC4460C264" Text="工作包设置" NavigateUrl="TestRun/TestRunManage/SetWorkPackage.aspx"></TreeNode>
<TreeNode id="B6EE8E3B-77E2-416E-8985-3C78A2169B89" Text="工作包裁剪" NavigateUrl="TestRun/TestRunManage/SubSysWorkPackage.aspx"></TreeNode>
<TreeNode id="AF2B0CAD-DE15-4F15-A5EE-C8FB558D00C8" Text="检查项分组信息" NavigateUrl="TestRun/TestRunManage/TemplateItemGroup.aspx"></TreeNode>
<TreeNode id="545AACE6-34BE-4BAA-A495-B73198F1BDE2" Text="检查表模板" NavigateUrl="TestRun/TestRunManage/InspectTemplate.aspx"></TreeNode>
<TreeNode id="086DBD12-5649-4330-807A-44ABB257495F" Text="联动试车管理" NavigateUrl="TestRun/TestRunManage/SubInspectTerm.aspx"></TreeNode>
<TreeNode id="4041089F-5CC2-4070-9556-7DAB83CF6292" Text="检查表尾项管理" NavigateUrl="TestRun/TestRunManage/InspectTailTermList.aspx"></TreeNode>
<TreeNode id="A593B611-82C1-40D8-BB6A-DD025DB62F8C" Text="联动试车确认" NavigateUrl="TestRun/TestRunManage/SubWorkInspect.aspx"></TreeNode>
<TreeNode id="2232ED9A-EA3C-4CB5-A53C-D96D3F5E0527" Text="尾项处理" NavigateUrl="TestRun/TestRunManage/TailTermHandleList.aspx"></TreeNode>
<TreeNode id="9489BD6A-1A95-43BC-85C0-A65751C2C85E" Text="尾项审核" NavigateUrl="TestRun/TestRunManage/TailTermApproveList.aspx"></TreeNode>
<TreeNode id="26F8468D-4358-4E2A-895D-8720A6F1FA89" Text="检查表会签" NavigateUrl="TestRun/TestRunManage/InspectWanderAboutList.aspx"></TreeNode>
+2 -4
View File
@@ -27,8 +27,8 @@
<TreeNode id="ECDD89AC-1E16-4D82-B3BE-5D62F31B7A14" Text="化工行业能源节约与生态环境保护汇总表" NavigateUrl="ZHGL/Environmental/ChemicalReport.aspx"></TreeNode>
<TreeNode id="7652D239-1897-4886-8DF2-B71E3B060D21" Text="中央企业节能环保产业企业基本情况和经营情况报表" NavigateUrl="ZHGL/Environmental/OperationReport.aspx"></TreeNode>
<TreeNode id="30579BFE-AB4B-49A7-A73D-B7CE902A8B69" Text="中央企业节能环保产业企业生产和服务业务情况报表" NavigateUrl="ZHGL/Environmental/EnergyReport.aspx"></TreeNode>
<TreeNode id="CB76394B-BDEB-4F45-9D19-F38612DC6591" Text="安全生产治本攻坚三年行动工作台账" NavigateUrl="ZHGL/Information/ActionWorkLedger.aspx"></TreeNode>
<TreeNode id="C48087A8-4C9F-485D-B0A4-C85E112BA705" Text="安全生产管理评价工作调度台账" NavigateUrl="ZHGL/Information/SafetyProductionEvaluation.aspx"></TreeNode>
<TreeNode id="CB76394B-BDEB-4F45-9D19-F38612DC6591" Text="中央企业安全生产治本攻坚三年行动工作台账" NavigateUrl="ZHGL/Information/ActionWorkLedger.aspx"></TreeNode>
<TreeNode id="C48087A8-4C9F-485D-B0A4-C85E112BA705" Text="中央企业安全生产管理评价工作调度台账" NavigateUrl="ZHGL/Information/SafetyProductionEvaluation.aspx"></TreeNode>
</TreeNode>
<TreeNode id="C0F4A4A5-D5D3-4952-9A90-9B27F5FA9DFA" Text="安全信息分析" NavigateUrl=""><TreeNode id="598568A0-A338-499F-888C-1B73665837F9" Text="人工时费用分析" NavigateUrl="ZHGL/Information/AnalyseWorkTimeCost.aspx"></TreeNode>
<TreeNode id="8396C9E2-3376-4144-978A-CC6041EC6C6A" Text="安全事故分析" NavigateUrl="ZHGL/Information/AnalyseSafeAccident.aspx"></TreeNode>
@@ -89,7 +89,5 @@
<TreeNode id="EA413D2A-8D29-4DE2-932D-8511BB7F6CB2" Text="各项目巡查汇总" NavigateUrl="ZHGL/InspectionSummary/InspectionSummary.aspx"></TreeNode>
<TreeNode id="F2133BD6-C786-407A-AD6F-3EEF613229A8" Text="施工管理绩效数据" NavigateUrl="ZHGL/Performance/PerformanceAllData.aspx"></TreeNode>
<TreeNode id="53D8CED2-9AA7-43EA-B27D-EA10A06DF713" Text="开车人员绩效管理" NavigateUrl=""><TreeNode id="383290E0-60AE-4D16-8B5E-3899B85EC2ED" Text="开车绩效评分标准" NavigateUrl="ZHGL/TestRunPerformance/TestRunPerformanceStandard.aspx"></TreeNode>
<TreeNode id="C1240FCB-4C72-445E-82B5-EBFAA87D0AC6" Text="开车人员月绩效报告" NavigateUrl="ZHGL/TestRunPerformance/TestRunPerformanceMonthReport.aspx"></TreeNode>
<TreeNode id="0C6BB051-6BD1-4E35-90CE-9376F3C2D454" Text="开车人员月技术总结" NavigateUrl="ZHGL/TestRunPerformance/TestRunMonthSummaryReport.aspx"></TreeNode>
</TreeNode>
</Tree>
@@ -0,0 +1,969 @@
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="mainMenu_PGJSX.aspx.cs" Inherits="FineUIPro.Web.mainMenu_PGJSX" %>
<!DOCTYPE html>
<html>
<head id="Head1" runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>首页</title>
<link href="../res/index/css/reset.css" rel="stylesheet" />
<link href="../res/index/css/home.css" rel="stylesheet" />
<link href="../res/index/css/swiper-3.4.2.min.css" rel="stylesheet" />
<%--<link href="../res/css/common.css" rel="stylesheet" type="text/css" />--%>
<style type="text/css">
* {
box-sizing: border-box;
}
.flexV {
flex-direction: column;
}
.wrap {
height: 100%;
padding: 15px;
/*background-color: #EEEED1;*/
background-color: #FFFFFF;
}
.iteml {
margin-left: 5px;
}
.itemb {
margin-bottom: 5px;
}
.bottom-wrap {
padding: 0;
margin-bottom: 5px;
}
.bottom-wrap:last-child {
margin-bottom: 0;
}
.bw-b-bottom {
width: 100%;
height: 100%;
}
.bw-b-bottom-up {
border-radius: 0;
height: 100%;
margin: 0;
box-shadow: none;
}
.bw-item-content {
padding: 5px;
}
.top {
width: 100%;
}
.top .item {
}
.bw-b {
width: 50%;
}
.bw-b-bottom-up {
}
.tab-wrap {
left: auto;
right: 15px;
top: 5px;
font-size: 12px;
}
.tab .t-item {
width: auto;
padding: 5px 10px;
color: #363636;
}
.tit-item {
padding: 0 10px;
justify-content: space-between;
font-size: 12px;
}
.tab-wrap .tab .t-item {
color: #1C1C1C;
}
.tip-item {
margin-left: 10px;
align-items: center;
font-size: 10px;
}
.tip {
width: 25px;
height: 13px;
background-color: #258F76;
border-radius: 2px;
margin-right: 5px;
}
.tip-next {
background-color: #4F4F4F;
}
.myTableClass {
width: 100%;
height: 100%;
overflow: auto;
margin: 2px 1px;
border-collapse: collapse; /* 设置表格边框合并 */
border: 1px solid #BEBEBE;
background: #ffffff;
color: #8B8989; /* 设置表格文字颜色 */
text-align: center; /* 设置表格文字居中 */
}
.tab-title {
height: 58px;
color: #3CB371;
font-size: 24px;
font-weight: 700;
}
.tab-header {
height: 46px;
color: #1C86EE;
font-size: 18px;
font-weight: 600;
}
td, th {
border: 1px solid #BEBEBE;
}
</style>
</head>
<body>
<div class="wrap flex flexV">
<div class="bottom-wrap flex1">
<div class="top flex">
<div class="item flex1 iteml">
<div class="bw-b-bottom" style="margin-bottom: 5px;">
<div class="bw-b-bottom-up">
<div class="bw-item-content">
<div id='one' style="width: 100%; height: 100%;"></div>
</div>
</div>
</div>
</div>
<div class="item flex2 iteml">
<div class="bw-b-bottom">
<div class="bw-b-bottom-up">
<div class="bw-item-content">
<div id='two' style="width: 100%; height: 100%;"></div>
</div>
</div>
</div>
</div>
<div class="item flex1 iteml">
<div class="bw-b-bottom">
<div class="bw-b-bottom-up">
<div class="bw-item-content">
<div id='five' style="width: 100%; height: 100%;"></div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="bottom-wrap flex1">
<div class="top flex">
<div class="item flex1 iteml">
<div class="bw-b-bottom">
<div class="bw-b-bottom-up">
<div class="tab-wrap">
<div class="tab" data-value="3">
<div class="t-item active">不足一周</div>
<div class="spline"></div>
<div class="t-item">一周</div>
<div class="spline"></div>
<div class="t-item">两周</div>
<div class="spline"></div>
<div class="t-item">三周</div>
<div class="spline"></div>
<div class="t-item">一个月</div>
</div>
</div>
<div class="bw-item-content">
<div id='three' style="width: 100%; height: 100%;"></div>
</div>
</div>
</div>
</div>
<div class="item flex1 iteml">
<div class="bw-b-bottom">
<div class="bw-b-bottom-up">
<div class="bw-item-content">
<div id="myDiv" runat="server" style="width: 100%; height: 100%;" ></div>
</div>
</div>
</div>
</div>
<div class="item flex1 iteml">
<div class="bw-b-bottom">
<div class="bw-b-bottom-up">
<div class="bw-item-content">
<div id='four' style="width: 100%; height: 100%;"></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
<script type="text/javascript" src="../res/index/js/jquery-3.4.1.min.js"></script>
<script type="text/javascript" src="../res/index/js/swiper-3.4.2.jquery.min.js"></script>
<script type="text/javascript" src="../res/index/js/echarts.min.js"></script>
<script type="text/javascript">
function category_one(id, data, data2) {
// 基于准备好的dom,初始化echarts实例
var myChart = echarts.init(document.getElementById(id))
// 指定图表的配置项和数据
var option = {
title: [{
text: '关键事项关闭率',
top: '0',
left: '30%',
textStyle: {
color: '#1C1C1C',
fontSize: 16,
fontWeight: 700
}
}],
tooltip: {
trigger: 'item',
formatter: '{a} <br/>{b}: {c} ({d}%)'
},
legend: {
orient: 'vertical',
right: 10,
top: 'center',
data: ['已关闭', '未关闭'],
textStyle: {//图例文字的样式
color: '#363636',
fontSize: 10,
}
},
graphic: {
type: "text",
left: "34%",
top: "54%",
style: {
text: data2,
textAlign: "center",
fill: "#1C1C1C",
fontSize: 18,
fontWeight: 600
}
},
color: ['#006400', '#FF0000'],
series: [
{
name: '关键事项',
type: 'pie',
center: ['38%', '55%'],
radius: ['40%', '78%'],
avoidLabelOverlap: false,
label: {
show: true,
fontSize: 16,
fontWeight: 600,
position: 'inside',
formatter: function (data) { return data.value; }
//formatter: function (data) { return data.percent.toFixed(2); }
},
labelLine: {
show: false
},
data: [
{ value: data[0], name: '已关闭' },
{ value: data[1], name: '未关闭' }
],
itemStyle: {
normal: {
borderWidth: 3,
borderColor: 'rgba(218,235,234, 1)'
}
}
}
]
}
// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option)
}
var one =<%=One %>;
var data = one.series[0].data
var data2 = data[0] + data[1];
var data3 = data[2] + '%';
category_one('one', data, data3)
</script>
<script type="text/javascript">
function category_Two(id, xArr, data, num) {
// 基于准备好的dom,初始化echarts实例
var myChart = echarts.init(document.getElementById(id))
// 指定图表的配置项和数据
var option = {
title: {
// left:'center',
text: '关键事项统计——事项类别',
textStyle: {
color: '#1C1C1C',
fontSize: 16,
fontWeight: 700
},
show: true
},
tooltip: {},
legend: {
left: '80%',
show: true,
textStyle: {//图例文字的样式
color: '#363636',
fontSize: 12,
}
},
xAxis: {
axisTick: {
show: false
},
axisLine: {
lineStyle: {
color: 'rgba(0,0,0, 0.3)',
}
},
axisLabel: {
show: true,
textStyle: {
color: 'rgba(0,0,0, 0.8)'
},
interval: 0,
formatter: function (value) {
var ret = "";//拼接加\n返回的类目项
var maxLength = num;//每项显示文字个数
var valLength = value.length;//X轴类目项的文字个数
var rowN = Math.ceil(valLength / maxLength); //类目项需要换行的行数
if (rowN > 1)//如果类目项的文字大于maxLength,
{
for (var i = 0; i < rowN; i++) {
var temp = "";//每次截取的字符串
var start = i * maxLength;//开始截取的位置
var end = start + maxLength;//结束截取的位置
//这里也可以加一个是否是最后一行的判断,但是不加也没有影响,那就不加吧
//temp = value.substring(start, end) + "\n";
temp = value.substring(start, end) + (i == rowN - 1 ? "" : "\n");
ret += temp; //凭借最终的字符串
}
return ret;
}
else {
return value;
}
}
},
type: 'category',
data: xArr,
boundaryGap: [0, 0.01],
},
yAxis: {
axisTick: {
show: false
},
axisLine: {
show: false,
lineStyle: {
color: 'rgba(0,0,0, 0.3)'
}
},
axisLabel: {
show: true,
textStyle: {
color: 'rgba(0,0,0, 0.8)'
}
},
},
series: data,
grid: {
top: '20%',
left: '0%',
right: '0%',
bottom: '0%',
containLabel: true,
backgroundColor: 'rgba(0,162,233, 0.01)',
// borderColor: 'rgba(0,162,233, 1)'
},
backgroundColor: 'rgba(0,162,233, 0.01)',
textStyle: {
color: 'rgba(0,0,0, 0.3)'
}
}
// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option)
}
var two2 =<%=Two %>;
var xArr = two2.categories
var data = [
{
name: '未关闭',
type: 'bar',
stack: '总量',
barWidth: 40,
data: two2.series[0].data,
label: { //柱体上显示数值
show: true,//开启显示
position: ['35%', '50%'],//在上方显示
textStyle: {//数值样式
fontSize: '20px',
color: '#363636'
},
formatter: function (params) {
// 当数值为0时返回空字符串,不显示标签
return params.value === 0 ? '' : params.value;
},
},
itemStyle: { normal: { color: 'rgba(255,0,0, 0.5)' } }
},
{
name: '已关闭',
type: 'bar',
stack: '总量',
barWidth: 40,
data: two2.series[1].data,
label: { //柱体上显示数值
show: true,//开启显示
position: ['35%', '50%'],//在上方显示
textStyle: {//数值样式
fontSize: '20px',
color: '#363636'
},
formatter: function (params) {
// 当数值为0时返回空字符串,不显示标签
return params.value === 0 ? '' : params.value;
},
},
itemStyle: { normal: { color: 'rgba(0,100,0,0.8)' } }
}
]
category_Two('two', xArr, data, two2.xFontNum)
</script>
<script type="text/javascript">
function category_Five(id, xArr, data, num) {
// 基于准备好的dom,初始化echarts实例
var myChart = echarts.init(document.getElementById(id))
// 指定图表的配置项和数据
var option = {
title: {
// left:'center',
text: '关键事项统计——责任人',
textStyle: {
color: '#1C1C1C',
fontSize: 16,
fontWeight: 700
},
show: true
},
tooltip: {},
legend: {
left: '60%',
show: true,
textStyle: {//图例文字的样式
color: '#363636',
fontSize: 12,
}
},
xAxis: {
axisTick: {
show: false
},
axisLine: {
lineStyle: {
color: 'rgba(0,0,0, 0.3)',
}
},
axisLabel: {
show: true,
textStyle: {
color: 'rgba(0,0,0, 0.8)'
},
interval: 0,
formatter: function (value) {
var ret = "";//拼接加\n返回的类目项
var maxLength = num;//每项显示文字个数
var valLength = value.length;//X轴类目项的文字个数
var rowN = Math.ceil(valLength / maxLength); //类目项需要换行的行数
if (rowN > 1)//如果类目项的文字大于maxLength,
{
for (var i = 0; i < rowN; i++) {
var temp = "";//每次截取的字符串
var start = i * maxLength;//开始截取的位置
var end = start + maxLength;//结束截取的位置
//这里也可以加一个是否是最后一行的判断,但是不加也没有影响,那就不加吧
//temp = value.substring(start, end) + "\n";
temp = value.substring(start, end) + (i == rowN - 1 ? "" : "\n");
ret += temp; //凭借最终的字符串
}
return ret;
}
else {
return value;
}
}
},
type: 'category',
data: xArr,
boundaryGap: [0, 0.01],
},
yAxis: {
axisTick: {
show: false
},
axisLine: {
show: false,
lineStyle: {
color: 'rgba(0,0,0, 0.3)'
}
},
axisLabel: {
show: true,
textStyle: {
color: 'rgba(0,0,0, 0.8)'
}
},
},
series: data,
grid: {
top: '20%',
left: '0%',
right: '0%',
bottom: '0%',
containLabel: true,
backgroundColor: 'rgba(0,162,233, 0.01)',
// borderColor: 'rgba(0,162,233, 1)'
},
backgroundColor: 'rgba(0,162,233, 0.01)',
textStyle: {
color: 'rgba(0,0,0, 0.3)'
}
}
// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option)
}
var five =<%=Five %>;
var xArr = five.categories
var data = [
{
name: '未关闭',
type: 'bar',
stack: '总量',
barWidth: 40,
data: five.series[0].data,
label: { //柱体上显示数值
show: true,//开启显示
position: ['35%', '50%'],//在上方显示
textStyle: {//数值样式
fontSize: '20px',
color: '#363636'
},
formatter: function (params) {
// 当数值为0时返回空字符串,不显示标签
return params.value === 0 ? '' : params.value;
},
},
itemStyle: { normal: { color: 'rgba(178 ,34,34, 0.8)' } }
},
{
name: '已关闭',
type: 'bar',
stack: '总量',
barWidth: 40,
data: five.series[1].data,
label: { //柱体上显示数值
show: true,//开启显示
position: ['35%', '50%'],//在上方显示
textStyle: {//数值样式
fontSize: '20px',
color: '#363636'
},
formatter: function (params) {
// 当数值为0时返回空字符串,不显示标签
return params.value === 0 ? '' : params.value;
},
},
itemStyle: { normal: { color: 'rgba(0,100,0,0.5)' } }
}
]
category_Five('five', xArr, data, five.xFontNum)
</script>
<script type="text/javascript">
function category_Three(id, xArr, series) {
// 基于准备好的dom,初始化echarts实例
var myChart = echarts.init(document.getElementById(id))
// 指定图表的配置项和数据
var option = {
title: {
// left:'center',
text: '',
textStyle: {
color: '#1C1C1C',
fontSize: 16,
fontWeight: 700
},
show: false
},
tooltip: {},
legend: {
left: '3%',
show: true,
selectedMode: false,
textStyle: {//图例文字的样式
color: '#1C1C1C',
fontSize: 16,
fontWeight: 700
}
},
xAxis: {
axisTick: {
show: false
},
axisLine: {
lineStyle: {
color: 'rgba(0,0,0, 0.3)'
}
},
axisLabel: {
show: true,
textStyle: {
color: 'rgba(0,0,0, 0.8)'
},
interval: 0,
formatter: function (value) {
var ret = "";//拼接加\n返回的类目项
var maxLength = 5;//每项显示文字个数
var valLength = value.length;//X轴类目项的文字个数
var rowN = Math.ceil(valLength / maxLength); //类目项需要换行的行数
if (rowN > 1)//如果类目项的文字大于maxLength,
{
for (var i = 0; i < rowN; i++) {
var temp = "";//每次截取的字符串
var start = i * maxLength;//开始截取的位置
var end = start + maxLength;//结束截取的位置
//这里也可以加一个是否是最后一行的判断,但是不加也没有影响,那就不加吧
//temp = value.substring(start, end) + "\n";
temp = value.substring(start, end) + (i == rowN - 1 ? "" : "\n");
ret += temp; //凭借最终的字符串
}
return ret;
}
else {
return value;
}
}
},
type: 'category',
data: xArr
},
yAxis: {
axisTick: {
show: false
},
axisLine: {
show: false,
lineStyle: {
color: 'rgba(0,0,0, 0.3)'
}
},
axisLabel: {
show: true,
textStyle: {
color: 'rgba(0,0,0, 0.8)'
}
}
},
series: series,
grid: {
top: '15%',
left: '0%',
right: '0%',
bottom: '0%',
containLabel: true,
backgroundColor: 'rgba(0,162,233, 0.01)',
// borderColor: 'rgba(0,162,233, 1)'
},
backgroundColor: 'rgba(0,162,233, 0.01)',
textStyle: {
color: 'rgba(0,0,0, 0.3)'
}
}
// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option)
}
var three =<%=Three %>;
var xArr = three.categories
var series = [{
name: '关键事项超期统计',
type: 'bar',
barWidth: 30,
barGap: 0,
data: three.series[0].data,
label: { //柱体上显示数值
show: true,//开启显示
position: ['35%', '50%'],//在上方显示
textStyle: {//数值样式
fontSize: '20px',
color: '#363636'
},
formatter: function (params) {
// 当数值为0时返回空字符串,不显示标签
return params.value === 0 ? '' : params.value;
},
},
itemStyle: { normal: { color: 'rgba(30,144,255,0.8)' } }
}];
category_Three('three', xArr, series)
</script>
<script type="text/javascript">
function category_Four(id, xArr, series) {
// 基于准备好的dom,初始化echarts实例
var myChart = echarts.init(document.getElementById(id))
// 指定图表的配置项和数据
var option = {
title: {
// left:'center',
text: '关键事项超期平均时间',
textStyle: {
color: '#1C1C1C',
fontSize: 16,
fontWeight: 700
},
show: false
},
tooltip: {},
legend: {
left: '3%',
show: true,
selectedMode: false,
textStyle: {//图例文字的样式
color: '#1C1C1C',
fontSize: 16,
fontWeight: 700
}
},
xAxis: {
axisTick: {
show: false
},
axisLine: {
lineStyle: {
color: 'rgba(0,0,0, 0.3)'
}
},
axisLabel: {
show: true,
textStyle: {
color: 'rgba(0,0,0, 0.8)'
},
interval: 0,
formatter: function (value) {
var ret = "";//拼接加\n返回的类目项
var maxLength = 5;//每项显示文字个数
var valLength = value.length;//X轴类目项的文字个数
var rowN = Math.ceil(valLength / maxLength); //类目项需要换行的行数
if (rowN > 1)//如果类目项的文字大于maxLength,
{
for (var i = 0; i < rowN; i++) {
var temp = "";//每次截取的字符串
var start = i * maxLength;//开始截取的位置
var end = start + maxLength;//结束截取的位置
//这里也可以加一个是否是最后一行的判断,但是不加也没有影响,那就不加吧
//temp = value.substring(start, end) + "\n";
temp = value.substring(start, end) + (i == rowN - 1 ? "" : "\n");
ret += temp; //凭借最终的字符串
}
return ret;
}
else {
return value;
}
}
},
type: 'category',
data: xArr
},
yAxis: {
axisTick: {
show: false
},
axisLine: {
show: false,
lineStyle: {
color: 'rgba(0,0,0, 0.3)'
}
},
axisLabel: {
show: true,
textStyle: {
color: 'rgba(0,0,0, 0.8)'
}
}
},
series: series,
grid: {
top: '15%',
left: '0%',
right: '0%',
bottom: '0%',
containLabel: true,
backgroundColor: 'rgba(0,162,233, 0.01)',
// borderColor: 'rgba(0,162,233, 1)'
},
backgroundColor: 'rgba(0,162,233, 0.01)',
textStyle: {
color: 'rgba(0,0,0, 0.3)'
}
}
// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option)
}
var four =<%=Four %>;
var xArr = four.categories;
var series = [{
name: '关键事项超期平均时间统计(单位:天)',
type: 'bar',
barWidth: 30,
barGap: 0,
data: four.series[0].data,
markLine: {
data: [
{
name: '全平台平均超期时间',
yAxis: four.series[2].data[0],
label: { show: true, position: "middle" },
lineStyle: {
type: "dashed",
color: "#3c78d8"
}
},
{
name: '本项目平均超期时间',
yAxis: four.series[1].data[0],
label: { show: true, position: "middle" },
lineStyle: {
type: "dashed",
color: "#FF0000"
}
}
]
},
label: { //柱体上显示数值
show: true,//开启显示
position: ['35%', '50%'],//在上方显示
textStyle: {//数值样式
fontSize: '20px',
color: '#363636'
},
formatter: function (params) {
// 当数值为0时返回空字符串,不显示标签
return params.value === 0 ? '' : params.value;
},
//emphasis: {
// show: true,
// position: 'top',
// formatter: '{c}'
//},
//z: 100
},
itemStyle: { normal: { color: 'rgba(255,140,0,0.8)' } }
//itemStyle: { normal: { color: '#FFA500' } }
}];
category_Four('four', xArr, series)
</script>
<script>
$(".tab .t-item").click(function () {
var $this = $(this)
var index = $this.index()
if ($this.hasClass('active') && index == 0) {
return
}
var $tab = $this.closest(".tab")
var value = $tab.attr("data-value")
$tab.find(".t-item").removeClass('active');
$this.addClass('active')
var two =<%=Two %>;
var three =<%=Three %>;
var three2 =<%=Three2 %>;
var three3 =<%=Three3 %>;
var three4 =<%=Three4 %>;
var three5 =<%=Three5 %>;
var num = 5;
if (value == 3) {
var xArr = three.categories
var series = [{
name: '关键事项超期统计——不足一周',
type: 'bar',
data: three.series[0].data,
itemStyle: { normal: { color: 'rgba(30,144,255,0.8)' } }
}];
if (index == 2) {
xArr = three2.categories
series = [{
name: '关键事项超期统计——超期一周',
type: 'bar',
data: three2.series[0].data,
itemStyle: { normal: { color: 'rgba(30,144,255,0.8)' } }
}];
}
if (index == 4) {
xArr = three3.categories
series = [{
name: '关键事项超期统计——超期两周',
type: 'bar',
data: three3.series[0].data,
itemStyle: { normal: { color: 'rgba(30,144,255,0.8)' } }
}];
}
if (index == 6) {
xArr = three4.categories
series = [{
name: '关键事项超期统计——超期三周',
type: 'bar',
data: three4.series[0].data,
itemStyle: { normal: { color: 'rgba(30,144,255,0.8)' } }
}];
}
if (index == 8) {
xArr = three5.categories
series = [{
name: '关键事项超期统计——超期一个月',
type: 'bar',
data: three5.series[0].data,
itemStyle: { normal: { color: 'rgba(30,144,255,0.8)' } }
}];
}
category_Three('three', xArr, series)
}
})
</script>
</html>
@@ -0,0 +1,500 @@
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.UI.WebControls;
using BLL;
using System.Data;
using System.Data.SqlClient;
using Model;
using System.Linq;
using NPOI.SS.Formula.Functions;
using NPOI.XSSF.Streaming.Values;
using System.Web.UI.HtmlControls;
using System.Text;
namespace FineUIPro.Web
{
public partial class mainMenu_PGJSX : PageBase
{
#region
/// <summary>
/// 项目主键
/// </summary>
public string ProjectId
{
get
{
return (string)ViewState["ProjectId"];
}
set
{
ViewState["ProjectId"] = value;
}
}
#endregion
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
this.ProjectId = string.Empty;
if (this.CurrUser != null && !string.IsNullOrEmpty(this.CurrUser.LoginProjectId))
{
this.ProjectId = this.CurrUser.LoginProjectId;
}
BindGrid();
}
}
#region
#region
/// <summary>
/// 关键事项
/// </summary>
protected string One
{
get
{
var db = new Model.SGGLDB(Funs.ConnString);
List<Model.SingleSerie> series = new List<Model.SingleSerie>();
Model.BusinessColumn businessColumn = new Model.BusinessColumn();
Model.SingleSerie s = new Model.SingleSerie();
List<double> listdata = new List<double>();
businessColumn.title = "关键事项关闭率";
var allItems = from x in db.GJSX
where x.ProjectId == this.CurrUser.LoginProjectId
orderby x.GJSXID
select x;
int closeNum = allItems.Where(x => x.State == "0").Count();
listdata.Add(closeNum);
listdata.Add(allItems.Count() - closeNum);
double closureRate = 0;
if (allItems.Any())
{
closureRate = (double)closeNum / (double)allItems.Count();
}
listdata.Add(Math.Round(closureRate * 100, 2));
s.data = listdata;
series.Add(s);
businessColumn.series = series;
return JsonConvert.SerializeObject(businessColumn);
}
}
#endregion
/// <summary>
/// 关键事项统计——按事项类别
/// </summary>
protected string Two
{
get
{
List<Model.SingleSerie> series = new List<Model.SingleSerie>();
Model.BusinessColumn businessColumn = new Model.BusinessColumn();
List<string> listCategories = new List<string>();
businessColumn.title = "关键事项统计";
businessColumn.xFontNum = 8;
var gjsxTypes = BLL.GJSXTypeService.GetGJSXTypeList();
var allItems = from x in Funs.DB.GJSX
where x.ProjectId == this.ProjectId
select x;
Model.SingleSerie s = new Model.SingleSerie();
Model.SingleSerie s2 = new Model.SingleSerie();
List<double> listdata = new List<double>();
List<double> listdata2 = new List<double>();
int closeNum = 0;
foreach (var type in gjsxTypes)
{
listCategories.Add(type.GJSXTypeName);
var typeItems = allItems.Where(x => x.GJSXTypeId.Contains(type.GJSXTypeID));
closeNum = typeItems.Where(x => x.State == "0").Count();
listdata.Add(typeItems.Count() - closeNum);
listdata2.Add(closeNum);
}
s.data = listdata;
s2.data = listdata2;
series.Add(s);
series.Add(s2);
businessColumn.categories = listCategories;
businessColumn.series = series;
return JsonConvert.SerializeObject(businessColumn);
}
}
/// <summary>
/// 关键事项统计——按责任人
/// </summary>
protected string Five
{
get
{
List<Model.SingleSerie> series = new List<Model.SingleSerie>();
Model.BusinessColumn businessColumn = new Model.BusinessColumn();
List<string> listCategories = new List<string>();
businessColumn.title = "关键事项统计";
businessColumn.xFontNum = 5;
var userIds = BLL.GJSXService.GetGJSXUserList(this.ProjectId);
var allItems = from x in Funs.DB.GJSX
where x.ProjectId == this.ProjectId
select x;
Model.SingleSerie s = new Model.SingleSerie();
Model.SingleSerie s2 = new Model.SingleSerie();
List<double> listdata = new List<double>();
List<double> listdata2 = new List<double>();
int closeNum = 0;
foreach (var userid in userIds)
{
listCategories.Add(UserService.GetUserNameByUserId(userid));
var typeItems = allItems.Where(x => x.User_Acceptance == userid);
closeNum = typeItems.Where(x => x.State == "0").Count();
listdata.Add(typeItems.Count() - closeNum);
listdata2.Add(closeNum);
}
s.data = listdata;
s2.data = listdata2;
series.Add(s);
series.Add(s2);
businessColumn.categories = listCategories;
businessColumn.series = series;
return JsonConvert.SerializeObject(businessColumn);
}
}
#endregion
#region
/// <summary>
/// 超期统计表格
/// </summary>
private void BindGrid()
{
Model.SGGLDB db = Funs.DB;
var gjsxTypes = BLL.GJSXTypeService.GetGJSXTypeList();
var allItems = from x in Funs.DB.GJSX
where x.ProjectId == this.ProjectId && (x.CloseDate ?? DateTime.Now) > Convert.ToDateTime(x.CompleteDate)
select x;
StringBuilder sb = new StringBuilder();
sb.Append("<table id=\"myTable\" class=\"myTableClass\" > ");
sb.Append("<thead>");
sb.Append("<tr>");
sb.Append("<th class=\"tab-title\" colspan=\"6\">事项类别超期统计</th>");
sb.Append("</tr>");
sb.Append("<tr>");
sb.Append("<th class=\"tab-header\">事项类别</th>");
sb.Append("<th class=\"tab-header\">不足一周</th>");
sb.Append("<th class=\"tab-header\">超期一周</th>");
sb.Append("<th class=\"tab-header\">超期两周</th>");
sb.Append("<th class=\"tab-header\">超期三周</th>");
sb.Append("<th class=\"tab-header\">超一个月</th>");
sb.Append("</tr>");
sb.Append("</thead>");
sb.Append("<tbody>");
foreach (var type in gjsxTypes)
{
int day1 = allItems.Where(x => x.GJSXTypeId.Contains(type.GJSXTypeID) && (x.CloseDate ?? DateTime.Now) < Convert.ToDateTime(x.CompleteDate).AddDays(7)).Count();
int day7 = allItems.Where(x => x.GJSXTypeId.Contains(type.GJSXTypeID) && (x.CloseDate ?? DateTime.Now) > Convert.ToDateTime(x.CompleteDate).AddDays(7) && (x.CloseDate ?? DateTime.Now) < Convert.ToDateTime(x.CompleteDate).AddDays(14)).Count();
int day14 = allItems.Where(x => x.GJSXTypeId.Contains(type.GJSXTypeID) && (x.CloseDate ?? DateTime.Now) > Convert.ToDateTime(x.CompleteDate).AddDays(14) && (x.CloseDate ?? DateTime.Now) < Convert.ToDateTime(x.CompleteDate).AddDays(21)).Count();
int day21 = allItems.Where(x => x.GJSXTypeId.Contains(type.GJSXTypeID) && (x.CloseDate ?? DateTime.Now) > Convert.ToDateTime(x.CompleteDate).AddDays(21) && (x.CloseDate ?? DateTime.Now) < Convert.ToDateTime(x.CompleteDate).AddDays(28)).Count();
int day30 = allItems.Where(x => x.GJSXTypeId.Contains(type.GJSXTypeID) && (x.CloseDate ?? DateTime.Now) > Convert.ToDateTime(x.CompleteDate).AddDays(28)).Count();
sb.Append("<tr>");
sb.Append($"<td>{type.GJSXTypeName}</td>");
sb.Append($"<td>{day1}</td>");
sb.Append($"<td>{day7}</td>");
sb.Append($"<td>{day14}</td>");
sb.Append($"<td>{day21}</td>");
sb.Append($"<td>{day30}</td>");
sb.Append("</tr>");
}
sb.Append("</tbody>");
sb.Append("</table>");
myDiv.InnerHtml = sb.ToString();
}
/// <summary>
/// 分页
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Grid1_PageIndexChange(object sender, GridPageEventArgs e)
{
BindGrid();
}
/// <summary>
/// 排序
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Grid1_Sort(object sender, FineUIPro.GridSortEventArgs e)
{
BindGrid();
}
/// <summary>
/// 超期统计——不足一周
/// </summary>
protected string Three
{
get
{
List<Model.SingleSerie> series = new List<Model.SingleSerie>();
Model.BusinessColumn businessColumn = new Model.BusinessColumn();
List<string> listCategories = new List<string>();
businessColumn.title = "超期统计——不足一周";
businessColumn.xFontNum = 5;
Model.SGGLDB db = Funs.DB;
var gjsxTypes = BLL.GJSXTypeService.GetGJSXTypeList();
var allItems = from x in Funs.DB.GJSX
where x.ProjectId == this.ProjectId
&& (x.CloseDate ?? DateTime.Now) > Convert.ToDateTime(x.CompleteDate)
&& (x.CloseDate ?? DateTime.Now) < Convert.ToDateTime(x.CompleteDate).AddDays(7)
select x;
Model.SingleSerie s = new Model.SingleSerie();
Model.SingleSerie s2 = new Model.SingleSerie();
List<double> listdata = new List<double>();
foreach (var type in gjsxTypes)
{
listCategories.Add(type.GJSXTypeName);
var typelst = allItems.Where(x => x.GJSXTypeId.Contains(type.GJSXTypeID)).ToList();
listdata.Add(typelst.Count());
}
s.data = listdata;
series.Add(s);
businessColumn.categories = listCategories;
businessColumn.series = series;
return JsonConvert.SerializeObject(businessColumn);
}
}
/// <summary>
/// 超期统计——超期一周
/// </summary>
protected string Three2
{
get
{
List<Model.SingleSerie> series = new List<Model.SingleSerie>();
Model.BusinessColumn businessColumn = new Model.BusinessColumn();
List<string> listCategories = new List<string>();
businessColumn.title = "超期统计——超期一周";
businessColumn.xFontNum = 5;
Model.SGGLDB db = Funs.DB;
var gjsxTypes = BLL.GJSXTypeService.GetGJSXTypeList();
var allItems = from x in Funs.DB.GJSX
where x.ProjectId == this.ProjectId
&& (x.CloseDate ?? DateTime.Now) > Convert.ToDateTime(x.CompleteDate).AddDays(7)
&& (x.CloseDate ?? DateTime.Now) < Convert.ToDateTime(x.CompleteDate).AddDays(14)
select x;
Model.SingleSerie s = new Model.SingleSerie();
Model.SingleSerie s2 = new Model.SingleSerie();
List<double> listdata = new List<double>();
foreach (var type in gjsxTypes)
{
listCategories.Add(type.GJSXTypeName);
var typelst = allItems.Where(x => x.GJSXTypeId.Contains(type.GJSXTypeID)).ToList();
listdata.Add(typelst.Count());
}
s.data = listdata;
series.Add(s);
businessColumn.categories = listCategories;
businessColumn.series = series;
return JsonConvert.SerializeObject(businessColumn);
}
}
/// <summary>
/// 超期统计——超期两周
/// </summary>
protected string Three3
{
get
{
List<Model.SingleSerie> series = new List<Model.SingleSerie>();
Model.BusinessColumn businessColumn = new Model.BusinessColumn();
List<string> listCategories = new List<string>();
businessColumn.title = "超期统计——超期两周";
businessColumn.xFontNum = 5;
Model.SGGLDB db = Funs.DB;
var gjsxTypes = BLL.GJSXTypeService.GetGJSXTypeList();
var allItems = from x in Funs.DB.GJSX
where x.ProjectId == this.ProjectId
&& (x.CloseDate ?? DateTime.Now) > Convert.ToDateTime(x.CompleteDate).AddDays(14)
&& (x.CloseDate ?? DateTime.Now) < Convert.ToDateTime(x.CompleteDate).AddDays(21)
select x;
Model.SingleSerie s = new Model.SingleSerie();
Model.SingleSerie s2 = new Model.SingleSerie();
List<double> listdata = new List<double>();
foreach (var type in gjsxTypes)
{
listCategories.Add(type.GJSXTypeName);
var typelst = allItems.Where(x => x.GJSXTypeId.Contains(type.GJSXTypeID)).ToList();
listdata.Add(typelst.Count());
}
s.data = listdata;
series.Add(s);
businessColumn.categories = listCategories;
businessColumn.series = series;
return JsonConvert.SerializeObject(businessColumn);
}
}
/// <summary>
/// 超期统计——超期三周
/// </summary>
protected string Three4
{
get
{
List<Model.SingleSerie> series = new List<Model.SingleSerie>();
Model.BusinessColumn businessColumn = new Model.BusinessColumn();
List<string> listCategories = new List<string>();
businessColumn.title = "超期统计——超期三周";
businessColumn.xFontNum = 5;
Model.SGGLDB db = Funs.DB;
var gjsxTypes = BLL.GJSXTypeService.GetGJSXTypeList();
var allItems = from x in Funs.DB.GJSX
where x.ProjectId == this.ProjectId
&& (x.CloseDate ?? DateTime.Now) > Convert.ToDateTime(x.CompleteDate).AddDays(21)
&& (x.CloseDate ?? DateTime.Now) < Convert.ToDateTime(x.CompleteDate).AddDays(30)
select x;
Model.SingleSerie s = new Model.SingleSerie();
Model.SingleSerie s2 = new Model.SingleSerie();
List<double> listdata = new List<double>();
foreach (var type in gjsxTypes)
{
listCategories.Add(type.GJSXTypeName);
var typelst = allItems.Where(x => x.GJSXTypeId.Contains(type.GJSXTypeID)).ToList();
listdata.Add(typelst.Count());
}
s.data = listdata;
series.Add(s);
businessColumn.categories = listCategories;
businessColumn.series = series;
return JsonConvert.SerializeObject(businessColumn);
}
}
/// <summary>
/// 超期统计——超期一个月
/// </summary>
protected string Three5
{
get
{
List<Model.SingleSerie> series = new List<Model.SingleSerie>();
Model.BusinessColumn businessColumn = new Model.BusinessColumn();
List<string> listCategories = new List<string>();
businessColumn.title = "超期统计——超期一个月";
businessColumn.xFontNum = 5;
Model.SGGLDB db = Funs.DB;
var gjsxTypes = BLL.GJSXTypeService.GetGJSXTypeList();
var allItems = from x in Funs.DB.GJSX
where x.ProjectId == this.ProjectId
&& (x.CloseDate ?? DateTime.Now) > Convert.ToDateTime(x.CompleteDate).AddDays(30)
select x;
Model.SingleSerie s = new Model.SingleSerie();
Model.SingleSerie s2 = new Model.SingleSerie();
List<double> listdata = new List<double>();
foreach (var type in gjsxTypes)
{
listCategories.Add(type.GJSXTypeName);
var typelst = allItems.Where(x => x.GJSXTypeId.Contains(type.GJSXTypeID)).ToList();
listdata.Add(typelst.Count());
}
s.data = listdata;
series.Add(s);
businessColumn.categories = listCategories;
businessColumn.series = series;
return JsonConvert.SerializeObject(businessColumn);
}
}
#endregion
#region
/// <summary>
/// 超期平均时间统计
/// </summary>
protected string Four
{
get
{
List<Model.SingleSerie> series = new List<Model.SingleSerie>();
Model.BusinessColumn businessColumn = new Model.BusinessColumn();
List<string> listCategories = new List<string>();
businessColumn.title = "关键事项——超期平均时间";
businessColumn.xFontNum = 5;
Model.SGGLDB db = Funs.DB;
List<double> listdata = new List<double>();
List<double> listdata2 = new List<double>();
List<double> listdata3 = new List<double>();
Model.SingleSerie s = new Model.SingleSerie();
Model.SingleSerie s2 = new Model.SingleSerie();
Model.SingleSerie s3 = new Model.SingleSerie();
var gjsxTypes = BLL.GJSXTypeService.GetGJSXTypeList();
//全平台
var overallItems = from x in Funs.DB.GJSX
where (x.CloseDate ?? DateTime.Now) > Convert.ToDateTime(x.CompleteDate)
select new
{
x.GJSXTypeId,
DiffDay = (double)((x.CloseDate ?? DateTime.Now) - Convert.ToDateTime(x.CompleteDate)).Days //+ 1
};
//本项目
var allItems = from x in Funs.DB.GJSX
where x.ProjectId == this.ProjectId
&& (x.CloseDate ?? DateTime.Now) > Convert.ToDateTime(x.CompleteDate)
select new
{
x.GJSXTypeId,
DiffDay = (double)((x.CloseDate ?? DateTime.Now) - Convert.ToDateTime(x.CompleteDate)).Days //+ 1
};
//全平台平均超期时间
double overallAverageDiffDay = 0;
if (overallItems.Any())
{
overallAverageDiffDay = Math.Round(overallItems.Average(p => p.DiffDay), 1);
}
listdata3.Add(overallAverageDiffDay);
s3.data = listdata3;
//项目平均超期时间
double averageDiffDay = 0;
if (allItems.Any())
{
averageDiffDay = Math.Round(allItems.Average(p => p.DiffDay), 1);
}
listdata2.Add(averageDiffDay);
s2.data = listdata2;
//各事项类别超期平均时间
foreach (var type in gjsxTypes)
{
listCategories.Add(type.GJSXTypeName);
var typelst = allItems.Where(x => x.GJSXTypeId.Contains(type.GJSXTypeID)).ToList();
double averageTypeDiffDay = 0;
if (typelst.Any())
{
averageTypeDiffDay = typelst.Average(p => p.DiffDay);
}
listdata.Add(averageTypeDiffDay);
}
s.data = listdata;
series.Add(s);
series.Add(s2);
series.Add(s3);
businessColumn.categories = listCategories;
businessColumn.series = series;
return JsonConvert.SerializeObject(businessColumn);
}
}
#endregion
}
}
@@ -0,0 +1,35 @@
//------------------------------------------------------------------------------
// <自动生成>
// 此代码由工具生成。
//
// 对此文件的更改可能导致不正确的行为,如果
// 重新生成代码,则所做更改将丢失。
// </自动生成>
//------------------------------------------------------------------------------
namespace FineUIPro.Web
{
public partial class mainMenu_PGJSX
{
/// <summary>
/// Head1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::System.Web.UI.HtmlControls.HtmlHead Head1;
/// <summary>
/// myDiv 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::System.Web.UI.HtmlControls.HtmlGenericControl myDiv;
}
}
+10 -10
View File
@@ -35,15 +35,15 @@ namespace FineUIPro.Web.common
}
//未遂事故
var wsAccidentList1 = from x in db.Accident_AccidentPersonRecord
join y in db.Base_AccidentType on x.AccidentTypeId equals y.AccidentTypeId
where y.AccidentTypeName.Contains("未遂")
select x;
var wsAccidentList2 = from x in db.Accident_AccidentReportOther
join y in db.Sys_Const on x.AccidentTypeId equals y.ConstValue
where y.ConstText.Contains("未遂")
select x;
////未遂事故
//var wsAccidentList1 = from x in db.Accident_AccidentPersonRecord
// join y in db.Base_AccidentType on x.AccidentTypeId equals y.AccidentTypeId
// where y.AccidentTypeName.Contains("未遂")
// select x;
//var wsAccidentList2 = from x in db.Accident_AccidentReportOther
// join y in db.Sys_Const on x.AccidentTypeId equals y.ConstValue
// where y.ConstText.Contains("未遂")
// select x;
this.divWS.InnerHtml = GetNearMissNum().ToString();
//安全人工时
@@ -314,7 +314,7 @@ namespace FineUIPro.Web.common
{
getAllPersonInOutList = getAllPersonInOutList.Where(x => x.InOutDate <= datetime2);
}
if (getAllPersonInOutList.Count() > 0)
if (pids != null && getAllPersonInOutList.Count() > 0)
{
//cout1 = getAllPersonInOutList.Sum(x => (long)x.WorkHours);
foreach (var pid in pids)