Selaa lähdekoodia

新增江景缓存管理功能及相关页面更新

在 `Index.cshtml` 中更新按钮文本以支持多语言显示。
在项目文件中添加多个 JavaScript 和 CSS 文件引用。
新增 `RbciDto` 和 `RbciService` 类以处理江景缓存信息。
新增控制器以处理江景缓存信息的 CRUD 操作。
添加表单和相关逻辑以输入和提交警戒值。
更新页面结构和样式以支持新的功能和数据统计。
林豪 左 7 kuukautta sitten
vanhempi
commit
d163f16595

+ 36 - 0
WMS.BZModels/Dto/KLHC/RbciDto.cs

@@ -0,0 +1,36 @@
+using SqlSugar;
+
+namespace WMS.BZModels.Dto.KLHC
+{
+    /// <summary>
+    /// 江景缓存信息
+    /// </summary>
+    public class RbciDto
+    {
+        /// <summary>
+        ///  轮子类型
+        /// </summary>
+        public string WheelType { get; set; }
+
+        /// <summary>
+        ///  当前类型工字轮的缓存数量
+        /// </summary>
+        public int Number { get; set; }
+
+        /// <summary>
+        ///  方向
+        /// </summary>
+        [SugarColumn(IsNullable = true)]
+        public string Direction { get; set; }
+
+        /// <summary>
+        ///  上限警戒值
+        /// </summary>
+        public int UpperLimitWarningValue { get; set; }
+
+        /// <summary>
+        ///  下限警戒值
+        /// </summary>
+        public int LowerLimitWarningValue { get; set; }
+    }
+}

+ 67 - 0
WMS.BZServices/KLHC/RbciService.cs

@@ -0,0 +1,67 @@
+using SqlSugar;
+using WMS.BZModels;
+using WMS.BZModels.Models.KLHC;
+using WMS.BZSqlSugar;
+using WMS.Info;
+using WMS.Util;
+
+namespace WMS.BZServices.KLHC
+{
+    /// <summary>
+    /// 江景缓存信息服务
+    /// </summary>
+    public class RbciService
+    {
+        /// <summary>
+        /// 江景缓存信息仓储
+        /// </summary>
+        private readonly Repository<BaseRBCI> _rbciRepository;
+
+        /// <summary>
+        /// 江景缓存信息服务构造函数
+        /// </summary>
+        /// <param name="rbciRepository">江景缓存信息仓储</param>
+        public RbciService(Repository<BaseRBCI> rbciRepository)
+        {
+            _rbciRepository = rbciRepository;
+        }
+
+        /// <summary>
+        /// 获取江景缓存信息分页列表
+        /// </summary>
+        /// <param name="pagination">分页信息</param>
+        /// <returns></returns>
+        public PagedInfo<BaseRBCI> GetPageList(Pagination pagination)
+        {
+            var list = _rbciRepository.Context.Queryable<BaseRBCI>().With(SqlWith.NoLock).Where(x => x.Id != 0);
+            var page = new PagedInfo<BaseRBCI>();
+            var total = 0;
+            page.PageSize = pagination.rows;
+            page.PageIndex = pagination.page;
+            pagination.sidx = pagination.sidx.Replace("DESC", "").Replace("ASC", "");
+            page.Result = list.ToPageList(pagination.page, pagination.rows, ref total).ToList().OrderBy(x => x.Direction).ThenBy(x => x.WheelType.ToInt()).ToList();
+            page.TotalNum = total;
+            return page;
+        }
+
+        /// <summary>
+        /// 更新江景缓存信息的上下限预警值
+        /// </summary>
+        /// <param name="user">用户信息</param>
+        /// <param name="id">缓存信息ID</param>
+        /// <param name="upperLimitWarningValue">上限警戒值</param>
+        /// <param name="lowerLimitWarningValue">下限警戒值</param>
+        /// <param name="Memo">备注</param>
+        public void Update(LoginUserInfo user, long id, int upperLimitWarningValue, int lowerLimitWarningValue, string Memo)
+        {
+            _rbciRepository.UpdateSetColumnsTrue(p => new BaseRBCI()
+            {
+                UpperLimitWarningValue = upperLimitWarningValue,
+                LowerLimitWarningValue = lowerLimitWarningValue,
+                Memo = Memo,
+                EditTime = DateTime.Now,
+                EditWho = user.UserName,
+            }, p => p.Id == id);
+        }
+    }
+}

+ 6 - 6
WMS.BZWeb/Areas/FJManager/Views/BillBomSet/Index.cshtml

@@ -60,12 +60,12 @@
                     </div>
                     <div class=" btn-group btn-group-sm" wms-authorize="yes">
                        
-                        <a id="lr_add" class="btn btn-default"><i class="fa fa-plus"></i>&nbsp;新增</a>
-                        <a id="lr_edit" class="btn btn-default"><i class="fa fa-pencil-square-o"></i>&nbsp;编辑</a>
-                        <a id="lr_delete" class="btn btn-default"><i class="fa fa-trash-o"></i>&nbsp;删除</a>
-                        <a id="lr_search" class="btn btn-default"><i class="fa fa-eye"></i>&nbsp;查看</a>
-                        <a id="lr_enable" class="btn btn-default"><i class="fa fa-pencil-square-o "></i>&nbsp;启用</a>
-                        <a id="lr_disable" class="btn btn-default"><i class="fa fa-trash-o"></i>&nbsp;禁用</a>
+                        <a id="lr_add" class="btn btn-default"><i class="fa fa-plus"></i>&nbsp;<span class="lrlg">新增</span></a>
+                        <a id="lr_edit" class="btn btn-default"><i class="fa fa-pencil-square-o"></i>&nbsp;<span class="lrlg">编辑</span></a>
+                        <a id="lr_delete" class="btn btn-default"><i class="fa fa-trash-o"></i>&nbsp;<span class="lrlg">删除</span></a>
+                        <a id="lr_search" class="btn btn-default"><i class="fa fa-eye"></i>&nbsp;<span class="lrlg">查看</span></a>
+                        <a id="lr_enable" class="btn btn-default"><i class="fa fa-pencil-square-o "></i>&nbsp;<span class="lrlg">启用</span></a>
+                        <a id="lr_disable" class="btn btn-default"><i class="fa fa-trash-o"></i>&nbsp;<span class="lrlg">禁用</span></a>
                         @*<a id="lr_print" class="btn btn-default"><i class="fa fa-print"></i>&nbsp;打印</a>*@
                     </div>
                 </div>

+ 163 - 0
WMS.BZWeb/Areas/KLHCManager/Controllers/AdminDesktopHomeController.cs

@@ -0,0 +1,163 @@
+using Microsoft.AspNetCore.Mvc;
+using NPOI.SS.Formula.Functions;
+using WMS.BZModels.Dto;
+using WMS.Info;
+
+namespace WMS.BZWeb.Areas.KLHCManager.Controllers
+{
+    [Area("KLHCManager")]
+    public class AdminDesktopHomeController : MvcControllerBase
+    {
+        private readonly AdminDesktopHomeService _adminDesktopHomeService;
+
+        private readonly FJDevAlarmInfoService _fJDevAlarmInfoService;
+
+        public AdminDesktopHomeController(AdminDesktopHomeService adminDesktopHomeService, FJDevAlarmInfoService fJDevAlarmInfoService)
+        {
+            _adminDesktopHomeService = adminDesktopHomeService;
+            _fJDevAlarmInfoService = fJDevAlarmInfoService;
+        }
+        /// <summary>
+        /// 今日出入库统计
+        /// </summary>
+        /// <returns></returns>
+        public ActionResult GetTodayTaskInOutPie(string bctime, string warehouse)
+        {
+            if (string.IsNullOrWhiteSpace(bctime))
+            {
+                bctime = "1";
+            }
+            var start = new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 8, 0, 0);
+            var end = start.AddDays(1);
+            switch (bctime)
+            {
+                case "1":
+                    end = start.AddHours(12);
+                    break;
+                case "2":
+                    start = new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 20, 0, 0);
+                    end = start.AddHours(12);
+                    break;
+            }
+            var dto = _adminDesktopHomeService.GetTodayTaskInOutPie(start, end, warehouse);
+
+            return Success(dto);
+        }
+
+        /// <summary>
+        /// 近七天任务动态
+        /// </summary>
+        /// <returns></returns>
+        public ActionResult Get7daysTaskBar(string warehouse)
+        {
+            var dto = _adminDesktopHomeService.Get7daysTaskBar(DateTime.Now.AddDays(-6), DateTime.Now.AddDays(1), warehouse);
+            return Success(dto);
+        }
+
+        public ActionResult GettodaysHourTask(string warehouse)
+        {
+            var dto = _adminDesktopHomeService.GettodaysHourTask(DateTime.Now, DateTime.Now, warehouse);
+            return Success(dto);
+        }
+        public ActionResult GetHourTask(string warehouse)
+        {
+            var dto = _adminDesktopHomeService.GetHourTask(DateTime.Now.AddDays(-1), DateTime.Now, warehouse);
+            return Success(dto);
+        }
+
+        public ActionResult GetTaskGoodsTypes(string bctime, string warehouse)
+        {
+            if (string.IsNullOrWhiteSpace(bctime))
+            {
+                bctime = "1";
+            }
+            var start = new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 8, 0, 0);
+            var end = start.AddDays(1);
+            switch (bctime)
+            {
+                case "1":
+                    end = start.AddHours(12);
+                    break;
+                case "2":
+                    start = new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 20, 0, 0);
+                    end = start.AddHours(12);
+                    break;
+            }
+            var dto = _adminDesktopHomeService.GetTaskGoodsTypes(start, end, warehouse);
+            return Success(dto);
+        }
+        public ActionResult GetMatWeightCategory(string warehouse)
+        {
+            var dto = _adminDesktopHomeService.GetMatWeightCategory(warehouse);
+            return Success(dto);
+        }
+        public ActionResult GetDailyStatistics(string bctime,string begintime,string endtime)
+        {
+            var start = new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 8, 0, 0);
+            var end = start.AddDays(1);
+            if (string.IsNullOrEmpty(begintime) || string.IsNullOrEmpty(endtime))
+            {
+                if (string.IsNullOrWhiteSpace(bctime))
+                {
+                    bctime = "1";
+                }               
+                switch (bctime)
+                {
+                    case "1":
+                        end = start.AddHours(12);
+                        break;
+                    case "2":
+                        start = new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 20, 0, 0);
+                        end = start.AddHours(12);
+                        break;
+                }
+            }
+            else
+            {
+                if (!DateTime.TryParse(begintime, out start))
+                {
+                    start = DateTime.Parse(DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd") + " 08:00:00") ;
+                }
+                else
+                {
+                    start =DateTime.Parse( begintime);
+                }
+                if (!DateTime.TryParse(endtime, out end))
+                {
+                   end= DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd") + " 08:00:00") ;
+                }
+                else
+                {
+                    end = DateTime.Parse(endtime);
+                }
+            }
+
+            var lists = _adminDesktopHomeService.GetDailyStatistics(InitPagination(""), start, end);
+
+            lists.Result.Add( new DailyStatisticsDto
+            {
+                WarehouseName = "合计",
+                TrussNorthQty = lists.Result.Sum(o=>o.TrussNorthQty),
+                TrussSouthQty = lists.Result.Sum(o => o.TrussSouthQty),
+                CircularSouthQty = lists.Result.Sum(o => o.CircularSouthQty),
+                CircularNorthQty = lists.Result.Sum(o => o.CircularNorthQty),
+                DailySummary = lists.Result.Sum(o => o.DailySummary),
+                FullNormalQty = lists.Result.Sum(o => o.FullNormalQty),
+                EmptyAbnormalQty = lists.Result.Sum(o => o.EmptyAbnormalQty),
+                EmptyAutomaticQty = lists.Result.Sum(o => o.EmptyAutomaticQty),
+                EmptyWarehouseQty = lists.Result.Sum(o => o.EmptyWarehouseQty),
+            });
+           
+            var jsonData = new
+            {
+                rows = lists.Result,
+                total = lists.TotalPage,
+                page = lists.PageIndex,
+                records = lists.TotalNum
+            };
+            return Success(jsonData);
+
+        }
+
+    }
+}

+ 106 - 0
WMS.BZWeb/Areas/KLHCManager/Controllers/BaseRBCIController.cs

@@ -0,0 +1,106 @@
+using Microsoft.AspNetCore.Mvc;
+using WMS.BZServices.KLHC;
+using WMS.Info;
+using WMS.Util;
+
+namespace WMS.BZWeb.Areas.KLHCManager.Controllers
+{
+    /// <summary>
+    /// 江景缓存信息控制器
+    /// </summary>
+    [Area("KLHCManager")]
+    public class BaseRBCIController : MvcControllerBase
+    {
+        /// <summary>
+        /// 江景缓存信息服务
+        /// </summary>
+        private readonly RbciService _rbciService;
+
+        /// <summary>
+        /// 江景缓存信息控制器构造函数
+        /// </summary>
+        /// <param name="rbciService"></param>
+        public BaseRBCIController(RbciService rbciService)
+        {
+            _rbciService = rbciService;
+        }
+
+        /// <summary>
+        /// 江景缓存信息首页
+        /// </summary>
+        /// <returns></returns>
+        public IActionResult Index()
+        {
+            return View();
+        }
+
+        /// <summary>
+        /// 江景缓存信息编辑表单
+        /// </summary>
+        /// <returns></returns>
+        public IActionResult Form()
+        {
+            return View();
+        }
+
+        /// <summary>
+        /// 获取江景缓存信息分页列表
+        /// </summary>
+        /// <param name="pagination">分页信息</param>
+        /// <returns></returns>
+        public ActionResult GetPageList(string pagination)
+        {
+            Pagination paginationobj = InitPagination(pagination);
+
+            var lists = _rbciService.GetPageList(paginationobj);
+
+            var jsonData = new
+            {
+                rows = lists.Result,
+                total = lists.TotalPage,
+                page = lists.PageIndex,
+                records = lists.TotalNum
+            };
+
+            return Success(jsonData);
+        }
+
+        /// <summary>
+        /// 更新江景缓存信息的上下限预警值
+        /// </summary>
+        /// <param name="Id">缓存信息ID</param>
+        /// <param name="UpperLimitWarningValue">上限警戒值</param>
+        /// <param name="LowerLimitWarningValue">下限警戒值</param>
+        /// <param name="Memo">备注</param>
+        public ActionResult Update(string Id, string UpperLimitWarningValue, string LowerLimitWarningValue, string Memo)
+        {
+            try
+            {
+                if (!long.TryParse(Id, out var _id))
+                {
+                    return Fail("缓存信息ID错误!");
+                }
+                if (!int.TryParse(UpperLimitWarningValue, out var _upperLimitWarningValue))
+                {
+                    return Fail("上限警戒值错误!");
+                }
+                if (!int.TryParse(LowerLimitWarningValue, out var _lowerLimitWarningValue))
+                {
+                    return Fail("下限警戒值错误!");
+                }
+                if (string.IsNullOrEmpty(Memo))
+                {
+                    return Fail("备注不能为空!");
+                }
+                var userid = WebUtil.GetItem("userId");
+                LoginUserInfo LoginUser = GetLoginUser();
+                _rbciService.Update(LoginUser, _id, _upperLimitWarningValue, _lowerLimitWarningValue,Memo);
+                return Success("更新成功");
+            }
+            catch (Exception ex)
+            {
+                return Fail($"更新失败:{ex.Message}");
+            }
+        }
+    }
+}

+ 20 - 0
WMS.BZWeb/Areas/KLHCManager/Views/BaseRBCI/Form.cshtml

@@ -0,0 +1,20 @@
+@using WMS.BZWeb;
+@{
+    ViewBag.Title = "编辑上下限";
+    Layout = "~/Views/Shared/_Form.cshtml";
+}
+<div class="lr-form-wrap" id="form">
+    <div class="col-xs-6 lr-form-item">
+        <div class="lr-form-item-title">上限警戒值<font face="宋体"></font></div>
+        <input id="UpperLimitWarningValue" type="text" class="form-control" placeholder="请输入上限" />
+    </div>
+    <div class="col-xs-6 lr-form-item">
+        <div class="lr-form-item-title">下限警戒值<font face="宋体"></font></div>
+        <input id="LowerLimitWarningValue" type="text" class="form-control" placeholder="请输入下限" />
+    </div>
+    <div class="col-xs-6 lr-form-item">
+        <div class="lr-form-item-title">备注<font face="宋体"></font></div>
+        <input id="Memo" type="text" class="form-control" placeholder="请输入备注" />
+    </div>
+</div>
+@Html.AppendJsFile("/Areas/KLHCManager/Views/BaseRBCI/Form.js")

+ 50 - 0
WMS.BZWeb/Areas/KLHCManager/Views/BaseRBCI/Form.js

@@ -0,0 +1,50 @@
+/*
+ * 描 述:功能模块
+ */
+var acceptClick;
+var keyValue = '';
+var bootstrap = function ($, learun) {
+    "use strict";
+    var selectedRow = learun.frameTab.currentIframe().selectedRow || {};
+    learun.frameTab.currentIframe().selectedRow = {};
+    var page = {
+        init: function () {
+            page.bind();
+            page.initData();
+        },
+        /*绑定事件和初始化控件*/
+        bind: function () {
+            //$('#WarehousId').lrselect({
+            //    url: top.$.rootUrl + "/FJManager/BaseWarehouse/PaiKuGetSelectWarehouseCodeNameList",
+            //    allowSearch: true,
+            //    width: 280,
+            //});
+            //$('#BomsetgrpId').lrselect({
+            //    url: top.$.rootUrl + "/FJManager/BillBomSet/PaiKuGetList",
+            //    allowSearch: true,
+            //    width: 280,
+            //});
+        },
+        /*初始化数据*/
+        initData: function () {
+            if (!!selectedRow) {
+                keyValue = selectedRow.Id;
+                selectedRow.Memo = "";
+                $('#form').lrSetFormData(selectedRow);
+            }
+        }
+    };
+    acceptClick = function (callBack) {
+        if (!$('#form').lrValidform()) {
+            return false;
+        }
+        var postData = $('#form').lrGetFormData(keyValue);
+        $.lrSaveForm(top.$.rootUrl + '/KLHCManager/BaseRBCI/Update?Id=' + keyValue, postData, function (res) {
+            // 保存成功后才回调
+            if (!!callBack) {
+                callBack();
+            }
+        });
+    };
+    page.init();
+}

+ 43 - 0
WMS.BZWeb/Areas/KLHCManager/Views/BaseRBCI/Index.cshtml

@@ -0,0 +1,43 @@
+@using WMS.BZWeb;
+@{
+    ViewBag.Title = "缓存管理";
+    Layout = "~/Views/Shared/_Index.cshtml";
+}
+<style>
+    .lr-scroll-horizontal {
+        height: 12px;
+        display: block;
+        z-index: 100;
+    }
+
+    .lr-scroll-vertical {
+        width: 12px;
+        display: block;
+        z-index: 100;
+    }
+
+    .jfgrid-sub .jfgrid-body {
+        overflow-y: scroll
+    }
+</style>
+<div class="lr-layout">
+    <div class="lr-layout-center">
+        <div class="lr-layout-wrap lr-layout-wrap-notitle">
+            <div class="lr-layout-tool">
+                <div class="lr-layout-tool-left">
+                    
+                </div>
+                <div class="lr-layout-tool-right">
+                    <div class=" btn-group btn-group-sm">
+                        <a id="lr_refresh" class="btn btn-default"><i class="fa fa-refresh"></i>&nbsp;<span class="lrlg">刷新</span></a>
+                    </div>
+                    <div class=" btn-group btn-group-sm" wms-authorize="yes">
+                        <a id="lr_edit" class="btn btn-default"><i class="fa fa-pencil-square-o"></i>&nbsp;编辑</a>
+                    </div>
+                </div>
+            </div>
+            <div class="lr-layout-body" id="gridtable"></div>
+        </div>
+    </div>
+</div>
+@Html.AppendJsFile("/Areas/KLHCManager/Views/BaseRBCI/Index.js")

+ 87 - 0
WMS.BZWeb/Areas/KLHCManager/Views/BaseRBCI/Index.js

@@ -0,0 +1,87 @@
+var refreshGirdData;
+var OneInTimebegin = '';
+var OneInTimeend = '';
+var ProductTimebegin = '';
+var ProductTimeend = '';
+var logbegin = '';
+var logend = '';
+var selectedRow;
+
+var bootstrap = function ($, learun) {
+    "use strict";
+    var formInfo = { "url": "/KLHCManager/BaseRBCI/Form", "name": "编辑上下限", "width": 920, "height": 676 };
+    var page = {
+        init: function () {
+            page.initGird();
+            page.bind();
+        },
+        bind: function () {
+            // 刷新
+            $('#lr_refresh').on('click', function () {
+                location.reload();
+            });
+
+            // 编辑
+            $('#lr_edit').on('click', function () {
+                selectedRow = $('#gridtable').jfGridGet("rowdata");
+                if (selectedRow.length == 0) {
+                    learun.alert.error('未选择行!');
+                    return false;
+                }
+                if (selectedRow.length > 1) {
+                    learun.alert.error('选择了多行!');
+                    return false;
+                }
+
+                var keyValue = selectedRow[0].Id;
+                selectedRow = selectedRow[0];
+                if (learun.checkrow(keyValue)) {
+                    learun.layerForm({
+                        id: 'form',
+                        title: '编辑' + formInfo.name,
+                        url: top.$.rootUrl + formInfo.url + '?keyValue=' + keyValue,
+                        width: formInfo.width,
+                        height: formInfo.height,
+                        callBack: function (id) {
+                            return top[id].acceptClick(refreshGirdData);
+                        }
+                    });
+                }
+            });
+        },
+        // 初始化列表
+        initGird: function () {
+            $('#gridtable').jfGrid({
+                url: top.$.rootUrl + '/KLHCManager/BaseRBCI/GetPageList',
+                headData: [
+                    { label: "方向", name: "Direction", width: 80, align: "left" },
+                    { label: "轮型", name: "WheelType", width: 50, align: "left" },
+                    { label: "江锦当前缓存数量", name: "Number", width: 100, align: "left" },
+                    { label: "上限警戒值", name: "UpperLimitWarningValue", width: 100, align: "left" },
+                    { label: "下限警戒值", name: "LowerLimitWarningValue", width: 100, align: "left" },
+                    { label: "备注", name: "Memo", width: 80, align: "left" }, 
+                    { label: "创建时间", name: "AddTime", width: 130, align: "left" }, 
+                    { label: "更新用户", name: "EditWho", width: 130, align: "left" },
+                    { label: "更新时间", name: "EditTime", width: 130, align: "left" },
+
+                ],
+                mainId: 'Id',
+                isPage: true,
+                reloadSelected: true,
+                autowWidth: true,
+                sidx: 'AddTime',
+                sord: 'DESC',
+                isMultiselect: true,
+            });
+            page.search({ queryJson: JSON.stringify({ keyword: $('#txt_Keyword').val() }) });
+        },
+        search: function (param) {
+            param = param || { queryJson: JSON.stringify({ InvStateCode: 3 }) };
+            $('#gridtable').jfGridSet('reload', param);
+        }
+    };
+    refreshGirdData = function () {
+        page.search();
+    };
+    page.init();
+}

+ 242 - 0
WMS.BZWeb/Views/Home/KLHCManager.cshtml

@@ -0,0 +1,242 @@
+@using WMS.BZWeb;
+<!DOCTYPE html>
+<html lang="zh-CN">
+<head>
+    <meta name=”renderer” content=”webkit|ie-comp|ie-stand” />
+    <meta name="viewport" content="width=device-width" />
+    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
+    <meta http-equiv="X-UA-Compatible" content="chrome=1,IE=edge">
+    <meta name="renderer" content="webkit">
+    <meta name="viewport" content="width=device-width, initial-scale=1" />
+    <meta name="keywords" content="wms" />
+    <meta name="description" content="wms" />
+    <link rel="icon" href="~/favicon.ico">
+
+    <title>中天</title>
+    <link href="~/Content/pace/pace-theme-minimal.css" rel="stylesheet" />
+    <link href="~/Content/font/css/font-awesome.min.css" rel="stylesheet" />
+    <link href="~/Content/bootstrap/bootstrap.min.css" rel="stylesheet" />
+    <link href="~/Content/jquery/plugin/scrollbar/jquery.mCustomScrollbar.min.css" rel="stylesheet" />
+
+    @Html.AppendCssFile(
+            "/wwwroot/Content/wms/style/wms-common.css",
+            "/Views/Home/KLHCManager/KLHCManager.css")
+
+
+</head>
+
+<body>
+    <style type="text/css">
+
+        .portal-panel-title {
+            font-size: 16px;
+            font-family: Microsoft YaHei;
+            font-weight: bold;
+            color: #333333;
+        }
+    </style>
+
+    <div class="lr-layout">
+        <div class="lr-layout-center">
+            <ul class="left nav nav-tabs lr-nav-tabs" role="tablist" id="lr_left_list">
+                <li role="presentation" class="active" data-value="1"><a href="#tabfj1" aria-controls="home" tabvalue="1" role="tab" data-toggle="tab">空轮库</a></li>
+                <li role="presentation" data-value="5"><a href="#fjdaily" aria-controls="tabfj5" role="tab" tabvalue="daily" data-toggle="tab">空轮库日流转</a></li>
+            </ul>
+            <div style="height:100%;">
+                <div class="center">
+                    <div class="tab-content lr-tab-content">
+                        <div role="tabpanel" class="tab-pane active" id="tabfj1">
+                            <div class="col-xs-12">
+                            </div>
+
+                            <div class="col-xs-12">
+                                <div class="col-xs-3">
+                                    <div class="portal-panel-title" style="width:98%;">
+                                        <img src="~/Content/images/DeviceMonitor/icon.png" class="" />&nbsp;&nbsp;今日出入库统计
+
+                                        <a class="btn btn-primary btn-sm fj1todaytask" bctime="1" style="margin-left:55px; font-size:10px;font-weight:normal;text-align:right;">白班</a>
+                                        <a class="btn btn-default btn-sm fj1todaytask" bctime="2" style=" font-size:10px;font-weight:normal;text-align:right;">晚班</a>
+                                        <a class="btn btn-default btn-sm fj1todaytask" bctime="3" style=" font-size:10px;font-weight:normal;text-align:right;">当天</a>
+
+                                    </div>
+
+                                    <div class="portal-panel-content">
+                                        <div class="lr-item-20" style="width:98%;">
+                                            <div class="taskitem" style="margin-top:10px;height:200px;">
+                                                <div class="details" style="left:10px;">
+                                                    <div class="desc">
+                                                        <i class="fa fa-circle" style="color:#F7CA4D;"></i>  出库任务
+                                                    </div>
+                                                    <div id="fj1outtoday" class="number">
+                                                        0
+                                                    </div>
+                                                    <div class="desc">
+                                                        <i class="fa fa-circle" style="color:#40A0FF;"></i> 入库任务
+                                                    </div>
+                                                    <div id="fj1intoday" class="number">
+                                                        0
+                                                    </div>
+                                                </div>
+                                                <div class="visual">
+                                                    <div id="fj1todayinoutpie" style="width:218px;height:180px;left:30px;top:-25px;  ">
+                                                    </div>
+                                                </div>
+                                            </div>
+                                        </div>
+
+                                    </div>
+                                </div>
+                                <div class="col-xs-6">
+                                    <div class="portal-panel-title" style="width:98%;">
+                                        <img src="~/Content/images/DeviceMonitor/icon.png" class="" />&nbsp;&nbsp;近七天任务动态
+                                    </div>
+                                    <div class="portal-panel-content">
+                                        <div class="lr-item-20" style="width:98%;">
+                                            <div class="taskitem" id="fj1sevendaysTask" style="height:230px;left:-30px;top:5px;">
+                                            </div>
+                                        </div>
+
+                                    </div>
+                                </div>
+
+                                <div class="col-xs-3">
+                                    <div class="portal-panel-title" style="width:98%;">
+                                        <img src="~/Content/images/DeviceMonitor/icon.png" class="" />&nbsp;&nbsp;仓库货位使用情况
+                                    </div>
+                                    <div class="portal-panel-content">
+                                        <div class="lr-item-20" style="width:98%;">
+                                            <div class="taskitem" id="fj1WarehouseCell" style="width:368px;height:200px;left:-90px;top:10px;  ">
+                                            </div>
+                                        </div>
+
+                                    </div>
+                                </div>
+                            </div>
+
+                            <div class="col-xs-12">
+                                <div class="col-xs-3">
+                                    <div class="portal-panel-title" style="width:98%;">
+                                        <img src="~/Content/images/DeviceMonitor/icon.png" class="" />&nbsp;&nbsp;巷道货位分配情况
+                                    </div>
+                                    <div class="portal-panel-content">
+                                        <div class="lr-item-20" style="width:98%;">
+                                            <div class="taskitem" id="fj1TunnelWarehouseCell" style="width:398px;height:180px;left:-90px;right:-50px; top:-20px;  ">
+                                            </div>
+                                        </div>
+                                    </div>
+                                </div>
+                                <div class="col-xs-6">
+                                    <div class="portal-panel-title" style="width:98%;">
+                                        <img src="~/Content/images/DeviceMonitor/icon.png" class="" />&nbsp;&nbsp;24小时内任务动态
+                                    </div>
+                                    <div class="portal-panel-content">
+                                        <div class="lr-item-20" style="width:98%;">
+                                            <div class="taskitem" id="fj1todaysHourTask" style="height:235px;left:-30px;top:-35px;">
+                                            </div>
+                                        </div>
+                                    </div>
+                                </div>
+
+                                <div class="col-xs-3">
+                                    <div class="portal-panel-title" style="width:98%;">
+                                        <img src="~/Content/images/DeviceMonitor/icon.png" class="" />&nbsp;&nbsp;分类占比
+
+                                        <a class="btn btn-primary btn-sm fj1todaytype" bctime="1" style="margin-left:102px; font-size:10px;font-weight:normal;text-align:right;">白班</a>
+                                        <a class="btn btn-default btn-sm fj1todaytype" bctime="2" style=" font-size:10px;font-weight:normal;text-align:right;">晚班</a>
+                                        <a class="btn btn-default btn-sm fj1todaytype" bctime="3" style=" font-size:10px;font-weight:normal;text-align:right;">当天</a>
+
+                                    </div>
+                                    <div class="portal-panel-content">
+                                        <div class="lr-item-20" style="width:98%;">
+                                            <div class="taskitem" id="fj1BomType" style="z-index:100;width:418px;height:200px;margin-left:35px;right:120px;top:10px;  ">
+                                            </div>
+                                        </div>
+                                    </div>
+                                </div>
+                            </div>
+
+                            <div class="col-xs-12">
+
+                                <div class="col-xs-12">
+                                    <div class="portal-panel-title" style="width:98%;">
+                                        <img src="~/Content/images/DeviceMonitor/icon.png" class="" />&nbsp;&nbsp;48小时内任务动态
+                                    </div>
+                                    <div class="portal-panel-content">
+                                        <div class="lr-item-20" style="width:98%;">
+                                            <div class="taskitem" id="fj1HourTask" style="height:235px;left:-30px;top:-35px;">
+                                            </div>
+                                        </div>
+                                    </div>
+                                </div>
+
+
+                            </div>
+
+                            <div class="col-xs-12">
+                               
+                            </div>
+                        </div>
+
+                        <div role="tabpanel" class="tab-pane" id="fjdaily">
+                            <div class="lr-tab-scroll-content">
+                                <div class="lr-layout-wrap lr-layout-wrap-notitle">
+                                    <div class="lr-layout-tool">
+
+
+                                        <div class="col-xs-12 lr-form-item" style="margin: 5px 0px 10px -50px; display: flex;">
+                                            <a class="btn btn-primary btn-sm fjdailytime" bctime="1" style="height:28px;margin-top:5px;margin-left:55px;margin-right:5px; font-size:10px;font-weight:normal;text-align:right;">白班</a>
+                                            <a class="btn btn-default btn-sm fjdailytime" bctime="2" style="height:28px;margin-top:5px;margin-right:5px; font-size:10px;font-weight:normal;text-align:right;">晚班</a>
+                                            <a class="btn btn-default btn-sm fjdailytime" bctime="3" style="height:28px;margin-top:5px;margin-right:5px; font-size:10px;font-weight:normal;text-align:right;">当天</a>
+
+                                            <div style="border: 1px solid #ccc;border-radius: 5px;width:440px;  display: flex;height:38px;">
+                                                <input id="dailybegin" placeholder="请输入时间" readonly style="margin: 4px 5px 0px 5px;width:180px;border: 1px solid #ccc;    height: 28px;" class="datetime" type="text" onclick="WdatePicker({el:this,dateFmt:'yyyy-MM-dd HH:mm:ss'})">
+                                                <input id="dailyend" placeholder="请输入时间" readonly style="margin-top:4px;width:180px;border: 1px solid #ccc;    height: 28px;" class="datetime" type="text" onclick="WdatePicker({el:this,dateFmt:'yyyy-MM-dd HH:mm:ss'})">
+
+                                                <a id="btn_Search" class="btn btn-primary btn-sm" style="height:32px;margin:2px 0px 4px 3px"><i class="fa fa-search"></i>&nbsp;<span class="lrlg">查询</span></a>
+                                            </div>
+                                        </div>
+                                    </div>
+
+                                    <div style='position:relative;width:100%;background-color: deepskyblue;border-bottom-left-radius:3px;border-bottom-right-radius:3px;border-top-left-radius:3px;border-top-right-radius:3px;'>
+                                        <label class="portal-panel-lable">区域</label>
+                                        <label class="portal-panel-lable">桁架北产量</label>
+                                        <label class="portal-panel-lable">桁架南产量</label>
+                                        <label class="portal-panel-lable">环形库南产量</label>
+                                        <label class="portal-panel-lable">环形库北产量</label>
+
+                                        <label class="portal-panel-lable">日产能汇总</label>
+                                        <label class="portal-panel-lable">满拖数(正常)</label>
+                                        <label class="portal-panel-lable"> 满拖数(异常)</label>
+                                        <label class="portal-panel-lable">空托回库(自动回库)</label>
+                                        <label class="portal-panel-lable">空托回库(单独取空)</label>
+                                    </div>
+                                    <div id="dailylst" class="portal-panel-content" style="height:240px;overflow: auto;">
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+
+                </div>
+
+
+            </div>
+        </div>
+    </div>
+    </div>
+
+
+    <script src="~/Content/pace/pace.min.js"></script>
+    <script src="~/Content/jquery/jquery-1.10.2.min.js"></script>
+    <script src="~/Content/jquery/plugin/scrollbar/jquery.mCustomScrollbar.concat.min.js"></script>
+    <script src="~/Content/bootstrap/bootstrap.min.js"></script>
+    <script src="~/Content/echarts/echarts.min.js"></script>
+    <script src="~/Content/datepicker/WdatePicker.js"></script>
+    <script type="text/javascript">
+        var Tenant = '@ViewBag.Tenant';
+        var YStartDate = '@DateTime.Parse(DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd")+ " 08:00:00")';
+        var YEndDate = '@DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd") + " 08:00:00")';
+    </script>
+    @Html.AppendJsFile("/Views/Home/KLHCManager/KLHCManager.js")
+</body>
+</html>

+ 350 - 0
WMS.BZWeb/Views/Home/KLHCManager/KLHCManager.css

@@ -0,0 +1,350 @@
+body {
+    padding: 10px;
+    background: #f8f8f8;
+}
+
+.lr-desktop-panel {
+    position: relative;
+    width: 100%;
+    background-color: #fff;
+    border: 1px solid #ccc;
+    padding: 0px 22px;
+    border-radius: 2px;
+}
+
+lr-msg-line .lr-uitheme-accordion .lr-desktop-panel {
+    border-radius: 0px;
+}
+
+.lr-uitheme-windos .lr-desktop-panel {
+    border-radius: 3px;
+}
+
+.lr-uitheme-default .lr-desktop-panel {
+    border-radius: 3px;
+}
+
+.portal-panel-lable {
+    width: 10%;
+    float: left;
+    font-size: 12px;
+    line-height: 25px;
+}
+
+.portal-panel-content-lable {
+    width: 10%;
+    float: left;
+    color: #333;
+    font-size: 12px;
+}
+.portal-panel-content-a {
+    width: 10%;
+    float: left;
+    font-size: 12px;
+    text-decoration: underline;
+}
+
+.portal-panel-lable2 {
+    width: 20%;
+    float: left;
+    font-size: 12px;
+    line-height: 25px;
+}
+
+.portal-panel-content-lable2 {
+    width: 20%;
+    float: left;
+    color: #333;
+    font-size: 12px;
+}
+    .portal-panel-content-a2 {
+    width: 20%;
+    float: left;
+    font-size: 12px;
+    text-decoration: underline;
+}
+
+.portal-panel-title {
+    padding-top: 10px;
+    line-height: 25px;
+    font-weight: bold;
+    border-bottom: 1px solid #ccc;
+    color: #4a4a4a;
+    font-weight: 300;
+    font-size: 14px;
+}
+
+.portal-panel-content {
+    position: relative;
+    width: 100%;
+    /*padding: 0px 5px 5px 5px;*/
+}
+
+.lr-item-20 {
+    position: relative;
+    float: left;
+    width: 25%;
+    padding: 10px;
+}
+
+.task-stat {
+    position: relative;
+    height: 104px;
+    width: 100%;
+    border-radius: 5px;
+    font-family: "Open Sans", sans-serif;
+    overflow: hidden;
+    color: #FFFFFF;
+}
+
+    .task-stat .visual {
+        position: absolute;
+        top: 0;
+        left: 0;
+        padding: 10px 0 0 10px;
+    }
+
+        .task-stat .visual > i {
+            color: #FFFFFF;
+            opacity: 0.4;
+            filter: alpha(opacity=10);
+            font-size: 60px;
+            line-height: 65px;
+        }
+
+    .task-stat .details {
+        position: absolute;
+        left: 20px;
+        top: 10px;
+    }
+
+        .task-stat .details .number {
+            /*text-align: right;*/
+            font-size: 32px;
+            line-height: 36px;
+            letter-spacing: -1px;
+            margin-bottom: 0px;
+            font-weight: 300;
+        }
+
+        .task-stat .details .desc {
+            text-align: right;
+            font-size: 15px;
+            padding-top: 5px;
+        }
+
+    .task-stat .more {
+        display: block;
+        position: absolute;
+        bottom: 0;
+        
+        left: 0;
+        width: 100%;
+        clear: both;
+        padding: 4px 10px;
+        text-transform: uppercase;
+        font-weight: 300;
+        font-size: 12px;
+        opacity: 0.8;
+        filter: alpha(opacity=70);
+        text-decoration: none;
+        color: #FFFFFF;
+    }
+
+        .task-stat .more > i {
+            display: inline-block;
+            margin-top: 0px;
+            float: right;
+            font-size: 15px;
+            color: #fff;
+            opacity: 0.8;
+        }
+
+        .task-stat .more:hover {
+            text-decoration: none;
+            opacity: 0.9;
+            filter: alpha(opacity=90);
+        }
+
+/*.lr-msg-line {
+    position: relative;
+    width: 100%;
+    line-height: 39px;
+    border-bottom: 1px solid #ccc;
+}*/
+
+.lr-msg-line > a {
+    /*cursor:pointer;
+    color: #333;
+    width:25%;
+    font-size: 12px;*/
+}
+
+/*.lr-msg-line > label {
+        position: absolute;
+        top: 0;
+        right: 0;
+        margin-bottom: 0px;
+        color: #333;
+        font-size: 12px;
+        font-weight: 400;
+    }*/
+
+.lr-chart-container {
+    position: relative;
+    height: 300px;
+    width: 100%;
+}
+
+
+.taskitem {
+    position: relative;
+    height: 150px;
+    border-radius: 5px;
+    font-family: "Open Sans", sans-serif;
+    overflow: hidden;
+    
+}
+
+    .taskitem .visual {
+        position: absolute;
+        top: 0;
+        right: 10px;
+        padding: 10px 0 0 10px;
+    }
+
+        .taskitem .visual > i {
+             
+            opacity: 0.4;
+            filter: alpha(opacity=10);
+            font-size: 60px;
+            line-height: 65px;
+        }
+
+    .taskitem .details {
+        position: absolute;
+        left: 10px;
+      
+    }
+
+        .taskitem .details .number {
+            text-align: right;
+            letter-spacing: -1px;
+            margin-bottom: 0px;
+            font-weight: 300;
+            font-size: 22px;
+            line-height: 10px;
+            text-align: left;
+            padding-top: 8px;
+            margin-left: 12px;
+            padding-bottom: 5px;
+            color: #1C3554;
+            
+        }
+
+        .taskitem .details .desc {
+            text-align: right;
+            color: #5A5E66;
+            font-size: 14px;
+            text-align: left;
+        }
+
+
+html, body, #app {
+    overflow: auto;
+}
+
+/*   .main {*/
+.lr-layout-center {
+    position: relative;
+    min-width: 1024px;
+    max-width: 1920px;
+    padding: 0.5% 0.5%;
+    box-box-sizing: border-box;
+}
+
+.center .item {
+    padding-top: 12px;
+    display: flex;
+    flex-direction: column;
+}
+
+    .center .item .title {
+        display: flex;
+        flex-direction: row;
+        justify-content: flex-start;
+        align-items: center;
+        margin-bottom: 17px;
+    }
+
+        .center .item .title span {
+            font-size: 16px;
+            color: #2d2f33;
+            font-weight: bold;
+            margin-left: 14px;
+        }
+
+    .center .item .wrap {
+        padding: 0 20px;
+        padding-bottom: 10px;
+        border-bottom: 1px solid #e6e6e6;
+    }
+
+        .center .item .wrap .wrapItem {
+            height: 158px;
+            margin-top: -10px;
+        }
+
+        .center .item .wrap .choseBox {
+            margin-left: 45px;
+            margin-bottom: 33px;
+        }
+
+            .center .item .wrap .choseBox span {
+                color: #878d99;
+                font-size: 14px;
+                margin-right: 26px;
+            }
+
+                .center .item .wrap .choseBox span.active {
+                    color: #0479f7;
+                }
+
+.content-box {
+    position: relative;
+    margin-top: 1.5vh;
+    box-sizing: border-box;
+    padding: 1.5vh 1vw;
+}
+
+.content-box-title-wrap {
+    padding-bottom: 2vh;
+    flex-shrink: 0;
+    display: flex;
+    align-items: center;
+}
+/* 表格 */
+.normal-table-num {
+    color: #00b9eb;
+    font-weight: 600;
+}
+
+.table-rate-wrap {
+    display: flex;
+    align-items: center;
+}
+
+.table-pan-icon {
+    border-radius: 50%;
+    background-size: 100% 100%;
+    overflow: hidden;
+    background-color: #134982;
+    transform: rotate(-90deg);
+    flex-shrink: 0;
+}
+
+.table-rate-num {
+    padding-left: 0.5vw;
+    overflow: hidden;
+    text-overflow: ellipsis;
+}

+ 1373 - 0
WMS.BZWeb/Views/Home/KLHCManager/KLHCManager.js

@@ -0,0 +1,1373 @@
+//var bootstrap = function ($, learun) {
+$(function () {
+    "use strict";
+    var tabName = 'fj1';
+    function GetTodayInOutPie(data) {
+        var dom = document.getElementById(tabName + 'todayinoutpie');
+        var myChart = echarts.init(dom, null, {
+            renderer: 'canvas',
+            useDirtyRect: false
+        });
+        var app = {};
+
+        var option;
+
+        option = {
+            title: {
+                text: data.total,
+                textStyle: {
+                    color: '#1C3554',
+                },
+                subtext: '今日任务总数',
+                subtextStyle: {
+                    color: '#5A5E66',
+                },
+                left: 'center',
+                top: '37%'
+            },
+            tooltip: {
+                trigger: 'item'
+            },
+            legend: {
+                top: '1%',
+                left: 'center'
+            },
+            series: [
+                {
+                    name: '出入库统计',
+                    type: 'pie',
+                    radius: ['40%', '70%'],
+                    avoidLabelOverlap: false,
+
+                    itemStyle: {
+                        normal: {
+                            label: {
+                                show: false
+                            },
+                            labelLine: {
+                                show: false
+                            },
+                            color: function (colors) {
+                                var colorList = [
+                                    '#9287e7',
+                                    '#40A0FF',
+                                    '#F7CA4D',
+                                    '#23B89A',
+                                    '#9287e7',
+                                    '#40A0FF',
+                                    '#F7CA4D',
+                                    '#23B89A',
+
+                                ];
+                                return colorList[colors.dataIndex];
+                            }
+                        }
+                    },
+                    label: {
+                        show: false,
+                        position: 'center'
+                    },
+                    emphasis: {
+                        label: {
+                            show: true,
+                            fontSize: 40,
+                            fontWeight: 'bold'
+                        }
+                    },
+                    labelLine: {
+                        show: false
+                    },
+                    data: data.datas
+                    //[
+                    //{ value: 1048, name: '出库任务' },
+                    //{ value: 735, name: '入库任务' },
+                    //{ value: 580, name: '移库任务' }
+                    //]
+                }
+            ]
+        };
+
+        if (option && typeof option === 'object') {
+            myChart.setOption(option);
+        }
+        window.addEventListener('resize', myChart.resize);
+
+    }
+
+    function Get7daysTaskBar(data) {
+        var dom = document.getElementById(tabName + 'sevendaysTask');
+        var myChart = echarts.init(dom, null, {
+            renderer: 'canvas',
+            useDirtyRect: false
+        });
+        var app = {};
+        var option;
+        const labelOption = {
+            show: true,
+            position: 'insideBottom',
+            distance: 15,
+            align: 'left',
+            verticalAlign: 'middle',
+            rotate: 90,
+            formatter: '{c}  {name|{a}}',
+            fontSize: 16,
+            rich: {
+                name: {}
+            }
+        };
+        option = {
+            tooltip: {
+                trigger: 'axis',
+                axisPointer: {
+                    type: 'cross',
+                    crossStyle: {
+                        color: '#999'
+                    }
+                }
+            },
+            color: ['#40A0FF', '#23B89A', '#FF8541', '#9287e7'],
+            //tooltip: {
+            //    trigger: 'axis',
+            //    axisPointer: {
+            //        type: 'shadow'
+            //    }
+            //},
+            legend: {
+                left: '57%',//调整位置
+                data: ['出库', '入库', '移库', '组盘']
+            },
+            xAxis: [
+                {
+                    type: 'category',
+                    axisTick: { show: false },
+                    data: data.xAxis,// ['5-10', '5-11', '5-12', '5-13', '5-14', '5-15', '5-16'],
+
+                }
+            ],
+            yAxis: [
+                {
+                    /* interval: 50,*/
+                    axisLabel: {
+                        formatter: '{value}'
+                    },
+                    type: 'value'
+                }
+            ],
+            series: [
+
+                {
+                    name: '出库',
+                    type: 'bar',
+                    //label: labelOption,
+                    emphasis: {
+                        focus: 'series'
+                    },
+                    lineStyle: { // 设置线条的style等
+                        normal: {
+                            color: '#40A0FF', // 折线线条颜色:红色
+                        },
+                    },
+                    itemStyle: {
+                        normal: {
+                            label: {
+                                show: true,
+                                position: 'top',
+
+                            },
+                            //这里是颜色
+                            color: function (params) {
+
+                                //注意,如果颜色太少的话,后面颜色不会自动循环,最好多定义几个颜色
+                                var colorList = ['#40A0FF'];
+                                return colorList[params.dataIndex]
+                            }
+                        }, // 移入当前的柱状图时改变颜色
+                        emphasis: {
+                            color: '#40A0FF',
+                        }
+                    },
+                    data: data.series[0].data//[22, 18, 19, 34, 29]
+                },
+
+                {
+                    name: '入库',
+                    type: 'bar',
+                    barGap: 0,
+                    //label: labelOption,
+                    emphasis: {
+                        focus: 'series'
+                    },
+                    lineStyle: { // 设置线条的style等
+                        normal: {
+                            color: '#23B89A', // 折线线条颜色:红色
+                        },
+                    },
+                    itemStyle: {
+                        normal: {
+                            label: {
+                                show: true,
+                                position: 'top',
+
+                            },
+                            //这里是颜色
+                            color: function (params) {
+                                //注意,如果颜色太少的话,后面颜色不会自动循环,最好多定义几个颜色
+                                var colorList = ['#23B89A'];
+                                return colorList[params.dataIndex]
+                            }
+                        },
+                        emphasis: {
+                            color: '#23B89A',
+                        }
+                    },
+                    data: data.series[1].data//[32, 32, 30, 34, 39]
+                },
+                {
+                    name: '移库',
+                    type: 'bar',
+                    //label: labelOption,
+                    emphasis: {
+                        focus: 'series'
+                    },
+                    lineStyle: { // 设置线条的style等
+                        normal: {
+                            color: '#FF8541', // 折线线条颜色:红色
+                        },
+                    },
+                    itemStyle: {
+                        normal: {
+                            label: {
+                                show: true,
+                                position: 'top',
+
+                            },
+                            //这里是颜色
+                            color: function (params) {
+
+                                //注意,如果颜色太少的话,后面颜色不会自动循环,最好多定义几个颜色
+                                var colorList = ['#FF8541'];
+                                return colorList[params.dataIndex]
+                            }
+                        },
+                        emphasis: {
+                            color: '#FF8541',
+                        }
+                    },
+                    data: data.series[2].data// [15, 23, 21, 15, 19]
+                },
+                {
+                    name: '组盘',
+                    type: 'bar',
+                    //label: labelOption,
+                    emphasis: {
+                        focus: 'series'
+                    },
+                    lineStyle: { // 设置线条的style等
+                        normal: {
+                            color: '#9287e7', // 折线线条颜色:红色
+                        },
+                    },
+                    itemStyle: {
+                        normal: {
+                            label: {
+                                show: true,
+                                position: 'top',
+
+                            },
+                            //这里是颜色
+                            color: function (params) {
+
+                                //注意,如果颜色太少的话,后面颜色不会自动循环,最好多定义几个颜色
+                                var colorList = ['#9287e7'];
+                                return colorList[params.dataIndex]
+                            }
+                        },
+                        emphasis: {
+                            color: '#9287e7',
+                        }
+                    },
+                    data: data.series[3].data// [15, 23, 21, 15, 19]
+                },
+            ]
+        };
+
+        if (option && typeof option === 'object') {
+            myChart.setOption(option);
+        }
+    }
+
+    function GetWarehouseCellPie(data) {
+        var chartDom = document.getElementById(tabName + 'WarehouseCell');
+        var myChart = echarts.init(chartDom);
+        var option;
+
+        option = {
+
+            tooltip: {
+                trigger: 'item'
+            },
+            legend: {
+                data: ['已使用', '空闲', '禁用', '锁定'],
+                //orient: 'vertical',
+                orient: 'horizontal',
+                bottom: '-5',
+                // left: 'center',
+
+                // top: "50",
+                //right: '-80%',
+                textStyle: { color: "#000000" },//字体颜色
+                //icon: "circle"//图例形状设置
+                //orient: 'vertical',
+                //right: 'right'
+                //left: '77%',//调整位置
+            },
+            series: [
+                {
+                    name: '货位使用情况',
+                    type: 'pie',
+                    radius: '60%',
+                    data: data
+                    //[{ value: 1048, name: '已使用' },
+                    //{ value: 735, name: '空闲' },
+                    //{ value: 580, name: '禁用' },
+                    //{ value: 484, name: '锁定' }]
+                    , itemStyle: {
+                        normal: {
+                            label: {
+                                show: true,
+                                formatter: '{b}:{c}({d}%)'
+                            },
+                            labelLine: {
+                                show: true
+                            },
+                            color: function (colors) {
+                                var colorList = [
+                                    '#F4BD37', '#23B89A',
+                                    '#D8E7FC',
+                                    '#E46989',
+
+                                ];
+                                return colorList[colors.dataIndex];
+                            }
+                        }
+                    },
+                    label: {
+                        show: false,
+                        position: 'center'
+                    },
+                    emphasis: {
+                        label: {
+                            show: true,
+                            fontSize: 40,
+                            fontWeight: 'bold'
+                        },
+                        itemStyle: {
+                            shadowBlur: 10,
+                            shadowOffsetX: 0,
+                            shadowColor: 'rgba(0, 0, 0, 0.5)'
+                        }
+                    },
+                    labelLine: {
+                        show: false
+                    }
+                }
+            ]
+        };
+
+        option && myChart.setOption(option);
+    }
+
+    function GetTunnelWarehouseCellBar(data) {
+
+        var dom = document.getElementById(tabName + 'TunnelWarehouseCell');
+        var myChart = echarts.init(dom, null, {
+            renderer: 'canvas',
+            useDirtyRect: false
+        });
+        var app = {};
+        var option;
+
+        //https://blog.csdn.net/fu983531588/article/details/121338767
+        //Echarts绘制横向柱状图(圆角+渐变)  https://blog.csdn.net/weixin_43953710/article/details/106694317
+        //https://blog.csdn.net/lilycheng1986/article/details/121853940
+
+        //var data = [{ "qty": 16, "total": 1732 }, { "qty": 787, "total": 1732 }, { "qty": 841, "total": 1700 }];
+        var barWidth = 20;
+
+        //option = {
+        //    grid: {
+        //        top: '5%',
+        //        left: '25%',
+        //        right: '25%',
+        //        bottom: '0%',
+        //        containLabel: true // 显示范围包含坐标刻度
+        //    },
+
+        //    //grid: {
+        //    //    top: '10px',
+        //    //    left: '120px',
+        //    //    bottom: '30px',
+        //    //},
+        //    xAxis: {
+        //        show: false
+        //    },
+        //    yAxis: {
+        //        type: 'category',
+        //        inverse: true, // 倒叙
+        //        axisLabel: {
+        //            margin: 0,
+        //            align: 'left',
+        //            formatter: (val) => {
+        //                return `${val}`;
+        //            }
+        //        },
+        //        axisLine: {
+        //            show: false // 轴线
+        //        },
+        //        axisTick: {
+        //            show: false // 刻度线
+        //        },
+        //        data: ['栏目1', '栏目2', '栏目3']
+        //    },
+        //    series: [
+        //        {
+        //            type: 'bar',
+        //            showBackground: true,
+        //            barWidth: 10,
+        //            barMaxWidth: 20,
+        //            barMinWidth: 5,
+        //            label: {
+        //                show: true,
+        //                position: 'left',
+        //                offset: [100, 0],
+        //                valueAnimation: true,
+        //                fontFamily: 'monospace',
+        //                fontSize: 12,
+        //                textStyle: {
+        //                    //数值样式
+        //                    color: "#1C3554",
+        //                    fontSize: 12
+        //                },
+        //                formatter: function (params) {
+        //                    return params.data.realValue + '/' + params.data.value;
+        //                },
+        //                // distance: -22
+        //            },
+        //            itemStyle: {
+        //                normal: {
+        //                    barBorderRadius: [0, 20, 20, 0],  //设置圆角方向[上,右,下,左]
+        //                    //这里是颜色
+        //                    color: function (params) {
+        //                        //注意,如果颜色太少的话,后面颜色不会自动循环,最好多定义几个颜色
+        //                        var colorList = ['#40A0FF'];
+        //                        return colorList[params.dataIndex]
+        //                    }
+        //                }
+        //            },
+        //            data: data.map(function (item) {
+        //                return {
+        //                    realValue: item.qty,
+        //                    value: item.total,
+        //                };
+        //            }),
+        //        }
+        //    ]
+        //};
+        option = {
+            //backgroundColor: 'black',
+            grid: {
+                top: '15%',
+                left: '25%',
+                right: '25%',
+                bottom: '0%',
+                containLabel: true // 显示范围包含坐标刻度
+            },
+            xAxis: {
+                show: false,
+            },
+            yAxis: {
+                data: data.map(item => item.tunnel),
+                inverse: true,
+                splitLine: {
+                    show: false,
+                },
+                axisLabel: {
+                    textStyle: { fontSize: '80%', color: '#5A5E66' },
+                },
+                axisLine: {
+                    show: false,
+                },
+                axisTick: false,
+            },
+            series: [
+                {
+                    type: 'bar',
+                    barWidth: barWidth,
+                    barGap: '5%',
+                    barCategoryGap: '5%',/*多个并排柱子设置柱子之间的间距*/
+                    zlevel: 2,
+                    data: data.map(function (item) {
+                        return {
+                            value: item.qty
+                        };
+                    }),
+                    itemStyle: {
+                        normal: {
+                            barBorderRadius: [0, 20, 20, 0],  //设置圆角方向[上,右,下,左]
+                            //这里是颜色
+                            color: function (params) {
+                                //注意,如果颜色太少的话,后面颜色不会自动循环,最好多定义几个颜色
+                                var colorList = ['#40A0FF'];
+                                return colorList[params.dataIndex]
+                            }
+                        }
+                    }
+                },
+                {
+                    type: 'bar',
+                    barWidth: barWidth,
+                    distance: 15,// 标签距离柱条的距离
+                    barGap: '-100%',
+                    barCategoryGap: '5%',/*多个并排柱子设置柱子之间的间距*/
+                    data: data.map(function (item) {
+                        return {
+                            value: item.total,
+                            realValue: item.qty,
+                            total: item.total,
+                        };
+                    }),
+                    label: {
+                        normal: {
+                            show: true,
+                            precision: 1,
+                            position: 'right',
+                            offset: [10, 0],
+                            valueAnimation: true,
+                            fontFamily: 'monospace',
+                            fontSize: 12,
+                            textStyle: {
+                                //数值样式
+                                color: "#1C3554",
+                                fontSize: 12
+                            },
+                            formatter: function (params) {
+                                return params.data.realValue + '/' + params.data.total;
+                            },
+                        }
+                    },
+
+                    itemStyle: {
+                        borderRadius: [0, 20, 20, 0],
+                        normal: {
+                            barBorderRadius: [0, 20, 20, 0],  //设置圆角方向[上,右,下,左]
+                            //这里是颜色
+                            color: function (params) {
+                                //注意,如果颜色太少的话,后面颜色不会自动循环,最好多定义几个颜色
+                                var colorList = ['#E1E5E8'];
+                                return colorList[params.dataIndex]
+                            }
+                        }, // 移入当前的柱状图时改变颜色
+                    }
+                },
+            ],
+        };
+
+        if (option && typeof option === 'object') {
+            myChart.setOption(option);
+        }
+
+        window.addEventListener('resize', myChart.resize);
+    }
+    function GettodaysHourTask(data) {
+        var chartDom = document.getElementById(tabName + 'todaysHourTask');
+        var myChart = echarts.init(chartDom, null, {
+            renderer: 'canvas',
+            useDirtyRect: false
+        });
+        var option;
+
+        option = {
+
+            tooltip: {
+                trigger: 'axis',
+                axisPointer: {
+                    type: 'cross',
+                    label: {
+                        backgroundColor: '#6a7985'
+                    }
+                }
+            },
+            legend: {
+                left: '57%',//调整位置
+                top: '30',
+                data: ['出库', '入库', '移库', '组盘']
+            },
+
+            grid: {
+                left: '3%',
+                right: '4%',
+                bottom: '1%',
+                containLabel: true
+            },
+            xAxis: [
+                {
+                    //type: 'category',
+                    boundaryGap: false,
+                    data: data.xAxis,//['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23']
+                }
+            ],
+            yAxis: [
+                {
+
+                    axisLabel: {
+                        formatter: '{value}'
+                    },
+                    axisLine: {
+                        show: true
+                    },
+                    type: 'value'
+                }
+            ],
+            series: [
+                {
+                    name: '出库',
+                    type: 'line',
+                    //stack: 'Total',
+                    label: {
+                        show: true,
+                        position: 'top'
+                    },
+                    lineStyle: { // 设置线条的style等
+                        normal: {
+                            color: '#40A0FF', // 折线线条颜色:红色
+                        },
+                    },
+                    itemStyle: {
+                        normal: {
+                            //这里是颜色
+                            color: function (params) {
+                                //注意,如果颜色太少的话,后面颜色不会自动循环,最好多定义几个颜色
+                                var colorList = ['#40A0FF'];
+                                return colorList[params.dataIndex]
+                            }
+                        }
+                    },
+                    areaStyle: {},
+                    emphasis: {
+                        focus: 'series'
+                    },
+                    data: data.series[0].data//[78, 93, 76, 55, 68, 89, 82]
+                },
+                {
+
+                    name: '入库',
+                    type: 'line',
+                    //stack: 'Total',
+                    label: {
+                        show: true,
+                        position: 'top'
+                    },
+                    areaStyle: {},
+                    lineStyle: { // 设置线条的style等
+                        normal: {
+                            color: '#23B89A', // 折线线条颜色:红色
+                        },
+                    },
+                    itemStyle: {
+                        normal: {
+                            //这里是颜色
+                            color: function (params) {
+
+                                //注意,如果颜色太少的话,后面颜色不会自动循环,最好多定义几个颜色
+                                var colorList = ['#23B89A'];
+                                return colorList[params.dataIndex]
+                            }
+                        }
+                    },
+                    emphasis: {
+                        focus: 'series'
+                    },
+                    data: data.series[1].data//[38, 23, 36, 45, 58, 59, 62]
+
+                }
+                ,
+                {
+
+                    name: '移库',
+                    type: 'line',
+                    //stack: 'Total',
+                    label: {
+                        show: true,
+                        position: 'top'
+                    },
+                    lineStyle: { // 设置线条的style等
+                        normal: {
+                            color: '#FF8541', // 折线线条颜色:红色
+                        },
+                    },
+                    areaStyle: {},
+                    itemStyle: {
+                        normal: {
+                            //这里是颜色
+                            color: function (params) {
+
+                                //注意,如果颜色太少的话,后面颜色不会自动循环,最好多定义几个颜色
+                                var colorList = ['#FF8541'];
+                                return colorList[params.dataIndex]
+                            }
+                        }
+                    },
+                    emphasis: {
+                        focus: 'series'
+                    },
+                    data: data.series[2].data//[8, 3, 6, 5, 8, 9, 6]
+
+                },
+
+                {
+
+                    name: '组盘',
+                    type: 'line',
+                    //stack: 'Total',
+                    label: {
+                        show: true,
+                        position: 'top'
+                    },
+                    lineStyle: { // 设置线条的style等
+                        normal: {
+                            color: '#9287e7', // 折线线条颜色:红色
+                        },
+                    },
+                    areaStyle: {},
+                    itemStyle: {
+                        normal: {
+                            //这里是颜色
+                            color: function (params) {
+
+                                //注意,如果颜色太少的话,后面颜色不会自动循环,最好多定义几个颜色
+                                var colorList = ['#9287e7'];
+                                return colorList[params.dataIndex]
+                            }
+                        }
+                    },
+                    emphasis: {
+                        focus: 'series'
+                    },
+                    data: data.series[3].data//[8, 3, 6, 5, 8, 9, 6]
+
+                },
+            ]
+        };
+
+
+        option && myChart.setOption(option);
+    }
+
+    function GetHourTask(data) {
+        var chartDom = document.getElementById(tabName + 'HourTask');
+        var myChart = echarts.init(chartDom, null, {
+            renderer: 'canvas',
+            useDirtyRect: false
+        });
+        var option;
+
+        option = {
+
+            tooltip: {
+                trigger: 'axis',
+                axisPointer: {
+                    type: 'cross',
+                    label: {
+                        backgroundColor: '#6a7985'
+                    }
+                }
+            },
+            legend: {
+                left: '57%',//调整位置
+                top: '30',
+                data: ['出库', '入库', '移库', '组盘']
+            },
+
+            grid: {
+                left: '3%',
+                right: '4%',
+                bottom: '1%',
+                containLabel: true
+            },
+            xAxis: [
+                {
+                    //type: 'category',
+                    boundaryGap: false,
+                    data: data.xAxis,//['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23']
+                }
+            ],
+            yAxis: [
+                {
+
+                    axisLabel: {
+                        formatter: '{value}'
+                    },
+                    axisLine: {
+                        show: true
+                    },
+                    type: 'value'
+                }
+            ],
+            series: [
+                {
+                    name: '出库',
+                    type: 'line',
+                    //stack: 'Total',
+                    label: {
+                        show: true,
+                        position: 'top'
+                    },
+                    lineStyle: { // 设置线条的style等
+                        normal: {
+                            color: '#40A0FF', // 折线线条颜色:红色
+                        },
+                    },
+                    itemStyle: {
+                        normal: {
+                            //这里是颜色
+                            color: function (params) {
+                                //注意,如果颜色太少的话,后面颜色不会自动循环,最好多定义几个颜色
+                                var colorList = ['#40A0FF'];
+                                return colorList[params.dataIndex]
+                            }
+                        }
+                    },
+                    areaStyle: {},
+                    emphasis: {
+                        focus: 'series'
+                    },
+                    data: data.series[0].data//[78, 93, 76, 55, 68, 89, 82]
+                },
+                {
+
+                    name: '入库',
+                    type: 'line',
+                    //stack: 'Total',
+                    label: {
+                        show: true,
+                        position: 'top'
+                    },
+                    areaStyle: {},
+                    lineStyle: { // 设置线条的style等
+                        normal: {
+                            color: '#23B89A', // 折线线条颜色:红色
+                        },
+                    },
+                    itemStyle: {
+                        normal: {
+                            //这里是颜色
+                            color: function (params) {
+
+                                //注意,如果颜色太少的话,后面颜色不会自动循环,最好多定义几个颜色
+                                var colorList = ['#23B89A'];
+                                return colorList[params.dataIndex]
+                            }
+                        }
+                    },
+                    emphasis: {
+                        focus: 'series'
+                    },
+                    data: data.series[1].data//[38, 23, 36, 45, 58, 59, 62]
+
+                }
+                ,
+                {
+
+                    name: '移库',
+                    type: 'line',
+                    //stack: 'Total',
+                    label: {
+                        show: true,
+                        position: 'top'
+                    },
+                    lineStyle: { // 设置线条的style等
+                        normal: {
+                            color: '#FF8541', // 折线线条颜色:红色
+                        },
+                    },
+                    areaStyle: {},
+                    itemStyle: {
+                        normal: {
+                            //这里是颜色
+                            color: function (params) {
+
+                                //注意,如果颜色太少的话,后面颜色不会自动循环,最好多定义几个颜色
+                                var colorList = ['#FF8541'];
+                                return colorList[params.dataIndex]
+                            }
+                        }
+                    },
+                    emphasis: {
+                        focus: 'series'
+                    },
+                    data: data.series[2].data//[8, 3, 6, 5, 8, 9, 6]
+
+                },
+
+                {
+
+                    name: '组盘',
+                    type: 'line',
+                    //stack: 'Total',
+                    label: {
+                        show: true,
+                        position: 'top'
+                    },
+                    lineStyle: { // 设置线条的style等
+                        normal: {
+                            color: '#9287e7', // 折线线条颜色:红色
+                        },
+                    },
+                    areaStyle: {},
+                    itemStyle: {
+                        normal: {
+                            //这里是颜色
+                            color: function (params) {
+
+                                //注意,如果颜色太少的话,后面颜色不会自动循环,最好多定义几个颜色
+                                var colorList = ['#9287e7'];
+                                return colorList[params.dataIndex]
+                            }
+                        }
+                    },
+                    emphasis: {
+                        focus: 'series'
+                    },
+                    data: data.series[3].data//[8, 3, 6, 5, 8, 9, 6]
+
+                },
+            ]
+        };
+
+
+        option && myChart.setOption(option);
+    }
+    function GetTaskGoodsTypesData(data) {
+        var dom = document.getElementById(tabName + 'BomType');
+        var myChart = echarts.init(dom, null, {
+            renderer: 'canvas',
+            useDirtyRect: false
+        });
+        var option;
+        option = {
+            tooltip: {
+                trigger: 'item',
+                position: ['20%', '50%']
+            },
+
+            legend: {
+                data: data.map(item => item.name),
+                orient: 'vertical',
+                top: "15",
+                //right: '-80%',
+                textStyle: { color: "#000000" },//字体颜色
+                //icon: "circle"//图例形状设置
+                //orient: 'vertical',
+                //right: 'right'
+                left: '66%',//调整位置
+                tooltip: {
+                    show: true,
+                    trigger: 'item',//鼠标移动上去展示全称
+                },
+                formatter: function (params) {
+                    var val = "";
+                    if (!!params && params.length > 6) {
+                        val = params.substr(0, 12) + '...';
+                        return val;
+                    } else {
+                        return params;
+                    }
+                },
+            },
+            series: [
+                {
+
+                    name: '物料占比',
+                    type: 'pie',
+                    radius: ['30%', '60%'],
+                    avoidLabelOverlap: false,
+
+                    itemStyle: {
+                        normal: {
+                            label: {
+                                show: false
+                            },
+                            labelLine: {
+                                show: false
+                            },
+                            color: function (colors) {
+                                var colorList = [
+                                    '#12D8E4',
+                                    '#75B1FF',
+                                    '#3383FF',
+                                    '#FFCD7E',
+                                    '#FF8A8A',
+                                    '#23B89A',
+                                    '#F4BD37',
+                                    '#D8E7FC',
+                                    '#E46989',
+                                ];
+                                return colorList[colors.dataIndex];
+                            }
+                        }
+                    },
+                    label: {
+                        show: false,
+                        position: 'center'
+                    },
+                    emphasis: {
+                        label: {
+                            show: true,
+                            fontSize: 40,
+                            fontWeight: 'bold'
+                        }
+                    },
+                    labelLine: {
+                        show: false
+                    },
+                    data: data
+                    // [
+                    // { value: 1048, name: '出库任务' },
+                    // { value: 735, name: '入库任务' },
+                    // { value: 580, name: '移库任务' }
+                    //]
+                }
+            ]
+        };
+
+        if (option && typeof option === 'object') {
+            myChart.setOption(option);
+        }
+
+        window.addEventListener('resize', myChart.resize);
+
+    }
+
+
+    function init() {
+        GetTodayTaskInOutPie(1);
+        top.learun.httpAsyncGet(top.$.rootUrl + '/' + Tenant + '/AdminDesktopHome/Get7daysTaskBar?warehouse=' + tabName, function (res) {
+            if (res.code > 0) {
+                Get7daysTaskBar(res.data);
+            }
+        });
+        top.learun.httpAsyncGet(top.$.rootUrl + '/' + Tenant + '/AdminDesktopHome/GettodaysHourTask?warehouse=' + tabName, function (res) {
+            if (res.code > 0) {
+                GettodaysHourTask(res.data);
+            }
+        });
+        top.learun.httpAsyncGet(top.$.rootUrl + '/' + Tenant + '/AdminDesktopHome/GetHourTask?warehouse=' + tabName, function (res) {
+            if (res.code > 0) {
+                GetHourTask(res.data);
+            }
+        });
+        top.learun.httpAsyncGet(top.$.rootUrl + '/' + Tenant + '/Report/GetLocationUsageReportList?queryJson=%7B%7D', function (res) {
+            if (res.code > 0) {
+                var datas = [];
+                var WarehouseCellPie = [];
+                let MaterilLocation = 0, SpareLocation = 0, StopLocation = 0, LockLocation = 0;
+                for (var i = 0; i < res.data.length; i++) {
+                    if (tabName == "fj1") {
+                        if (res.data[i].Tunnel == '1') {
+                            datas.push({ tunnel: "一巷道", qty: res.data[i].MaterilLocation, total: res.data[i].AllLocationTotal });
+                            MaterilLocation += res.data[i].MaterilLocation;
+                            SpareLocation += res.data[i].SpareLocation;
+                            StopLocation += res.data[i].StopLocation;
+                            LockLocation += res.data[i].LockLocation;
+                        } else if (res.data[i].Tunnel == '2') {
+                            datas.push({ tunnel: "二巷道", qty: res.data[i].MaterilLocation, total: res.data[i].AllLocationTotal });
+                            MaterilLocation += res.data[i].MaterilLocation;
+                            SpareLocation += res.data[i].SpareLocation;
+                            StopLocation += res.data[i].StopLocation;
+                            LockLocation += res.data[i].LockLocation;
+                        }
+
+                    }
+                    else if (tabName == "fj2") {
+                        if (res.data[i].Tunnel == '3') {
+                            datas.push({ tunnel: "三巷道", qty: res.data[i].MaterilLocation, total: res.data[i].AllLocationTotal });
+                            MaterilLocation += res.data[i].MaterilLocation;
+                            SpareLocation += res.data[i].SpareLocation;
+                            StopLocation += res.data[i].StopLocation;
+                            LockLocation += res.data[i].LockLocation;
+                        } else if (res.data[i].Tunnel == '4') {
+                            datas.push({ tunnel: "四巷道", qty: res.data[i].MaterilLocation, total: res.data[i].AllLocationTotal });
+                            MaterilLocation += res.data[i].MaterilLocation;
+                            SpareLocation += res.data[i].SpareLocation;
+                            StopLocation += res.data[i].StopLocation;
+                            LockLocation += res.data[i].LockLocation;
+                        }
+                    }
+                    else if (tabName == "fj3") {
+                        if (res.data[i].Tunnel == '5') {
+                            datas.push({ tunnel: "五巷道", qty: res.data[i].MaterilLocation, total: res.data[i].AllLocationTotal });
+                            MaterilLocation += res.data[i].MaterilLocation;
+                            SpareLocation += res.data[i].SpareLocation;
+                            StopLocation += res.data[i].StopLocation;
+                            LockLocation += res.data[i].LockLocation;
+                        } else if (res.data[i].Tunnel == '6') {
+                            datas.push({ tunnel: "六巷道", qty: res.data[i].MaterilLocation, total: res.data[i].AllLocationTotal });
+                            MaterilLocation += res.data[i].MaterilLocation;
+                            SpareLocation += res.data[i].SpareLocation;
+                            StopLocation += res.data[i].StopLocation;
+                            LockLocation += res.data[i].LockLocation;
+                        }
+                    }
+                    else if (tabName == "fjall") {
+                        if (res.data[i].Tunnel == '1') {
+                            datas.push({ tunnel: "一巷道", qty: res.data[i].MaterilLocation, total: res.data[i].AllLocationTotal });
+                            MaterilLocation += res.data[i].MaterilLocation;
+                            SpareLocation += res.data[i].SpareLocation;
+                            StopLocation += res.data[i].StopLocation;
+                            LockLocation += res.data[i].LockLocation;
+                        } else if (res.data[i].Tunnel == '2') {
+                            datas.push({ tunnel: "二巷道", qty: res.data[i].MaterilLocation, total: res.data[i].AllLocationTotal });
+                            MaterilLocation += res.data[i].MaterilLocation;
+                            SpareLocation += res.data[i].SpareLocation;
+                            StopLocation += res.data[i].StopLocation;
+                            LockLocation += res.data[i].LockLocation;
+                        }
+                        else if (res.data[i].Tunnel == '3') {
+                            datas.push({ tunnel: "三巷道", qty: res.data[i].MaterilLocation, total: res.data[i].AllLocationTotal });
+                            MaterilLocation += res.data[i].MaterilLocation;
+                            SpareLocation += res.data[i].SpareLocation;
+                            StopLocation += res.data[i].StopLocation;
+                            LockLocation += res.data[i].LockLocation;
+                        } else if (res.data[i].Tunnel == '4') {
+                            datas.push({ tunnel: "四巷道", qty: res.data[i].MaterilLocation, total: res.data[i].AllLocationTotal });
+                            MaterilLocation += res.data[i].MaterilLocation;
+                            SpareLocation += res.data[i].SpareLocation;
+                            StopLocation += res.data[i].StopLocation;
+                            LockLocation += res.data[i].LockLocation;
+                        }
+                        else if (res.data[i].Tunnel == '5') {
+                            datas.push({ tunnel: "五巷道", qty: res.data[i].MaterilLocation, total: res.data[i].AllLocationTotal });
+                            MaterilLocation += res.data[i].MaterilLocation;
+                            SpareLocation += res.data[i].SpareLocation;
+                            StopLocation += res.data[i].StopLocation;
+                            LockLocation += res.data[i].LockLocation;
+                        } else if (res.data[i].Tunnel == '6') {
+                            datas.push({ tunnel: "六巷道", qty: res.data[i].MaterilLocation, total: res.data[i].AllLocationTotal });
+                            MaterilLocation += res.data[i].MaterilLocation;
+                            SpareLocation += res.data[i].SpareLocation;
+                            StopLocation += res.data[i].StopLocation;
+                            LockLocation += res.data[i].LockLocation;
+                        }
+
+                    }
+
+                }
+                //var data = [{ "qty": 16, "total": 1732 }, { "qty": 787, "total": 1732 }, { "qty": 841, "total": 1700 }];
+                GetTunnelWarehouseCellBar(datas);
+
+                WarehouseCellPie.push({ value: MaterilLocation, name: '已使用' });
+                WarehouseCellPie.push({ value: SpareLocation, name: '空闲' });
+                WarehouseCellPie.push({ value: StopLocation, name: '禁用' });
+                WarehouseCellPie.push({ value: LockLocation, name: '锁定' });
+
+                GetWarehouseCellPie(WarehouseCellPie);
+            }
+        });
+        GetTaskGoodsTypes(1);
+    }
+    function GetTodayTaskInOutPie(data) {
+        top.learun.httpAsyncGet(top.$.rootUrl + '/' + Tenant + '/AdminDesktopHome/GetTodayTaskInOutPie?bctime=' + data + '&warehouse=' + tabName, function (res) {
+            if (res.code > 0) {
+                var datas = [];
+                for (var i = 0; i < res.data.tasks.length; i++) {
+                    if (res.data.tasks[i].name == '出库') {
+                        $("#" + tabName + "outtoday").text(res.data.tasks[i].value);
+                        datas.push({ value: res.data.tasks[i].value, name: "出库" });
+                    }
+                    else if (res.data.tasks[i].name == '入库') {
+                        $("#" + tabName + "intoday").text(res.data.tasks[i].value);
+                        datas.push({ value: res.data.tasks[i].value, name: "入库" });
+                    }
+                    else if (res.data.tasks[i].name == '移库') {
+                        $("#" + tabName + "movetoday").text(res.data.tasks[i].value);
+                        datas.push({ value: res.data.tasks[i].value, name: "移库" });
+                    }
+                    else if (res.data.tasks[i].name == '组盘') {
+                        $("#" + tabName + "SetPlate").text(res.data.tasks[i].value);
+                        datas.push({ value: res.data.tasks[i].value, name: "组盘" });
+                    }
+                }
+
+                GetTodayInOutPie({ total: res.data.total, datas: datas });
+            }
+        });
+
+    }
+    function GetTaskGoodsTypes(data) {
+        top.learun.httpAsyncGet(top.$.rootUrl + '/' + Tenant + '/AdminDesktopHome/GetTaskGoodsTypes?warehouse=' + tabName + '&bctime=' + data, function (res) {
+            if (res.code > 0) {
+                GetTaskGoodsTypesData(res.data);
+            }
+        });
+       
+    }
+    function GetDailyStatistics(data, begin, end) {
+        let url = '';
+        if (data) {
+            url = top.$.rootUrl + '/' + Tenant + '/AdminDesktopHome/GetDailyStatistics?bctime=' + data + '&begintime=' + begin + '&endtime=' + end;
+        }
+        else {
+            url = top.$.rootUrl + '/' + Tenant + '/AdminDesktopHome/GetDailyStatistics?begintime=' + begin + '&endtime=' + end;
+        }
+
+        top.learun.httpAsyncGet(url, function (res) {
+            $("#btn_Search").removeAttr('disabled'); 
+            if (res.code > 0) {
+                //
+                var orderhtml = "";
+                var orderres = eval(res.data.rows);
+                $.each(orderres, function (index, orderres) {
+                    orderhtml += "<div style='position:relative;width:100%;'>";
+                    orderhtml += "<label class='portal-panel-content-lable'>" + orderres.WarehouseName + "</label>";
+                    orderhtml += "<label class='portal-panel-content-lable'>" + orderres.TrussNorthQty + "</label>";
+                    orderhtml += "<label class='portal-panel-content-lable'>" + orderres.TrussSouthQty + "</label>";
+                    orderhtml += "<label class='portal-panel-content-lable'>" + orderres.CircularSouthQty + "</label>";
+
+                    orderhtml += "<label class='portal-panel-content-lable'>" + orderres.CircularNorthQty + "</label>";
+                    orderhtml += "<label class='portal-panel-content-lable'>" + orderres.DailySummary + "</label>";
+                    orderhtml += "<label class='portal-panel-content-lable'>" + orderres.FullNormalQty + "</label>";
+                    orderhtml += "<label class='portal-panel-content-lable'>" + orderres.EmptyAbnormalQty + "</label>";
+                    orderhtml += "<label class='portal-panel-content-lable'>" + orderres.EmptyAutomaticQty + "</label>";
+                    orderhtml += "<label class='portal-panel-content-lable'>" + orderres.EmptyWarehouseQty + "</label>";
+
+
+                    orderhtml += "</div>";
+                });
+                $("#dailylst").html(orderhtml);
+            }
+        });
+    }
+    function bind() {
+
+        $('#dailybegin').val(YStartDate);
+        $('#dailyend').val(YEndDate);
+
+        $('.' + tabName + 'todaytask').on('click', function () {
+            let bctime = $(this).attr("bctime");
+            for (var i = 0; i < $("." + tabName + "todaytask").length; i++) {
+                $($("." + tabName + "todaytask")[i]).removeClass("btn-primary");
+                $($("." + tabName + "todaytask")[i]).addClass("btn-default");
+            }
+            $(this).removeClass("btn-default");
+            $(this).addClass("btn-primary");
+            GetTodayTaskInOutPie(bctime);
+        });
+        $('.' + tabName + 'todaytype').on('click', function () {
+            let bctime = $(this).attr("bctime");
+            for (var i = 0; i < $("." + tabName + "todaytype").length; i++) {
+                $($("." + tabName + "todaytype")[i]).removeClass("btn-primary");
+                $($("." + tabName + "todaytype")[i]).addClass("btn-default");
+            }
+            $(this).removeClass("btn-default");
+            $(this).addClass("btn-primary");
+            GetTaskGoodsTypes(bctime);
+        });
+        $('.fjdailytime').on('click', function () {
+            let bctime = $(this).attr("bctime");
+            for (var i = 0; i < $(".fjdailytime").length; i++) {
+                $($(".fjdailytime")[i]).removeClass("btn-primary");
+                $($(".fjdailytime")[i]).addClass("btn-default");
+            }
+            $(this).removeClass("btn-default");
+            $(this).addClass("btn-primary");
+            GetDailyStatistics(bctime, '', '');
+        });
+
+        //$('#lr_left_list a').click(function (e) {
+
+        //    $(this).tab('show');
+        //})
+        $('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
+            // 获取已激活的标签页的名称
+            //tabName = $(e.target).text();
+            var seltab = $(e.target).attr("tabvalue");
+            tabName = "fj" + seltab;
+            if (seltab == 'daily') {
+                $('.' + tabName + 'time' + ':first')[0].click();
+                return;
+            }
+         
+            $('.' + tabName + 'todaytask').on('click', function () {
+                let bctime = $(this).attr("bctime");
+                for (var i = 0; i < $("." + tabName + "todaytask").length; i++) {
+                    $($("." + tabName + "todaytask")[i]).removeClass("btn-primary");
+                    $($("." + tabName + "todaytask")[i]).addClass("btn-default");
+                }
+                $(this).removeClass("btn-default");
+                $(this).addClass("btn-primary");
+                GetTodayTaskInOutPie(bctime);
+            });
+            $('.' + tabName + 'todaytype').on('click', function () {
+                let bctime = $(this).attr("bctime");
+                for (var i = 0; i < $("." + tabName + "todaytype").length; i++) {
+                    $($("." + tabName + "todaytype")[i]).removeClass("btn-primary");
+                    $($("." + tabName + "todaytype")[i]).addClass("btn-default");
+                }
+                $(this).removeClass("btn-default");
+                $(this).addClass("btn-primary");
+                GetTaskGoodsTypes(bctime);
+            });
+            init();
+            $('.' + tabName + 'todaytask' + ':first')[0].click();
+            $('.' + tabName + 'todaytype' + ':first')[0].click();
+        
+        });
+        // 查询
+        $('#btn_Search').on('click', function () {
+            var begin = $('#dailybegin').val();
+            var end = $('#dailyend').val();
+            if (begin.length <=0) {              
+                alert('时间输入不能为空!');
+                return;
+            }
+            if (end.length <= 0) {
+                alert('时间输入不能为空!');
+                return;
+            }
+            $("#btn_Search").attr('disabled',true); 
+            GetDailyStatistics(null, begin, end);
+
+            //top.learun.httpAsyncGet(top.$.rootUrl + '/' + Tenant + '/AdminDesktopHome/GetDailyStatistics?begintime=' + begin + '&endtime=' + begin, function (res) {
+            //    if (res.code > 0) {
+            //        //
+            //        var orderhtml = "";
+            //        var orderres = eval(res.data.rows);
+            //        $.each(orderres, function (index, orderres) {
+            //            orderhtml += "<div style='position:relative;width:100%;'>";
+            //            orderhtml += "<label class='portal-panel-content-lable'>" + orderres.WarehouseName + "</label>";
+            //            orderhtml += "<label class='portal-panel-content-lable'>" + orderres.TrussNorthQty + "</label>";
+            //            orderhtml += "<label class='portal-panel-content-lable'>" + orderres.TrussSouthQty + "</label>";
+            //            orderhtml += "<label class='portal-panel-content-lable'>" + orderres.CircularSouthQty + "</label>";
+
+            //            orderhtml += "<label class='portal-panel-content-lable'>" + orderres.CircularNorthQty + "</label>";
+            //            orderhtml += "<label class='portal-panel-content-lable'>" + orderres.DailySummary + "</label>";
+            //            orderhtml += "<label class='portal-panel-content-lable'>" + orderres.FullNormalQty + "</label>";
+            //            orderhtml += "<label class='portal-panel-content-lable'>" + orderres.EmptyAbnormalQty + "</label>";
+            //            orderhtml += "<label class='portal-panel-content-lable'>" + orderres.EmptyAutomaticQty + "</label>";
+            //            orderhtml += "<label class='portal-panel-content-lable'>" + orderres.EmptyWarehouseQty + "</label>";
+                    
+
+            //            orderhtml += "</div>";
+            //        });
+            //        $("#dailylst").html(orderhtml);
+            //    }
+            //});
+
+        });
+    }
+    bind();
+    init();
+});
+
+
+

+ 28 - 0
WMS.BZWeb/WMS.BZWeb.csproj

@@ -140,6 +140,14 @@
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
       <CopyToPublishDirectory>Always</CopyToPublishDirectory>
     </Content>
+    <Content Include="Areas\KLHCManager\Views\BaseRBCI\Form.js">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+      <CopyToPublishDirectory>Always</CopyToPublishDirectory>
+    </Content>
+    <Content Include="Areas\KLHCManager\Views\BaseRBCI\Index.js">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+      <CopyToPublishDirectory>Always</CopyToPublishDirectory>
+    </Content>
     <Content Include="Areas\KLHCManager\Views\LogHub\Index.js">
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
       <CopyToPublishDirectory>Always</CopyToPublishDirectory>
@@ -166,6 +174,14 @@
     <Content Include="Areas\SXManager\Views\Statisticsreport\CurStockInfoControlIndex.js" />
     <Content Include="Areas\SXManager\Views\Statisticsreport\CurStockInfoIndex.js" />
     <Content Include="Areas\SXManager\Views\SysCon\PalletizingStationIndex.js" />
+    <Content Include="Views\Home\KLHCManager\KLHCManager.css">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+      <CopyToPublishDirectory>Always</CopyToPublishDirectory>
+    </Content>
+    <Content Include="Views\Home\KLHCManager\KLHCManager.js">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+      <CopyToPublishDirectory>Always</CopyToPublishDirectory>
+    </Content>
   </ItemGroup>
 	
   <ItemGroup>
@@ -197,10 +213,18 @@
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
       <CopyToPublishDirectory>Always</CopyToPublishDirectory>
     </Content>
+    <Content Update="Areas\KLHCManager\Views\BaseRBCI\Form.cshtml">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+      <CopyToPublishDirectory>Always</CopyToPublishDirectory>
+    </Content>
     <Content Update="Areas\KLHCManager\Views\LogHub\Index.cshtml">
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
       <CopyToPublishDirectory>Always</CopyToPublishDirectory>
     </Content>
+    <Content Update="Areas\KLHCManager\Views\BaseRBCI\Index.cshtml">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+      <CopyToPublishDirectory>Always</CopyToPublishDirectory>
+    </Content>
     <Content Update="Areas\PTManager\Views\DeviceEffectives\IndexList.cshtml">
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
       <CopyToPublishDirectory>Always</CopyToPublishDirectory>
@@ -213,6 +237,10 @@
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
       <CopyToPublishDirectory>Always</CopyToPublishDirectory>
     </Content>
+    <Content Update="Views\Home\KLHCManager.cshtml">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+      <CopyToPublishDirectory>Always</CopyToPublishDirectory>
+    </Content>
   </ItemGroup>
 	
   <ItemGroup>