feat: admin own company option in dropdown + fix company=own routing + bump 0.4.5
This commit is contained in:
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "ipwhitelist",
|
"name": "ipwhitelist",
|
||||||
"version": "0.4.4",
|
"version": "0.4.5",
|
||||||
"description": "IP WhiteList microservice for cloud provider",
|
"description": "IP WhiteList microservice for cloud provider",
|
||||||
"main": "server.js",
|
"main": "server.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
+18
-6
@@ -17,13 +17,16 @@ function createRouter() {
|
|||||||
// Вычислить URL для возврата (с учётом выбранной компании)
|
// Вычислить URL для возврата (с учётом выбранной компании)
|
||||||
function backUrl(req) {
|
function backUrl(req) {
|
||||||
const companyId = req.query.company || (req.body && req.body.company_id);
|
const companyId = req.query.company || (req.body && req.body.company_id);
|
||||||
return companyId ? '/?company=' + companyId : '/';
|
if (!companyId || companyId === 'own') return '/?company=own';
|
||||||
|
return '/?company=' + companyId;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Суффикс ?company=<id> для вызовов API
|
// Суффикс ?company=<id> для вызовов API
|
||||||
|
// 'own' = компания admin без ?company — API использует getOrCreateCompany
|
||||||
function companyQuery(req) {
|
function companyQuery(req) {
|
||||||
const companyId = req.query.company || (req.body && req.body.company_id);
|
const companyId = req.query.company || (req.body && req.body.company_id);
|
||||||
return companyId ? '?company=' + companyId : '';
|
if (!companyId || companyId === 'own') return '';
|
||||||
|
return '?company=' + companyId;
|
||||||
}
|
}
|
||||||
|
|
||||||
// GET / — список записей
|
// GET / — список записей
|
||||||
@@ -36,13 +39,21 @@ function createRouter() {
|
|||||||
const cr = await api.get('/api/v1/companies', token);
|
const cr = await api.get('/api/v1/companies', token);
|
||||||
companies = cr.data.companies || [];
|
companies = cr.data.companies || [];
|
||||||
|
|
||||||
const companyId = req.query.company ? parseInt(req.query.company, 10) : null;
|
const companyParam = req.query.company || '';
|
||||||
|
const companyId = companyParam && companyParam !== 'own' ? parseInt(companyParam, 10) : null;
|
||||||
|
|
||||||
// Если company не выбрана — редиректим на первую в списке
|
// Без параметра — редирект на свою компанию
|
||||||
if (!companyId && companies.length > 0) {
|
if (!companyParam) {
|
||||||
return res.redirect('/?company=' + companies[0].id);
|
return res.redirect('/?company=own');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (companyParam === 'own') {
|
||||||
|
// Собственные записи admin (getOrCreateCompany внутри API)
|
||||||
|
const er = await api.get('/api/v1/entries', token);
|
||||||
|
entries = er.data.entries || [];
|
||||||
|
limit = er.data.limit || 15;
|
||||||
|
selectedCompany = { id: 'own', name: 'Моя компания', client_id: req.user.clientId };
|
||||||
|
} else {
|
||||||
selectedCompany = companyId ? companies.find(c => c.id === companyId) || null : null;
|
selectedCompany = companyId ? companies.find(c => c.id === companyId) || null : null;
|
||||||
|
|
||||||
if (selectedCompany) {
|
if (selectedCompany) {
|
||||||
@@ -50,6 +61,7 @@ function createRouter() {
|
|||||||
entries = er.data.entries || [];
|
entries = er.data.entries || [];
|
||||||
limit = er.data.limit || selectedCompany.custom_limit || selectedCompany.default_limit || 15;
|
limit = er.data.limit || selectedCompany.custom_limit || selectedCompany.default_limit || 15;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
const er = await api.get('/api/v1/entries', token);
|
const er = await api.get('/api/v1/entries', token);
|
||||||
entries = er.data.entries || [];
|
entries = er.data.entries || [];
|
||||||
|
|||||||
+3
-2
@@ -176,7 +176,7 @@
|
|||||||
// Для admin: selectedCompany — выбранная компания (объект из getAllCompanies).
|
// Для admin: selectedCompany — выбранная компания (объект из getAllCompanies).
|
||||||
// Для обычного пользователя: selectedCompany — их компания (из getOrCreateCompany).
|
// Для обычного пользователя: selectedCompany — их компания (из getOrCreateCompany).
|
||||||
// company_id — числовой PK для передачи в скрытые поля форм.
|
// company_id — числовой PK для передачи в скрытые поля форм.
|
||||||
const companyPk = selectedCompany ? selectedCompany.id : null;
|
const companyPk = selectedCompany ? (selectedCompany.id === 'own' ? null : selectedCompany.id) : null;
|
||||||
%>
|
%>
|
||||||
|
|
||||||
<!-- Переключатель компании — только для администратора -->
|
<!-- Переключатель компании — только для администратора -->
|
||||||
@@ -187,6 +187,7 @@
|
|||||||
<span style="font-size:.85rem;color:var(--muted);font-weight:500;">Компания:</span>
|
<span style="font-size:.85rem;color:var(--muted);font-weight:500;">Компания:</span>
|
||||||
<select name="company" id="company-select"
|
<select name="company" id="company-select"
|
||||||
style="padding:.4rem .75rem;border:1px solid var(--border);border-radius:6px;font-size:.85rem;background:#fff;">
|
style="padding:.4rem .75rem;border:1px solid var(--border);border-radius:6px;font-size:.85rem;background:#fff;">
|
||||||
|
<option value="own" <%= selectedCompany && selectedCompany.id === 'own' ? 'selected' : '' %>>Моя компания (<%= user.clientId %>)</option>
|
||||||
<% companies.forEach(c => { %>
|
<% companies.forEach(c => { %>
|
||||||
<option value="<%= c.id %>" <%= selectedCompany && c.id === selectedCompany.id ? 'selected' : '' %>>
|
<option value="<%= c.id %>" <%= selectedCompany && c.id === selectedCompany.id ? 'selected' : '' %>>
|
||||||
<%= c.name %> (<%= c.client_id %>) — <%= c.active_count %> зап.
|
<%= c.name %> (<%= c.client_id %>) — <%= c.active_count %> зап.
|
||||||
@@ -195,7 +196,7 @@
|
|||||||
</select>
|
</select>
|
||||||
<!-- Быстрый доступ к admin-страницам прямо из главной -->
|
<!-- Быстрый доступ к admin-страницам прямо из главной -->
|
||||||
<button type="submit" class="btn btn-sm">Выбрать</button>
|
<button type="submit" class="btn btn-sm">Выбрать</button>
|
||||||
<a href="/audit<%= selectedCompany ? '?company=' + selectedCompany.id : '' %>"
|
<a href="/audit<%= selectedCompany && selectedCompany.id !== 'own' ? '?company=' + selectedCompany.id : '' %>"
|
||||||
style="font-size:.82rem;color:var(--muted);text-decoration:none;">→ Аудит этой компании</a>
|
style="font-size:.82rem;color:var(--muted);text-decoration:none;">→ Аудит этой компании</a>
|
||||||
<a href="/admin"
|
<a href="/admin"
|
||||||
style="font-size:.82rem;color:var(--muted);text-decoration:none;">→ Лимиты</a>
|
style="font-size:.82rem;color:var(--muted);text-decoration:none;">→ Лимиты</a>
|
||||||
|
|||||||
Reference in New Issue
Block a user