fix: город, кнопки удаления в ИС, убрана колонка Доступ к ИС
This commit is contained in:
+21
-10
@@ -338,12 +338,18 @@ class DokoGenApp:
|
||||
nb2 = ttk.Notebook(self._is_edit_panel)
|
||||
nb2.pack(fill=tk.BOTH, expand=True, padx=10, pady=10)
|
||||
|
||||
# Список ПДн
|
||||
pd_tab = ttk.Frame(nb2)
|
||||
nb2.add(pd_tab, text="Перечень ПДн")
|
||||
pd_btn_frame = ttk.Frame(pd_tab)
|
||||
pd_btn_frame.pack(fill=tk.X)
|
||||
# Список ПДн
|
||||
pd_tab = ttk.Frame(nb2)
|
||||
nb2.add(pd_tab, text="Перечень ПДн")
|
||||
pd_btn_frame = ttk.Frame(pd_tab)
|
||||
pd_btn_frame.pack(fill=tk.X)
|
||||
ttk.Button(pd_btn_frame, text="+ Добавить", command=self._add_pd_item).pack(side=tk.LEFT, padx=2)
|
||||
ttk.Button(pd_btn_frame, text="- Удалить", command=lambda: self._del_from_listbox(self.pd_listbox)).pack(side=tk.LEFT, padx=2)
|
||||
ttk.Button(pd_btn_frame, text="Выбрать из списка", command=self._select_from_pd_list).pack(side=tk.LEFT, padx=2)
|
||||
self.pd_listbox = tk.Listbox(pd_tab, height=6)
|
||||
self.pd_listbox.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
|
||||
@@ -354,6 +360,7 @@ class DokoGenApp:
|
||||
subj_btn_frame = ttk.Frame(subj_tab)
|
||||
subj_btn_frame.pack(fill=tk.X)
|
||||
ttk.Button(subj_btn_frame, text="+ Добавить", command=self._add_pd_subjects_item).pack(side=tk.LEFT, padx=2)
|
||||
ttk.Button(subj_btn_frame, text="- Удалить", command=lambda: self._del_from_listbox(self.pd_subjects_listbox)).pack(side=tk.LEFT, padx=2)
|
||||
ttk.Button(subj_btn_frame, text="Выбрать из списка", command=self._select_from_subjects_list).pack(side=tk.LEFT, padx=2)
|
||||
self.pd_subjects_listbox = tk.Listbox(subj_tab, height=6)
|
||||
self.pd_subjects_listbox.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
|
||||
@@ -364,6 +371,7 @@ class DokoGenApp:
|
||||
act_btn_frame = ttk.Frame(act_tab)
|
||||
act_btn_frame.pack(fill=tk.X)
|
||||
ttk.Button(act_btn_frame, text="+ Добавить", command=self._add_pd_action_item).pack(side=tk.LEFT, padx=2)
|
||||
ttk.Button(act_btn_frame, text="- Удалить", command=lambda: self._del_from_listbox(self.pd_actions_listbox)).pack(side=tk.LEFT, padx=2)
|
||||
ttk.Button(act_btn_frame, text="Выбрать из списка", command=self._select_from_actions_list).pack(side=tk.LEFT, padx=2)
|
||||
self.pd_actions_listbox = tk.Listbox(act_tab, height=6)
|
||||
self.pd_actions_listbox.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
|
||||
@@ -374,6 +382,7 @@ class DokoGenApp:
|
||||
def_btn_frame = ttk.Frame(def_tab)
|
||||
def_btn_frame.pack(fill=tk.X)
|
||||
ttk.Button(def_btn_frame, text="+ Добавить", command=self._add_defense_item).pack(side=tk.LEFT, padx=2)
|
||||
ttk.Button(def_btn_frame, text="- Удалить", command=lambda: self._del_from_listbox(self.defense_tools_listbox)).pack(side=tk.LEFT, padx=2)
|
||||
ttk.Button(def_btn_frame, text="Выбрать из списка", command=self._select_from_defense_list).pack(side=tk.LEFT, padx=2)
|
||||
self.defense_tools_listbox = tk.Listbox(def_tab, height=6)
|
||||
self.defense_tools_listbox.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
|
||||
@@ -447,7 +456,7 @@ class DokoGenApp:
|
||||
# Заголовки
|
||||
header = ttk.Frame(frame)
|
||||
header.pack(fill=tk.X)
|
||||
for w, col in [(25, "Должность"), (30, "ФИО"), (30, "Доступ к ИС")]:
|
||||
for w, col in [(25, "Должность"), (30, "ФИО")]:
|
||||
ttk.Label(header, text=col, font=('', 9, 'bold'),
|
||||
width=w, anchor=tk.W).pack(side=tk.LEFT, padx=2)
|
||||
|
||||
@@ -471,11 +480,11 @@ class DokoGenApp:
|
||||
self._add_employee_row(
|
||||
emp.get('position', ''),
|
||||
emp.get('fio', ''),
|
||||
emp.get('is_list', ''),
|
||||
,
|
||||
)
|
||||
self._update_emp_count()
|
||||
|
||||
def _add_employee_row(self, position="", fio="", is_list=""):
|
||||
def _add_employee_row(self, position="", fio=""):
|
||||
"""Добавляет одну строку сотрудника."""
|
||||
row = ttk.Frame(self._employees_frame)
|
||||
row.pack(fill=tk.X, pady=2)
|
||||
@@ -488,9 +497,6 @@ class DokoGenApp:
|
||||
fio_entry.insert(0, fio)
|
||||
fio_entry.pack(side=tk.LEFT, padx=2)
|
||||
|
||||
is_entry = ttk.Entry(row, width=30)
|
||||
is_entry.insert(0, is_list if isinstance(is_list, str) else ', '.join(is_list))
|
||||
is_entry.pack(side=tk.LEFT, padx=2)
|
||||
|
||||
del_btn = ttk.Button(row, text="✖", width=3,
|
||||
command=lambda: self._delete_employee_row(row))
|
||||
@@ -525,7 +531,6 @@ class DokoGenApp:
|
||||
emp = {
|
||||
'position': pos_e.get().strip(),
|
||||
'fio': fio_e.get().strip(),
|
||||
'is_list': [s.strip() for s in is_e.get().split(',') if s.strip()],
|
||||
}
|
||||
if emp['position'] or emp['fio']:
|
||||
self.model.employees_access.append(emp)
|
||||
@@ -700,13 +705,13 @@ class DokoGenApp:
|
||||
"""Извлекает название города из адреса (простая эвристика)."""
|
||||
if not address:
|
||||
return ''
|
||||
# Пробуем найти "г. Город"
|
||||
# Пробуем найти "г. Город" или "Г Город" (без точки, заглавная)
|
||||
import re
|
||||
m = re.search(r'\bг\.\s*([А-ЯЁ][а-яёA-Za-z-]+(?:\s+[А-ЯЁ][а-яёA-Za-z-]+)*)', address)
|
||||
m = re.search(r'\b[гГ]\.?\s*([А-ЯЁ][а-яёA-Za-z-]+(?:\s+[А-ЯЁ][а-яёA-Za-z-]+)*)', address)
|
||||
if m:
|
||||
return m.group(1).strip()
|
||||
# Пробуем найти "город Город"
|
||||
m = re.search(r'\bгород\s+([А-ЯЁ][а-яёA-Za-z-]+(?:\s+[А-ЯЁ][а-яёA-Za-z-]+)*)', address)
|
||||
m = re.search(r'\bгород\s+([А-ЯЁ][а-яёA-Za-z-]+(?:\s+[А-ЯЁ][а-яёA-Za-z-]+)*)', address, re.IGNORECASE)
|
||||
if m:
|
||||
return m.group(1).strip()
|
||||
# Пробуем первую часть до запятой, если там известный город
|
||||
@@ -930,6 +935,12 @@ class DokoGenApp:
|
||||
if sel:
|
||||
self.users_listbox.delete(sel[0])
|
||||
|
||||
def _del_from_listbox(self, listbox):
|
||||
"""Удаление выбранного элемента из любого listbox."""
|
||||
sel = listbox.curselection()
|
||||
if sel:
|
||||
listbox.delete(sel[0])
|
||||
|
||||
# ==================== ВЫБОР ИЗ СПИСКА (словари) ====================
|
||||
def _select_from_dialog(self, title: str, items: list, listbox):
|
||||
"""Открывает окно с чекбоксами для выбора элементов из списка."""
|
||||
|
||||
Reference in New Issue
Block a user