491 lines
22 KiB
Plaintext
491 lines
22 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="3">
|
||
<RadzenStack Orientation="Orientation.Horizontal" AlignItems="AlignItems.Center" JustifyContent="JustifyContent.Center" Gap="0.5rem" class="rz-p-sm-12">
|
||
<RadzenIcon Icon="language" Style="font-size:3rem;cursor: pointer;margin-left:-60px" class="rz-ripple" IconColor="white" />
|
||
<RadzenDropDown TValue="string" Value=@SelectedCulture Data=@languageNames Change="@(args => LanguageClick(args))" Style="width: 100%; max-width: 400px;" Name="DropDownChangeEvent" />
|
||
</RadzenStack>
|
||
</RadzenColumn>
|
||
<RadzenColumn Size="2">
|
||
@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">@myText.Operator :@globalStateService.Operator.NickName</RadzenText>
|
||
</Template>
|
||
<ChildContent>
|
||
<RadzenProfileMenuItem Text="@myText.EnterFingerprint" Value="11" Icon="fingerprint"></RadzenProfileMenuItem>
|
||
<RadzenProfileMenuItem Text="@myText.EnterSign" Value="21" Icon="line_weight"></RadzenProfileMenuItem>
|
||
<RadzenProfileMenuItem Text="@myText.UpdatePassword" 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">@myText.Checker:@globalStateService.Reviewer.NickName</RadzenText>
|
||
</Template>
|
||
<ChildContent>
|
||
<RadzenProfileMenuItem Text="@myText.EnterFingerprint" Value="12" Icon="fingerprint"></RadzenProfileMenuItem>
|
||
<RadzenProfileMenuItem Text="@myText.EnterSign" Value="22" Icon="line_weight"></RadzenProfileMenuItem>
|
||
<RadzenProfileMenuItem Text="@myText.UpdatePassword" 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>@myText.Handover</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">@myText.Outbound</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">@myText.FillStorage</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" TextStyle="TextStyle.H2" TextAlign="TextAlign.Center">@myText.BoxManage</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">@myText.Return</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">@myText.StockManage</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">@myText.SystemManage</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;
|
||
|
||
@inject Toolbelt.Blazor.I18nText.I18nText I18nText;
|
||
|
||
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;
|
||
public static I18nText.local myText = new I18nText.local();
|
||
IEnumerable<string> languageNames;
|
||
private string culture;
|
||
private string SelectedCulture
|
||
{
|
||
get => culture;
|
||
set { }
|
||
}
|
||
protected override async Task OnInitializedAsync()
|
||
{
|
||
languageNames = new List<string> { "简体中文", "English" };
|
||
myText = await I18nText.GetTextTableAsync<I18nText.local>(this);
|
||
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
|
||
{
|
||
next();
|
||
}
|
||
}
|
||
else
|
||
{
|
||
next();
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
logger.Info($"检查是否自动退出循环异常:{ex.Message}");
|
||
next();
|
||
}
|
||
}
|
||
});
|
||
}
|
||
culture = I18nText.GetCurrentLanguageAsync().Result == "en-US" ? "English" : "简体中文";
|
||
|
||
base.OnInitializedAsync();
|
||
}
|
||
|
||
// 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
|
||
// {
|
||
// 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 });
|
||
|
||
}
|
||
|
||
async void LanguageClick(object item)
|
||
{
|
||
string culture = string.Empty;// new System.Globalization.CultureInfo(item.Value);
|
||
switch (item.ToString())
|
||
{
|
||
case "简体中文":
|
||
culture = "zh-CN";
|
||
break;
|
||
case "English":
|
||
culture = "en-US";
|
||
break;
|
||
|
||
}
|
||
await I18nText.SetCurrentLanguageAsync(culture);
|
||
}
|
||
}
|