v0.5.2: multi-company, isAdmin fix, appVersion, docs
This commit is contained in:
+23
-10
@@ -33,6 +33,14 @@ function createRouter() {
|
||||
// GET / — список записей
|
||||
router.get('/', async (req, res) => {
|
||||
const token = api.token(req);
|
||||
|
||||
// ── Переключатель компании для мульти-компании ──────────────────────
|
||||
const switchTo = (req.query.switchTo || '').trim();
|
||||
if (!req.user.isAdmin && switchTo && req.user.allClientIds && req.user.allClientIds.includes(switchTo)) {
|
||||
req.session.user.activeClientId = switchTo;
|
||||
if (req.session.user.clientId) req.session.user.clientId = switchTo;
|
||||
}
|
||||
|
||||
try {
|
||||
let entries = [], limit = 15, selectedCompany = null, companies = [];
|
||||
|
||||
@@ -43,10 +51,8 @@ function createRouter() {
|
||||
const companyId = req.query.company ? parseInt(req.query.company, 10) : null;
|
||||
|
||||
if (!companyId) {
|
||||
// Найти свою компанию admin по clientId
|
||||
let ownCo = companies.find(c => c.client_id === req.user.clientId) || null;
|
||||
if (!ownCo) {
|
||||
// Компании нет — создаём через первый GET /entries (getOrCreateCompany внутри)
|
||||
await api.get('/api/v1/entries', token);
|
||||
const cr2 = await api.get('/api/v1/companies', token);
|
||||
ownCo = (cr2.data.companies || []).find(c => c.client_id === req.user.clientId) || null;
|
||||
@@ -61,30 +67,37 @@ function createRouter() {
|
||||
limit = er.data.limit || 15;
|
||||
}
|
||||
} else {
|
||||
// Обычный пользователь: запрашиваем записи для активной компании
|
||||
const activeClientId = req.user.activeClientId || req.user.clientId;
|
||||
const er = await api.get('/api/v1/entries', token);
|
||||
entries = er.data.entries || [];
|
||||
limit = er.data.limit || 15;
|
||||
}
|
||||
|
||||
const hasMultiple = !req.user.isAdmin && req.user.allClientIds && req.user.allClientIds.length > 1;
|
||||
|
||||
res.render('index', {
|
||||
entries,
|
||||
limit,
|
||||
used: entries.length,
|
||||
user: req.user,
|
||||
isAdmin: req.user.isAdmin,
|
||||
used: entries.length,
|
||||
user: req.user,
|
||||
isAdmin: req.user.isAdmin,
|
||||
companies,
|
||||
selectedCompany,
|
||||
error: req.query.error || null,
|
||||
success: req.query.success || null,
|
||||
lastValue: req.query.lastValue || '',
|
||||
lastComment: req.query.lastComment || '',
|
||||
csrfToken: '',
|
||||
allClientIds: hasMultiple ? req.user.allClientIds : null,
|
||||
activeClientId: req.user.activeClientId || req.user.clientId,
|
||||
error: req.query.error || null,
|
||||
success: req.query.success || null,
|
||||
lastValue: req.query.lastValue || '',
|
||||
lastComment: req.query.lastComment || '',
|
||||
csrfToken: '',
|
||||
});
|
||||
} catch (e) {
|
||||
res.render('index', {
|
||||
entries: [], limit: 15, used: 0,
|
||||
user: req.user, isAdmin: req.user.isAdmin,
|
||||
companies: [], selectedCompany: null,
|
||||
allClientIds: null, activeClientId: null,
|
||||
error: 'Ошибка загрузки: ' + e.message,
|
||||
success: null, lastValue: '', lastComment: '', csrfToken: '',
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user