409 lines
		
	
	
		
			19 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			409 lines
		
	
	
		
			19 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
@page "/"
 | 
						|
@using MasaBlazorApp3.Util
 | 
						|
@using log4net
 | 
						|
@layout EmptyLayout
 | 
						|
 | 
						|
<style>
 | 
						|
    .home-menu {
 | 
						|
        transition: box-shadow 0.3s ease; /* 平滑过渡阴影效果 */
 | 
						|
        cursor: pointer;
 | 
						|
        position: relative;
 | 
						|
        z-index: 1;
 | 
						|
        box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.7);
 | 
						|
    }
 | 
						|
 | 
						|
        .home-menu > h2 {
 | 
						|
            font-weight: bold;
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        .home-menu:hover {
 | 
						|
            box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.7); /* 阴影效果 */
 | 
						|
        }
 | 
						|
 | 
						|
    .mask {
 | 
						|
        position: absolute;
 | 
						|
        top: 0;
 | 
						|
        left: 0;
 | 
						|
        width: 100%;
 | 
						|
        height: 100%;
 | 
						|
        background-color: black;
 | 
						|
        opacity: 0.6;
 | 
						|
        z-index: 2;
 | 
						|
        cursor: not-allowed;
 | 
						|
    }
 | 
						|
 | 
						|
    .rz-gauge .rz-tick-text {
 | 
						|
        fill: #ffffff !important;
 | 
						|
    }
 | 
						|
</style>
 | 
						|
<RadzenStack Orientation="Orientation.Vertical" class="rz-background-color-primary-light" AlignItems="AlignItems.Center" Style="width:100vw;height:100vh" Gap="0">
 | 
						|
 | 
						|
    <RadzenRow Style="width:100vw;height:25vh;" Gap="0" RowGap="0">
 | 
						|
        <RadzenColumn Size="4">
 | 
						|
 | 
						|
        </RadzenColumn>
 | 
						|
        <RadzenColumn Size="8">
 | 
						|
            <RadzenRow Style="height: 100%;width:100%" Orientation="Orientation.Horizontal" JustifyContent="JustifyContent.End" AlignItems="AlignItems.Center">
 | 
						|
                <RadzenColumn Size="6">
 | 
						|
                    @if (globalStateService.Operator != null)
 | 
						|
                    {
 | 
						|
                        //<RadzenText Style="" class="rz-color-white" TextStyle="TextStyle.H5" TextAlign="TextAlign.Center">操作人:@globalStateService.Operator.NickName</RadzenText>
 | 
						|
                        //<RadzenText onclick="@(() => { EditPassword(1); })" Style="" class="rz-color-white" TextStyle="TextStyle.H5" TextAlign="TextAlign.Center">操作人:@globalStateService.Operator.NickName</RadzenText>
 | 
						|
 | 
						|
                        <RadzenProfileMenu prefix="" Click="MenuClick" Style="background-color:transparent;z-index:99">
 | 
						|
                            <Template>
 | 
						|
                                <RadzenText Style="" class="rz-color-white" TextStyle="TextStyle.H5" TextAlign="TextAlign.Center">操作人:@globalStateService.Operator.NickName</RadzenText>
 | 
						|
                            </Template>
 | 
						|
                            <ChildContent>
 | 
						|
                                <RadzenProfileMenuItem Text="录入指纹" Value="11" Icon="fingerprint"></RadzenProfileMenuItem>
 | 
						|
                                <RadzenProfileMenuItem Text="录入签名" Value="21" Icon="line_weight"></RadzenProfileMenuItem>
 | 
						|
                                <RadzenProfileMenuItem Text="修改密码" Value="31" Icon="password"></RadzenProfileMenuItem>
 | 
						|
                            </ChildContent>
 | 
						|
                        </RadzenProfileMenu>
 | 
						|
                    }
 | 
						|
                    @if (globalStateService.Reviewer != null)
 | 
						|
                    {
 | 
						|
                        //<RadzenText Style="" class="rz-color-white" TextStyle="TextStyle.H5" TextAlign="TextAlign.Center">复核人:@globalStateService.Reviewer.NickName</RadzenText>
 | 
						|
                        //<RadzenText onclick="@(() => { EditPassword(2); })" Style="" class="rz-color-white" TextStyle="TextStyle.H5" TextAlign="TextAlign.Center">复核人:@globalStateService.Reviewer.NickName</RadzenText>
 | 
						|
                        <RadzenProfileMenu prefix="" Click="MenuClick" Style="background-color:transparent">
 | 
						|
                            <Template>
 | 
						|
                                <RadzenText Style="" class="rz-color-white" TextStyle="TextStyle.H5" TextAlign="TextAlign.Center">复核人:@globalStateService.Reviewer.NickName</RadzenText>
 | 
						|
                            </Template>
 | 
						|
                            <ChildContent>
 | 
						|
                                <RadzenProfileMenuItem Text="录入指纹" Value="12" Icon="fingerprint"></RadzenProfileMenuItem>
 | 
						|
                                <RadzenProfileMenuItem Text="录入签名" Value="22" Icon="line_weight"></RadzenProfileMenuItem>
 | 
						|
                                <RadzenProfileMenuItem Text="修改密码" Value="32" Icon="password"></RadzenProfileMenuItem>
 | 
						|
                            </ChildContent>
 | 
						|
                        </RadzenProfileMenu>
 | 
						|
                    }
 | 
						|
                </RadzenColumn>
 | 
						|
                <RadzenColumn Size="3">
 | 
						|
                    <div @onclick="@(() => { changeShifts(); })">
 | 
						|
                        <RadzenIcon Icon="compare_arrows" Style="font-size:3rem;cursor: pointer;" class="rz-ripple" IconColor="white" />
 | 
						|
                        <div>交接班</div>
 | 
						|
                    </div>
 | 
						|
                    <div style="clear:both"></div>
 | 
						|
                </RadzenColumn>
 | 
						|
                <RadzenColumn Size="2">
 | 
						|
                    <RadzenIcon Icon="exit_to_app" Style="font-size:3rem;cursor: pointer;margin-left:-60px" class="rz-ripple" IconColor="white" @onclick="@(() => { logout(); })" />
 | 
						|
                </RadzenColumn>
 | 
						|
            </RadzenRow>
 | 
						|
        </RadzenColumn>
 | 
						|
    </RadzenRow>
 | 
						|
    <RadzenStack class="rz-background-color-info-lighter" Orientation="Orientation.Horizontal" JustifyContent="JustifyContent.Center" AlignItems="AlignItems.Center" Style="width: 75vw;height: 57vh" Gap="20">
 | 
						|
 | 
						|
        <RadzenStack Style="height: 100%;width:41%" Gap="20">
 | 
						|
            <RadzenStack class="home-menu rz-background-color-info-lighter rz-ripple" JustifyContent="JustifyContent.Center" Style="height: 50%" @onclick="@(() => jump2Page(1))">
 | 
						|
                <RadzenText Style="" class="rz-color-white" TextStyle="TextStyle.H2" TextAlign="TextAlign.Center">出库</RadzenText>
 | 
						|
                @if (globalStateService.Operator != null)
 | 
						|
                {
 | 
						|
                    @if (!globalStateService.Operator.role.permissionIds.Any(id => id - 10 < 10))
 | 
						|
                    {
 | 
						|
                        <div class="mask">
 | 
						|
                            <RadzenImage Path="images/no_auth.png" />
 | 
						|
                        </div>
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            </RadzenStack>
 | 
						|
            <RadzenStack Orientation="Orientation.Horizontal" Style="height: 50%;width:100%">
 | 
						|
                <RadzenStack class="home-menu rz-background-color-success-light rz-text-white rz-ripple" JustifyContent="JustifyContent.Center" @onclick="@(() => jump2Page(2))" Style="height: 100%;width:50%">
 | 
						|
                    <RadzenText class="rz-color-white" TextStyle="TextStyle.H2" TextAlign="TextAlign.Center">入库</RadzenText>
 | 
						|
                    @if (globalStateService.Operator != null)
 | 
						|
                    {
 | 
						|
                        @if (!globalStateService.Operator.role.permissionIds.Any(id => id - 20 > 0 && id - 20 < 10))
 | 
						|
                        {
 | 
						|
                            <div class="mask">
 | 
						|
                                <RadzenImage Path="images/no_auth.png" />
 | 
						|
                            </div>
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                </RadzenStack>
 | 
						|
                <RadzenStack class="home-menu rz-background-color-danger-lighter rz-text-white rz-ripple" JustifyContent="JustifyContent.Center" @onclick="@(() => jump2Page(6))" Style="height: 100%;width:50%">
 | 
						|
                    <RadzenText class="rz-color-white" Style="margin-top:10px;margin-bottom:-10px" TextStyle="TextStyle.H2" TextAlign="TextAlign.Center">药盒</RadzenText>
 | 
						|
                    <RadzenText class="rz-color-white" Style="margin-top:-10px;margin-bottom:10px" TextStyle="TextStyle.H2" TextAlign="TextAlign.Center">管理</RadzenText>
 | 
						|
                    @if (globalStateService.Operator != null)
 | 
						|
                    {
 | 
						|
                        @if (!globalStateService.Operator.role.permissionIds.Any(id => id - 60 > 0 && id - 60 < 10))
 | 
						|
                        {
 | 
						|
                            <div class="mask">
 | 
						|
                                <RadzenImage Path="images/no_auth.png" />
 | 
						|
                            </div>
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                </RadzenStack>
 | 
						|
            </RadzenStack>
 | 
						|
        </RadzenStack>
 | 
						|
        <RadzenStack Style="height: 100%;width:59%" Gap="20">
 | 
						|
            <RadzenStack class="home-menu rz-background-color-series-2 rz-text-white rz-ripple" JustifyContent="JustifyContent.Center" @onclick="@(() => jump2Page(3))" Style="height: 43%;width:100%">
 | 
						|
                <RadzenText class="rz-color-white" TextStyle="TextStyle.H2" TextAlign="TextAlign.Center">归还</RadzenText>
 | 
						|
                @if (globalStateService.Operator != null)
 | 
						|
                {
 | 
						|
                    @if (!globalStateService.Operator.role.permissionIds.Any(id => id - 30 > 0 && id - 30 < 10))
 | 
						|
                    {
 | 
						|
                        <div class="mask">
 | 
						|
                            <RadzenImage Path="images/no_auth.png" />
 | 
						|
                        </div>
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            </RadzenStack>
 | 
						|
            <RadzenStack Orientation="Orientation.Horizontal" Style="height: 57%;width:100%">
 | 
						|
                <RadzenStack class="home-menu rz-background-color-primary rz-text-white rz-ripple" JustifyContent="JustifyContent.Center" @onclick="@(() => jump2Page(4))" Style="height: 100%;width:50%">
 | 
						|
                    <RadzenText class="rz-color-white" TextStyle="TextStyle.H2" TextAlign="TextAlign.Center">库存管理</RadzenText>
 | 
						|
                    @if (globalStateService.Operator != null)
 | 
						|
                    {
 | 
						|
                        @if (!globalStateService.Operator.role.permissionIds.Any(id => id - 40 > 0 && id - 40 < 10))
 | 
						|
                        {
 | 
						|
                            <div class="mask">
 | 
						|
                                <RadzenImage Path="images/no_auth.png" />
 | 
						|
                            </div>
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                </RadzenStack>
 | 
						|
                <RadzenStack class="home-menu rz-background-color-success-lighter rz-text-white rz-ripple" JustifyContent="JustifyContent.Center" @onclick="@(() => jump2Page(5))" Style="height: 100%;width:50%">
 | 
						|
                    <RadzenText class="rz-color-white" TextStyle="TextStyle.H2" TextAlign="TextAlign.Center">系统管理</RadzenText>
 | 
						|
                    @if (globalStateService.Operator != null)
 | 
						|
                    {
 | 
						|
                        @if (!globalStateService.Operator.role.permissionIds.Any(id => id - 50 > 0 && id - 50 < 10))
 | 
						|
                        {
 | 
						|
                            <div class="mask">
 | 
						|
                                <RadzenImage Path="images/no_auth.png" />
 | 
						|
                            </div>
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                </RadzenStack>
 | 
						|
 | 
						|
            </RadzenStack>
 | 
						|
        </RadzenStack>
 | 
						|
    </RadzenStack>
 | 
						|
</RadzenStack>
 | 
						|
 | 
						|
 | 
						|
@code {
 | 
						|
    @inject Radzen.DialogService dialogService;
 | 
						|
    @inject NotificationService _message
 | 
						|
    @inject NavigationManager na;
 | 
						|
    @inject TooltipService tooltipService
 | 
						|
    private List<Premission> userPremissions { get; set; } = new();
 | 
						|
    @inject GlobalStateService globalStateService;
 | 
						|
 | 
						|
    Timer timer;
 | 
						|
    @inject PortUtil _portUtil;
 | 
						|
    private readonly ILog logger = LogManager.GetLogger(typeof(Home));
 | 
						|
    @inject Microsoft.Extensions.Options.IOptions<Pojo.Config.SettingConfig> setting;
 | 
						|
    bool currentPage = true;
 | 
						|
 | 
						|
    protected override void OnInitialized()
 | 
						|
    {
 | 
						|
        // timer = new Timer(state =>
 | 
						|
        // {
 | 
						|
        //     var now = DateTime.Now;
 | 
						|
 | 
						|
 | 
						|
        //     InvokeAsync(StateHasChanged);
 | 
						|
        // }, null, 0, 1000);
 | 
						|
        if (setting.Value.autoOutLog > 0)
 | 
						|
        {
 | 
						|
            // 是否需要自动退出
 | 
						|
            var promiseUtil = new PromiseUtil<object>();
 | 
						|
            promiseUtil.taskAsyncLoop(500, null, async (data, next, stop) =>
 | 
						|
           {
 | 
						|
               if (globalStateService.Operator == null || !currentPage)
 | 
						|
               {
 | 
						|
                   logger.Info($"Home页自动退出循环停止{globalStateService.Operator == null},{!currentPage}");
 | 
						|
                   stop();
 | 
						|
               }
 | 
						|
               else
 | 
						|
               {
 | 
						|
                   try
 | 
						|
                   {
 | 
						|
                       //没有在操作抽屉
 | 
						|
                       if (!_portUtil.Operate)
 | 
						|
                       {
 | 
						|
                           // 无人操作鼠标键盘
 | 
						|
                           if ((DateTime.Now - _portUtil.dateTime).TotalSeconds > setting.Value.autoOutLog && CheckComputerFreeState.GetLastInputTime() > setting.Value.autoOutLog)
 | 
						|
                           {
 | 
						|
                               logger.Info($"设备{setting.Value.autoOutLog}内无人操作,用户【{globalStateService.Operator?.NickName}】自动退出登录,_portUtil.Operate:{_portUtil.Operate},totalSecond:{(DateTime.Now - _portUtil.dateTime).TotalSeconds},lastInputTime:{CheckComputerFreeState.GetLastInputTime()},autoOutLog:{setting.Value.autoOutLog}");
 | 
						|
                               globalStateService.Operator = null;
 | 
						|
                               globalStateService.Reviewer = null;
 | 
						|
                               stop();
 | 
						|
                           }
 | 
						|
                           else
 | 
						|
                           {
 | 
						|
                               logger.Info($"{setting.Value.autoOutLog}未自动退出{(DateTime.Now - _portUtil.dateTime).TotalSeconds}-{CheckComputerFreeState.GetLastInputTime()}");
 | 
						|
                               next();
 | 
						|
                           }
 | 
						|
                       }
 | 
						|
                       else
 | 
						|
                       {
 | 
						|
                           next();
 | 
						|
                       }
 | 
						|
                   }
 | 
						|
                   catch (Exception ex)
 | 
						|
                   {
 | 
						|
                       logger.Info($"检查是否自动退出循环异常:{ex.Message}");
 | 
						|
                       next();
 | 
						|
                   }
 | 
						|
               }
 | 
						|
           });
 | 
						|
        }
 | 
						|
        base.OnInitialized();
 | 
						|
    }
 | 
						|
 | 
						|
    public void Dispose()
 | 
						|
    {
 | 
						|
        timer?.Dispose();
 | 
						|
    }
 | 
						|
 | 
						|
    async void init()
 | 
						|
    {
 | 
						|
        var b = await dialogService.OpenAsync<InitPage>(
 | 
						|
               $"调拨入库详情",
 | 
						|
             new Dictionary<string, object>() { },
 | 
						|
             new DialogOptions() { ShowTitle = false, Style = "min-height:auto;min-width:auto;width:auto", CloseDialogOnEsc = false, Resizable = true, Draggable = true, ShowClose = false }
 | 
						|
       );
 | 
						|
 | 
						|
    }
 | 
						|
    protected override async Task OnAfterRenderAsync(bool firstRender)
 | 
						|
    {
 | 
						|
        base.OnAfterRender(firstRender);
 | 
						|
 | 
						|
        if (firstRender && !globalStateService.isInit)
 | 
						|
        {
 | 
						|
            this.init();
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
    async void jump2Page(int parentId)
 | 
						|
    {
 | 
						|
        bool a = true;
 | 
						|
        if ((setting.Value.loginMode == 2 && (globalStateService.Operator == null || globalStateService.Reviewer == null))
 | 
						|
        || setting.Value.loginMode == 1 && globalStateService.Operator == null)
 | 
						|
        {
 | 
						|
            a = await dialogService.OpenAsync<LoginDialog>(
 | 
						|
                  "",
 | 
						|
                null,
 | 
						|
                new DialogOptions() { Width = "55vw", Resizable = false, Draggable = false, ShowClose = false, ShowTitle = false });
 | 
						|
 | 
						|
        }
 | 
						|
        // bool a = globalStateService.Operator != null;
 | 
						|
        // if (!a)
 | 
						|
        // {
 | 
						|
        //     a = await dialogService.OpenAsync<LoginDialog>(
 | 
						|
        //            "",
 | 
						|
        //          null,
 | 
						|
        //          new DialogOptions() { Width = "55vw", Resizable = false, Draggable = false, ShowClose = false, ShowTitle = false });
 | 
						|
        // }
 | 
						|
        if (a)
 | 
						|
        {
 | 
						|
            List<int> childrenIds = globalStateService.Operator.role.permissionIds.Where(id => id - (parentId * 10) > 0 && id - (parentId * 10) < 10).ToList();
 | 
						|
            if (childrenIds.Count > 0)
 | 
						|
            {
 | 
						|
                currentPage = false;
 | 
						|
                childrenIds.Sort();
 | 
						|
                int minId = childrenIds[0];
 | 
						|
                string path = new Premission().getAdminPremission().Find(p => p.Id == parentId).Items.ToList().Find(p2 => p2.Id == minId).PremissionPath;
 | 
						|
                na.NavigateTo(path);
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                _message.Notify(
 | 
						|
                            new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"没有权限不能访问", Duration = 3000 }
 | 
						|
                        );
 | 
						|
                await InvokeAsync(StateHasChanged);
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
    void logout()
 | 
						|
    {
 | 
						|
        if (globalStateService.Operator != null)
 | 
						|
        {
 | 
						|
            globalStateService.Operator = null;
 | 
						|
            globalStateService.Reviewer = null;
 | 
						|
        }
 | 
						|
        else
 | 
						|
        {
 | 
						|
            Environment.Exit(0);
 | 
						|
        }
 | 
						|
 | 
						|
    }
 | 
						|
    //修改密码
 | 
						|
    async void EditPassword(int i)
 | 
						|
    {
 | 
						|
        //修改复核人
 | 
						|
        await dialogService.OpenAsync<EditPasswordDialog>(
 | 
						|
        "",
 | 
						|
          new Dictionary<string, object>() { { "userI", i } },
 | 
						|
        new DialogOptions() { Width = "55vw", Resizable = false, Draggable = false, ShowClose = false, ShowTitle = false });
 | 
						|
 | 
						|
    }
 | 
						|
    async void MenuClick(RadzenProfileMenuItem item)
 | 
						|
    {
 | 
						|
 | 
						|
        string strValue = item.Value.Substring(0, 1);
 | 
						|
        Pojo.User user = new Pojo.User();
 | 
						|
        switch (strValue)
 | 
						|
        {
 | 
						|
            case "1":
 | 
						|
                int userId = 0;
 | 
						|
                if (item.Value == "11")
 | 
						|
                {
 | 
						|
                    user = globalStateService.Operator;
 | 
						|
                }
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    user = globalStateService.Reviewer;
 | 
						|
                }
 | 
						|
                await dialogService.OpenAsync<FingerRegDialog>(
 | 
						|
                    $"录入指纹-{user.Username}",
 | 
						|
                  new Dictionary<string, object>() { { "userId", user.Id } },
 | 
						|
                  new DialogOptions() { Width = "55vw", Resizable = true, Draggable = false, ShowClose = false }
 | 
						|
            );
 | 
						|
                break;
 | 
						|
            case "2":
 | 
						|
                if (item.Value == "21")
 | 
						|
                {
 | 
						|
                    user = globalStateService.Operator;
 | 
						|
                }
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    user = globalStateService.Reviewer;
 | 
						|
                }
 | 
						|
                await dialogService.OpenAsync<SignatureDialog>(
 | 
						|
                    $"签名-{user.NickName}",
 | 
						|
                  new Dictionary<string, object>() { { "user", user } },
 | 
						|
                  new DialogOptions() { Width = "55vw", Resizable = true, Draggable = false, ShowClose = true }
 | 
						|
            );
 | 
						|
 | 
						|
                break;
 | 
						|
            case "3":
 | 
						|
                if (item.Value == "31")
 | 
						|
                {
 | 
						|
                    user = globalStateService.Operator;
 | 
						|
                }
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    user = globalStateService.Reviewer;
 | 
						|
                }
 | 
						|
                int userI = Convert.ToInt32(item.Value.Substring(1, 1));
 | 
						|
                await dialogService.OpenAsync<EditPasswordDialog>(
 | 
						|
                   $"修改密码-{user.Username}",
 | 
						|
                   new Dictionary<string, object>() { { "userI", userI } },
 | 
						|
                   new DialogOptions() { Width = "55vw", Resizable = false, Draggable = false, ShowClose = false, ShowTitle = true }
 | 
						|
                );
 | 
						|
                break;
 | 
						|
        }
 | 
						|
    }
 | 
						|
    //交接班
 | 
						|
    async void changeShifts()
 | 
						|
    {
 | 
						|
        //修改复核人
 | 
						|
        await dialogService.OpenAsync<ChangeShifts>(
 | 
						|
        "",
 | 
						|
        new Dictionary<string, object>() { { "userI", 1 } },
 | 
						|
        new DialogOptions() { Width = "55vw", Resizable = false, Draggable = false, ShowClose = false, ShowTitle = false });
 | 
						|
 | 
						|
    }
 | 
						|
}
 |