131 lines
7.2 KiB
HTML
Executable File
131 lines
7.2 KiB
HTML
Executable File
{% extends "base.html" %}
|
|
|
|
{% block title %}Settings{% endblock %}
|
|
|
|
{% block content %}
|
|
<div class="card-container">
|
|
<div class="card">
|
|
<h3>Manage Users</h3>
|
|
<ul class="user-list">
|
|
{% for user in users %}
|
|
<li data-user-id="{{ user.id }}" data-username="{{ user.username }}" data-email="{{ user.email if user.email else '' }}" data-role="{{ user.role }}">
|
|
<span class="user-name">{{ user.username }}</span>
|
|
<span class="user-role">Role: {{ user.role }}</span>
|
|
<button class="btn edit-user-btn" data-user-id="{{ user.id }}" data-username="{{ user.username }}" data-email="{{ user.email if user.email else '' }}" data-role="{{ user.role }}">Edit User</button>
|
|
<button class="btn delete-btn delete-user-btn" data-user-id="{{ user.id }}" data-username="{{ user.username }}">Delete User</button>
|
|
</li>
|
|
{% endfor %}
|
|
</ul>
|
|
<button id="create-user-btn" class="btn create-btn">Create User</button>
|
|
</div>
|
|
|
|
<div class="card">
|
|
<h3>External Server Settings</h3>
|
|
<form method="POST" action="{{ url_for('main.save_external_db') }}" class="form-centered">
|
|
<label for="server_domain">Server Domain/IP Address:</label>
|
|
<input type="text" id="server_domain" name="server_domain" value="{{ external_settings.get('server_domain', '') }}" required>
|
|
<label for="port">Port:</label>
|
|
<input type="number" id="port" name="port" value="{{ external_settings.get('port', '') }}" required>
|
|
<label for="database_name">Database Name:</label>
|
|
<input type="text" id="database_name" name="database_name" value="{{ external_settings.get('database_name', '') }}" required>
|
|
<label for="username">Username:</label>
|
|
<input type="text" id="username" name="username" value="{{ external_settings.get('username', '') }}" required>
|
|
<label for="password">Password:</label>
|
|
<input type="password" id="password" name="password" value="{{ external_settings.get('password', '') }}" required>
|
|
<button type="submit" class="btn">Save/Update External Database Info Settings</button>
|
|
</form>
|
|
</div>
|
|
|
|
<div class="card" style="margin-top: 32px;">
|
|
<h3>Role & Permissions Management</h3>
|
|
<p>Configure granular permissions for each role in the system with expandable sections and detailed access control.</p>
|
|
<a href="{{ url_for('main.role_permissions') }}" class="btn">Manage Role Permissions</a>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Popup for creating/editing a user -->
|
|
<div id="user-popup" class="popup" style="display:none; position:fixed; top:0; left:0; width:100vw; height:100vh; background:var(--app-overlay-bg, rgba(30,41,59,0.85)); z-index:9999; align-items:center; justify-content:center;">
|
|
<div class="popup-content" style="margin:auto; padding:32px; border-radius:8px; box-shadow:0 2px 8px #333; min-width:320px; max-width:400px; text-align:center;">
|
|
<h3 id="user-popup-title">Create/Edit User</h3>
|
|
<form id="user-form" method="POST" action="{{ url_for('main.create_user') }}">
|
|
<input type="hidden" id="user-id" name="user_id">
|
|
<label for="username">Username:</label>
|
|
<input type="text" id="username" name="username" required>
|
|
<label for="email">Email (Optional):</label>
|
|
<input type="email" id="email" name="email">
|
|
<label for="password">Password:</label>
|
|
<input type="password" id="password" name="password" required>
|
|
<label for="role">Role:</label>
|
|
<select id="role" name="role" required>
|
|
<option value="superadmin">Superadmin</option>
|
|
<option value="admin">Admin</option>
|
|
<option value="manager">Manager</option>
|
|
<option value="warehouse_manager">Warehouse Manager</option>
|
|
<option value="warehouse_worker">Warehouse Worker</option>
|
|
<option value="quality_manager">Quality Manager</option>
|
|
<option value="quality_worker">Quality Worker</option>
|
|
</select>
|
|
<button type="submit" class="btn">Save</button>
|
|
<button type="button" id="close-user-popup-btn" class="btn cancel-btn">Cancel</button>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Popup for confirming user deletion -->
|
|
<div id="delete-user-popup" class="popup">
|
|
<div class="popup-content">
|
|
<h3>Do you really want to delete the user <span id="delete-username"></span>?</h3>
|
|
<form id="delete-user-form" method="POST" action="{{ url_for('main.delete_user') }}">
|
|
<input type="hidden" id="delete-user-id" name="user_id">
|
|
<button type="submit" class="btn delete-confirm-btn">Yes</button>
|
|
<button type="button" id="close-delete-popup-btn" class="btn cancel-btn">No</button>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
<script>
|
|
document.getElementById('create-user-btn').onclick = function() {
|
|
document.getElementById('user-popup').style.display = 'flex';
|
|
document.getElementById('user-popup-title').innerText = 'Create User';
|
|
document.getElementById('user-form').reset();
|
|
document.getElementById('user-form').setAttribute('action', '{{ url_for("main.create_user") }}');
|
|
document.getElementById('user-id').value = '';
|
|
document.getElementById('password').required = true;
|
|
document.getElementById('password').placeholder = '';
|
|
document.getElementById('username').readOnly = false;
|
|
};
|
|
|
|
document.getElementById('close-user-popup-btn').onclick = function() {
|
|
document.getElementById('user-popup').style.display = 'none';
|
|
};
|
|
|
|
// Edit User button logic
|
|
Array.from(document.getElementsByClassName('edit-user-btn')).forEach(function(btn) {
|
|
btn.onclick = function() {
|
|
document.getElementById('user-popup').style.display = 'flex';
|
|
document.getElementById('user-popup-title').innerText = 'Edit User';
|
|
document.getElementById('user-id').value = btn.getAttribute('data-user-id');
|
|
document.getElementById('username').value = btn.getAttribute('data-username');
|
|
document.getElementById('email').value = btn.getAttribute('data-email') || '';
|
|
document.getElementById('role').value = btn.getAttribute('data-role');
|
|
document.getElementById('password').value = '';
|
|
document.getElementById('password').required = false;
|
|
document.getElementById('password').placeholder = 'Leave blank to keep current password';
|
|
document.getElementById('username').readOnly = true;
|
|
document.getElementById('user-form').setAttribute('action', '{{ url_for("main.edit_user") }}');
|
|
};
|
|
});
|
|
|
|
// Delete User button logic
|
|
Array.from(document.getElementsByClassName('delete-user-btn')).forEach(function(btn) {
|
|
btn.onclick = function() {
|
|
document.getElementById('delete-user-popup').style.display = 'flex';
|
|
document.getElementById('delete-username').innerText = btn.getAttribute('data-username');
|
|
document.getElementById('delete-user-id').value = btn.getAttribute('data-user-id');
|
|
};
|
|
});
|
|
|
|
document.getElementById('close-delete-popup-btn').onclick = function() {
|
|
document.getElementById('delete-user-popup').style.display = 'none';
|
|
};
|
|
</script>
|
|
{% endblock %} |