From 10e89abaabae3e605eed28ef4520cbff154c8595 Mon Sep 17 00:00:00 2001 From: kalugin66 Date: Sat, 7 Feb 2026 14:58:59 +0500 Subject: [PATCH] =?UTF-8?q?=D0=93=D1=80=D1=83=D0=BF=D0=BF=D1=8B=202.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api2-groups.js | 28 +-- public/doc.css | 525 +++++++++++++++++++++++++++++++++++++++++++++++ public/doc.html | 536 +----------------------------------------------- public/doc.js | 2 +- 4 files changed, 543 insertions(+), 548 deletions(-) create mode 100644 public/doc.css diff --git a/api2-groups.js b/api2-groups.js index 045f614..90a898e 100644 --- a/api2-groups.js +++ b/api2-groups.js @@ -96,26 +96,14 @@ module.exports = function(app, db) { function addDefaultGroups() { const defaultGroups = [ { - name: 'Сбербанк - Сотрудники', - description: 'Идентификаторы сотрудников в системе Сбербанка', + name: 'Сбербанк', + description: 'Идентификаторы в системе Сбербанка', service_type: 'sberbank', is_active: true }, { - name: 'Сбербанк - Контрагенты', - description: 'Идентификаторы контрагентов в системе Сбербанка', - service_type: 'sberbank', - is_active: true - }, - { - name: 'Яндекс - Работники', - description: 'Идентификаторы работников в системе Яндекса', - service_type: 'yandex', - is_active: true - }, - { - name: 'Яндекс - Партнеры', - description: 'Идентификаторы партнеров в системе Яндекса', + name: 'Яндекс', + description: 'Идентификаторы в системе Яндекса', service_type: 'yandex', is_active: true }, @@ -127,7 +115,13 @@ module.exports = function(app, db) { }, { name: 'LDAP - Администрация', - description: 'Пользователи из LDAP с ролью администрации', + description: 'Пользователи из LDAP в группе Администрация', + service_type: 'ldap', + is_active: true + }, + { + name: 'LDAP - Руководство', + description: 'Руководители', service_type: 'ldap', is_active: true }, diff --git a/public/doc.css b/public/doc.css new file mode 100644 index 0000000..05758be --- /dev/null +++ b/public/doc.css @@ -0,0 +1,525 @@ + + * { + margin: 0; + padding: 0; + box-sizing: border-box; + } + + body { + font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; + background-color: #f5f5f5; + color: #333; + line-height: 1.6; + } + + .container { + max-width: 1400px; + margin: 0 auto; + padding: 20px; + } + + header { + background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); + color: white; + padding: 30px 0; + margin-bottom: 30px; + border-radius: 10px; + box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); + } + + .header-content { + display: flex; + justify-content: space-between; + align-items: center; + padding: 0 20px; + } + + h1 { + font-size: 2.5rem; + margin-bottom: 10px; + } + + .subtitle { + font-size: 1.1rem; + opacity: 0.9; + } + + .user-info { + background: rgba(255, 255, 255, 0.1); + padding: 15px 20px; + border-radius: 8px; + text-align: right; + } + + .user-name { + font-weight: bold; + font-size: 1.2rem; + } + + .user-role { + font-size: 0.9rem; + opacity: 0.8; + } + + .logout-btn { + background: #ff4757; + color: white; + border: none; + padding: 8px 16px; + border-radius: 4px; + cursor: pointer; + margin-top: 10px; + transition: background 0.3s; + } + + .logout-btn:hover { + background: #ff3742; + } + + .tabs { + display: flex; + background: white; + border-radius: 8px; + overflow: hidden; + margin-bottom: 20px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); + } + + .tab { + flex: 1; + padding: 15px 20px; + text-align: center; + cursor: pointer; + transition: all 0.3s; + font-weight: 500; + } + + .tab:hover { + background: #f8f9fa; + } + + .tab.active { + background: #667eea; + color: white; + } + + .tab-content { + display: none; + background: white; + padding: 30px; + border-radius: 8px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); + } + + .tab-content.active { + display: block; + animation: fadeIn 0.3s; + } + + @keyframes fadeIn { + from { opacity: 0; } + to { opacity: 1; } + } + + .controls { + display: flex; + gap: 10px; + margin-bottom: 20px; + flex-wrap: wrap; + } + + .search-box { + flex: 1; + min-width: 300px; + padding: 10px 15px; + border: 2px solid #e0e0e0; + border-radius: 8px; + font-size: 1rem; + transition: border-color 0.3s; + } + + .search-box:focus { + outline: none; + border-color: #667eea; + } + + .btn { + padding: 10px 20px; + border: none; + border-radius: 8px; + cursor: pointer; + font-weight: 500; + transition: all 0.3s; + display: flex; + align-items: center; + gap: 8px; + } + + .btn-primary { + background: #667eea; + color: white; + } + + .btn-primary:hover { + background: #5a67d8; + transform: translateY(-2px); + } + + .btn-success { + background: #48bb78; + color: white; + } + + .btn-success:hover { + background: #38a169; + transform: translateY(-2px); + } + + .btn-danger { + background: #f56565; + color: white; + } + + .btn-danger:hover { + background: #e53e3e; + transform: translateY(-2px); + } + + .btn-secondary { + background: #a0aec0; + color: white; + } + + .btn-secondary:hover { + background: #718096; + transform: translateY(-2px); + } + + .btn-small { + padding: 5px 10px; + font-size: 0.9rem; + } + + .filter-group { + display: flex; + gap: 10px; + align-items: center; + } + + .select { + padding: 10px 15px; + border: 2px solid #e0e0e0; + border-radius: 8px; + background: white; + font-size: 1rem; + min-width: 150px; + } + + .table-container { + overflow-x: auto; + border-radius: 8px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); + } + + table { + width: 100%; + border-collapse: collapse; + background: white; + } + + th { + background: #f8f9fa; + padding: 15px; + text-align: left; + font-weight: 600; + color: #4a5568; + border-bottom: 2px solid #e2e8f0; + } + + td { + padding: 15px; + border-bottom: 1px solid #e2e8f0; + vertical-align: top; + } + + tr:hover { + background: #f8fafc; + } + + .badge { + display: inline-block; + padding: 4px 8px; + border-radius: 4px; + font-size: 0.85rem; + font-weight: 500; + } + + .badge-sberbank { + background: #1c8b3f; + color: white; + } + + .badge-yandex { + background: #fc3f1d; + color: white; + } + + .badge-ldap { + background: #4c6ef5; + color: white; + } + + .badge-other { + background: #868e96; + color: white; + } + + .status-active { + color: #48bb78; + font-weight: 500; + } + + .status-inactive { + color: #f56565; + font-weight: 500; + } + + .actions { + display: flex; + gap: 5px; + } + + .modal { + display: none; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.5); + z-index: 1000; + align-items: center; + justify-content: center; + } + + .modal.active { + display: flex; + } + + .modal-content { + background: white; + border-radius: 10px; + width: 90%; + max-width: 800px; + max-height: 90vh; + overflow-y: auto; + animation: modalSlideIn 0.3s; + } + + @keyframes modalSlideIn { + from { + opacity: 0; + transform: translateY(-50px); + } + to { + opacity: 1; + transform: translateY(0); + } + } + + .modal-header { + padding: 20px; + background: #667eea; + color: white; + border-radius: 10px 10px 0 0; + display: flex; + justify-content: space-between; + align-items: center; + } + + .modal-body { + padding: 20px; + } + + .close-modal { + background: none; + border: none; + color: white; + font-size: 1.5rem; + cursor: pointer; + padding: 5px; + } + + .form-group { + margin-bottom: 20px; + } + + .form-group label { + display: block; + margin-bottom: 8px; + font-weight: 500; + color: #4a5568; + } + + .form-control { + width: 100%; + padding: 12px 15px; + border: 2px solid #e0e0e0; + border-radius: 8px; + font-size: 1rem; + transition: border-color 0.3s; + } + + .form-control:focus { + outline: none; + border-color: #667eea; + } + + .form-row { + display: flex; + gap: 20px; + margin-bottom: 20px; + } + + .form-row .form-group { + flex: 1; + } + + .json-editor { + font-family: 'Courier New', monospace; + min-height: 100px; + resize: vertical; + } + + .pagination { + display: flex; + justify-content: center; + align-items: center; + gap: 10px; + margin-top: 20px; + padding: 20px; + } + + .page-btn { + padding: 8px 15px; + border: 1px solid #e0e0e0; + background: white; + border-radius: 4px; + cursor: pointer; + transition: all 0.3s; + } + + .page-btn:hover:not(:disabled) { + background: #667eea; + color: white; + border-color: #667eea; + } + + .page-btn:disabled { + opacity: 0.5; + cursor: not-allowed; + } + + .stats-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); + gap: 20px; + margin-bottom: 30px; + } + + .stat-card { + background: white; + padding: 20px; + border-radius: 8px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); + text-align: center; + } + + .stat-value { + font-size: 2.5rem; + font-weight: bold; + color: #667eea; + margin: 10px 0; + } + + .stat-label { + color: #718096; + font-size: 0.9rem; + } + + .loading { + text-align: center; + padding: 40px; + color: #718096; + } + + .no-data { + text-align: center; + padding: 40px; + color: #a0aec0; + } + + .error { + background: #fed7d7; + color: #9b2c2c; + padding: 15px; + border-radius: 8px; + margin-bottom: 20px; + border-left: 4px solid #fc8181; + } + + .success { + background: #c6f6d5; + color: #276749; + padding: 15px; + border-radius: 8px; + margin-bottom: 20px; + border-left: 4px solid #68d391; + } + + .metadata-preview { + max-width: 300px; + max-height: 100px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + + .metadata-full { + max-height: 200px; + overflow-y: auto; + background: #f8f9fa; + padding: 10px; + border-radius: 4px; + font-family: 'Courier New', monospace; + font-size: 0.9rem; + } + + @media (max-width: 768px) { + .header-content { + flex-direction: column; + text-align: center; + gap: 20px; + } + + .user-info { + text-align: center; + } + + .controls { + flex-direction: column; + } + + .search-box { + min-width: 100%; + } + + .form-row { + flex-direction: column; + gap: 10px; + } + + .stats-grid { + grid-template-columns: 1fr; + } + } \ No newline at end of file diff --git a/public/doc.html b/public/doc.html index f7b28c7..7713874 100644 --- a/public/doc.html +++ b/public/doc.html @@ -4,532 +4,7 @@ Управление внешними идентификаторами - + @@ -537,15 +12,14 @@
-

Внешние идентификаторы

+

Группы 2.0

Управление идентификаторами пользователей в сторонних системах

@@ -557,9 +31,11 @@
Идентификаторы пользователей
+ diff --git a/public/doc.js b/public/doc.js index 2c28934..87da79c 100644 --- a/public/doc.js +++ b/public/doc.js @@ -40,7 +40,7 @@ loadGroups(); loadAllUsers(); loadIdUsers(); - loadStats(); + // loadStats(); } else { window.location.href = '/'; }