Quellcode durchsuchen

更改首页图表

klzhangweiya vor 3 Jahren
Ursprung
Commit
595da556f4

+ 83 - 2
src_0nline/ShwasherSys/ShwasherSys.Application/Common/CommonAppService.cs

@@ -35,6 +35,7 @@ using ShwasherSys.BaseSysInfo.States;
 using ShwasherSys.BaseSysInfo.SysAttachFiles.Dto;
 using ShwasherSys.BasicInfo;
 using ShwasherSys.Common.Dto;
+using ShwasherSys.Common.Dto.HomeChartDto;
 using ShwasherSys.CompanyInfo;
 using ShwasherSys.CustomerInfo;
 using ShwasherSys.EntityFramework;
@@ -608,6 +609,7 @@ namespace ShwasherSys.Common
         {
             List<IndexAlertSumDto> result = new List<IndexAlertSumDto>();
             var user = SysUserRepository.Get(AbpSession.UserId ?? 0);
+            //销售部和超级管理员可以查看
             if (user.UserType == 1 || user.DepartmentID== "002")
             {
 
@@ -700,10 +702,89 @@ namespace ShwasherSys.Common
             var entityList = await query.Take(20).ToListAsync();
             return entityList;
         }
-        #endregion
+        /// <summary>
+        /// 首页查询图表
+        /// </summary>
+        /// <param name="ct">查询数据表 1:订单明细 2:排产单</param>
+        /// <param name="qt">汇总分类 1:按季度 0:按年</param>
+        /// <returns></returns>
+        public List<StatusChartDto> GetHomeStatusCharts(int ct,int qt)
+        {
+	        int deleteStatus = OrderItemStatusEnum.Delete.ToInt();
+	        DateTime dt = DateTime.Now;
+	        string startYear = dt.AddYears(-4).Year + "-01-01";
+
+	        DateTime startQuarter = dt.AddMonths(0 - (dt.Month - 1) % 3).AddDays(1 - dt.Day); //本季度初
+	        DateTime endQuarter = startQuarter.AddMonths(3);//.AddDays(-1); //本季度末
+	        string endTime = endQuarter.ToString("yyyy-MM-dd");
+	        var startTime = startQuarter.AddMonths(-12).ToString("yyyy-MM-dd");
+
+	        string sqlStr = "";
+	        if (ct == 1)
+	        {
+                sqlStr = $"select sum(1) as Count,OrderItemStatusId as StatusId,datename(year,TimeCreated) as Year from OrderItems where TimeCreated>='{startYear}' GROUP BY OrderItemStatusId,datename(year,TimeCreated)   HAVING OrderItemStatusId<>{deleteStatus};";
+			}else if (ct == 2)
+	        {
+		        sqlStr = $"select sum(1) as Count,ProductionOrderStatus as StatusId,datename(year,TimeCreated) as Year from ProductionOrders where TimeCreated >= '{startYear}'  GROUP BY ProductionOrderStatus,datename(year,TimeCreated)";
+			}
+		        
+	        //按季度,默认显示最近5个季度
+	        if (ct == 1&&qt == 1)
+	        {
+		        sqlStr =
+			        $"select sum(1) as Count,OrderItemStatusId as StatusId,datepart(qq,TimeCreated) as Quarterly,datename(year,TimeCreated) as Year from OrderItems where TimeCreated>='{startTime}' and TimeCreated<'{endTime}' GROUP BY OrderItemStatusId,datepart(qq,TimeCreated),datename(year,TimeCreated)  HAVING OrderItemStatusId<>{deleteStatus};";
+	        }else if (ct == 2 && qt == 1)
+	        {
+		        sqlStr = $"select sum(1) as Count,ProductionOrderStatus as StatusId,datepart(qq,TimeCreated) as Quarterly,datename(year,TimeCreated) as Year from ProductionOrders where TimeCreated >= '{startTime}' and TimeCreated<'{endTime}'  GROUP BY ProductionOrderStatus,datepart(qq,TimeCreated),datename(year,TimeCreated)";
+			}
+	        var statusChartDtos = SqlExecuter.SqlQuery<StatusChartDto>(sqlStr);
+	        statusChartDtos = statusChartDtos.OrderBy(i => i.Year);
+
+			if (qt == 1)
+	        {
+				statusChartDtos = statusChartDtos.OrderBy(i => i.Year).ThenBy(i=>i.Quarterly);
+			}
+
+			return statusChartDtos.ToList();
+        }
+
+		public List<OrderStatusChartDto> GetOrderStatusCharts(int qt)
+        {
+	        int deleteStatus = OrderItemStatusEnum.Delete.ToInt();
+			DateTime dt = DateTime.Now;
+			string startYear = dt.AddYears(-4).Year +"-01-01";
+	        string sqlStr =
+		        $"select sum(1) as Count,OrderItemStatusId,datename(year,TimeCreated) as Year from OrderItems where TimeCreated>='{startYear}' GROUP BY OrderItemStatusId,datename(year,TimeCreated) HAVING OrderItemStatusId<>{deleteStatus};";
+            //按季度,默认显示最近5个季度
+	        if (qt==1)
+	        {
+				DateTime startQuarter = dt.AddMonths(0 - (dt.Month - 1) % 3).AddDays(1 - dt.Day); //本季度初
+				DateTime endQuarter = startQuarter.AddMonths(3);//.AddDays(-1); //本季度末
+				string endTime = endQuarter.ToString("yyyy-MM-dd");
+				var startTime = startQuarter.AddMonths(-12).ToString("yyyy-MM-dd");
+				sqlStr =
+					$"select sum(1) as Count,OrderItemStatusId,datepart(qq,TimeCreated) as Quarterly,datename(year,TimeCreated) as Year from OrderItems where TimeCreated>='{startTime}' and TimeCreated<'{endTime}' GROUP BY OrderItemStatusId,datepart(qq,TimeCreated),datename(year,TimeCreated)  HAVING OrderItemStatusId<>{deleteStatus};";
+			}
+	        var orderStatusChartDtos = SqlExecuter.SqlQuery<OrderStatusChartDto>(sqlStr);
+	        orderStatusChartDtos = orderStatusChartDtos.OrderBy(i => i.Year);
+	        return orderStatusChartDtos.ToList();
+        }
+        public List<ProductionOrderStatusChartDto> GetProductionOrderStatusCharts()
+        {
+	       // int deleteStatus = OrderStatusEnum.Delete.ToInt();
+	        string startYear = DateTime.Now.AddYears(-4).Year + "-01-01";
+	        string sqlStr =
+		        $"select sum(1) as Count,ProductionOrderStatus,datename(year,TimeCreated) as Year from ProductionOrders where TimeCreated >= '{startYear}'  GROUP BY ProductionOrderStatus,datename(year,TimeCreated)";
+	        var orderStatusChartDtos = SqlExecuter.SqlQuery<ProductionOrderStatusChartDto>(sqlStr);
+	        orderStatusChartDtos = orderStatusChartDtos.OrderBy(i => i.Year);
+	        return orderStatusChartDtos.ToList();
+        }
+
+        
+		#endregion
 
 
-        public async Task<List<CurrentProductStoreHouseDto>> GetProductStoreInfoByProductNo(string productNo)
+		public async Task<List<CurrentProductStoreHouseDto>> GetProductStoreInfoByProductNo(string productNo)
         {
 	        var cs = await CurrentProductStoreHouseRepository.GetAllListAsync(i =>
 		        i.ProductNo == productNo && i.Quantity > 0);

+ 31 - 0
src_0nline/ShwasherSys/ShwasherSys.Application/Common/Dto/HomeChartDto/HomeChartDto.cs

@@ -0,0 +1,31 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ShwasherSys.Common.Dto.HomeChartDto
+{
+	public class StatusChartDto
+	{
+		public int Count { get; set; }
+
+		public int StatusId { get; set; }
+
+		public string StatusName { get; set; }
+
+		public string Year { get; set; }
+		//季度
+		public int Quarterly { get; set; }
+
+	}
+	public class OrderStatusChartDto: StatusChartDto
+	{
+		public int OrderItemStatusId { get; set; }
+
+	}
+	public class ProductionOrderStatusChartDto: StatusChartDto
+	{
+		public int ProductionOrderStatus { get; set; }
+	}
+}

+ 10 - 0
src_0nline/ShwasherSys/ShwasherSys.Application/Common/ICommonAppService.cs

@@ -12,6 +12,7 @@ using ShwasherSys.BaseSysInfo;
 using ShwasherSys.BaseSysInfo.States.Dto;
 using ShwasherSys.BaseSysInfo.SysAttachFiles.Dto;
 using ShwasherSys.Common.Dto;
+using ShwasherSys.Common.Dto.HomeChartDto;
 using ShwasherSys.CustomerInfo;
 using ShwasherSys.Order.Dto;
 using ShwasherSys.PackageInfo;
@@ -67,5 +68,14 @@ namespace ShwasherSys.Common
 
        Task<PagedResultDto<SemiProductDto>> GetSemiProductNotContainOld(IwbPagedRequestDto input);
        Task<PagedResultDto<ProductDto>> GetProductNotContainOld(IwbPagedRequestDto input);
+
+		List<OrderStatusChartDto> GetOrderStatusCharts(int qt);
+
+		List<ProductionOrderStatusChartDto> GetProductionOrderStatusCharts();
+
+		List<StatusChartDto> GetHomeStatusCharts(int ct, int qt);
+
+
+
     }
 }

+ 1 - 0
src_0nline/ShwasherSys/ShwasherSys.Application/ShwasherSys.Application.csproj

@@ -404,6 +404,7 @@
     <Compile Include="Common\BusinessLogService.cs" />
     <Compile Include="Common\CommonAppService.cs" />
     <Compile Include="Common\Dto\EmailMsg.cs" />
+    <Compile Include="Common\Dto\HomeChartDto\HomeChartDto.cs" />
     <Compile Include="Common\Dto\IndexAlertSumDto.cs" />
     <Compile Include="Common\Dto\MultiSearchDtoExt.cs" />
     <Compile Include="Common\Dto\OrderProductProcess.cs" />

+ 16 - 1
src_0nline/ShwasherSys/ShwasherSys.Web/Content/Css/Site.css

@@ -964,6 +964,9 @@ label.error {
         height: 18px;
         width: 18px;
     }
+    .iwb-radio > span {
+	    border-radius: 10px;
+    }
 
         .iwb-radio > span:after, .iwb-checkbox > span:after {
             content: '';
@@ -981,7 +984,7 @@ label.error {
             display: block;
         }
 
-    .iwb-checkbox > span {
+    .iwb-radio > span, .iwb-checkbox > span {
         color: #005f61;
         border: 1px solid;
     }
@@ -999,4 +1002,16 @@ label.error {
         -webkit-transform: rotate(45deg);
         transform: rotate(45deg);
     }
+    .iwb-radio input:checked ~ span:after {
+        top: 20%;
+        left: 20%;
+	    /* margin-left: -2px;
+	    margin-top: -6px;*/
+        width: 10px;
+        height: 10px;
+        border-color: inherit;
+        border-style: none;
+        background: #ccc;
+        border-radius: 5px;
+    }
 /* Iwb Checkbox Radio end========================== */

Datei-Diff unterdrückt, da er zu groß ist
+ 34 - 0
src_0nline/ShwasherSys/ShwasherSys.Web/Content/Plugins/eCharts/echarts.min.js


+ 4 - 0
src_0nline/ShwasherSys/ShwasherSys.Web/ShwasherSys.Web.csproj

@@ -750,6 +750,7 @@
     <Content Include="Content\Plugins\doublebox-boostrap\doublebox-bootstrap.css" />
     <Content Include="Content\Plugins\doublebox-boostrap\doublebox-bootstrap.js" />
     <Content Include="Content\Plugins\eCharts\echarts.js" />
+    <Content Include="Content\Plugins\eCharts\echarts.min.js" />
     <Content Include="Content\Plugins\eCharts\themes\dark.js" />
     <Content Include="Content\Plugins\eCharts\themes\themes.js" />
     <Content Include="Content\Plugins\famfamfam-flags\famfamfam-flags.css" />
@@ -2013,6 +2014,8 @@
     <Content Include="Content\Scripts\Jquery\jquery-3.3.1.slim.min.map" />
     <Content Include="Scripts\jquery.signalR-2.4.0.js" />
     <Content Include="Scripts\jquery.signalR-2.4.0.min.js" />
+    <Content Include="Views\Home\home.css" />
+    <Content Include="Views\Home\home.js" />
     <Content Include="Views\OrderInfo\css\OrderMg.css" />
     <Content Include="Views\OrderInfo\css\OrderStatusMg.css" />
     <Content Include="Views\OrderInfo\js\OrderMg.js" />
@@ -2298,6 +2301,7 @@
     <Content Include="Views\ProductInfo\Standards - 复制.cshtml" />
     <Content Include="Views\ProductInfo\Standards - 复制%282%29.cshtml" />
     <Content Include="Views\OrderInfo\_searchInfoByProductNo.cshtml" />
+    <Content Include="Views\Home\Index - 复制.cshtml" />
     <!--<Content Include="Scripts\bootstrap.min.js.map" />
     <Content Include="Scripts\bootstrap.js.map" />
     <Content Include="Scripts\bootstrap.bundle.min.js.map" />

+ 464 - 0
src_0nline/ShwasherSys/ShwasherSys.Web/Views/Home/Index - 复制.cshtml

@@ -0,0 +1,464 @@
+@using IwbZero.Setting
+@using ShwasherSys.Authorization.Permissions
+@{
+    ViewBag.ActiveMenu = PermissionNames.Pages; //The menu item will be active for this page.
+    var systemName = SettingManager.GetSettingValue(SettingNames.AdminSystemName);
+
+}
+@section styles
+{
+    @*<link href="~/Content/Plugins/font-awesome/css/font-awesome.min.css" rel="stylesheet" />*@
+}
+<style>
+    .content-wrapper {
+        height: 100%;
+        position: relative;
+        padding: 0 !important;
+        background: url('../../Content/Images/home-bg.png') 100% 100%;
+    }
+
+    .page {
+        position: absolute;
+        top: 100px;
+        width: 100%;
+    }
+
+    .page-title, .page-title-sm {
+        cursor: none;
+        width: 100%;
+        height: 150px;
+        /*font-family: SimHei;*/
+        font-size: 95px;
+        font-weight: 600;
+        letter-spacing: 10px;
+        color: #ddd;
+        opacity: .3;
+        display: flex;
+        align-items: start;
+        justify-content: center;
+    }
+
+    .page-title-sm {
+        font-size: 80px;
+        color: #ddd;
+    }
+
+        .page-title::selection, .page-title-sm::selection {
+            background: transparent;
+            color: #1e90ff;
+        }
+    .box-footer .arr {
+        animation: bouncedelay 1.2s infinite ease-in-out;
+        animation-fill-mode: both;
+        /*animation-delay: 1s;*/
+    }
+        .box-footer .arr.arr1 {
+            animation-delay: 0.2s;
+        }
+    .box-footer .arr.arr2 {
+        animation-delay: 0.4s;
+    }
+        .box-footer .arr.arr3 {
+            animation-delay: 0.6s;
+        }
+    @@keyframes bouncedelay {
+        0%, 80%, 100% {
+            opacity: 1;
+        } 
+        40% {
+            opacity: 0;
+          }
+    }
+    .totalHeaderItem {
+        cursor: pointer;
+    }
+        .totalHeaderItem .info-box-text {
+            padding: 10px;
+            padding-left: 3px;
+            font-size: 1.5rem;
+        }
+    .alertContent {
+        position: relative;
+        width: 100%;
+    }
+        .alertContent > .row {
+            display: none;
+            padding: 10px;
+            position: absolute;
+            left: -2000px;
+            width: 100%;
+        }
+</style>
+<div class="page no-select">
+    <div class="page-title">
+        欢迎登陆
+    </div>
+    <div class="page-title-sm">
+        @systemName
+    </div>
+
+</div>
+<div class="row totalHeaderbox"  style="padding: 10px;">
+    
+ 
+</div>
+
+<div class="alertContent">
+    <div class="row order-container" >
+        <div class="col-md-12">
+            <div class="box">
+                <div class="box-header with-border" style="padding: 2px; padding-left: 10px;">
+                    <h3 class="box-title">您有未完成的订单,请及时处理!</h3>
+                    
+                    <div class="box-tools pull-right">
+                        <button type="button" class="btn btn-box-tool" data-widget="collapse">
+                            <i class="fa fa-minus"></i>
+                        </button>
+
+                    </div>
+                </div>
+                <div class="box-body" style="padding-top: 1px;">
+                    <div class="row">
+                        <div class="col-md-12">
+                            <div class="table-box mr-4  iwb-bootstrap-table">
+                                <table id="OrderTable" data-id-field="id" data-unique-id="id" data-single-select="true"
+                                       data-click-to-select="true" data-post-body="OnPostBody" style="height: 300px">
+                                    <thead>
+                                        <tr class="row">
+                                            @*<th data-field="state" data-checkbox="true"></th>*@
+                                            <th data-align="center" data-field="id">流水号</th>
+                                            <th data-align="center" data-field="orderStatusId" data-formatter="OrderStatusFormatter">订单状态</th>
+                                            <th data-align="center" data-field="customerId">客户编号</th>
+                                            <th data-align="center" data-field="stockNo">客户订单号</th>
+                                            <th data-align="center" data-field="orderDate" data-formatter="DateFormatter">订单日期</th>
+                                            <th data-align="center" data-field="linkName">联系人</th>
+                                            <th data-align="center" data-field="telephone">电话</th>
+                                            <th data-align="center" data-field="saleManName">订单业务员</th>
+                                            <th data-align="center" data-field="saleTypeName">外销/内销</th>
+                                        </tr>
+                                    </thead>
+                                </table>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+                <div class="box-footer text-center">
+                    <a class="btn btn-action" style="display: inline-block; font-size:2rem;" href="/OrderInfo/OrderStatusMg"><i class="arr arr1">></i><i class="arr arr2">></i><i class="arr arr3">></i>前往订单页面</a>
+                </div>
+            </div>
+        </div>
+    </div>
+
+    <div class="row production-container">
+        <div class="col-md-12">
+            <div class="box">
+                <div class="box-header with-border" style="padding: 2px; padding-left: 10px;">
+                    <h3 class="box-title">您有未完成的排查单,请及时处理!</h3>
+                  
+                    <div class="box-tools pull-right">
+                        <button type="button" class="btn btn-box-tool" data-widget="collapse">
+                            <i class="fa fa-minus"></i>
+                        </button>
+
+                    </div>
+                </div>
+                <div class="box-body" style="padding-top: 1px;">
+                    <div class="row">
+                        <div class="col-md-12">
+                            <div class="table-box mr-4  iwb-bootstrap-table">
+                                <table id="productionTable" data-id-field="id" data-unique-id="id" data-single-select="true"
+                                       data-click-to-select="true" data-post-body="OnPostBody">
+                                    <thead>
+                                        <tr class="row">
+
+                                            <th data-align="center" data-field="productionOrderNo">排产单号</th>
+                                            <th data-align="center" data-field="partNo">零件号</th>
+                                            <th data-align="center" data-field="semiProductName">名称</th>
+                                            <th data-align="center" data-field="model">规格</th>
+                                            <th data-align="center" data-field="quantity">排产数量(千件)</th>
+                                            <th data-align="center" data-field="timeCreated" data-formatter="DateFormatter">创建时间</th>
+                                            <th data-align="center" data-field="productionOrderStatus" data-formatter="ProductionOrderStatusFormatter">生产状态</th>
+                                            <th data-align="center" data-field="remark">备注</th>
+                                            <th data-align="center" data-field="material">材质</th>
+                                            <th data-align="center" data-field="surfaceColor">表色</th>
+                                            <th data-align="center" data-field="rigidity">硬度</th>
+                                            <th data-align="center" data-field="kgWeight">千件重</th>
+                                            <th data-align="center" data-field="planProduceDate" data-formatter="DateFormatter">计划完成时间</th>
+                                            <th data-align="center" data-field="semiProductNo">半成品编码</th>
+                                        </tr>
+                                    </thead>
+                                </table>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+                <div class="box-footer text-center">
+                    <a class="btn btn-action" style="display: inline-block; font-size:2rem;" href="/ProductionInfo/ProductionOrderMg"><i class="arr arr1">></i><i class="arr arr2">></i><i class="arr arr3">></i>前往排产单页面</a>
+                </div>
+            </div>
+        </div>
+    </div>
+
+    <div class="row package-container">
+        <div class="col-md-12">
+            <div class="box">
+                <div class="box-header with-border" style="padding: 2px; padding-left: 10px;">
+                    <h3 class="box-title">您有未审核的包装申请,请及时处理!</h3>
+                    
+                    <div class="box-tools pull-right">
+                        <button type="button" class="btn btn-box-tool" data-widget="collapse">
+                            <i class="fa fa-minus"></i>
+                        </button>
+
+                    </div>
+                </div>
+                <div class="box-body" style="padding-top: 1px;">
+                    <div class="row">
+                        <div class="col-md-12">
+                            <div class="table-box mr-4  iwb-bootstrap-table">
+                                <table id="packageTable" data-id-field="id" data-unique-id="id" data-single-select="true"
+                                       data-click-to-select="true" data-post-body="OnPostBody" style="height: 300px">
+                                    <thead>
+                                        <tr class="row">
+
+                                            <th data-align="center" data-field="productionOrderNo">流转单编号</th>
+                                            <th data-align="center" data-field="" data-formatter="PackageProductNoFormatter">包装前产品编码</th>
+                                            <th data-align="center" data-field="applyQuantity">申请包装数量</th>
+                                            <th data-align="center" data-field="remark">备注</th>
+                                            <th data-align="center" data-field="applyStatus" data-formatter="ApplyStatusFormatter">申请状态</th>
+                                            <th data-align="center" data-field="applyDate" data-formatter="DateFormatter">申请时间</th>
+                                        </tr>
+                                    </thead>
+                                </table>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+                <div class="box-footer text-center">
+                    <a class="btn btn-action" style="display: inline-block; font-size:2rem;" href="/PackInfo/Index"><i class="arr arr1">></i><i class="arr arr2">></i><i class="arr arr3">></i>前往包装页面</a>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+
+@section scripts
+{
+    <script>
+        let $totalHeaderbox = $('.totalHeaderbox');
+        let $orderContainer = $(".order-container");
+        let $productionContainer = $(".production-container");
+        let $packageContainer = $(".package-container");
+        $(function() {
+            RenderHeaderAlert();
+        });
+
+        function RenderHeaderAlert() {
+            SaveAjax({
+                url: window.appUrl + "Common/GetIndexAlertSum",
+                dataType: "json",
+                isAlert: false,
+                isValidate: false,
+                success: function(res) {
+                    $totalHeaderbox.empty();
+                    if (res && res.length > 0) {
+                        res.forEach(function(v, i) {
+                            let color = v.sumType == "1"
+                                ? "aqua"
+                                : v.sumType == "2"
+                                ? "red"
+                                : v.sumType == "3"
+                                ? "green"
+                                : "aqua";
+                            $totalHeaderbox.append(`
+                                 <div class="col-md-4 col-sm-6 col-xs-12 totalHeaderItem" data-sumtype="${v.sumType}">
+                                    <div class="info-box">
+                                        <span class="info-box-icon bg-${color}"><img src="/Content/Images/index/${v
+                                .tipName}.png" /></span>
+                                        <div class="info-box-content">
+                                            <span class="info-box-text" >${v.sumName}</span>
+                                            <span class="info-box-number">${v.quantity}</span>
+                                        </div>
+                                    </div>
+                                </div>`);
+                        });
+                                BindItemEvent();
+                    }
+                }
+            });
+        }
+        function BindItemEvent() {
+            $('.totalHeaderItem').on('click', function(e) {
+                let st = $(e.target).closest('.totalHeaderItem').data('sumtype');
+                $('.alertContent > .row').css("display", "none");
+                if (st == 1) {
+
+                    GetOrderAlert();
+                }
+               else if (st == 2) {
+
+                    GetProductionOrderAlert();
+                } else if (st == 3) {
+
+                    GetPackageApplyAlert();
+                }
+            })
+        }
+        function GetOrderAlert() {
+            let $tableOrder = $("#OrderTable");
+            SaveAjax({
+                url: window.appUrl + "Common/GetOrderHeaderForAlert",
+                dataType: "json",
+                isAlert: false,
+                isValidate: false,
+                success: function(res) {
+                    console.log(res);
+                    if (res && res.length > 0) {
+                        $tableOrder.bootstrapTable("destroy");
+                        $tableOrder.bootstrapTable({
+                            data: res,
+                            onPostBody: OnPostBody
+                        });
+                        setTimeout(() => {
+                                $("#OrderTable").bootstrapTable('resetView', { height: 300 });;
+                            },
+                            1000);
+                        $orderContainer.css("display", "block");
+                        $orderContainer.animate({left: '10px'}, "slow");
+                    } else {
+                        $tableOrder.bootstrapTable("destroy");
+                        $tableOrder.bootstrapTable({ data: "", onPostBody: OnPostBody });
+                    }
+                }
+            });
+        }
+
+        function GetProductionOrderAlert() {
+            let $tableOrder = $("#productionTable");
+            SaveAjax({
+                url: window.appUrl + "Common/GetProductionOrderForAlert",
+                dataType: "json",
+                isAlert: false,
+                isValidate: false,
+                success: function(res) {
+                    console.log(res);
+                    if (res && res.length > 0) {
+                        $tableOrder.bootstrapTable("destroy");
+                        $tableOrder.bootstrapTable({
+                            data: res,
+                            onPostBody: OnPostBody
+                        });
+                        $productionContainer.css("display", "block");
+                        $productionContainer.animate({left: '10px'}, "slow");
+                        setTimeout(() => {
+                                $("#productionTable").bootstrapTable('resetView', { height: 300 });;
+                            },
+                            1000);
+                    } else {
+                        $tableOrder.bootstrapTable("destroy");
+                        $tableOrder.bootstrapTable({ data: "", onPostBody: OnPostBody });
+                        //$productionContainer.slideUp();
+                    }
+                }
+            });
+        }
+
+        function GetPackageApplyAlert() {
+            let $tableOrder = $("#packageTable");
+            SaveAjax({
+                url: window.appUrl + "Common/GetPackageApplyForAlert",
+                dataType: "json",
+                isAlert: false,
+                isValidate: false,
+                success: function(res) {
+                    console.log(res);
+                    if (res && res.length > 0) {
+                        $tableOrder.bootstrapTable("destroy");
+                        $tableOrder.bootstrapTable({
+                            data: res,
+                            onPostBody: OnPostBody
+                        });
+                        setTimeout(() => {
+                            $("#packageTable").bootstrapTable('resetView', { height: 300 });;
+                        },
+                            1000);
+                        $packageContainer.css("display", "block");
+                        $packageContainer.animate({left: '10px'}, "slow");
+                    } else {
+                        $tableOrder.bootstrapTable("destroy");
+                        $tableOrder.bootstrapTable({ data: "", onPostBody: OnPostBody });
+                        //$packageContainer.slideUp();
+                    }
+                }
+            });
+        }
+
+     
+    </script>
+    <script>
+        function OrderStatusFormatter(v, r) { //danger
+            if (r.orderStatusId === 2) {
+                return '<span class="label label-success">新建</span>';
+            } else if (r.orderStatusId === 3) {
+                return '<span class="label label-danger">已审核</span>';
+            } else if (r.orderStatusId === 12) {
+                return '<span class="label label-primary">完成</span>';
+            }
+            return v;
+        }
+
+        function ProductionOrderStatusFormatter(v, r) {
+            var str = '';
+            switch (v) {
+                case 1:
+                    str += '<span class="label label-info">新建</span>';
+                    break;
+                case 2:
+                    str += '<span class="label label-iwb">生产中</span>';
+                    break;
+                case 3:
+                    str += '<span class="label label-danger">入库中</span>';
+                    break;
+                case 7:
+                    str += '<span class="label label-success">已审核</span>';
+                    break;
+                default:
+                    str += '<span class="label label-warning">' + v + '</span>';
+                    break;
+            }
+            return str;
+
+        }
+
+
+        function ProcessingNumFormatter(v, r) {
+
+            if (v === 0) {
+                //return '<span class="label label-info">' + v+ '</span>';
+                return '';
+            } else {
+                return '<span class="label label-danger">待处理:' + v + '</span>';
+            }
+
+        }
+
+        function PackageProductNoFormatter(v, r) {
+            if (r.semiProductNo) {
+                return '<span class="label label-info">半成品包装:' + r.semiProductNo + '</span>';
+            } else {
+                return '<span class="label label-danger">成品包装' + r.productNo + '</span>';
+            }
+
+        }
+
+        function ApplyStatusFormatter(v, r) {
+            if (r.isClose) {
+                return '<span class="label label-primary">已结束</span>';
+            }
+            if (v === "1") {
+                return '<span class="label label-info">申请中</span>';
+            }
+            return '<span class="label label-info">' + v + '</span>';
+        }
+    </script>
+}

+ 57 - 374
src_0nline/ShwasherSys/ShwasherSys.Web/Views/Home/Index.cshtml

@@ -1,94 +1,18 @@
 @using IwbZero.Setting
 @using ShwasherSys.Authorization.Permissions
 @{
-    ViewBag.ActiveMenu = PermissionNames.Pages; //The menu item will be active for this page.
-    var systemName = SettingManager.GetSettingValue(SettingNames.AdminSystemName);
+	ViewBag.ActiveMenu = PermissionNames.Pages; //The menu item will be active for this page.
+	var systemName = SettingManager.GetSettingValue(SettingNames.AdminSystemName);
 
+	int userType = AbpSession.UserType??0;
 }
 @section styles
 {
     @*<link href="~/Content/Plugins/font-awesome/css/font-awesome.min.css" rel="stylesheet" />*@
+    <link href="~/Views/Home/home.css" rel="stylesheet" />
 }
-<style>
-    .content-wrapper {
-        height: 100%;
-        position: relative;
-        padding: 0 !important;
-        background: url('../../Content/Images/home-bg.png') 100% 100%;
-    }
-
-    .page {
-        position: absolute;
-        top: 100px;
-        width: 100%;
-    }
-
-    .page-title, .page-title-sm {
-        cursor: none;
-        width: 100%;
-        height: 150px;
-        /*font-family: SimHei;*/
-        font-size: 95px;
-        font-weight: 600;
-        letter-spacing: 10px;
-        color: #ddd;
-        opacity: .3;
-        display: flex;
-        align-items: start;
-        justify-content: center;
-    }
-
-    .page-title-sm {
-        font-size: 80px;
-        color: #ddd;
-    }
-
-        .page-title::selection, .page-title-sm::selection {
-            background: transparent;
-            color: #1e90ff;
-        }
-    .box-footer .arr {
-        animation: bouncedelay 1.2s infinite ease-in-out;
-        animation-fill-mode: both;
-        /*animation-delay: 1s;*/
-    }
-        .box-footer .arr.arr1 {
-            animation-delay: 0.2s;
-        }
-    .box-footer .arr.arr2 {
-        animation-delay: 0.4s;
-    }
-        .box-footer .arr.arr3 {
-            animation-delay: 0.6s;
-        }
-    @@keyframes bouncedelay {
-        0%, 80%, 100% {
-            opacity: 1;
-        } 
-        40% {
-            opacity: 0;
-          }
-    }
-    .totalHeaderItem {
-        cursor: pointer;
-    }
-        .totalHeaderItem .info-box-text {
-            padding: 10px;
-            padding-left: 3px;
-            font-size: 1.5rem;
-        }
-    .alertContent {
-        position: relative;
-        width: 100%;
-    }
-        .alertContent > .row {
-            display: none;
-            padding: 10px;
-            position: absolute;
-            left: -2000px;
-            width: 100%;
-        }
-</style>
+<style></style>
+ 
 <div class="page no-select">
     <div class="page-title">
         欢迎登陆
@@ -99,301 +23,60 @@
 
 </div>
 <div class="row totalHeaderbox"  style="padding: 10px;">
-    
- 
 </div>
 
-<div class="alertContent">
-    <div class="row order-container" >
-        <div class="col-md-12">
-            <div class="box">
-                <div class="box-header with-border" style="padding: 2px; padding-left: 10px;">
-                    <h3 class="box-title">您有未完成的订单,请及时处理!</h3>
-                    
-                    <div class="box-tools pull-right">
-                        <button type="button" class="btn btn-box-tool" data-widget="collapse">
-                            <i class="fa fa-minus"></i>
-                        </button>
-
-                    </div>
-                </div>
-                <div class="box-body" style="padding-top: 1px;">
-                    <div class="row">
-                        <div class="col-md-12">
-                            <div class="table-box mr-4  iwb-bootstrap-table">
-                                <table id="OrderTable" data-id-field="id" data-unique-id="id" data-single-select="true"
-                                       data-click-to-select="true" data-post-body="OnPostBody" style="height: 300px">
-                                    <thead>
-                                        <tr class="row">
-                                            @*<th data-field="state" data-checkbox="true"></th>*@
-                                            <th data-align="center" data-field="id">流水号</th>
-                                            <th data-align="center" data-field="orderStatusId" data-formatter="OrderStatusFormatter">订单状态</th>
-                                            <th data-align="center" data-field="customerId">客户编号</th>
-                                            <th data-align="center" data-field="stockNo">客户订单号</th>
-                                            <th data-align="center" data-field="orderDate" data-formatter="DateFormatter">订单日期</th>
-                                            <th data-align="center" data-field="linkName">联系人</th>
-                                            <th data-align="center" data-field="telephone">电话</th>
-                                            <th data-align="center" data-field="saleManName">订单业务员</th>
-                                            <th data-align="center" data-field="saleTypeName">外销/内销</th>
-                                        </tr>
-                                    </thead>
-                                </table>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                <div class="box-footer text-center">
-                    <a class="btn btn-action" style="display: inline-block; font-size:2rem;" href="/OrderInfo/OrderStatusMg"><i class="arr arr1">></i><i class="arr arr2">></i><i class="arr arr3">></i>前往订单页面</a>
+<!--汇总3年内订单和排查单状态数据,柱状图显示-->
+<div class="row chartBox" >
+	<div class="col-md-6">
+        <div class="box box-primary card-info order-info-box">
+            <div class="box-header with-border">
+                <h3 class="box-title">订单明细状态</h3>
+                <div class="box-tools pull-right" style="top:10px">
+                    <label style=" margin-right: 10px; font-size: 1.5rem;color:#ddd" class="iwb-radio"><input name="orderQt" data-index="1" type="radio" checked value="1" /><span></span>季度</label>
+                    <label style=" margin-right: 10px; font-size: 1.5rem; color: #ddd" class="iwb-radio"><input name="orderQt" data-index="2" type="radio" value="0" /><span></span>年度</label>
                 </div>
             </div>
-        </div>
-    </div>
-
-    <div class="row production-container">
-        <div class="col-md-12">
-            <div class="box">
-                <div class="box-header with-border" style="padding: 2px; padding-left: 10px;">
-                    <h3 class="box-title">您有未完成的排查单,请及时处理!</h3>
-                  
-                    <div class="box-tools pull-right">
-                        <button type="button" class="btn btn-box-tool" data-widget="collapse">
-                            <i class="fa fa-minus"></i>
-                        </button>
-
-                    </div>
-                </div>
-                <div class="box-body" style="padding-top: 1px;">
-                    <div class="row">
-                        <div class="col-md-12">
-                            <div class="table-box mr-4  iwb-bootstrap-table">
-                                <table id="productionTable" data-id-field="id" data-unique-id="id" data-single-select="true"
-                                       data-click-to-select="true" data-post-body="OnPostBody">
-                                    <thead>
-                                        <tr class="row">
-
-                                            <th data-align="center" data-field="productionOrderNo">排产单号</th>
-                                            <th data-align="center" data-field="partNo">零件号</th>
-                                            <th data-align="center" data-field="semiProductName">名称</th>
-                                            <th data-align="center" data-field="model">规格</th>
-                                            <th data-align="center" data-field="quantity">排产数量(千件)</th>
-                                            <th data-align="center" data-field="timeCreated" data-formatter="DateFormatter">创建时间</th>
-                                            <th data-align="center" data-field="productionOrderStatus" data-formatter="ProductionOrderStatusFormatter">生产状态</th>
-                                            <th data-align="center" data-field="remark">备注</th>
-                                            <th data-align="center" data-field="material">材质</th>
-                                            <th data-align="center" data-field="surfaceColor">表色</th>
-                                            <th data-align="center" data-field="rigidity">硬度</th>
-                                            <th data-align="center" data-field="kgWeight">千件重</th>
-                                            <th data-align="center" data-field="planProduceDate" data-formatter="DateFormatter">计划完成时间</th>
-                                            <th data-align="center" data-field="semiProductNo">半成品编码</th>
-                                        </tr>
-                                    </thead>
-                                </table>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                <div class="box-footer text-center">
-                    <a class="btn btn-action" style="display: inline-block; font-size:2rem;" href="/ProductionInfo/ProductionOrderMg"><i class="arr arr1">></i><i class="arr arr2">></i><i class="arr arr3">></i>前往排产单页面</a>
+            <div class="box-body">
+                <div class="chart" id="orderStatusChart">
+                   
                 </div>
             </div>
         </div>
     </div>
-
-    <div class="row package-container">
-        <div class="col-md-12">
-            <div class="box">
-                <div class="box-header with-border" style="padding: 2px; padding-left: 10px;">
-                    <h3 class="box-title">您有未审核的包装申请,请及时处理!</h3>
-                    
-                    <div class="box-tools pull-right">
-                        <button type="button" class="btn btn-box-tool" data-widget="collapse">
-                            <i class="fa fa-minus"></i>
-                        </button>
-
-                    </div>
-                </div>
-                <div class="box-body" style="padding-top: 1px;">
-                    <div class="row">
-                        <div class="col-md-12">
-                            <div class="table-box mr-4  iwb-bootstrap-table">
-                                <table id="packageTable" data-id-field="id" data-unique-id="id" data-single-select="true"
-                                       data-click-to-select="true" data-post-body="OnPostBody" style="height: 300px">
-                                    <thead>
-                                        <tr class="row">
-
-                                            <th data-align="center" data-field="productionOrderNo">流转单编号</th>
-                                            <th data-align="center" data-field="" data-formatter="PackageProductNoFormatter">包装前产品编码</th>
-                                            <th data-align="center" data-field="applyQuantity">申请包装数量</th>
-                                            <th data-align="center" data-field="remark">备注</th>
-                                            <th data-align="center" data-field="applyStatus" data-formatter="ApplyStatusFormatter">申请状态</th>
-                                            <th data-align="center" data-field="applyDate" data-formatter="DateFormatter">申请时间</th>
-                                        </tr>
-                                    </thead>
-                                </table>
-                            </div>
-                        </div>
-                    </div>
+	<div class="col-md-6">
+		<div class="box box-info card-info production-info-box">
+			<div class="box-header with-border">
+				<h3 class="box-title">排产单状态</h3>
+                <div class="box-tools pull-right"  style="top:10px">
+                    <label style=" margin-right: 10px; font-size: 1.5rem;color:#ddd" class="iwb-radio"><input name="productionQt" data-index="1" type="radio" checked value="1" /><span></span>季度</label>
+                    <label style=" margin-right: 10px; font-size: 1.5rem; color: #ddd" class="iwb-radio"><input name="productionQt" data-index="2" type="radio" value="0" /><span></span>年度</label>
                 </div>
-                <div class="box-footer text-center">
-                    <a class="btn btn-action" style="display: inline-block; font-size:2rem;" href="/PackInfo/Index"><i class="arr arr1">></i><i class="arr arr2">></i><i class="arr arr3">></i>前往包装页面</a>
-                </div>
-            </div>
-        </div>
-    </div>
+			</div>
+			<div class="box-body">
+				<div class="chart" id="productionStatusChart">
+
+				</div>
+			</div>
+		</div>
+	</div>
 </div>
 
-@section scripts
-{
-    <script>
-        let $totalHeaderbox = $('.totalHeaderbox');
-        let $orderContainer = $(".order-container");
-        let $productionContainer = $(".production-container");
-        let $packageContainer = $(".package-container");
-        $(function() {
-            RenderHeaderAlert();
-        });
-
-        function RenderHeaderAlert() {
-            SaveAjax({
-                url: window.appUrl + "Common/GetIndexAlertSum",
-                dataType: "json",
-                isAlert: false,
-                isValidate: false,
-                success: function(res) {
-                    $totalHeaderbox.empty();
-                    if (res && res.length > 0) {
-                        res.forEach(function(v, i) {
-                            let color = v.sumType == "1"
-                                ? "aqua"
-                                : v.sumType == "2"
-                                ? "red"
-                                : v.sumType == "3"
-                                ? "green"
-                                : "aqua";
-                            $totalHeaderbox.append(`
-                                 <div class="col-md-4 col-sm-6 col-xs-12 totalHeaderItem" data-sumtype="${v.sumType}">
-                                    <div class="info-box">
-                                        <span class="info-box-icon bg-${color}"><img src="/Content/Images/index/${v
-                                .tipName}.png" /></span>
-                                        <div class="info-box-content">
-                                            <span class="info-box-text" >${v.sumName}</span>
-                                            <span class="info-box-number">${v.quantity}</span>
-                                        </div>
-                                    </div>
-                                </div>`);
-                        });
-                        BindItemEvent();
-                    }
-                }
-            });
-        }
-        function BindItemEvent() {
-            $('.totalHeaderItem').on('click', function(e) {
-                let st = $(e.target).closest('.totalHeaderItem').data('sumtype');
-                $('.alertContent > .row').css("display", "none");
-                if (st == 1) {
 
-                    GetOrderAlert();
-                }
-               else if (st == 2) {
 
-                    GetProductionOrderAlert();
-                } else if (st == 3) {
 
-                    GetPackageApplyAlert();
-                }
-            })
-        }
-        function GetOrderAlert() {
-            let $tableOrder = $("#OrderTable");
-            SaveAjax({
-                url: window.appUrl + "Common/GetOrderHeaderForAlert",
-                dataType: "json",
-                isAlert: false,
-                isValidate: false,
-                success: function(res) {
-                    console.log(res);
-                    if (res && res.length > 0) {
-                        $tableOrder.bootstrapTable("destroy");
-                        $tableOrder.bootstrapTable({
-                            data: res,
-                            onPostBody: OnPostBody
-                        });
-                        setTimeout(() => {
-                                $("#OrderTable").bootstrapTable('resetView', { height: 300 });;
-                            },
-                            1000);
-                        $orderContainer.css("display", "block");
-                        $orderContainer.animate({left: '10px'}, "slow");
-                    } else {
-                        $tableOrder.bootstrapTable("destroy");
-                        $tableOrder.bootstrapTable({ data: "", onPostBody: OnPostBody });
-                    }
-                }
-            });
-        }
 
-        function GetProductionOrderAlert() {
-            let $tableOrder = $("#productionTable");
-            SaveAjax({
-                url: window.appUrl + "Common/GetProductionOrderForAlert",
-                dataType: "json",
-                isAlert: false,
-                isValidate: false,
-                success: function(res) {
-                    console.log(res);
-                    if (res && res.length > 0) {
-                        $tableOrder.bootstrapTable("destroy");
-                        $tableOrder.bootstrapTable({
-                            data: res,
-                            onPostBody: OnPostBody
-                        });
-                        $productionContainer.css("display", "block");
-                        $productionContainer.animate({left: '10px'}, "slow");
-                        setTimeout(() => {
-                                $("#productionTable").bootstrapTable('resetView', { height: 300 });;
-                            },
-                            1000);
-                    } else {
-                        $tableOrder.bootstrapTable("destroy");
-                        $tableOrder.bootstrapTable({ data: "", onPostBody: OnPostBody });
-                        //$productionContainer.slideUp();
-                    }
-                }
-            });
-        }
+@section scripts
+{
+    <script src="~/Content/Plugins/eCharts/echarts.min.js"></script>
+    <script src="~/Views/Home/home.js"></script>
 
-        function GetPackageApplyAlert() {
-            let $tableOrder = $("#packageTable");
-            SaveAjax({
-                url: window.appUrl + "Common/GetPackageApplyForAlert",
-                dataType: "json",
-                isAlert: false,
-                isValidate: false,
-                success: function(res) {
-                    console.log(res);
-                    if (res && res.length > 0) {
-                        $tableOrder.bootstrapTable("destroy");
-                        $tableOrder.bootstrapTable({
-                            data: res,
-                            onPostBody: OnPostBody
-                        });
-                        setTimeout(() => {
-                            $("#packageTable").bootstrapTable('resetView', { height: 300 });;
-                        },
-                            1000);
-                        $packageContainer.css("display", "block");
-                        $packageContainer.animate({left: '10px'}, "slow");
-                    } else {
-                        $tableOrder.bootstrapTable("destroy");
-                        $tableOrder.bootstrapTable({ data: "", onPostBody: OnPostBody });
-                        //$packageContainer.slideUp();
-                    }
-                }
-            });
+    <script>
+        if (@userType==1){
+            $('.chartBox').show();
+        } else {
+            $('.chartBox').hide();
         }
 
-     
     </script>
     <script>
         function OrderStatusFormatter(v, r) { //danger
@@ -410,21 +93,21 @@
         function ProductionOrderStatusFormatter(v, r) {
             var str = '';
             switch (v) {
-                case 1:
-                    str += '<span class="label label-info">新建</span>';
-                    break;
-                case 2:
-                    str += '<span class="label label-iwb">生产中</span>';
-                    break;
-                case 3:
-                    str += '<span class="label label-danger">入库中</span>';
-                    break;
-                case 7:
-                    str += '<span class="label label-success">已审核</span>';
-                    break;
-                default:
-                    str += '<span class="label label-warning">' + v + '</span>';
-                    break;
+            case 1:
+                str += '<span class="label label-info">新建</span>';
+                break;
+            case 2:
+                str += '<span class="label label-iwb">生产中</span>';
+                break;
+            case 3:
+                str += '<span class="label label-danger">入库中</span>';
+                break;
+            case 7:
+                str += '<span class="label label-success">已审核</span>';
+                break;
+            default:
+                str += '<span class="label label-warning">' + v + '</span>';
+                break;
             }
             return str;
 

+ 99 - 0
src_0nline/ShwasherSys/ShwasherSys.Web/Views/Home/home.css

@@ -0,0 +1,99 @@
+.content-wrapper {
+	height: 100%;
+	position: relative;
+	padding: 0 !important;
+	background: url('../../Content/Images/home-bg.png') 100% 100%;
+}
+
+.page {
+	position: absolute;
+	top: 100px;
+	width: 100%;
+}
+
+.page-title, .page-title-sm {
+	cursor: none;
+	width: 100%;
+	height: 150px;
+	/*font-family: SimHei;*/
+	font-size: 95px;
+	font-weight: 600;
+	letter-spacing: 10px;
+	color: #ddd;
+	opacity: .3;
+	display: flex;
+	align-items: start;
+	justify-content: center;
+}
+
+.page-title-sm {
+	font-size: 80px;
+	color: #ddd;
+}
+
+.page-title::selection, .page-title-sm::selection {
+	background: transparent;
+	color: #1e90ff;
+}
+
+.box-footer .arr {
+	animation: bouncedelay 1.2s infinite ease-in-out;
+	animation-fill-mode: both;
+	/*animation-delay: 1s;*/
+}
+
+.box-footer .arr.arr1 {
+	animation-delay: 0.2s;
+}
+
+.box-footer .arr.arr2 {
+	animation-delay: 0.4s;
+}
+
+.box-footer .arr.arr3 {
+	animation-delay: 0.6s;
+}
+
+@keyframes bouncedelay {
+	 0%, 80%, 100% {
+		 opacity: 1;
+	 }
+
+	 40% {
+		 opacity: 0;
+	 }
+ }
+
+.totalHeaderItem {
+	cursor: pointer;
+}
+
+.totalHeaderItem .info-box-text {
+	padding: 10px;
+	padding-left: 3px;
+	font-size: 1.5rem;
+}
+
+.chartBox {
+	background: rgba(0, 40, 102, .6);
+	padding-left: 10px;
+}
+	.chartBox .box-header {
+		background: rgba(4, 24, 88, .8);
+	}
+
+		.chartBox .box-header .box-title {
+			color: #ddd;
+		}
+	.chartBox .box-body {
+		background: rgba(4, 24, 88, .8);
+	}
+	.chartBox .box-body .chart {
+		width: 100%;
+		min-height: 400px;
+		
+	}
+
+.production-info-box .box-tools label.iwb-radio > span, .order-info-box .box-tools label.iwb-radio > span {
+	color: #ddd;
+}

+ 294 - 0
src_0nline/ShwasherSys/ShwasherSys.Web/Views/Home/home.js

@@ -0,0 +1,294 @@
+let $totalHeaderbox = $('.totalHeaderbox');
+var _orderStatusChart = document.getElementById('orderStatusChart');
+var _productionStatusChart = document.getElementById('productionStatusChart');
+var orderStatusChart = echarts.init(_orderStatusChart);
+var productionStatusChart = echarts.init(_productionStatusChart);
+$(function () {
+	RenderHeaderAlert();
+
+	initCharts();
+	$(".order-info-box .box-tools input[type='radio']").on('click', function () {
+		loadOrderStatusChart();
+	});
+	$(".production-info-box .box-tools input[type='radio']").on('click', function () {
+		loadProductionStatusChart();
+	});
+});
+
+function RenderHeaderAlert() {
+	SaveAjax({
+		url: window.appUrl + "Common/GetIndexAlertSum",
+		dataType: "json",
+		isAlert: false,
+		isValidate: false,
+		success: function (res) {
+			$totalHeaderbox.empty();
+			if (res && res.length > 0) {
+				res.forEach(function (v, i) {
+					let color = v.sumType == "1"
+						? "aqua"
+						: v.sumType == "2"
+						? "red"
+						: v.sumType == "3"
+						? "green"
+						: "aqua";
+					$totalHeaderbox.append(`
+									 <div class="col-md-4 col-sm-6 col-xs-12 totalHeaderItem" data-sumtype="${v.sumType}">
+										<div class="info-box">
+											<span class="info-box-icon bg-${color}"><img src="/Content/Images/index/${v
+						.tipName}.png" /></span>
+											<div class="info-box-content">
+												<span class="info-box-text" >${v.sumName}</span>
+												<span class="info-box-number">${v.quantity}</span>
+											</div>
+										</div>
+									</div>`);
+				});
+				BindItemEvent();
+			}
+		}
+	});
+}
+
+function BindItemEvent() {
+	$('.totalHeaderItem').on('click',
+		function (e) {
+			let st = $(e.target).closest('.totalHeaderItem').data('sumtype');
+			$('.alertContent > .row').css("display", "none");
+			if (st == 1) {
+
+				//GetOrderAlert();
+			} else if (st == 2) {
+
+				//GetProductionOrderAlert();
+			} else if (st == 3) {
+
+				//GetPackageApplyAlert();
+			}
+		});
+}
+
+var option1={},option2={};
+function initCharts() {
+	var option = {
+		tooltip: {
+			trigger: 'axis',
+			axisPointer: {
+				type: 'cross',
+				crossStyle: {
+					color: '#999'
+				}
+			}
+		},
+		toolbox: {
+			feature: {
+				dataView: { show: false, readOnly: false },
+				magicType: { show: true, type: ['line', 'bar'] },
+				restore: { show: false },
+				saveAsImage: { show: true }
+			},
+			iconStyle: {
+				//color:'rgb(255,255,255)'
+				borderColor: 'rgb(255,255,255)'
+			}
+		},
+		legend: {
+			data: ['Evaporation', 'Precipitation'],
+			backgroundColor: 'rgb(255,255,255)',
+			textStyle: {
+				color: '#0087ED',
+				fontSize: '12px',
+				fontWeight: 300
+			}
+		},
+		xAxis: [
+			{
+				type: 'category',
+				data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
+				axisPointer: {
+					type: 'shadow'
+				},
+				axisLine: {
+					lineStyle: {
+						color: '#0087ED',
+						width:2
+					}
+				}
+			}
+		],
+		yAxis: [
+			{
+				type: 'value',
+				name: '',
+				min: 0,
+				//max: 250,
+				interval: 50,
+				//axisLabel: {
+				//	formatter: '{value} ml'
+				//}
+				axisLine: {
+					lineStyle: {
+						color: '#0087ED',
+						width: 1
+					}
+				}
+			}
+		],
+		series: [
+			{
+				name: 'Evaporation',
+				type: 'bar',
+				tooltip: {
+					valueFormatter: function (value) {
+						return value;
+					}
+				},
+				label: {
+					show: true
+				},
+				color:'rgba(220,20,60, 0.6)',
+				data: [
+					2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6
+				],
+				itemStyle: {
+					borderRadius:[8,8,0,0]
+				},
+				animation:true
+			},
+			{
+				name: 'Precipitation',
+				type: 'bar',
+				tooltip: {
+					valueFormatter: function (value) {
+						return value;
+					}
+				},
+				label: {
+					show: true
+				},
+				data: [
+					2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6
+				],
+				itemStyle: {
+					borderRadius: [8, 8, 0, 0]
+				},
+				animation: true
+			}
+		]
+	};
+	$.extend(true, option1, option);
+	$.extend(true, option2, option);
+	loadOrderStatusChart();
+	loadProductionStatusChart();
+}
+
+function loadOrderStatusChart() {
+	var qt = $('input[name="orderQt"]:checked').val();
+	SaveAjax({
+		url: window.appUrl + "Common/GetHomeStatusCharts?ct=1&qt="+qt,
+		dataType: "json",
+		isAlert: false,
+		isValidate: false,
+		success: function (res) {
+			console.log(res);
+			let yearArr = [], orderArr = [], notOrderArr = [];
+			let arrMap = new Map();
+			res.forEach(function (v, i) {
+				//默认年份
+				let ev = qt == "1" ? `${v.year}年-第${v.quarterly}季度` : v.year;
+				if (!yearArr.some(ele => ele === ev)) {
+					yearArr.push(ev);
+				}
+				
+				//非完成状态的
+				if (v.statusId == 2 || v.statusId == 15 || v.statusId == 9) {
+					if (!arrMap.has(ev + "@0")) {
+						arrMap.set(ev + "@0", v.count);
+					} else {
+						let preV = arrMap.get(ev + "@0");
+						arrMap.set(ev + "@0", preV + v.count);
+					}
+				} else {
+					if (!arrMap.has(ev + "@1")) {
+						arrMap.set(ev + "@1", v.count);
+					} else {
+						let preV = arrMap.get(ev + "@1");
+						arrMap.set(ev + "@1", preV + v.count);
+					}
+				}
+			});
+			yearArr.forEach(function (y, i) {
+				orderArr.push(arrMap.get(y + "@1"));
+				notOrderArr.push(arrMap.get(y + "@0"));
+			});
+			console.log('yearArr', yearArr)
+			console.log('orderArr', orderArr)
+			console.log('notOrderArr', notOrderArr)
+			option1.xAxis[0].data = yearArr;
+			option1.yAxis[0].interval = 1000;
+			option1.legend.data = ["未完成订单明细", "完成订单明细"];
+			option1.series[0].data = notOrderArr;
+			option1.series[0].name = "未完成订单明细";
+			option1.series[1].data = orderArr;
+			option1.series[1].name = "完成订单明细";
+			orderStatusChart.setOption(option1);
+		}
+	});
+
+}
+
+function loadProductionStatusChart() {
+	var qt = $('input[name="productionQt"]:checked').val();
+	SaveAjax({
+		url: window.appUrl + "Common/GetHomeStatusCharts?ct=2&qt=" + qt,
+		dataType: "json",
+		isAlert: false,
+		isValidate: false,
+		success: function (res) {
+			console.log(res);
+			//1(新建),2(生产中),3(入库中),7(已经审核)   已入库/完成 4,5
+			let yearArr = [], storeArr = [], notStoreArr = [];
+			let arrMap = new Map();
+			res.forEach(function (v, i) {
+				//默认年份
+				let ev = qt == "1" ? `${v.year}年-第${v.quarterly}季度` : v.year;
+				if (!yearArr.some(ele => ele === ev)) {
+					yearArr.push(ev);
+				}
+				//非完成状态的
+				if (v.statusId == 1 || v.statusId == 2 || v.statusId == 3 || v.statusId == 7) {
+					if (!arrMap.has(ev + "@0")) {
+						arrMap.set(ev + "@0", v.count);
+					} else {
+						let preV = arrMap.get(ev + "@0");
+						arrMap.set(ev + "@0", preV + v.count);
+					}
+				} else if (v.statusId == 4 || v.statusId == 5) {//已入库 / 完成 4, 5
+					if (!arrMap.has(ev + "@1")) {
+						arrMap.set(ev + "@1", v.count);
+					} else {
+						let preV = arrMap.get(ev + "@1");
+						arrMap.set(ev + "@1", preV + v.count);
+					}
+				}
+			});
+			yearArr.forEach(function (y, i) {
+				storeArr.push(arrMap.get(y + "@1"));
+				notStoreArr.push(arrMap.get(y + "@0"));
+			});
+			console.log('yearArr', yearArr)
+			console.log('storeArr', storeArr)
+			console.log('notStoreArr', notStoreArr)
+			option2.xAxis[0].data = yearArr;
+			
+			option2.yAxis[0].interval = qt == "1"?500: 1000;
+			option2.legend.data = ["未完成排产单", "已入库/已完成的排产单"];
+			option2.series[0].data = notStoreArr;
+			option2.series[0].name = "未完成排产单";
+			option2.series[1].data = storeArr;
+			option2.series[1].name = "已入库/已完成的排产单";
+			productionStatusChart.setOption(option2);
+		}
+	});
+}
+

Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.