瀏覽代碼

Refactoring of key data page, new fields

master
Flo Smilari 4 年之前
父節點
當前提交
c1ef7a51ab

+ 2
- 0
Pages/AccountPage.razor 查看文件

@page "/account" @page "/account"
@page "/fundvelo/account/{FromRoute}" @page "/fundvelo/account/{FromRoute}"
@using cwebplusApp.Shared.Models; @using cwebplusApp.Shared.Models;
@using cwebplusApp.Shared.Services; @using cwebplusApp.Shared.Services;
@inject NavigationManager NavigationManager @inject NavigationManager NavigationManager
@inject UserDataProvider UserDataProvider @inject UserDataProvider UserDataProvider
@inject IStringLocalizer<Resources> i18n @inject IStringLocalizer<Resources> i18n

+ 2
- 0
Pages/CaritasServiceFundVeloFoundConclusion.razor 查看文件

@page "/fundvelo/conclusion_found" @page "/fundvelo/conclusion_found"
@using cwebplusApp.Shared.Services; @using cwebplusApp.Shared.Services;
@inject NavigationManager NavigationManager @inject NavigationManager NavigationManager
@inject IStringLocalizer<Resources> i18n @inject IStringLocalizer<Resources> i18n
@inject PageHistoryManager PageHistoryManager @inject PageHistoryManager PageHistoryManager

+ 120
- 55
Pages/CaritasServiceFundVeloKeyDataPage.razor 查看文件

@using System.Globalization; @using System.Globalization;
@using Microsoft.AspNetCore.Components.Forms; @using Microsoft.AspNetCore.Components.Forms;
@using System.IO; @using System.IO;
@inject NavigationManager NavigationManager @inject NavigationManager NavigationManager
@inject IStringLocalizer<Resources> i18n @inject IStringLocalizer<Resources> i18n
@inject PageHistoryManager PageHistoryManager @inject PageHistoryManager PageHistoryManager
@inject Toaster Toaster @inject Toaster Toaster
@inject IJSRuntime JS @inject IJSRuntime JS
<div class="row px-3 h-100"> <div class="row px-3 h-100">
<div class="row no-gutters align-items-center justify-content-center w-100" style="padding-top:1em"> <div class="row no-gutters align-items-center justify-content-center w-100" style="padding-top:1em">
@if ("Found".Equals(FromRoute)) { @if ("Found".Equals(FromRoute)) {
</MatCard> </MatCard>
</div> </div>
</div> </div>
<div class="mat-layout-grid-cell mat-layout-grid-cell-span-1 justify-content-center" style="text-align: center">
<MatRipple class="inputfile-mat-ripple" Color="@MatRippleColor.Default" @onclick="InitializeMapPosition">
<label>
<svg xmlns="http://www.w3.org/2000/svg" height="48px" width="48px" viewBox="0 0 24 24" fill="#000000">
<path d="M0 0h24v24H0V0z" fill="none" />
<path d="M13 3.06V1h-2v2.06C6.83 3.52 3.52 6.83 3.06 11H1v2h2.06c.46 4.17 3.77 7.48 7.94 7.94V23h2v-2.06c4.17-.46 7.48-3.77 7.94-7.94H23v-2h-2.06c-.46-4.17-3.77-7.48-7.94-7.94zM12 19c-3.87 0-7-3.13-7-7s3.13-7 7-7 7 3.13 7 7-3.13 7-7 7z" />
<circle cx="12" cy="12" opacity=".3" r="2" />
<path d="M12 8c-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4zm0 6c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z" />
</svg>
</label>
</MatRipple>
</div>
<div class="mat-layout-grid-cell mat-layout-grid-cell-span-3">
<div class="w-100 fv-osm-tile map-wrapper">
<Map @ref="mapRef" MapOptions="@mapOptions"></Map>
@if ("Found".Equals(FromRoute)) {<!-- Gefundenes Velo-->
<div class="mat-layout-grid-cell mat-layout-grid-cell-span-1 justify-content-center" style="text-align: center">
<MatRipple class="inputfile-mat-ripple" Color="@MatRippleColor.Default" @onclick="InitializeMapPosition">
<label>
<svg xmlns="http://www.w3.org/2000/svg" height="48px" width="48px" viewBox="0 0 24 24" fill="#000000">
<path d="M0 0h24v24H0V0z" fill="none" />
<path d="M13 3.06V1h-2v2.06C6.83 3.52 3.52 6.83 3.06 11H1v2h2.06c.46 4.17 3.77 7.48 7.94 7.94V23h2v-2.06c4.17-.46 7.48-3.77 7.94-7.94H23v-2h-2.06c-.46-4.17-3.77-7.48-7.94-7.94zM12 19c-3.87 0-7-3.13-7-7s3.13-7 7-7 7 3.13 7 7-3.13 7-7 7z" />
<circle cx="12" cy="12" opacity=".3" r="2" />
<path d="M12 8c-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4zm0 6c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z" />
</svg>
</label>
</MatRipple>
</div> </div>
</div>
<div class="mat-layout-grid-cell mat-layout-grid-cell-span-4-phone mat-layout-grid-cell-span-8-tablet mat-layout-grid-cell-span-4-desktop">
<div class="mat-layout-grid-inner">
<div class="mat-layout-grid-cell mat-layout-grid-cell-span-4-phone mat-layout-grid-cell-span-4-tablet mat-layout-grid-cell-span-12-desktop">
<MatStringField Class="w-100 form-check-label" Label="@getAddressLbl()" Outlined="true" Required="true" type="text" @bind-Value="@bicycleGeoPosition.Address"></MatStringField>
<div class="mat-layout-grid-cell mat-layout-grid-cell-span-3">
<div class="w-100 fv-osm-tile map-wrapper">
<Map @ref="mapRef" MapOptions="@mapOptions"></Map>
</div> </div>
<div class="mat-layout-grid-cell mat-layout-grid-cell-span-4-phone mat-layout-grid-cell-span-4-tablet mat-layout-grid-cell-span-12-desktop">
<MatStringField Class="w-100 form-check-label" Label="@getPlaceLbl()" Outlined="true" Required="true" type="text" @bind-Value="@bicycleGeoPosition.City"></MatStringField>
</div>
<div class="mat-layout-grid-cell mat-layout-grid-cell-span-4-phone mat-layout-grid-cell-span-4-tablet mat-layout-grid-cell-span-12-desktop">
<MatTextField Class="w-100 form-check-label italic" Label="@i18n["Latitude"]" Outlined="true" ReadOnly="true" @bind-Value="@bicycleGeoPosition.Latitude"></MatTextField>
</div>
<div class="mat-layout-grid-cell mat-layout-grid-cell-span-4-phone mat-layout-grid-cell-span-4-tablet mat-layout-grid-cell-span-12-desktop">
<MatTextField Class="w-100 form-check-label italic" Label="@i18n["Longitude"]" Outlined="true" ReadOnly="true" @bind-Value="@bicycleGeoPosition.Longitude"></MatTextField>
</div>
<div class="mat-layout-grid-cell mat-layout-grid-cell-span-4-phone mat-layout-grid-cell-span-8-tablet mat-layout-grid-cell-span-4-desktop">
<div class="mat-layout-grid-inner">
<div class="mat-layout-grid-cell mat-layout-grid-cell-span-4-phone mat-layout-grid-cell-span-4-tablet mat-layout-grid-cell-span-12-desktop">
<MatStringField Class="w-100 form-check-label" Label="@getAddressLbl()" Outlined="true" Required="true" type="text" @bind-Value="@bicycleGeoPosition.Address"></MatStringField>
</div>
<div class="mat-layout-grid-cell mat-layout-grid-cell-span-4-phone mat-layout-grid-cell-span-4-tablet mat-layout-grid-cell-span-12-desktop">
<MatStringField Class="w-100 form-check-label" Label="@getPlaceLbl()" Outlined="true" Required="true" type="text" @bind-Value="@bicycleGeoPosition.City"></MatStringField>
</div>
<div class="mat-layout-grid-cell mat-layout-grid-cell-span-4-phone mat-layout-grid-cell-span-4-tablet mat-layout-grid-cell-span-12-desktop">
<MatTextField Class="w-100 form-check-label italic" Label="@i18n["Latitude"]" Outlined="true" ReadOnly="true" @bind-Value="@bicycleGeoPosition.Latitude"></MatTextField>
</div>
<div class="mat-layout-grid-cell mat-layout-grid-cell-span-4-phone mat-layout-grid-cell-span-4-tablet mat-layout-grid-cell-span-12-desktop">
<MatTextField Class="w-100 form-check-label italic" Label="@i18n["Longitude"]" Outlined="true" ReadOnly="true" @bind-Value="@bicycleGeoPosition.Longitude"></MatTextField>
</div>
</div> </div>
</div> </div>
</div>
<div class="mat-layout-grid-cell mat-layout-grid-cell-span-4-phone mat-layout-grid-cell-span-8-tablet mat-layout-grid-cell-span-12-desktop">
<div class="mat-layout-grid-inner">
<div class="mat-layout-grid-cell mat-layout-grid-cell-span-4-phone mat-layout-grid-cell-span-4-tablet mat-layout-grid-cell-span-4-desktop">
<MatSelectValue FullWidth="true" Outlined="true" Label="@i18n["Color"]" @bind-Value="selectedColor" Items="@Colors" ValueSelector="@(i=>i)">
<ItemTemplate>
<div>
<span class="btn-sm" style="background-color:@context.Code;
<div class="mat-layout-grid-cell mat-layout-grid-cell-span-4-phone mat-layout-grid-cell-span-8-tablet mat-layout-grid-cell-span-12-desktop">
<div class="mat-layout-grid-inner">
<div class="mat-layout-grid-cell mat-layout-grid-cell-span-4-phone mat-layout-grid-cell-span-4-tablet mat-layout-grid-cell-span-4-desktop">
<MatSelectValue FullWidth="true" Outlined="true" Label="@i18n["Color"]" @bind-Value="selectedColor" Items="@Colors" ValueSelector="@(i=>i)">
<ItemTemplate>
<div>
<span class="btn-sm" style="background-color:@context.Code;
display:initial; display:initial;
border:1px solid black; border:1px solid black;
box-shadow:0.2em 0.2em 0.3em 0.025em #3f4244" /> box-shadow:0.2em 0.2em 0.3em 0.025em #3f4244" />
<span class="btn">@context?.Bezeichnung</span>
</div>
</ItemTemplate>
</MatSelectValue>
<span class="btn">@context?.Bezeichnung</span>
</div>
</ItemTemplate>
</MatSelectValue>
</div>
<div class="mat-layout-grid-cell mat-layout-grid-cell-span-4-phone mat-layout-grid-cell-span-4-tablet mat-layout-grid-cell-span-4-desktop">
<div class="outlined">
<MatAutocompleteList TItem="Brand" FullWidth="true" Label="@i18n["Brand"]" Items="@Brands" OnTextChanged="setBrandValue" @bind-Value="SelectedBrand" CustomStringSelector="@(i => i?.Bezeichnung)">
<ItemTemplate>
<div>
<span>@context?.Bezeichnung</span>
</div>
</ItemTemplate>
</MatAutocompleteList>
</div>
</div>
<div class="mat-layout-grid-cell mat-layout-grid-cell-span-4-phone mat-layout-grid-cell-span-4-tablet mat-layout-grid-cell-span-4-desktop">
<MatSelectValue FullWidth="true" Outlined="true" Label="@i18n["Type"]" @bind-Value="selectedBcType" Items="@BicycleTypes" ValueSelector="@(i=>i)">
<ItemTemplate>
<div>
<span>@context?.Bezeichnung</span>
</div>
</ItemTemplate>
</MatSelectValue>
</div>
<div class="mat-layout-grid-cell mat-layout-grid-cell-span-4-phone mat-layout-grid-cell-span-4-tablet mat-layout-grid-cell-span-4-desktop">
<div class="mat-layout-grid-cell mat-layout-grid-cell-span-4-phone mat-layout-grid-cell-span-4-tablet mat-layout-grid-cell-span-12-desktop">
<MatStringField Class="w-100 form-check-label" Label="@i18n["FrameNumber"]" Outlined="true" type="text"></MatStringField>
</div>
</div>
<div class="mat-layout-grid-cell mat-layout-grid-cell-span-4-phone mat-layout-grid-cell-span-4-tablet mat-layout-grid-cell-span-4-desktop">
<div class="mat-layout-grid-cell mat-layout-grid-cell-span-4-phone mat-layout-grid-cell-span-4-tablet mat-layout-grid-cell-span-12-desktop">
<MatStringField Class="w-100 form-check-label" Label="@i18n["Remark"]" Outlined="true" type="text"></MatStringField>
</div>
</div>
</div> </div>
<div class="mat-layout-grid-cell mat-layout-grid-cell-span-4-phone mat-layout-grid-cell-span-4-tablet mat-layout-grid-cell-span-4-desktop">
<div class="outlined">
<MatAutocompleteList TItem="Brand" FullWidth="true" Label="@i18n["Brand"]" Items="@Brands" OnTextChanged="setBrandValue" @bind-Value="SelectedBrand" CustomStringSelector="@(i => i?.Bezeichnung)">
</div>
} else { <!-- Vermisstes Velo-->
<div class="mat-layout-grid-cell mat-layout-grid-cell-span-4-phone mat-layout-grid-cell-span-4-tablet mat-layout-grid-cell-span-4-desktop">
<div class="mat-layout-grid-inner">
<div class="mat-layout-grid-cell mat-layout-grid-cell-span-4-phone mat-layout-grid-cell-span-8-tablet mat-layout-grid-cell-span-12-desktop">
<MatSelectValue FullWidth="true" Outlined="true" Label="@i18n["Color"]" @bind-Value="selectedColor" Items="@Colors" ValueSelector="@(i=>i)">
<ItemTemplate>
<div>
<span class="btn-sm" style="background-color:@context.Code;
display:initial;
border:1px solid black;
box-shadow:0.2em 0.2em 0.3em 0.025em #3f4244" />
<span class="btn">@context?.Bezeichnung</span>
</div>
</ItemTemplate>
</MatSelectValue>
</div>
<div class="mat-layout-grid-cell mat-layout-grid-cell-span-4-phone mat-layout-grid-cell-span-8-tablet mat-layout-grid-cell-span-12-desktop">
<div class="outlined">
<MatAutocompleteList TItem="Brand" FullWidth="true" Label="@i18n["Brand"]" Items="@Brands" OnTextChanged="setBrandValue" @bind-Value="SelectedBrand" CustomStringSelector="@(i => i?.Bezeichnung)">
<ItemTemplate>
<div>
<span>@context?.Bezeichnung</span>
</div>
</ItemTemplate>
</MatAutocompleteList>
</div>
</div>
<div class="mat-layout-grid-cell mat-layout-grid-cell-span-4-phone mat-layout-grid-cell-span-8-tablet mat-layout-grid-cell-span-12-desktop">
<MatSelectValue FullWidth="true" Outlined="true" Label="@i18n["Type"]" @bind-Value="selectedBcType" Items="@BicycleTypes" ValueSelector="@(i=>i)">
<ItemTemplate> <ItemTemplate>
<div> <div>
<span>@context?.Bezeichnung</span> <span>@context?.Bezeichnung</span>
</div> </div>
</ItemTemplate> </ItemTemplate>
</MatAutocompleteList>
</MatSelectValue>
</div>
<div class="mat-layout-grid-cell mat-layout-grid-cell-span-4-phone mat-layout-grid-cell-span-8-tablet mat-layout-grid-cell-span-12-desktop">
<MatStringField Class="w-100 form-check-label" Label="@i18n["FrameNumber"]" Outlined="true" type="text"></MatStringField>
</div> </div>
</div> </div>
<div class="mat-layout-grid-cell mat-layout-grid-cell-span-4-phone mat-layout-grid-cell-span-4-tablet mat-layout-grid-cell-span-4-desktop">
<MatSelectValue FullWidth="true" Outlined="true" Label="@i18n["Type"]" @bind-Value="selectedBcType" Items="@BicycleTypes" ValueSelector="@(i=>i)">
<ItemTemplate>
<div>
<span>@context?.Bezeichnung</span>
</div>
</ItemTemplate>
</MatSelectValue>
</div>
<div class="mat-layout-grid-cell mat-layout-grid-cell-span-4-phone mat-layout-grid-cell-span-8-tablet mat-layout-grid-cell-span-4-desktop">
<div class="mat-layout-grid-inner">
<div class="mat-layout-grid-cell mat-layout-grid-cell-span-4-phone mat-layout-grid-cell-span-4-tablet mat-layout-grid-cell-span-12-desktop">
<MatStringField Class="w-100 form-check-label" Label="@i18n["Age"]" Outlined="true" type="text"></MatStringField>
</div>
<div class="mat-layout-grid-cell mat-layout-grid-cell-span-4-phone mat-layout-grid-cell-span-4-tablet mat-layout-grid-cell-span-12-desktop">
<MatStringField Class="w-100 form-check-label" Label="@i18n["Price"]" Outlined="true" type="text"></MatStringField>
</div>
<div class="mat-layout-grid-cell mat-layout-grid-cell-span-4-phone mat-layout-grid-cell-span-4-tablet mat-layout-grid-cell-span-12-desktop">
<MatStringField Class="w-100 form-check-label" Label="@i18n["Remark"]" Outlined="true" type="text"></MatStringField>
</div>
</div> </div>
</div> </div>
</div>
}
</div> </div>
</div> </div>
</div> </div>

+ 10
- 3
Pages/CaritasServiceFundVeloLostFoundPage.razor 查看文件

@page "/fundvelo/lost_found" @page "/fundvelo/lost_found"
@using cwebplusApp.Shared.Services; @using cwebplusApp.Shared.Services;
@using cwebplusApp.Shared.Models;
@inject NavigationManager NavigationManager @inject NavigationManager NavigationManager
@inject PageHistoryManager PageHistoryManager @inject PageHistoryManager PageHistoryManager
@inject ReportDataProvider ReportDataProvider
<div class="row px-3 h-100"> <div class="row px-3 h-100">
<div class="row no-gutters align-items-center w-100"> <div class="row no-gutters align-items-center w-100">
<div class="mat-layout-grid-cell mat-layout-grid-cell-span-1"> <div class="mat-layout-grid-cell mat-layout-grid-cell-span-1">
</div> </div>
<div class="mat-layout-grid-cell mat-layout-grid-cell-span-2"> <div class="mat-layout-grid-cell mat-layout-grid-cell-span-2">
<MatCard Class="demo-mat-card">
<MatCard Class="fv-mat-card">
<MatCardContent> <MatCardContent>
<MatCardMedia Square="true" ImageUrl="./images/batch_found.png" @onclick="Found"></MatCardMedia> <MatCardMedia Square="true" ImageUrl="./images/batch_found.png" @onclick="Found"></MatCardMedia>
</MatCardContent> </MatCardContent>
<div class="mat-layout-grid-cell mat-layout-grid-cell-span-1"> <div class="mat-layout-grid-cell mat-layout-grid-cell-span-1">
</div> </div>
<div class="mat-layout-grid-cell mat-layout-grid-cell-span-2"> <div class="mat-layout-grid-cell mat-layout-grid-cell-span-2">
<MatCard Class="demo-mat-card">
<MatCard Class="fv-mat-card">
<MatCardContent> <MatCardContent>
<MatCardMedia Square="true" ImageUrl="./images/batch_missing.png" @onclick="Missing"></MatCardMedia> <MatCardMedia Square="true" ImageUrl="./images/batch_missing.png" @onclick="Missing"></MatCardMedia>
</MatCardContent> </MatCardContent>
protected override void OnInitialized() { protected override void OnInitialized() {
PageHistoryManager.AddPageToHistory(NavigationManager.Uri); PageHistoryManager.AddPageToHistory(NavigationManager.Uri);
ReportDataProvider.Report = null;
base.OnInitialized(); base.OnInitialized();
} }
private void Found() { private void Found() {
NavigationManager.NavigateTo("fundvelo/keydata/Found");
ReportDataProvider.Report = new FoundReport();
NavigationManager.NavigateTo("fundvelo/keydata/Found/");
} }
private void Missing() { private void Missing() {
ReportDataProvider.Report = new MissingReport();
NavigationManager.NavigateTo("fundvelo/keydata/Missing"); NavigationManager.NavigateTo("fundvelo/keydata/Missing");
} }
} }

+ 2
- 0
Pages/CaritasServiceFundVeloMissingConclusion.razor 查看文件

@page "/fundvelo/conclusion_missing" @page "/fundvelo/conclusion_missing"
@using cwebplusApp.Shared.Services; @using cwebplusApp.Shared.Services;
@inject NavigationManager NavigationManager @inject NavigationManager NavigationManager
@inject IStringLocalizer<Resources> i18n @inject IStringLocalizer<Resources> i18n
@inject PageHistoryManager PageHistoryManager @inject PageHistoryManager PageHistoryManager

+ 5
- 3
Pages/CaritasServicesPage.razor 查看文件

@page "/caritas_services" @page "/caritas_services"
@using cwebplusApp.Shared.Services; @using cwebplusApp.Shared.Services;
@inject NavigationManager NavigationManager @inject NavigationManager NavigationManager
@inject PageHistoryManager PageHistoryManager @inject PageHistoryManager PageHistoryManager
<div class="mat-layout-grid w-100"> <div class="mat-layout-grid w-100">
<div class="mat-layout-grid-inner"> <div class="mat-layout-grid-inner">
<div class="mat-layout-grid-cell mat-layout-grid-cell-span-2-phone mat-layout-grid-cell-span-3-tablet mat-layout-grid-cell-span-4-desktop"> <div class="mat-layout-grid-cell mat-layout-grid-cell-span-2-phone mat-layout-grid-cell-span-3-tablet mat-layout-grid-cell-span-4-desktop">
<MatCard class="demo-mat-card">
<MatCard class="fv-mat-card">
<MatCardContent> <MatCardContent>
<MatCardMedia Square="true" ImageUrl="./images/batch_fundvelo.png" @onclick="FundVelo_LostFound"></MatCardMedia> <MatCardMedia Square="true" ImageUrl="./images/batch_fundvelo.png" @onclick="FundVelo_LostFound"></MatCardMedia>
</MatCardContent> </MatCardContent>
</MatCard> </MatCard>
</div> </div>
<div class="mat-layout-grid-cell mat-layout-grid-cell-span-2-phone mat-layout-grid-cell-span-3-tablet mat-layout-grid-cell-span-4-desktop"> <div class="mat-layout-grid-cell mat-layout-grid-cell-span-2-phone mat-layout-grid-cell-span-3-tablet mat-layout-grid-cell-span-4-desktop">
<MatCard class="demo-mat-card">
<MatCard class="fv-mat-card">
<MatCardContent> <MatCardContent>
<MatCardMedia Square="true" ImageUrl="./images/batch_kulturlegi.png"></MatCardMedia> <MatCardMedia Square="true" ImageUrl="./images/batch_kulturlegi.png"></MatCardMedia>
</MatCardContent> </MatCardContent>
</MatCard> </MatCard>
</div> </div>
<div class="mat-layout-grid-cell mat-layout-grid-cell-span-2-phone mat-layout-grid-cell-span-3-tablet mat-layout-grid-cell-span-4-desktop"> <div class="mat-layout-grid-cell mat-layout-grid-cell-span-2-phone mat-layout-grid-cell-span-3-tablet mat-layout-grid-cell-span-4-desktop">
<MatCard class="demo-mat-card">
<MatCard class="fv-mat-card">
<MatCardContent> <MatCardContent>
<MatCardMedia Square="true" ImageUrl="./images/batch_markt.png"></MatCardMedia> <MatCardMedia Square="true" ImageUrl="./images/batch_markt.png"></MatCardMedia>
</MatCardContent> </MatCardContent>

+ 3
- 2
Pages/IndexPage.razor 查看文件

@page "/" @page "/"
@using cwebplusApp.Shared.Services; @using cwebplusApp.Shared.Services;
@using System.Threading; @using System.Threading;
@using Microsoft.Extensions.Configuration; @using Microsoft.Extensions.Configuration;
@inject MasterDataService MasterDataService; @inject MasterDataService MasterDataService;
@inject Toaster Toaster; @inject Toaster Toaster;
@inject IConfiguration Configuration; @inject IConfiguration Configuration;
@inject ILFBicycleRest iLFBicycleRest;
@inject ILFBicycleRest ILFBicycleRest;
<div class="row h-100 justify-content-center"> <div class="row h-100 justify-content-center">
showProgressCircle = true; showProgressCircle = true;
StateHasChanged(); StateHasChanged();
try { try {
iLFBicycleRest.Initialize(Configuration);
ILFBicycleRest.Initialize(Configuration);
await MasterDataService.SynchronizeMasterdata(); await MasterDataService.SynchronizeMasterdata();
} catch (Exception) { } catch (Exception) {
Toaster.ShowWarning(i18n.GetString("Warning.Masterdata.Title"), i18n.GetString("Warning.Masterdata.Msg")); Toaster.ShowWarning(i18n.GetString("Warning.Masterdata.Title"), i18n.GetString("Warning.Masterdata.Msg"));

+ 1
- 0
Pages/InfoPage.razor 查看文件

@page "/info" @page "/info"
@using cwebplusApp.Shared.Services; @using cwebplusApp.Shared.Services;
@inject NavigationManager NavigationManager; @inject NavigationManager NavigationManager;
@inject IStringLocalizer<Resources> i18n @inject IStringLocalizer<Resources> i18n
@inject PageHistoryManager PageHistoryManager @inject PageHistoryManager PageHistoryManager

+ 1
- 0
Program.cs 查看文件

builder.Services.AddSingleton<ILFBicycleRest, LFBicycleRest>(); builder.Services.AddSingleton<ILFBicycleRest, LFBicycleRest>();
builder.Services.AddSingleton<AppState>(); builder.Services.AddSingleton<AppState>();
builder.Services.AddSingleton<PageHistoryManager>(); builder.Services.AddSingleton<PageHistoryManager>();
builder.Services.AddSingleton<ReportDataProvider>();
builder.Services.AddScoped<Toaster>(); builder.Services.AddScoped<Toaster>();
builder.Services.AddScoped<UserDataProvider>(); builder.Services.AddScoped<UserDataProvider>();
builder.Services.AddScoped<MasterDataService>(); builder.Services.AddScoped<MasterDataService>();

+ 1
- 1
Properties/launchSettings.json 查看文件

}, },
"nativeDebugging": false, "nativeDebugging": false,
"applicationUrl": "https://localhost:5001;http://localhost:5000", "applicationUrl": "https://localhost:5001;http://localhost:5000",
"jsWebView2Debugging": true,
"jsWebView2Debugging": false,
"inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}" "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}"
} }
} }

+ 64
- 0
Shared/Models/FoundReport.cs 查看文件

namespace cwebplusApp.Shared.Models {
public class FoundReport : Report {
public string Anrede { get; set; } // required
public string Vorname { get; set; } // required
public string Nachname { get; set; } // required
public bool AbholadresseIstKontakt { get; set; } // required
public int TypId { get; set; } // required
public int MarkeId { get; set; } // required
public int FarbeId { get; set; } // required
public string Bemerkung { get; set; }
public string Mobil { get; set; }
public string NeueMarke { get; set; }
public string Rahmennummer { get; set; }
public string Telefon { get; set; }
public string Foto { get; set; }
public GeographicInfo GeographicInfo { get; set; } // required
public string AbholAnrede { get; set; } // required when AbholadresseIstKontakt = false
public string AbholVorname { get; set; } // required when AbholadresseIstKontakt = false
public string AbholNachname { get; set; } // required when AbholadresseIstKontakt = false
public string AbholStrasse { get; set; } // required when AbholadresseIstKontakt = false
public string AbholPLZ { get; set; } // required when AbholadresseIstKontakt = false
public string AbholOrt { get; set; } // required when AbholadresseIstKontakt = false
public string AbholMail { get; set; }
public string AbholMobil { get; set; }
public string AbholTelefon { get; set; }
public FoundReport() : this("", "", "", true, -1, -1, -1, null) {
}
public FoundReport(string anrede, string vorname, string nachname, bool abholadresseIstKontakt, int typId, int markeId, int farbeId, GeographicInfo geographicInfo) {
this.Anrede = anrede;
this.Vorname = vorname;
this.Nachname = nachname;
this.AbholadresseIstKontakt = abholadresseIstKontakt;
this.TypId = typId;
this.MarkeId = markeId;
this.FarbeId = farbeId;
this.GeographicInfo = geographicInfo;
}
}
public class GeographicInfo {
public string Postcode { get; set; }
public string Town { get; set; }
public string Address { get; set; }
public double Latitude { get; set; }
public double Longitude { get; set; }
public GeographicInfo() : this("", "", "", 0.0, 0.0) {
}
public GeographicInfo(string town, string postcode, string address, double latitude, double longitude) {
this.Town = town;
this.Postcode = postcode;
this.Address = address;
this.Latitude = latitude;
this.Longitude = longitude;
}
}
}

+ 44
- 0
Shared/Models/MissingReport.cs 查看文件

namespace cwebplusApp.Shared.Models {
public class MissingReport : Report {
public string Anrede { get; set; } // required
public string Vorname { get; set; } // required
public string Nachname { get; set; } // required
public string Mail { get; set; } // required
public string PersonPLZ { get; set; } // required
public string PersonOrt { get; set; } // required
public string PersonStrasse { get; set; } // required
public int TypId { get; set; } // required
public int MarkeId { get; set; } // required
public int FarbeId { get; set; } // required
public int Alter { get; set; }
public double Preis { get; set; }
public string Foto { get; set; }
public string RahmenNummer { get; set; }
public string NeueMarke { get; set; }
public string Telefon { get; set; }
public string Mobil { get; set; }
public string Zusatz { get; set; }
public string Postfach { get; set; }
public string Bemerkung { get; set; }
public int SuchDienstId { get; set; }
public string SuchDienstNr { get; set; }
public MissingReport() : this("", "", "", "", "", "", "", -1, -1, -1) {
}
public MissingReport(string anrede, string vorname, string nachname, string mail, string personPLZ,
string personOrt, string personStrasse, int typId, int markeId, int farbeId) {
this.Anrede = anrede;
this.Vorname = vorname;
this.Nachname = nachname;
this.Mail = mail;
this.PersonPLZ = personPLZ;
this.PersonOrt = personOrt;
this.PersonStrasse = personStrasse;
this.TypId = typId;
this.MarkeId = markeId;
this.FarbeId = farbeId;
}
}
}

+ 10
- 0
Shared/Models/Report.cs 查看文件

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace cwebplusApp.Shared.Models {
public abstract class Report {
}
}

+ 13
- 1
Shared/ResourceFiles/Resources.de.resx 查看文件

<data name="Address" xml:space="preserve"> <data name="Address" xml:space="preserve">
<value>Adresse</value> <value>Adresse</value>
</data> </data>
<data name="Age" xml:space="preserve">
<value>Alter</value>
</data>
<data name="Bike.Child_Bycicle" xml:space="preserve"> <data name="Bike.Child_Bycicle" xml:space="preserve">
<value>Kindervelo</value> <value>Kindervelo</value>
</data> </data>
<data name="FoundBike" xml:space="preserve"> <data name="FoundBike" xml:space="preserve">
<value>Gefundenes Velo</value> <value>Gefundenes Velo</value>
</data> </data>
<data name="FrameNumber" xml:space="preserve">
<value>Rahmennummer</value>
</data>
<data name="fundvelo/account/Found" xml:space="preserve"> <data name="fundvelo/account/Found" xml:space="preserve">
<value>Fundvelo &gt; Gefunden &gt; Finderdaten</value> <value>Fundvelo &gt; Gefunden &gt; Finderdaten</value>
</data> </data>
<data name="PlaceOfLoss" xml:space="preserve"> <data name="PlaceOfLoss" xml:space="preserve">
<value>Verlustort</value> <value>Verlustort</value>
</data> </data>
<data name="Price" xml:space="preserve">
<value>Preis</value>
</data>
<data name="Remark" xml:space="preserve">
<value>Bemerkung</value>
</data>
<data name="Salutation" xml:space="preserve"> <data name="Salutation" xml:space="preserve">
<value>Anrede</value> <value>Anrede</value>
</data> </data>
<value>Die Stammdaten konnten nicht abgerufen werden. Es werden stattdessen die Standardwerte verwendet!</value> <value>Die Stammdaten konnten nicht abgerufen werden. Es werden stattdessen die Standardwerte verwendet!</value>
</data> </data>
<data name="Warning.Masterdata.Title" xml:space="preserve"> <data name="Warning.Masterdata.Title" xml:space="preserve">
<value>Die Stammdaten konnten nicht abgerufen werden!</value>
<value>Stammdaten nicht verfügbar!</value>
</data> </data>
<data name="Warning.Nominatim.Msg" xml:space="preserve"> <data name="Warning.Nominatim.Msg" xml:space="preserve">
<value>Die Adresse konnte beim Aufrufen des Nominatim-Dienstes nicht aufgelöst werden. Bitte geben Sie die Straße und Postleitzahl/Ort manuell ein.</value> <value>Die Adresse konnte beim Aufrufen des Nominatim-Dienstes nicht aufgelöst werden. Bitte geben Sie die Straße und Postleitzahl/Ort manuell ein.</value>

+ 13
- 1
Shared/ResourceFiles/Resources.fr.resx 查看文件

<data name="Address" xml:space="preserve"> <data name="Address" xml:space="preserve">
<value>Adresse</value> <value>Adresse</value>
</data> </data>
<data name="Age" xml:space="preserve">
<value>Âge</value>
</data>
<data name="Bike.Child_Bycicle" xml:space="preserve"> <data name="Bike.Child_Bycicle" xml:space="preserve">
<value>Vélo pour enfants</value> <value>Vélo pour enfants</value>
</data> </data>
<data name="FoundBike" xml:space="preserve"> <data name="FoundBike" xml:space="preserve">
<value>Velo trouvè</value> <value>Velo trouvè</value>
</data> </data>
<data name="FrameNumber" xml:space="preserve">
<value>Numéro de cadre</value>
</data>
<data name="fundvelo/account/Found" xml:space="preserve"> <data name="fundvelo/account/Found" xml:space="preserve">
<value>Velo &gt;Trouvé &gt; Data trouver</value> <value>Velo &gt;Trouvé &gt; Data trouver</value>
</data> </data>
<data name="PlaceOfLoss" xml:space="preserve"> <data name="PlaceOfLoss" xml:space="preserve">
<value>Lieu de la perte</value> <value>Lieu de la perte</value>
</data> </data>
<data name="Price" xml:space="preserve">
<value>Prix</value>
</data>
<data name="Remark" xml:space="preserve">
<value>Comment</value>
</data>
<data name="Salutation" xml:space="preserve"> <data name="Salutation" xml:space="preserve">
<value>Salutation</value> <value>Salutation</value>
</data> </data>
<value>Les données de base n'ont pas pu être récupérées. Les valeurs par défaut sont utilisées à la place !</value> <value>Les données de base n'ont pas pu être récupérées. Les valeurs par défaut sont utilisées à la place !</value>
</data> </data>
<data name="Warning.Masterdata.Title" xml:space="preserve"> <data name="Warning.Masterdata.Title" xml:space="preserve">
<value>Impossible de récupérer les données de base !</value>
<value>Les données de base ne sont pas disponibles!</value>
</data> </data>
<data name="Warning.Nominatim.Msg" xml:space="preserve"> <data name="Warning.Nominatim.Msg" xml:space="preserve">
<value>L'adresse n'a pas pu être résolue en invoquant le service Nominatim. Veuillez saisir l'adresse en indiquant la rue et le code postal/ville.</value> <value>L'adresse n'a pas pu être résolue en invoquant le service Nominatim. Veuillez saisir l'adresse en indiquant la rue et le code postal/ville.</value>

+ 13
- 1
Shared/ResourceFiles/Resources.it.resx 查看文件

<data name="Address" xml:space="preserve"> <data name="Address" xml:space="preserve">
<value>Indirizzo</value> <value>Indirizzo</value>
</data> </data>
<data name="Age" xml:space="preserve">
<value>Età</value>
</data>
<data name="Bike.Child_Bycicle" xml:space="preserve"> <data name="Bike.Child_Bycicle" xml:space="preserve">
<value>Bicicletta per bambino</value> <value>Bicicletta per bambino</value>
</data> </data>
<data name="FoundBike" xml:space="preserve"> <data name="FoundBike" xml:space="preserve">
<value>Bicicletta trovata</value> <value>Bicicletta trovata</value>
</data> </data>
<data name="FrameNumber" xml:space="preserve">
<value>Nummero telaio</value>
</data>
<data name="fundvelo/account/Found" xml:space="preserve"> <data name="fundvelo/account/Found" xml:space="preserve">
<value>Bicicletta &gt; Trovata &gt; Dati trovatore</value> <value>Bicicletta &gt; Trovata &gt; Dati trovatore</value>
</data> </data>
<data name="PlaceOfLoss" xml:space="preserve"> <data name="PlaceOfLoss" xml:space="preserve">
<value>Luogo della perdita</value> <value>Luogo della perdita</value>
</data> </data>
<data name="Price" xml:space="preserve">
<value>Prezzo</value>
</data>
<data name="Remark" xml:space="preserve">
<value>Commento</value>
</data>
<data name="Salutation" xml:space="preserve"> <data name="Salutation" xml:space="preserve">
<value>Saluto</value> <value>Saluto</value>
</data> </data>
<value>Non è stato possibile recuperare i dati anagrafici. Vengono invece utilizzati i valori di default!</value> <value>Non è stato possibile recuperare i dati anagrafici. Vengono invece utilizzati i valori di default!</value>
</data> </data>
<data name="Warning.Masterdata.Title" xml:space="preserve"> <data name="Warning.Masterdata.Title" xml:space="preserve">
<value>Impossibile recuperare i dati anagrafici!</value>
<value>Dati anagrafici non disponibili!</value>
</data> </data>
<data name="Warning.Nominatim.Msg" xml:space="preserve"> <data name="Warning.Nominatim.Msg" xml:space="preserve">
<value>L'indirizzo non può essere risolto invocando il servizio Nominatim. Si prega di digitare la via e CAP/città.</value> <value>L'indirizzo non può essere risolto invocando il servizio Nominatim. Si prega di digitare la via e CAP/città.</value>

+ 13
- 1
Shared/ResourceFiles/Resources.resx 查看文件

<data name="Address" xml:space="preserve"> <data name="Address" xml:space="preserve">
<value>Address</value> <value>Address</value>
</data> </data>
<data name="Age" xml:space="preserve">
<value>Age</value>
</data>
<data name="Bike.Child_Bycicle" xml:space="preserve"> <data name="Bike.Child_Bycicle" xml:space="preserve">
<value>Children Bycicle</value> <value>Children Bycicle</value>
</data> </data>
<data name="FoundBike" xml:space="preserve"> <data name="FoundBike" xml:space="preserve">
<value>Found Bike</value> <value>Found Bike</value>
</data> </data>
<data name="FrameNumber" xml:space="preserve">
<value>Frame Number</value>
</data>
<data name="fundvelo/account/Found" xml:space="preserve"> <data name="fundvelo/account/Found" xml:space="preserve">
<value>Bicycle &gt; Found &gt; Founder data</value> <value>Bicycle &gt; Found &gt; Founder data</value>
</data> </data>
<data name="PlaceOfLoss" xml:space="preserve"> <data name="PlaceOfLoss" xml:space="preserve">
<value>Place Of Loss</value> <value>Place Of Loss</value>
</data> </data>
<data name="Price" xml:space="preserve">
<value>Price</value>
</data>
<data name="Remark" xml:space="preserve">
<value>Remark</value>
</data>
<data name="Salutation" xml:space="preserve"> <data name="Salutation" xml:space="preserve">
<value>Salutation</value> <value>Salutation</value>
</data> </data>
<value>The master data could not be retrieved. The default values are used instead!</value> <value>The master data could not be retrieved. The default values are used instead!</value>
</data> </data>
<data name="Warning.Masterdata.Title" xml:space="preserve"> <data name="Warning.Masterdata.Title" xml:space="preserve">
<value>Could not retreive master data!</value>
<value>Master data not available!</value>
</data> </data>
<data name="Warning.Nominatim.Msg" xml:space="preserve"> <data name="Warning.Nominatim.Msg" xml:space="preserve">
<value>The address could not be resolved invoking Nominatim service. Please type in the address street and zip/town.</value> <value>The address could not be resolved invoking Nominatim service. Please type in the address street and zip/town.</value>

+ 0
- 2
Shared/Services/LFBicycleRest.cs 查看文件

public void Initialize(IConfiguration configuration) { public void Initialize(IConfiguration configuration) {
this.Configuration = configuration; this.Configuration = configuration;
string hostBaseUrl = Configuration.GetValue<string>("host_base_url"); string hostBaseUrl = Configuration.GetValue<string>("host_base_url");
Console.WriteLine("host_base_url: " + hostBaseUrl);
if (!String.IsNullOrEmpty(hostBaseUrl)) { if (!String.IsNullOrEmpty(hostBaseUrl)) {
this.httpClient = new HttpClient { BaseAddress = new Uri(hostBaseUrl) }; this.httpClient = new HttpClient { BaseAddress = new Uri(hostBaseUrl) };
} }

+ 28
- 0
Shared/Services/ReportDataProvider.cs 查看文件

using cwebplusApp.Shared.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace cwebplusApp.Shared.Services {
public class ReportDataProvider {
public Report Report { get; set; }
public FoundReport GetFoundReport() {
if (Report is FoundReport) {
return (FoundReport)Report;
}
return null;
}
public MissingReport GetLostReport() {
if (Report is MissingReport) {
return (MissingReport)Report;
}
return null;
}
}
}

+ 1
- 0
cwebplusApp.csproj 查看文件

<PropertyGroup> <PropertyGroup>
<TargetFramework>net5.0</TargetFramework> <TargetFramework>net5.0</TargetFramework>
<ServiceWorkerAssetsManifest>service-worker-assets.js</ServiceWorkerAssetsManifest> <ServiceWorkerAssetsManifest>service-worker-assets.js</ServiceWorkerAssetsManifest>
<Version>0.1.0</Version>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

+ 1
- 1
wwwroot/appsettings.json 查看文件

"host_base_url": "https://integrate.dynalias.net:9443/Fundvelo/", "host_base_url": "https://integrate.dynalias.net:9443/Fundvelo/",
"subresource_url_colors": "api/{0}/{1}/fundvelo/colors", "subresource_url_colors": "api/{0}/{1}/fundvelo/colors",
"subresource_url_brands": "api/{0}/{1}/fundvelo/brands", "subresource_url_brands": "api/{0}/{1}/fundvelo/brands",
"subresource_url_types=": "api/{0}/{1}/fundvelo/types"
"subresource_url_types": "api/{0}/{1}/fundvelo/types"
} }

+ 2
- 2
wwwroot/css/app.css 查看文件

} }
.fv-mat-card { .fv-mat-card {
border-radius: 20px;
border-radius: 10%;
} }
.mat-icon-large { .mat-icon-large {
.fv-osm-tile { .fv-osm-tile {
border: 1px solid rgb(0 0 0 /.38); border: 1px solid rgb(0 0 0 /.38);
border-radius: 20px;
border-radius: 10%;
} }
#bicycleLocationMap { #bicycleLocationMap {

Loading…
取消
儲存