Author SHA1 Message Date
schn33fuchs b404ff5bc9 Path
Fixed layout issues and joke message
2026-06-06 18:31:05 +02:00
schn33fuchs c3b7321005 Styling
The ticket backgrounds have color depending on background and some
improvements
2026-06-06 18:18:22 +02:00
TheDiluTek dfb031949b view tickets 2026-06-06 17:25:12 +02:00
TheDiluTek b030e133a2 Merge branch 'main' of https://git.raffauf-clan.de/schn33fuchs/ticketsystem 2026-06-06 17:01:58 +02:00
TheDiluTek 2e6bd2a781 bisschen sidebar schön. problem gefunden: es reicht wenn man benutzernamen eingibt. man logt sich auch ohne passwort ein 2026-06-04 21:48:47 +02:00
9 changed files with 128 additions and 49 deletions
+1 -1
View File
@@ -56,7 +56,7 @@ pub fn home_component() -> Html {
} }
html! { html! {
<div> <div class="rundbg">
<crate::utilities::TicketCount/> <crate::utilities::TicketCount/>
<p>{ "You are logged in as: " }</p> <p>{ "You are logged in as: " }</p>
+14 -15
View File
@@ -169,16 +169,6 @@ pub fn submit_ticket_component() -> Html {
let valid_rooms: HashSet<i16> = VALID_ROOMS.iter().copied().collect(); let valid_rooms: HashSet<i16> = VALID_ROOMS.iter().copied().collect();
{
let message = "Bevor sie zum Support weitergeleitet werden prüfen sie ob: \r\n - Ob das Problem durch Neustarten gelößt wird \r\n - Ob sie die richtigen Anmeldedaten genutzt habem \r\n - Alle notwendigen Kabel eingesteckt sind".to_string();
use_effect(move || {
if let Some(win) = web_sys::window() {
let _ = win.alert_with_message(&message);
}
|| ()
});
}
let onsubmit = { let onsubmit = {
let category = category.clone(); let category = category.clone();
let betreff = betreff.clone(); let betreff = betreff.clone();
@@ -297,7 +287,7 @@ pub fn submit_ticket_component() -> Html {
let room_valid = (*room).is_some(); let room_valid = (*room).is_some();
html! { html! {
<form {onsubmit}> <form class="rundbg" {onsubmit}>
<label>{ "Betreff:" } <label>{ "Betreff:" }
<input type="text" value={(*betreff).clone()} oninput={betreff_change}/> <input type="text" value={(*betreff).clone()} oninput={betreff_change}/>
</label> </label>
@@ -674,9 +664,17 @@ pub fn all_tickets_component() -> Html {
html! { <p>{ format!("Error: {}", e) }</p> } html! { <p>{ format!("Error: {}", e) }</p> }
} else { } else {
html! { html! {
<ul> <ul class= "postits">
{ for tickets.iter().filter(|t| t.status != "Archived" && (if user.is_admin { true } else if let Some(uid) = user.id { t.user_id == uid } else { false })).map(|t| html! { { for tickets.iter().filter(|t| t.status != "Archived" && (if user.is_admin { true } else if let Some(uid) = user.id { t.user_id == uid } else { false })).map(|t| {
<div> let status_class = match t.status.as_str() {
"ToDo" => "To-Do",
"InProgress" => "InProgress",
"Completed" => "Completed",
"Archived" => "Archived",
_ => "To-Do"
};
html! {
<div class={classes!{status_class, "listbox"}}>
<li key={t.id.to_string()}> <li key={t.id.to_string()}>
<Link<crate::Route> to={crate::Route::TicketById{id: t.id}}><h3>{ format!("{} - #{}", t.betreff, t.id) }</h3></Link<crate::Route>> <Link<crate::Route> to={crate::Route::TicketById{id: t.id}}><h3>{ format!("{} - #{}", t.betreff, t.id) }</h3></Link<crate::Route>>
<p>{ &t.description }</p> <p>{ &t.description }</p>
@@ -690,7 +688,8 @@ pub fn all_tickets_component() -> Html {
</li> </li>
</div> </div>
})} }})}
<Link<crate::Route> to={crate::Route::Ticket}>{ "Zurück zur Startseite" }</Link<crate::Route>> <Link<crate::Route> to={crate::Route::Ticket}>{ "Zurück zur Startseite" }</Link<crate::Route>>
</ul> </ul>
} }
+4 -4
View File
@@ -222,7 +222,7 @@ pub fn register_component() -> Html {
}; };
html! { html! {
<form {onsubmit}> <form {onsubmit} class="rundbg">
<label>{ "Vorname:" } <label>{ "Vorname:" }
<input type="text" value={(*first_name).clone()} oninput={fn_change}/> <input type="text" value={(*first_name).clone()} oninput={fn_change}/>
</label> </label>
@@ -330,7 +330,7 @@ pub fn login_component() -> Html {
html! { html! {
<div> <div>
<h1 class="headline">{ "Anmeldung" }</h1> <h1 class="headline">{ "Anmeldung" }</h1>
<form {onsubmit} class="rundbg"> <form {onsubmit} class="rundbg login">
<input <input
placeholder="username" placeholder="username"
value={(*username).clone()} value={(*username).clone()}
@@ -425,9 +425,9 @@ pub fn all_users_component() -> Html {
html! { <p>{ format!("Error: {}", e) }</p> } html! { <p>{ format!("Error: {}", e) }</p> }
} else { } else {
html! { html! {
<ul> <ul class="posti8s">
{ for users.iter().map(|t| html! { { for users.iter().map(|t| html! {
<li key={t.id.to_string()}> <li key={t.id.to_string()} class="listbox">
<Link<crate::Route> to={crate::Route::UserByID{id: t.id}}><h3>{ format!("{} {}- #{}", t.first_name, t.last_name, t.id) }</h3></Link<crate::Route>> <Link<crate::Route> to={crate::Route::UserByID{id: t.id}}><h3>{ format!("{} {}- #{}", t.first_name, t.last_name, t.id) }</h3></Link<crate::Route>>
</li> </li>
})} })}
+2 -2
View File
@@ -1,8 +1,8 @@
$color-bg: #ffffff; $color-bg: #ffffff;
$color-sidebar: #0f172a; $color-sidebar: #570000;
$color-accent: #2563eb; $color-accent: #2563eb;
$color-muted: #6b7280; $color-muted: #6b7280;
$spacing-sm: 8px; $spacing-sm: 8px;
$spacing-md: 16px; $spacing-md: 16px;
$border-radius: 6px; $border-radius: 6px;
$rundbgbackgroundcolor: #a0a0a0;
@@ -130,7 +130,7 @@
.room-bar { .room-bar {
height: 100%; height: 100%;
background-color: #f97316; background-color: #570000;
transition: width 0.3s ease; transition: width 0.3s ease;
} }
} }
+9 -7
View File
@@ -4,24 +4,26 @@
.sidebar { .sidebar {
width: 260px; width: 260px;
background: $color-sidebar; background: $color-sidebar;
color: #fff; color: #fffefe;
min-height: 100%; min-height: 100%;
padding: $spacing-md; padding: $spacing-md;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: $spacing-sm; flex: 1; } ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: $spacing-sm; flex: 1; }
a, .menu-toggle { a, .menu-toggle {
color: #fff; color: #ffffff;
text-decoration: none; text-decoration: none;
display: block; display: block;
padding: 8px 12px; padding: 8px 12px;
border-radius: 4px; border-radius: 4px;
&:hover { background: rgba(255,255,255,0.04); } &:hover { background: rgba(158, 45, 1, 0.842); }
} }
.menu-toggle { background: transparent; border: none; text-align: left; width: 100%; cursor: pointer; } .menu-toggle { background: #ff5a316c; border: none; text-align: left; width: 100%; cursor: pointer; }
.submenu { .submenu {
margin-left: 8px; margin-left: 8px;
@@ -38,9 +40,9 @@
} }
.logout-button { .logout-button {
background: rgba(255,255,255,0.1); background: rgba(255, 93, 43, 0.527);
color: #fff; color: #ffffff;
border: 1px solid rgba(255,255,255,0.2); border: 1px solid rgba(255, 255, 255, 0.801);
padding: 8px 12px; padding: 8px 12px;
border-radius: 4px; border-radius: 4px;
width: 100%; width: 100%;
@@ -7,7 +7,48 @@
display: flex; display: flex;
flex-direction: column; flex-direction: column;
gap: $spacing-sm; gap: $spacing-sm;
.meta { color: $color-muted; font-size: 0.9rem; } .meta { color: $color-muted; font-size: 0.9rem; }
.title { font-weight: 600; } .title { font-weight: 600; }
} }
.listbox {
max-width: auto;
margin:0 0;
background-color: $rundbgbackgroundcolor;
padding-bottom: 96px;
color: white;
padding-left: 32px;
padding-right: 32px;
padding-top: 96px;
border-radius: 20px;
border-color: #000000;
border-style: double;
box-shadow: 10px 10px 10px rgba(43, 43, 43, 0.8);
font-size: 26px;
list-style-type: none;
&.To-Do {
background-color: #b1003b;
}
&.InProgress {
background-color: #fff385;
}
&.Completed {
background-color: #90ff82;
}
&.Archived {
background-color: #af69ee;
}
}
.postits {
display: grid;
grid-template-columns: auto auto auto;
gap: 8px;
}
+51 -14
View File
@@ -5,6 +5,7 @@
@use "components/tickets"; @use "components/tickets";
@use "components/diagnostics"; @use "components/diagnostics";
@use "components/frontpage"; @use "components/frontpage";
@use "components/home";
@use "components/icon"; @use "components/icon";
body { body {
@@ -15,39 +16,53 @@ body {
} }
.admin { display: flex; } .admin { display: flex; }
.content { flex: 1; padding: variables.$spacing-md; }
.layout { .layout {
display: flex; display: flex;
min-height: 100vh; height: 100vh;
overflow: hidden;
box-sizing: border-box;
} }
.sidebar { .sidebar {
width: 260px; width: 260px;
flex-shrink: 0; flex-shrink: 0;
height: 100%;
overflow-y: auto;
box-sizing: border-box;
} }
.content { .content {
flex: 1; flex: 1;
min-width: 0; min-width: 0;
height: 100%;
overflow-y: auto;
padding: variables.$spacing-md;
box-sizing: border-box;
} }
@media (max-width: 768px) { @media (max-width: 768px) {
.sidebar { position: fixed; left: -100%; transition: left .2s; } .sidebar {
position: fixed;
top: 0;
bottom: 0;
left: -100%;
transition: left .2s;
z-index: 1000;
height: 100%;
box-sizing: border-box;
}
.sidebar.open { left: 0; } .sidebar.open { left: 0; }
.content { margin-left: 0; } .content { margin-left: 0; padding: variables.$spacing-md; box-sizing: border-box; }
} }
.rundbg { .rundbg {
display: flex; display: flex;
justify-content: center; justify-content: center;
flex-direction: column; flex-direction: column;
max-width: 40%; max-width: 40%;
margin:0 auto; margin:0 auto;
margin-top: 96px; background-color: variables.$rundbgbackgroundcolor;
background-color:#a0a0a0;
padding-bottom: 96px; padding-bottom: 96px;
padding-left: 32px; padding-left: 32px;
padding-right: 32px; padding-right: 32px;
@@ -56,17 +71,39 @@ body {
gap: 8px; gap: 8px;
border-color: #000000; border-color: #000000;
border-style: double; border-style: double;
box-shadow: 20px 20px 10px; box-shadow: 20px 20px 10px rgb(43, 43, 43);
box-shadow: rgb(43, 43, 43); font-size: 26px;
input, button { label {
display: block;
width: 100%;
box-sizing: border-box;
}
input, select, button {
width: 100%;
box-sizing: border-box;
padding: 16px; padding: 16px;
font-size: 1.8rem; font-size: 1.8rem;
background-color: #f0f0f0; background-color: #f0f0f0;
box-shadow: #6d6d6d; box-shadow: #6d6d6d;
box-shadow: 6px 6px 8px box-shadow: 6px 6px 8px;
} }
input[type="checkbox"] {
width: auto;
}
button {
margin: 16px 0;
}
&.login {
margin-top: 96px;
}
}
.setup-form input {
width: 100%;
box-sizing: border-box;
} }