From 4c97e8f32219da16621f063979b1fc2488872556 Mon Sep 17 00:00:00 2001 From: ultrageese Date: Sun, 24 May 2026 20:00:39 +1000 Subject: [PATCH] =?UTF-8?q?=D0=A2=D1=83=D0=BD=D0=B3=D0=B4=D0=B6=D0=B0?= =?UTF-8?q?=D0=BC=D0=B8=D0=BD=20=D0=9D=D0=B5=D1=82=D0=B0=D0=BD=D1=81=D0=B0?= =?UTF-8?q?=D1=85=D1=83=D1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/Cargo.lock | 28 ++++++++++++++++++++ code/Cargo.toml | 2 +- code/src/app.rs | 68 ++++++++++++++++++++++++++++++++++++++++++++----- 3 files changed, 91 insertions(+), 7 deletions(-) diff --git a/code/Cargo.lock b/code/Cargo.lock index 30a2902..eaeab0e 100644 --- a/code/Cargo.lock +++ b/code/Cargo.lock @@ -1143,6 +1143,7 @@ dependencies = [ "ahash 0.8.12", "egui", "enum-map", + "jiff", "log", "mime_guess2", "profiling", @@ -1990,6 +1991,33 @@ version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" +[[package]] +name = "jiff" +version = "0.2.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f00b5dbd620d61dfdcb6007c9c1f6054ebd75319f163d886a9055cec1155073d" +dependencies = [ + "jiff-static", + "js-sys", + "log", + "portable-atomic", + "portable-atomic-util", + "serde_core", + "wasm-bindgen", + "windows-sys 0.52.0", +] + +[[package]] +name = "jiff-static" +version = "0.2.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e000de030ff8022ea1da3f466fbb0f3a809f5e51ed31f6dd931c35181ad8e6d7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + [[package]] name = "jni" version = "0.22.4" diff --git a/code/Cargo.toml b/code/Cargo.toml index 1acdfbb..6fd07a6 100644 --- a/code/Cargo.toml +++ b/code/Cargo.toml @@ -10,7 +10,7 @@ dotenvy = "0.15.7" eframe = "0.34.2" egui = "0.34.2" egui_dock = "0.19.1" -egui_extras = "0.34.2" +egui_extras = {version = "0.34.2", features = ["datepicker"]} rust_decimal = {version = "1.42.0", features = ["macros"]} sqlx = {version="0.8.6", features = ["runtime-tokio", "mysql","bigdecimal","chrono"]} tokio={version = "1.52.3", features = ["full"]} diff --git a/code/src/app.rs b/code/src/app.rs index 81f2736..aeb447c 100644 --- a/code/src/app.rs +++ b/code/src/app.rs @@ -1,5 +1,6 @@ use std::sync::Arc; +use chrono::NaiveDate; use egui::mutex::RwLock; use egui_dock::{DockArea, Style, TabViewer}; use sqlx::{Connection, MySqlConnection, MySqlPool}; @@ -247,22 +248,73 @@ impl egui_dock::TabViewer for MainTabViewer{ struct WorkerTabViewer{ workers: Arc>>>, positions: Arc>>>, - add_modal: egui::Modal, - + show_add_modal: bool, + add_worker_name: String, + selected_position: String, + add_worker_hire_date: String, + can_add: bool } impl WorkerTabViewer{ fn show_worker(&mut self, ui: &mut egui::Ui){ ui.horizontal(|ui|{ if ui.button("Добавить").clicked() { - &self.add_modal.show(ui.ctx(), |ui|{ - ui.label("goida"); - }); + self.show_add_modal = true; + self.add_worker_name = String::new(); + self.selected_position = String::new(); + }; if ui.button("Уволить").clicked() { } }); + if self.show_add_modal{ + egui::Modal::new("add".into()).show(ui.ctx(), |ui|{ + if ui.button("Закрыть").clicked(){ + self.show_add_modal = false; + } + ui.horizontal(|ui|{ + ui.vertical(|ui|{ + ui.label("Имя сотрудника:"); + ui.label("Дата найма:"); + ui.label("Должность:"); + }); + ui.vertical(|ui|{ + ui.text_edit_singleline(&mut self.add_worker_name); + + + ui.text_edit_singleline(&mut self.add_worker_hire_date); + + + egui::ComboBox::from_label("Выбрать!") + .selected_text(format!("{}",self.selected_position)) + .show_ui(ui, |ui|{ + ui.selectable_value(&mut self.selected_position, "Гойдазовчик".to_owned(), "Гойдазовчик"); + ui.selectable_value(&mut self.selected_position, "Гойдазовчик1".to_owned(), "Гойдазовчик"); + ui.selectable_value(&mut self.selected_position, "Гойдазовчик2".to_owned(), "Гойдазовчик"); + }); + }); + }); + + + if(chrono::NaiveDate::parse_from_str(&self.add_worker_hire_date, "%d-%m-%Y").is_err()){ + ui.label(egui::RichText::new("ДАТА УКАЗАНА НЕВЕРНО").color(egui::Color32::RED)); + self.can_add = false; + }else{ + self.can_add = true; + } + ui.vertical_centered(|ui|{ + let resp = ui.add_enabled(self.can_add, egui::Button::new("Добавить")); + if resp.clicked(){ + println!("Гойда!!"); + } + // if ui.button("Добавить").clicked(){ + + // } + }); + + }); + } for wk in self.workers.read().clone().unwrap().iter(){ ui.push_id(format!("{}:{}",&wk.full_name,&wk.id),|ui| { egui::CollapsingHeader::new(format!("#{:08} | {}",&wk.id,&wk.full_name)) @@ -333,7 +385,11 @@ impl Default for WorkerTabViewer{ let db_oper = rt.block_on(async{DBOperator::new().await}); Self { workers: Arc::new(RwLock::new(Option::Some(rt.block_on(async{db_oper.get_workers().await.unwrap()})))) , positions: Arc::new(RwLock::new(Option::Some(rt.block_on(async{db_oper.get_position().await.unwrap()})))), - add_modal: egui::Modal::new(egui::Id::new("Добавление")), + show_add_modal: false, + add_worker_name: String::new(), + selected_position: String::new(), + add_worker_hire_date: String::new(), + can_add: false, } } } \ No newline at end of file