feat: add company sidebar filters, internal phone, mail icon fix, and update script

This commit is contained in:
2026-05-26 09:08:34 +07:00
parent 7e11d42bbb
commit fc4a283c0a
10 changed files with 250 additions and 27 deletions
+8 -5
View File
@@ -56,7 +56,7 @@ const ImportExport = ({ token, onRefreshData }) => {
throw new Error('CSV файл пуст или содержит недостаточно строк.');
}
// Expected Headers: ФИО;Компания;Отдел;Должность;Телефон;Email;Здание;Этаж
// Expected Headers: ФИО;Компания;Отдел;Должность;Телефон;Email;Здание;Этаж;Внутренний телефон
// Parse semicolon separated columns
const employees = [];
const departmentsSet = new Set();
@@ -74,7 +74,8 @@ const ImportExport = ({ token, onRefreshData }) => {
phone: values[4] || '',
email: values[5] || '',
building: values[6] || '',
floor: values[7] || ''
floor: values[7] || '',
internal_phone: values[8] || ''
};
if (emp.name && emp.job_title) {
@@ -108,6 +109,7 @@ const ImportExport = ({ token, onRefreshData }) => {
email: emp.email,
building: emp.building,
floor: emp.floor,
internal_phone: emp.internal_phone,
department_id: dept ? dept.id : null,
company_id: comp ? comp.id : null
};
@@ -174,7 +176,7 @@ const ImportExport = ({ token, onRefreshData }) => {
if (!res.ok) throw new Error('Ошибка экспорта данных с сервера');
const data = await res.json();
const headers = ['ФИО', 'Компания', 'Отдел', 'Должность', 'Телефон', 'Email', 'Здание', 'Этаж'];
const headers = ['ФИО', 'Компания', 'Отдел', 'Должность', 'Телефон', 'Email', 'Здание', 'Этаж', 'Внутренний телефон'];
// Semicolon separator
const csvRows = [headers.join(';')];
@@ -189,7 +191,8 @@ const ImportExport = ({ token, onRefreshData }) => {
`"${(emp.phone || '').replace(/"/g, '""')}"`,
`"${(emp.email || '').replace(/"/g, '""')}"`,
`"${(emp.building || '').replace(/"/g, '""')}"`,
`"${(emp.floor || '').replace(/"/g, '""')}"`
`"${(emp.floor || '').replace(/"/g, '""')}"`,
`"${(emp.internal_phone || '').replace(/"/g, '""')}"`
];
csvRows.push(row.join(';'));
}
@@ -246,7 +249,7 @@ const ImportExport = ({ token, onRefreshData }) => {
</div>
</form>
<p style={{ fontSize: '0.75rem', color: 'var(--text-muted)', marginTop: '0.75rem' }}>
* При импорте текущая база будет очищена и перезаписана! Структура колонок CSV (разделитель - <strong>точка с запятой ";"</strong>): ФИО;Компания;Отдел;Должность;Телефон;Email;Здание;Этаж. Кодировка UTF-8.
* При импорте текущая база будет очищена и перезаписана! Структура колонок CSV (разделитель - <strong>точка с запятой ";"</strong>): ФИО;Компания;Отдел;Должность;Телефон;Email;Здание;Этаж;Внутренний телефон. Кодировка UTF-8.
</p>
</div>