feat: UI refinements - landing page gradient, button styling, drawer navigation
- Update landing view to use shell gradient background consistently - Make surface-panel and hero-panel transparent in landing view - Add button styling: remove shadows, use LUMO_TERTIARY for secondary actions - Add clickable drawer header navigation to dashboard - Remove unused title translations from message files
This commit is contained in:
@@ -157,7 +157,7 @@ vaadin-app-layout::part(content) {
|
|||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
gap: 1rem;
|
gap: 1rem;
|
||||||
background: #ffffff !important;
|
background: transparent !important;
|
||||||
min-height: 100vh;
|
min-height: 100vh;
|
||||||
min-height: 100dvh;
|
min-height: 100dvh;
|
||||||
}
|
}
|
||||||
@@ -192,6 +192,24 @@ body:has(.dashboard-home-view) vaadin-app-layout::part(content) {
|
|||||||
box-shadow: none;
|
box-shadow: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
body:has(.landing-view) {
|
||||||
|
background: var(--app-shell-background);
|
||||||
|
}
|
||||||
|
|
||||||
|
.landing-view .surface-panel {
|
||||||
|
border: 1px solid var(--app-border-strong);
|
||||||
|
background: transparent;
|
||||||
|
backdrop-filter: none;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.landing-view .landing-header,
|
||||||
|
.landing-view .section-panel,
|
||||||
|
.landing-view .app-overview-panel,
|
||||||
|
.landing-view .footer-panel {
|
||||||
|
background: var(--app-surface-solid);
|
||||||
|
}
|
||||||
|
|
||||||
.dashboard-home-view .hero-panel {
|
.dashboard-home-view .hero-panel {
|
||||||
box-shadow: none;
|
box-shadow: none;
|
||||||
}
|
}
|
||||||
@@ -201,10 +219,6 @@ body:has(.dashboard-home-view) vaadin-app-layout::part(content) {
|
|||||||
gap: 20px;
|
gap: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
body:has(.landing-view) {
|
|
||||||
background: #ffffff;
|
|
||||||
}
|
|
||||||
|
|
||||||
.data-view,
|
.data-view,
|
||||||
.dashboard-view,
|
.dashboard-view,
|
||||||
.form-page,
|
.form-page,
|
||||||
@@ -452,7 +466,28 @@ vaadin-vertical-layout.admin-form-view {
|
|||||||
transition: transform 0.22s ease, box-shadow 0.22s ease, border-color 0.22s ease;
|
transition: transform 0.22s ease, box-shadow 0.22s ease, border-color 0.22s ease;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.feature-card-link {
|
||||||
|
display: block;
|
||||||
|
width: 100%;
|
||||||
|
color: inherit;
|
||||||
|
text-decoration: none;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.feature-card-link:hover,
|
||||||
|
.feature-card-link:hover *,
|
||||||
|
.feature-card-link:focus-visible,
|
||||||
|
.feature-card-link:focus-visible * {
|
||||||
|
color: inherit;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.feature-card-link .feature-card {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
.feature-card:hover,
|
.feature-card:hover,
|
||||||
|
.feature-card-link:focus-visible .feature-card,
|
||||||
.message-card:hover {
|
.message-card:hover {
|
||||||
transform: translateY(-4px);
|
transform: translateY(-4px);
|
||||||
box-shadow: 0 24px 48px rgba(15, 23, 42, 0.14);
|
box-shadow: 0 24px 48px rgba(15, 23, 42, 0.14);
|
||||||
@@ -486,20 +521,21 @@ vaadin-vertical-layout.admin-form-view {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.footer-details p,
|
.footer-details p,
|
||||||
.footer-cta,
|
.app-cta,
|
||||||
.footer-slogan,
|
.app-slogan,
|
||||||
.footer-version {
|
.footer-version {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.footer-cta {
|
.app-cta {
|
||||||
margin-top: 0.75rem;
|
margin-top: 0.75rem;
|
||||||
color: var(--app-accent-strong);
|
color: var(--app-accent-strong);
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
|
max-width: 820px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.footer-slogan {
|
.app-slogan {
|
||||||
color: var(--app-accent-strong);
|
color: var(--app-accent-strong);
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
}
|
}
|
||||||
@@ -689,6 +725,18 @@ vaadin-vertical-layout.admin-form-view {
|
|||||||
transition: transform 0.18s ease, background-color 0.18s ease, border-color 0.18s ease;
|
transition: transform 0.18s ease, background-color 0.18s ease, border-color 0.18s ease;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.app-nav-row-root {
|
||||||
|
width: 20.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.app-nav-row-management-child {
|
||||||
|
width: 18.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.app-nav-row-user-child {
|
||||||
|
width: 17rem;
|
||||||
|
}
|
||||||
|
|
||||||
.app-nav-row:hover {
|
.app-nav-row:hover {
|
||||||
transform: translateX(4px);
|
transform: translateX(4px);
|
||||||
background: rgba(255, 255, 255, 0.14);
|
background: rgba(255, 255, 255, 0.14);
|
||||||
|
|||||||
@@ -176,6 +176,15 @@ public final class MainLayout extends AppLayout {
|
|||||||
row.setMargin(false);
|
row.setMargin(false);
|
||||||
row.getStyle().set("max-width", "calc(100% - 4px)");
|
row.getStyle().set("max-width", "calc(100% - 4px)");
|
||||||
row.addClassName("app-nav-row");
|
row.addClassName("app-nav-row");
|
||||||
|
if (treeData.getParent(item) == null) {
|
||||||
|
row.addClassName("app-nav-row-root");
|
||||||
|
}
|
||||||
|
if (verwaltungItem.equals(treeData.getParent(item))) {
|
||||||
|
row.addClassName("app-nav-row-management-child");
|
||||||
|
}
|
||||||
|
if (benutzerItem.equals(treeData.getParent(item))) {
|
||||||
|
row.addClassName("app-nav-row-user-child");
|
||||||
|
}
|
||||||
|
|
||||||
// Icon
|
// Icon
|
||||||
if (item.icon() != null) {
|
if (item.icon() != null) {
|
||||||
|
|||||||
@@ -4,8 +4,6 @@ import com.vaadin.flow.component.button.Button;
|
|||||||
import com.vaadin.flow.component.button.ButtonVariant;
|
import com.vaadin.flow.component.button.ButtonVariant;
|
||||||
import com.vaadin.flow.component.formlayout.FormLayout;
|
import com.vaadin.flow.component.formlayout.FormLayout;
|
||||||
import com.vaadin.flow.component.html.H2;
|
import com.vaadin.flow.component.html.H2;
|
||||||
import com.vaadin.flow.component.icon.Icon;
|
|
||||||
import com.vaadin.flow.component.icon.VaadinIcon;
|
|
||||||
import com.vaadin.flow.component.notification.Notification;
|
import com.vaadin.flow.component.notification.Notification;
|
||||||
import com.vaadin.flow.component.orderedlayout.FlexComponent;
|
import com.vaadin.flow.component.orderedlayout.FlexComponent;
|
||||||
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
|
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
|
||||||
@@ -43,6 +41,9 @@ public class AddAppUserView extends VerticalLayout implements HasDynamicTitle {
|
|||||||
setPadding(true);
|
setPadding(true);
|
||||||
setSpacing(true);
|
setSpacing(true);
|
||||||
addClassName("form-page");
|
addClassName("form-page");
|
||||||
|
setJustifyContentMode(FlexComponent.JustifyContentMode.START);
|
||||||
|
setDefaultHorizontalComponentAlignment(FlexComponent.Alignment.STRETCH);
|
||||||
|
getStyle().set("overflow", "auto");
|
||||||
|
|
||||||
// Set field labels via i18n
|
// Set field labels via i18n
|
||||||
designationField.setLabel(getTranslation("addappuser.designation"));
|
designationField.setLabel(getTranslation("addappuser.designation"));
|
||||||
@@ -53,20 +54,18 @@ public class AddAppUserView extends VerticalLayout implements HasDynamicTitle {
|
|||||||
passwordField.setLabel(getTranslation("addappuser.password"));
|
passwordField.setLabel(getTranslation("addappuser.password"));
|
||||||
confirmPasswordField.setLabel(getTranslation("addappuser.password.confirm"));
|
confirmPasswordField.setLabel(getTranslation("addappuser.password.confirm"));
|
||||||
|
|
||||||
// Center content vertically
|
|
||||||
setJustifyContentMode(FlexComponent.JustifyContentMode.CENTER);
|
|
||||||
setDefaultHorizontalComponentAlignment(FlexComponent.Alignment.CENTER);
|
|
||||||
|
|
||||||
// Create main content container
|
// Create main content container
|
||||||
VerticalLayout contentContainer = new VerticalLayout();
|
VerticalLayout contentContainer = new VerticalLayout();
|
||||||
contentContainer.setWidth("600px");
|
contentContainer.setWidthFull();
|
||||||
contentContainer.setMaxWidth("90%");
|
contentContainer.setMaxWidth("100%");
|
||||||
contentContainer.setSpacing(true);
|
contentContainer.setSpacing(true);
|
||||||
contentContainer.setPadding(true);
|
contentContainer.setPadding(true);
|
||||||
|
contentContainer.setDefaultHorizontalComponentAlignment(FlexComponent.Alignment.STRETCH);
|
||||||
contentContainer.addClassNames("form-shell", "form-card");
|
contentContainer.addClassNames("form-shell", "form-card");
|
||||||
|
|
||||||
// Header with title and back button
|
// Header
|
||||||
HorizontalLayout header = new HorizontalLayout();
|
HorizontalLayout header = new HorizontalLayout();
|
||||||
|
header.setWidthFull();
|
||||||
header.setAlignItems(FlexComponent.Alignment.CENTER);
|
header.setAlignItems(FlexComponent.Alignment.CENTER);
|
||||||
header.setSpacing(true);
|
header.setSpacing(true);
|
||||||
header.addClassName("form-header");
|
header.addClassName("form-header");
|
||||||
@@ -75,16 +74,12 @@ public class AddAppUserView extends VerticalLayout implements HasDynamicTitle {
|
|||||||
title.getStyle().set("margin", "0");
|
title.getStyle().set("margin", "0");
|
||||||
title.addClassName("form-title");
|
title.addClassName("form-title");
|
||||||
|
|
||||||
Button backButton = new Button(getTranslation("button.back"), new Icon(VaadinIcon.ARROW_LEFT));
|
header.add(title);
|
||||||
backButton.addThemeVariants(ButtonVariant.LUMO_TERTIARY);
|
|
||||||
backButton.addClickListener(e -> navigateBack());
|
|
||||||
|
|
||||||
header.add(title, backButton);
|
|
||||||
header.setJustifyContentMode(FlexComponent.JustifyContentMode.BETWEEN);
|
|
||||||
contentContainer.add(header);
|
contentContainer.add(header);
|
||||||
|
|
||||||
// Form layout
|
// Form layout
|
||||||
FormLayout formLayout = new FormLayout();
|
FormLayout formLayout = new FormLayout();
|
||||||
|
formLayout.setWidthFull();
|
||||||
formLayout.setResponsiveSteps(new FormLayout.ResponsiveStep("0", 1));
|
formLayout.setResponsiveSteps(new FormLayout.ResponsiveStep("0", 1));
|
||||||
|
|
||||||
// Configure fields
|
// Configure fields
|
||||||
|
|||||||
@@ -350,7 +350,7 @@ public class AddJobView extends Main implements HasDynamicTitle {
|
|||||||
submitButtonLayout.setWidthFull();
|
submitButtonLayout.setWidthFull();
|
||||||
submitButtonLayout.setJustifyContentMode(FlexComponent.JustifyContentMode.CENTER);
|
submitButtonLayout.setJustifyContentMode(FlexComponent.JustifyContentMode.CENTER);
|
||||||
submitButtonLayout.setPadding(true);
|
submitButtonLayout.setPadding(true);
|
||||||
submitButtonLayout.addClassNames("surface-panel", "form-shell");
|
submitButtonLayout.addClassName("form-shell");
|
||||||
submitButtonLayout.add(submitButton);
|
submitButtonLayout.add(submitButton);
|
||||||
submitButtonLayout.setVisible(false);
|
submitButtonLayout.setVisible(false);
|
||||||
|
|
||||||
@@ -572,7 +572,11 @@ public class AddJobView extends Main implements HasDynamicTitle {
|
|||||||
return removeButton;
|
return removeButton;
|
||||||
}).setHeader(getTranslation("common.actions")).setAutoWidth(true).setFlexGrow(0);
|
}).setHeader(getTranslation("common.actions")).setAutoWidth(true).setFlexGrow(0);
|
||||||
|
|
||||||
priceAndDetailsSection.add(servicesGrid);
|
Div servicesGridPanel = new Div(servicesGrid);
|
||||||
|
servicesGridPanel.addClassNames("surface-panel", "data-grid-panel");
|
||||||
|
servicesGridPanel.setWidthFull();
|
||||||
|
|
||||||
|
priceAndDetailsSection.add(servicesGridPanel);
|
||||||
|
|
||||||
// Add Service Button
|
// Add Service Button
|
||||||
Button addServiceButton = new Button(getTranslation("addjob.services.add"), new Icon(VaadinIcon.PLUS));
|
Button addServiceButton = new Button(getTranslation("addjob.services.add"), new Icon(VaadinIcon.PLUS));
|
||||||
|
|||||||
@@ -5,10 +5,10 @@ import com.vaadin.flow.component.html.*;
|
|||||||
import com.vaadin.flow.component.icon.Icon;
|
import com.vaadin.flow.component.icon.Icon;
|
||||||
import com.vaadin.flow.component.icon.VaadinIcon;
|
import com.vaadin.flow.component.icon.VaadinIcon;
|
||||||
import com.vaadin.flow.component.orderedlayout.FlexComponent;
|
import com.vaadin.flow.component.orderedlayout.FlexComponent;
|
||||||
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
|
|
||||||
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
|
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
|
||||||
import com.vaadin.flow.router.HasDynamicTitle;
|
import com.vaadin.flow.router.HasDynamicTitle;
|
||||||
import com.vaadin.flow.router.Route;
|
import com.vaadin.flow.router.Route;
|
||||||
|
import com.vaadin.flow.router.RouterLink;
|
||||||
import de.assecutor.votianlt.model.User;
|
import de.assecutor.votianlt.model.User;
|
||||||
import de.assecutor.votianlt.security.SecurityService;
|
import de.assecutor.votianlt.security.SecurityService;
|
||||||
import de.assecutor.votianlt.pages.base.ui.view.MainLayout;
|
import de.assecutor.votianlt.pages.base.ui.view.MainLayout;
|
||||||
@@ -40,12 +40,6 @@ public class AuthenticatedStartView extends VerticalLayout implements HasDynamic
|
|||||||
|
|
||||||
// System Section
|
// System Section
|
||||||
add(createSystemSection());
|
add(createSystemSection());
|
||||||
|
|
||||||
// App Section
|
|
||||||
add(createAppSection());
|
|
||||||
|
|
||||||
// Footer
|
|
||||||
add(createFooter());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private Component createAuthenticatedHeroSection() {
|
private Component createAuthenticatedHeroSection() {
|
||||||
@@ -94,17 +88,18 @@ public class AuthenticatedStartView extends VerticalLayout implements HasDynamic
|
|||||||
// Feature Cards
|
// Feature Cards
|
||||||
featuresGrid.add(
|
featuresGrid.add(
|
||||||
createFeatureCard(VaadinIcon.COG, getTranslation("dashboard.feature.setup.title"),
|
createFeatureCard(VaadinIcon.COG, getTranslation("dashboard.feature.setup.title"),
|
||||||
getTranslation("dashboard.feature.setup.desc")),
|
getTranslation("dashboard.feature.setup.desc"), EditProfileView.class),
|
||||||
createFeatureCard(VaadinIcon.USERS, getTranslation("dashboard.feature.customers.title"),
|
createFeatureCard(VaadinIcon.USERS, getTranslation("dashboard.feature.customers.title"),
|
||||||
getTranslation("dashboard.feature.customers.desc")),
|
getTranslation("dashboard.feature.customers.desc"), ShowCustomersView.class),
|
||||||
createFeatureCard(VaadinIcon.CLIPBOARD_TEXT, getTranslation("dashboard.feature.jobs.title"),
|
createFeatureCard(VaadinIcon.CLIPBOARD_TEXT, getTranslation("dashboard.feature.jobs.title"),
|
||||||
getTranslation("dashboard.feature.jobs.desc")));
|
getTranslation("dashboard.feature.jobs.desc"), ShowJobsView.class));
|
||||||
|
|
||||||
systemSection.add(systemTitle, systemIntro, featuresGrid);
|
systemSection.add(systemTitle, systemIntro, featuresGrid);
|
||||||
return systemSection;
|
return systemSection;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Component createFeatureCard(VaadinIcon iconType, String title, String description) {
|
private Component createFeatureCard(VaadinIcon iconType, String title, String description,
|
||||||
|
Class<? extends Component> navigationTarget) {
|
||||||
VerticalLayout card = new VerticalLayout();
|
VerticalLayout card = new VerticalLayout();
|
||||||
card.setDefaultHorizontalComponentAlignment(FlexComponent.Alignment.CENTER);
|
card.setDefaultHorizontalComponentAlignment(FlexComponent.Alignment.CENTER);
|
||||||
card.setPadding(true);
|
card.setPadding(true);
|
||||||
@@ -123,46 +118,14 @@ public class AuthenticatedStartView extends VerticalLayout implements HasDynamic
|
|||||||
cardDescription.addClassName("feature-card-description");
|
cardDescription.addClassName("feature-card-description");
|
||||||
|
|
||||||
card.add(icon, cardTitle, cardDescription);
|
card.add(icon, cardTitle, cardDescription);
|
||||||
return card;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Component createAppSection() {
|
RouterLink link = new RouterLink();
|
||||||
VerticalLayout appSection = new VerticalLayout();
|
link.setRoute(navigationTarget);
|
||||||
appSection.setWidthFull();
|
link.add(card);
|
||||||
appSection.setPadding(true);
|
link.addClassName("feature-card-link");
|
||||||
appSection.setSpacing(true);
|
link.getStyle().set("width", "100%");
|
||||||
appSection.setDefaultHorizontalComponentAlignment(FlexComponent.Alignment.CENTER);
|
link.getElement().setAttribute("aria-label", title);
|
||||||
appSection.addClassNames("page-shell", "surface-panel", "app-overview-panel");
|
return link;
|
||||||
|
|
||||||
H2 appTitle = new H2(getTranslation("dashboard.app.title"));
|
|
||||||
appTitle.addClassName("section-title");
|
|
||||||
|
|
||||||
Paragraph appDescription = new Paragraph(getTranslation("dashboard.app.description"));
|
|
||||||
appDescription.addClassName("section-intro");
|
|
||||||
|
|
||||||
appSection.add(appTitle, appDescription);
|
|
||||||
return appSection;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Component createFooter() {
|
|
||||||
VerticalLayout footer = new VerticalLayout();
|
|
||||||
footer.setWidthFull();
|
|
||||||
footer.setPadding(true);
|
|
||||||
footer.setSpacing(true);
|
|
||||||
footer.setDefaultHorizontalComponentAlignment(FlexComponent.Alignment.CENTER);
|
|
||||||
footer.addClassNames("page-shell", "surface-panel", "footer-panel");
|
|
||||||
|
|
||||||
HorizontalLayout footerContent = new HorizontalLayout();
|
|
||||||
footerContent.setDefaultVerticalComponentAlignment(FlexComponent.Alignment.CENTER);
|
|
||||||
footerContent.setJustifyContentMode(FlexComponent.JustifyContentMode.CENTER);
|
|
||||||
|
|
||||||
Paragraph copyright = new Paragraph(getTranslation("dashboard.footer.copyright"));
|
|
||||||
copyright.addClassName("footer-version");
|
|
||||||
|
|
||||||
footerContent.add(copyright);
|
|
||||||
footer.add(footerContent);
|
|
||||||
|
|
||||||
return footer;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -4,8 +4,6 @@ import com.vaadin.flow.component.button.Button;
|
|||||||
import com.vaadin.flow.component.button.ButtonVariant;
|
import com.vaadin.flow.component.button.ButtonVariant;
|
||||||
import com.vaadin.flow.component.formlayout.FormLayout;
|
import com.vaadin.flow.component.formlayout.FormLayout;
|
||||||
import com.vaadin.flow.component.html.H2;
|
import com.vaadin.flow.component.html.H2;
|
||||||
import com.vaadin.flow.component.icon.Icon;
|
|
||||||
import com.vaadin.flow.component.icon.VaadinIcon;
|
|
||||||
import com.vaadin.flow.component.notification.Notification;
|
import com.vaadin.flow.component.notification.Notification;
|
||||||
import com.vaadin.flow.component.orderedlayout.FlexComponent;
|
import com.vaadin.flow.component.orderedlayout.FlexComponent;
|
||||||
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
|
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
|
||||||
@@ -48,6 +46,9 @@ public class EditAppUserView extends VerticalLayout implements HasUrlParameter<S
|
|||||||
setPadding(true);
|
setPadding(true);
|
||||||
addClassName("form-page");
|
addClassName("form-page");
|
||||||
setSpacing(true);
|
setSpacing(true);
|
||||||
|
setJustifyContentMode(FlexComponent.JustifyContentMode.START);
|
||||||
|
setDefaultHorizontalComponentAlignment(FlexComponent.Alignment.STRETCH);
|
||||||
|
getStyle().set("overflow", "auto");
|
||||||
|
|
||||||
// Set field labels via i18n
|
// Set field labels via i18n
|
||||||
designationField.setLabel(getTranslation("addappuser.designation"));
|
designationField.setLabel(getTranslation("addappuser.designation"));
|
||||||
@@ -58,20 +59,18 @@ public class EditAppUserView extends VerticalLayout implements HasUrlParameter<S
|
|||||||
changePasswordField.setLabel(getTranslation("editappuser.password.change"));
|
changePasswordField.setLabel(getTranslation("editappuser.password.change"));
|
||||||
confirmChangePasswordField.setLabel(getTranslation("editappuser.password.change.confirm"));
|
confirmChangePasswordField.setLabel(getTranslation("editappuser.password.change.confirm"));
|
||||||
|
|
||||||
// Center content vertically
|
|
||||||
setJustifyContentMode(FlexComponent.JustifyContentMode.CENTER);
|
|
||||||
setDefaultHorizontalComponentAlignment(FlexComponent.Alignment.CENTER);
|
|
||||||
|
|
||||||
// Create main content container
|
// Create main content container
|
||||||
VerticalLayout contentContainer = new VerticalLayout();
|
VerticalLayout contentContainer = new VerticalLayout();
|
||||||
contentContainer.setWidth("600px");
|
contentContainer.setWidthFull();
|
||||||
contentContainer.setMaxWidth("90%");
|
contentContainer.setMaxWidth("100%");
|
||||||
contentContainer.setSpacing(true);
|
contentContainer.setSpacing(true);
|
||||||
contentContainer.setPadding(true);
|
contentContainer.setPadding(true);
|
||||||
|
contentContainer.setDefaultHorizontalComponentAlignment(FlexComponent.Alignment.STRETCH);
|
||||||
contentContainer.addClassNames("form-shell", "form-card");
|
contentContainer.addClassNames("form-shell", "form-card");
|
||||||
|
|
||||||
// Header with title and back button
|
// Header
|
||||||
HorizontalLayout header = new HorizontalLayout();
|
HorizontalLayout header = new HorizontalLayout();
|
||||||
|
header.setWidthFull();
|
||||||
header.setAlignItems(FlexComponent.Alignment.CENTER);
|
header.setAlignItems(FlexComponent.Alignment.CENTER);
|
||||||
header.setSpacing(true);
|
header.setSpacing(true);
|
||||||
header.addClassName("form-header");
|
header.addClassName("form-header");
|
||||||
@@ -79,16 +78,12 @@ public class EditAppUserView extends VerticalLayout implements HasUrlParameter<S
|
|||||||
H2 title = new H2(getTranslation("editappuser.title"));
|
H2 title = new H2(getTranslation("editappuser.title"));
|
||||||
title.addClassName("form-title");
|
title.addClassName("form-title");
|
||||||
|
|
||||||
Button backButton = new Button(getTranslation("button.back"), new Icon(VaadinIcon.ARROW_LEFT));
|
header.add(title);
|
||||||
backButton.addThemeVariants(ButtonVariant.LUMO_TERTIARY);
|
|
||||||
backButton.addClickListener(e -> navigateBack());
|
|
||||||
|
|
||||||
header.add(title, backButton);
|
|
||||||
header.setJustifyContentMode(FlexComponent.JustifyContentMode.BETWEEN);
|
|
||||||
contentContainer.add(header);
|
contentContainer.add(header);
|
||||||
|
|
||||||
// Form layout
|
// Form layout
|
||||||
FormLayout formLayout = new FormLayout();
|
FormLayout formLayout = new FormLayout();
|
||||||
|
formLayout.setWidthFull();
|
||||||
formLayout.setResponsiveSteps(new FormLayout.ResponsiveStep("0", 1));
|
formLayout.setResponsiveSteps(new FormLayout.ResponsiveStep("0", 1));
|
||||||
|
|
||||||
// Configure fields
|
// Configure fields
|
||||||
|
|||||||
@@ -52,6 +52,9 @@ public class EditCustomerView extends VerticalLayout implements HasUrlParameter<
|
|||||||
setPadding(true);
|
setPadding(true);
|
||||||
addClassName("form-page");
|
addClassName("form-page");
|
||||||
setSpacing(true);
|
setSpacing(true);
|
||||||
|
setJustifyContentMode(FlexComponent.JustifyContentMode.START);
|
||||||
|
setDefaultHorizontalComponentAlignment(FlexComponent.Alignment.STRETCH);
|
||||||
|
getStyle().set("overflow", "auto");
|
||||||
|
|
||||||
// Set field labels via i18n
|
// Set field labels via i18n
|
||||||
titleField.setLabel(getTranslation("addjob.address.salutation"));
|
titleField.setLabel(getTranslation("addjob.address.salutation"));
|
||||||
@@ -67,16 +70,13 @@ public class EditCustomerView extends VerticalLayout implements HasUrlParameter<
|
|||||||
zipField.setLabel(getTranslation("profile.zip"));
|
zipField.setLabel(getTranslation("profile.zip"));
|
||||||
cityField.setLabel(getTranslation("profile.city"));
|
cityField.setLabel(getTranslation("profile.city"));
|
||||||
|
|
||||||
// Center content vertically
|
|
||||||
setJustifyContentMode(FlexComponent.JustifyContentMode.CENTER);
|
|
||||||
setDefaultHorizontalComponentAlignment(FlexComponent.Alignment.CENTER);
|
|
||||||
|
|
||||||
// Create main content container
|
// Create main content container
|
||||||
VerticalLayout contentContainer = new VerticalLayout();
|
VerticalLayout contentContainer = new VerticalLayout();
|
||||||
contentContainer.setWidth("800px");
|
contentContainer.setWidthFull();
|
||||||
contentContainer.setMaxWidth("90%");
|
contentContainer.setMaxWidth("100%");
|
||||||
contentContainer.setSpacing(true);
|
contentContainer.setSpacing(true);
|
||||||
contentContainer.setPadding(true);
|
contentContainer.setPadding(true);
|
||||||
|
contentContainer.setDefaultHorizontalComponentAlignment(FlexComponent.Alignment.STRETCH);
|
||||||
contentContainer.addClassNames("form-shell", "form-card");
|
contentContainer.addClassNames("form-shell", "form-card");
|
||||||
|
|
||||||
// Header
|
// Header
|
||||||
@@ -87,6 +87,7 @@ public class EditCustomerView extends VerticalLayout implements HasUrlParameter<
|
|||||||
|
|
||||||
// Form layout
|
// Form layout
|
||||||
FormLayout formLayout = new FormLayout();
|
FormLayout formLayout = new FormLayout();
|
||||||
|
formLayout.setWidthFull();
|
||||||
formLayout.setResponsiveSteps(new FormLayout.ResponsiveStep("0", 1));
|
formLayout.setResponsiveSteps(new FormLayout.ResponsiveStep("0", 1));
|
||||||
|
|
||||||
// Add fields to form - all fields in single column
|
// Add fields to form - all fields in single column
|
||||||
|
|||||||
@@ -579,6 +579,7 @@ public class EditProfileView extends HorizontalLayout implements HasDynamicTitle
|
|||||||
// Profil speichern Button (unten rechts)
|
// Profil speichern Button (unten rechts)
|
||||||
Button saveProfile = new Button(getTranslation("button.save"));
|
Button saveProfile = new Button(getTranslation("button.save"));
|
||||||
saveProfile.addThemeVariants(ButtonVariant.LUMO_PRIMARY);
|
saveProfile.addThemeVariants(ButtonVariant.LUMO_PRIMARY);
|
||||||
|
saveProfile.getStyle().set("box-shadow", "none");
|
||||||
saveProfile.addClickListener(e -> {
|
saveProfile.addClickListener(e -> {
|
||||||
// Validate all required fields first
|
// Validate all required fields first
|
||||||
boolean isValid = validateAllProfileFields(companyField, firstnameField, lastnameField, phoneField,
|
boolean isValid = validateAllProfileFields(companyField, firstnameField, lastnameField, phoneField,
|
||||||
@@ -628,7 +629,7 @@ public class EditProfileView extends HorizontalLayout implements HasDynamicTitle
|
|||||||
// Fixieren am unteren Rand
|
// Fixieren am unteren Rand
|
||||||
buttonBar.getStyle().set("position", "sticky");
|
buttonBar.getStyle().set("position", "sticky");
|
||||||
buttonBar.getStyle().set("bottom", "0");
|
buttonBar.getStyle().set("bottom", "0");
|
||||||
buttonBar.getStyle().set("background", "var(--lumo-base-color)");
|
buttonBar.getStyle().set("background", "transparent");
|
||||||
buttonBar.getStyle().set("padding", "var(--lumo-space-s) 0");
|
buttonBar.getStyle().set("padding", "var(--lumo-space-s) 0");
|
||||||
buttonBar.getStyle().set("z-index", "1");
|
buttonBar.getStyle().set("z-index", "1");
|
||||||
formColumn.add(buttonBar);
|
formColumn.add(buttonBar);
|
||||||
|
|||||||
@@ -358,7 +358,13 @@ public class StartView extends VerticalLayout implements BeforeEnterObserver, Ha
|
|||||||
appIcon.setSize("80px");
|
appIcon.setSize("80px");
|
||||||
appIcon.addClassName("feature-card-icon");
|
appIcon.addClassName("feature-card-icon");
|
||||||
|
|
||||||
appSection.add(appTitle, appDescription, appIcon);
|
Paragraph ctaText = new Paragraph(getTranslation("start.cta.text"));
|
||||||
|
ctaText.addClassName("app-cta");
|
||||||
|
|
||||||
|
Paragraph slogan = new Paragraph(getTranslation("start.slogan"));
|
||||||
|
slogan.addClassName("app-slogan");
|
||||||
|
|
||||||
|
appSection.add(appTitle, appDescription, appIcon, ctaText, slogan);
|
||||||
return appSection;
|
return appSection;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -385,18 +391,11 @@ public class StartView extends VerticalLayout implements BeforeEnterObserver, Ha
|
|||||||
new Paragraph(getTranslation("start.imprint.phone")),
|
new Paragraph(getTranslation("start.imprint.phone")),
|
||||||
new Paragraph(getTranslation("start.imprint.email")));
|
new Paragraph(getTranslation("start.imprint.email")));
|
||||||
|
|
||||||
// Call to Action
|
|
||||||
Paragraph ctaText = new Paragraph(getTranslation("start.cta.text"));
|
|
||||||
ctaText.addClassName("footer-cta");
|
|
||||||
|
|
||||||
Paragraph slogan = new Paragraph(getTranslation("start.slogan"));
|
|
||||||
slogan.addClassName("footer-slogan");
|
|
||||||
|
|
||||||
// Versionsnummer
|
// Versionsnummer
|
||||||
Span versionSpan = new Span("Version " + appVersion);
|
Span versionSpan = new Span("Version " + appVersion);
|
||||||
versionSpan.addClassName("footer-version");
|
versionSpan.addClassName("footer-version");
|
||||||
|
|
||||||
footer.add(companyTitle, companyInfo, ctaText, slogan, versionSpan);
|
footer.add(companyTitle, companyInfo, versionSpan);
|
||||||
return footer;
|
return footer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -273,7 +273,6 @@ page.title.add.job=Neuen Auftrag anlegen
|
|||||||
|
|
||||||
# Dashboard
|
# Dashboard
|
||||||
dashboard.welcome=Willkommen, {0}!
|
dashboard.welcome=Willkommen, {0}!
|
||||||
dashboard.footer.copyright=© 2024 VotianLT. Alle Rechte vorbehalten.
|
|
||||||
dashboard.description=Hier können Sie Ihre Aufträge verwalten, Kunden organisieren und alle wichtigen Funktionen von VotianLT nutzen.
|
dashboard.description=Hier können Sie Ihre Aufträge verwalten, Kunden organisieren und alle wichtigen Funktionen von VotianLT nutzen.
|
||||||
dashboard.system.title=Systemübersicht
|
dashboard.system.title=Systemübersicht
|
||||||
dashboard.system.intro=Verwalten Sie Ihre Geschäftsprozesse effizient mit den folgenden Funktionen
|
dashboard.system.intro=Verwalten Sie Ihre Geschäftsprozesse effizient mit den folgenden Funktionen
|
||||||
@@ -283,8 +282,6 @@ dashboard.feature.customers.title=Kunden
|
|||||||
dashboard.feature.customers.desc=Verwalten Sie Ihre Kundenbeziehungen und Kontakte
|
dashboard.feature.customers.desc=Verwalten Sie Ihre Kundenbeziehungen und Kontakte
|
||||||
dashboard.feature.jobs.title=Aufträge
|
dashboard.feature.jobs.title=Aufträge
|
||||||
dashboard.feature.jobs.desc=Erstellen und verwalten Sie Aufträge effizient
|
dashboard.feature.jobs.desc=Erstellen und verwalten Sie Aufträge effizient
|
||||||
dashboard.app.title=Mobile App
|
|
||||||
dashboard.app.description=Nutzen Sie die VotianLT App für unterwegs und bleiben Sie immer verbunden
|
|
||||||
|
|
||||||
# Add App User
|
# Add App User
|
||||||
addappuser.title=Neuen App-Nutzer anlegen
|
addappuser.title=Neuen App-Nutzer anlegen
|
||||||
|
|||||||
@@ -243,7 +243,6 @@ page.title.forget.password=Parooli l\u00e4htestamine
|
|||||||
page.title.admin.pricetable=Hinnatabel
|
page.title.admin.pricetable=Hinnatabel
|
||||||
page.title.add.job=Uue tellimuse loomine
|
page.title.add.job=Uue tellimuse loomine
|
||||||
dashboard.welcome=Tere tulemast, {0}!
|
dashboard.welcome=Tere tulemast, {0}!
|
||||||
dashboard.footer.copyright=\u00a9 2024 VotianLT. K\u00f5ik \u00f5igused kaitstud.
|
|
||||||
dashboard.description=Siin saate hallata oma tellimusi, korraldada kliente ja kasutada k\u00f5iki VotianLT olulisi funktsioone.
|
dashboard.description=Siin saate hallata oma tellimusi, korraldada kliente ja kasutada k\u00f5iki VotianLT olulisi funktsioone.
|
||||||
dashboard.system.title=S\u00fcsteemi \u00fclevaade
|
dashboard.system.title=S\u00fcsteemi \u00fclevaade
|
||||||
dashboard.system.intro=Hallake oma \u00e4riprotsesse t\u00f5husalt j\u00e4rgmiste funktsioonidega
|
dashboard.system.intro=Hallake oma \u00e4riprotsesse t\u00f5husalt j\u00e4rgmiste funktsioonidega
|
||||||
@@ -253,8 +252,6 @@ dashboard.feature.customers.title=Kliendid
|
|||||||
dashboard.feature.customers.desc=Hallake oma kliendisuhteid ja kontakte
|
dashboard.feature.customers.desc=Hallake oma kliendisuhteid ja kontakte
|
||||||
dashboard.feature.jobs.title=Tellimused
|
dashboard.feature.jobs.title=Tellimused
|
||||||
dashboard.feature.jobs.desc=Looge ja hallake tellimusi t\u00f5husalt
|
dashboard.feature.jobs.desc=Looge ja hallake tellimusi t\u00f5husalt
|
||||||
dashboard.app.title=Mobiilirakendus
|
|
||||||
dashboard.app.description=Kasutage VotianLT rakendust liikvel olles ja p\u00fcsige alati \u00fchenduses
|
|
||||||
addappuser.title=Uue \u00e4pikasutaja loomine
|
addappuser.title=Uue \u00e4pikasutaja loomine
|
||||||
addappuser.designation=T\u00e4his
|
addappuser.designation=T\u00e4his
|
||||||
addappuser.phone=Telefon (mobiil)
|
addappuser.phone=Telefon (mobiil)
|
||||||
|
|||||||
@@ -273,7 +273,6 @@ page.title.add.job=Create New Job
|
|||||||
|
|
||||||
# Dashboard
|
# Dashboard
|
||||||
dashboard.welcome=Welcome, {0}!
|
dashboard.welcome=Welcome, {0}!
|
||||||
dashboard.footer.copyright=\u00a9 2024 VotianLT. All rights reserved.
|
|
||||||
dashboard.description=Here you can manage your jobs, organize customers, and use all important features of VotianLT.
|
dashboard.description=Here you can manage your jobs, organize customers, and use all important features of VotianLT.
|
||||||
dashboard.system.title=System Overview
|
dashboard.system.title=System Overview
|
||||||
dashboard.system.intro=Manage your business processes efficiently with the following features
|
dashboard.system.intro=Manage your business processes efficiently with the following features
|
||||||
@@ -283,8 +282,6 @@ dashboard.feature.customers.title=Customers
|
|||||||
dashboard.feature.customers.desc=Manage your customer relationships and contacts
|
dashboard.feature.customers.desc=Manage your customer relationships and contacts
|
||||||
dashboard.feature.jobs.title=Jobs
|
dashboard.feature.jobs.title=Jobs
|
||||||
dashboard.feature.jobs.desc=Create and manage jobs efficiently
|
dashboard.feature.jobs.desc=Create and manage jobs efficiently
|
||||||
dashboard.app.title=Mobile App
|
|
||||||
dashboard.app.description=Use the VotianLT App on the go and stay connected at all times
|
|
||||||
|
|
||||||
# Add App User
|
# Add App User
|
||||||
addappuser.title=Create New App User
|
addappuser.title=Create New App User
|
||||||
|
|||||||
@@ -273,7 +273,6 @@ page.title.add.job=Crear nuevo pedido
|
|||||||
|
|
||||||
# Dashboard
|
# Dashboard
|
||||||
dashboard.welcome=\u00a1Bienvenido/a, {0}!
|
dashboard.welcome=\u00a1Bienvenido/a, {0}!
|
||||||
dashboard.footer.copyright=\u00a9 2024 VotianLT. Todos los derechos reservados.
|
|
||||||
dashboard.description=Aqu\u00ed puede gestionar sus pedidos, organizar clientes y utilizar todas las funciones importantes de VotianLT.
|
dashboard.description=Aqu\u00ed puede gestionar sus pedidos, organizar clientes y utilizar todas las funciones importantes de VotianLT.
|
||||||
dashboard.system.title=Vista general del sistema
|
dashboard.system.title=Vista general del sistema
|
||||||
dashboard.system.intro=Gestione sus procesos empresariales de manera eficiente con las siguientes funciones
|
dashboard.system.intro=Gestione sus procesos empresariales de manera eficiente con las siguientes funciones
|
||||||
@@ -283,8 +282,6 @@ dashboard.feature.customers.title=Clientes
|
|||||||
dashboard.feature.customers.desc=Gestione sus relaciones con los clientes y contactos
|
dashboard.feature.customers.desc=Gestione sus relaciones con los clientes y contactos
|
||||||
dashboard.feature.jobs.title=Pedidos
|
dashboard.feature.jobs.title=Pedidos
|
||||||
dashboard.feature.jobs.desc=Cree y gestione pedidos de manera eficiente
|
dashboard.feature.jobs.desc=Cree y gestione pedidos de manera eficiente
|
||||||
dashboard.app.title=App m\u00f3vil
|
|
||||||
dashboard.app.description=Utilice la app de VotianLT en cualquier lugar y permanezca siempre conectado
|
|
||||||
|
|
||||||
# Add App User
|
# Add App User
|
||||||
addappuser.title=Crear nuevo usuario de la app
|
addappuser.title=Crear nuevo usuario de la app
|
||||||
|
|||||||
@@ -273,7 +273,6 @@ page.title.add.job=Cr\u00e9er une nouvelle mission
|
|||||||
|
|
||||||
# Dashboard
|
# Dashboard
|
||||||
dashboard.welcome=Bienvenue, {0} !
|
dashboard.welcome=Bienvenue, {0} !
|
||||||
dashboard.footer.copyright=\u00a9 2024 VotianLT. Tous droits r\u00e9serv\u00e9s.
|
|
||||||
dashboard.description=Ici, vous pouvez g\u00e9rer vos missions, organiser vos clients et acc\u00e9der \u00e0 toutes les fonctions importantes de VotianLT.
|
dashboard.description=Ici, vous pouvez g\u00e9rer vos missions, organiser vos clients et acc\u00e9der \u00e0 toutes les fonctions importantes de VotianLT.
|
||||||
dashboard.system.title=Aper\u00e7u du syst\u00e8me
|
dashboard.system.title=Aper\u00e7u du syst\u00e8me
|
||||||
dashboard.system.intro=G\u00e9rez vos processus m\u00e9tiers efficacement avec les fonctions suivantes
|
dashboard.system.intro=G\u00e9rez vos processus m\u00e9tiers efficacement avec les fonctions suivantes
|
||||||
@@ -283,8 +282,6 @@ dashboard.feature.customers.title=Clients
|
|||||||
dashboard.feature.customers.desc=G\u00e9rez vos relations clients et vos contacts
|
dashboard.feature.customers.desc=G\u00e9rez vos relations clients et vos contacts
|
||||||
dashboard.feature.jobs.title=Missions
|
dashboard.feature.jobs.title=Missions
|
||||||
dashboard.feature.jobs.desc=Cr\u00e9ez et g\u00e9rez vos missions efficacement
|
dashboard.feature.jobs.desc=Cr\u00e9ez et g\u00e9rez vos missions efficacement
|
||||||
dashboard.app.title=Application mobile
|
|
||||||
dashboard.app.description=Utilisez l'application VotianLT en d\u00e9placement et restez toujours connect\u00e9
|
|
||||||
|
|
||||||
# Add App User
|
# Add App User
|
||||||
addappuser.title=Cr\u00e9er un nouvel utilisateur d'app
|
addappuser.title=Cr\u00e9er un nouvel utilisateur d'app
|
||||||
|
|||||||
@@ -273,7 +273,6 @@ page.title.add.job=Sukurti naują užsakymą
|
|||||||
|
|
||||||
# Dashboard
|
# Dashboard
|
||||||
dashboard.welcome=Sveiki, {0}!
|
dashboard.welcome=Sveiki, {0}!
|
||||||
dashboard.footer.copyright=© 2024 VotianLT. Visos teisės saugomos.
|
|
||||||
dashboard.description=Čia galite valdyti savo užsakymus, organizuoti klientus ir naudoti visas svarbias VotianLT funkcijas.
|
dashboard.description=Čia galite valdyti savo užsakymus, organizuoti klientus ir naudoti visas svarbias VotianLT funkcijas.
|
||||||
dashboard.system.title=Sistemos apžvalga
|
dashboard.system.title=Sistemos apžvalga
|
||||||
dashboard.system.intro=Efektyviai valdykite savo verslo procesus naudodami šias funkcijas
|
dashboard.system.intro=Efektyviai valdykite savo verslo procesus naudodami šias funkcijas
|
||||||
@@ -283,8 +282,6 @@ dashboard.feature.customers.title=Klientai
|
|||||||
dashboard.feature.customers.desc=Valdykite savo klientų ryšius ir kontaktus
|
dashboard.feature.customers.desc=Valdykite savo klientų ryšius ir kontaktus
|
||||||
dashboard.feature.jobs.title=Užsakymai
|
dashboard.feature.jobs.title=Užsakymai
|
||||||
dashboard.feature.jobs.desc=Efektyviai kurkite ir valdykite užsakymus
|
dashboard.feature.jobs.desc=Efektyviai kurkite ir valdykite užsakymus
|
||||||
dashboard.app.title=Mobili programėlė
|
|
||||||
dashboard.app.description=Naudokite VotianLT programėlę kelionėje ir visada likite prisijungę
|
|
||||||
|
|
||||||
# Add App User
|
# Add App User
|
||||||
addappuser.title=Sukurti naują programėlės naudotoją
|
addappuser.title=Sukurti naują programėlės naudotoją
|
||||||
|
|||||||
@@ -273,7 +273,6 @@ page.title.add.job=Izveidot jaunu uzdevumu
|
|||||||
|
|
||||||
# Dashboard
|
# Dashboard
|
||||||
dashboard.welcome=Laipni lūgti, {0}!
|
dashboard.welcome=Laipni lūgti, {0}!
|
||||||
dashboard.footer.copyright=© 2024 VotianLT. Visas tiesības aizsargātas.
|
|
||||||
dashboard.description=Šeit jūs varat pārvaldīt savus uzdevumus, organizēt klientus un izmantot visas svarīgās VotianLT funkcijas.
|
dashboard.description=Šeit jūs varat pārvaldīt savus uzdevumus, organizēt klientus un izmantot visas svarīgās VotianLT funkcijas.
|
||||||
dashboard.system.title=Sistēmas pārskats
|
dashboard.system.title=Sistēmas pārskats
|
||||||
dashboard.system.intro=Efektīvi pārvaldiet savus biznesa procesus ar šādām funkcijām
|
dashboard.system.intro=Efektīvi pārvaldiet savus biznesa procesus ar šādām funkcijām
|
||||||
@@ -283,8 +282,6 @@ dashboard.feature.customers.title=Klienti
|
|||||||
dashboard.feature.customers.desc=Pārvaldiet savas klientu attiecības un kontaktus
|
dashboard.feature.customers.desc=Pārvaldiet savas klientu attiecības un kontaktus
|
||||||
dashboard.feature.jobs.title=Uzdevumi
|
dashboard.feature.jobs.title=Uzdevumi
|
||||||
dashboard.feature.jobs.desc=Izveidojiet un pārvaldiet uzdevumus efektīvi
|
dashboard.feature.jobs.desc=Izveidojiet un pārvaldiet uzdevumus efektīvi
|
||||||
dashboard.app.title=Mobilā lietotne
|
|
||||||
dashboard.app.description=Izmantojiet VotianLT lietotni ceļā un palieciet vienmēr savienoti
|
|
||||||
|
|
||||||
# Add App User
|
# Add App User
|
||||||
addappuser.title=Izveidot jaunu lietotnes lietotāju
|
addappuser.title=Izveidot jaunu lietotnes lietotāju
|
||||||
|
|||||||
@@ -273,7 +273,6 @@ page.title.add.job=Dodaj nowe zlecenie
|
|||||||
|
|
||||||
# Dashboard
|
# Dashboard
|
||||||
dashboard.welcome=Witaj, {0}!
|
dashboard.welcome=Witaj, {0}!
|
||||||
dashboard.footer.copyright=\u00a9 2024 VotianLT. Wszelkie prawa zastrze\u017cone.
|
|
||||||
dashboard.description=Tutaj mo\u017cesz zarz\u0105dza\u0107 swoimi zleceniami, organizowa\u0107 klient\u00f3w i korzysta\u0107 ze wszystkich wa\u017cnych funkcji VotianLT.
|
dashboard.description=Tutaj mo\u017cesz zarz\u0105dza\u0107 swoimi zleceniami, organizowa\u0107 klient\u00f3w i korzysta\u0107 ze wszystkich wa\u017cnych funkcji VotianLT.
|
||||||
dashboard.system.title=Przegl\u0105d systemu
|
dashboard.system.title=Przegl\u0105d systemu
|
||||||
dashboard.system.intro=Zarz\u0105dzaj swoimi procesami biznesowymi efektywnie za pomoc\u0105 nast\u0119puj\u0105cych funkcji
|
dashboard.system.intro=Zarz\u0105dzaj swoimi procesami biznesowymi efektywnie za pomoc\u0105 nast\u0119puj\u0105cych funkcji
|
||||||
@@ -283,8 +282,6 @@ dashboard.feature.customers.title=Klienci
|
|||||||
dashboard.feature.customers.desc=Zarz\u0105dzaj relacjami z klientami i kontaktami
|
dashboard.feature.customers.desc=Zarz\u0105dzaj relacjami z klientami i kontaktami
|
||||||
dashboard.feature.jobs.title=Zlecenia
|
dashboard.feature.jobs.title=Zlecenia
|
||||||
dashboard.feature.jobs.desc=Tworzenie i zarz\u0105dzanie zleceniami w spos\u00f3b efektywny
|
dashboard.feature.jobs.desc=Tworzenie i zarz\u0105dzanie zleceniami w spos\u00f3b efektywny
|
||||||
dashboard.app.title=Aplikacja mobilna
|
|
||||||
dashboard.app.description=Korzystaj z aplikacji VotianLT w podr\u00f3\u017cy i b\u0105d\u017a zawsze po\u0142\u0105czony
|
|
||||||
|
|
||||||
# Add App User
|
# Add App User
|
||||||
addappuser.title=Dodaj nowego u\u017cytkownika aplikacji
|
addappuser.title=Dodaj nowego u\u017cytkownika aplikacji
|
||||||
|
|||||||
@@ -273,7 +273,6 @@ page.title.add.job=Создать новый заказ
|
|||||||
|
|
||||||
# Dashboard
|
# Dashboard
|
||||||
dashboard.welcome=Добро пожаловать, {0}!
|
dashboard.welcome=Добро пожаловать, {0}!
|
||||||
dashboard.footer.copyright=\u00a9 2024 VotianLT. Все права защищены.
|
|
||||||
dashboard.description=Здесь вы можете управлять своими заказами, организовывать клиентов и использовать все важные функции VotianLT.
|
dashboard.description=Здесь вы можете управлять своими заказами, организовывать клиентов и использовать все важные функции VotianLT.
|
||||||
dashboard.system.title=Обзор системы
|
dashboard.system.title=Обзор системы
|
||||||
dashboard.system.intro=Эффективно управляйте своими бизнес-процессами с помощью следующих функций
|
dashboard.system.intro=Эффективно управляйте своими бизнес-процессами с помощью следующих функций
|
||||||
@@ -283,8 +282,6 @@ dashboard.feature.customers.title=Клиенты
|
|||||||
dashboard.feature.customers.desc=Управляйте отношениями с клиентами и контактами
|
dashboard.feature.customers.desc=Управляйте отношениями с клиентами и контактами
|
||||||
dashboard.feature.jobs.title=Заказы
|
dashboard.feature.jobs.title=Заказы
|
||||||
dashboard.feature.jobs.desc=Создавайте и управляйте заказами эффективно
|
dashboard.feature.jobs.desc=Создавайте и управляйте заказами эффективно
|
||||||
dashboard.app.title=Мобильное приложение
|
|
||||||
dashboard.app.description=Используйте приложение VotianLT в дороге и оставайтесь всегда на связи
|
|
||||||
|
|
||||||
# Add App User
|
# Add App User
|
||||||
addappuser.title=Создать нового пользователя приложения
|
addappuser.title=Создать нового пользователя приложения
|
||||||
|
|||||||
@@ -273,7 +273,6 @@ page.title.add.job=Yeni \u0130\u015f Olu\u015ftur
|
|||||||
|
|
||||||
# Dashboard
|
# Dashboard
|
||||||
dashboard.welcome=Ho\u015f geldiniz, {0}!
|
dashboard.welcome=Ho\u015f geldiniz, {0}!
|
||||||
dashboard.footer.copyright=\u00a9 2024 VotianLT. T\u00fcm haklar\u0131 sakl\u0131d\u0131r.
|
|
||||||
dashboard.description=Burada i\u015flerinizi y\u00f6netebilir, m\u00fc\u015fterilerinizi organize edebilir ve VotianLT'nin t\u00fcm \u00f6nemli \u00f6zelliklerini kullanabilirsiniz.
|
dashboard.description=Burada i\u015flerinizi y\u00f6netebilir, m\u00fc\u015fterilerinizi organize edebilir ve VotianLT'nin t\u00fcm \u00f6nemli \u00f6zelliklerini kullanabilirsiniz.
|
||||||
dashboard.system.title=Sisteme Genel Bak\u0131\u015f
|
dashboard.system.title=Sisteme Genel Bak\u0131\u015f
|
||||||
dashboard.system.intro=A\u015fa\u011f\u0131daki \u00f6zelliklerle i\u015f s\u00fcre\u00e7lerinizi verimli bir \u015fekilde y\u00f6netin
|
dashboard.system.intro=A\u015fa\u011f\u0131daki \u00f6zelliklerle i\u015f s\u00fcre\u00e7lerinizi verimli bir \u015fekilde y\u00f6netin
|
||||||
@@ -283,8 +282,6 @@ dashboard.feature.customers.title=M\u00fc\u015fteriler
|
|||||||
dashboard.feature.customers.desc=M\u00fc\u015fteri ili\u015fkilerinizi ve ki\u015filerinizi y\u00f6netin
|
dashboard.feature.customers.desc=M\u00fc\u015fteri ili\u015fkilerinizi ve ki\u015filerinizi y\u00f6netin
|
||||||
dashboard.feature.jobs.title=\u0130\u015fler
|
dashboard.feature.jobs.title=\u0130\u015fler
|
||||||
dashboard.feature.jobs.desc=\u0130\u015flerinizi verimli bir \u015fekilde olu\u015fturun ve y\u00f6netin
|
dashboard.feature.jobs.desc=\u0130\u015flerinizi verimli bir \u015fekilde olu\u015fturun ve y\u00f6netin
|
||||||
dashboard.app.title=Mobil Uygulama
|
|
||||||
dashboard.app.description=Hareket halindeyken VotianLT Uygulamas\u0131n\u0131 kullan\u0131n ve her zaman ba\u011fl\u0131 kal\u0131n
|
|
||||||
|
|
||||||
# Add App User
|
# Add App User
|
||||||
addappuser.title=Yeni Uygulama Kullan\u0131c\u0131s\u0131 Olu\u015ftur
|
addappuser.title=Yeni Uygulama Kullan\u0131c\u0131s\u0131 Olu\u015ftur
|
||||||
|
|||||||
Reference in New Issue
Block a user