(async () => { const token = localStorage.getItem('token'); const username = localStorage.getItem('username'); if (!token || !username) { window.location.href = '/login'; return; } // Проверка авторизации через сервер try { const response = await fetch('api/auth_check.php', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ username, token }) }); const result = await response.json(); if (!result.auth) { localStorage.removeItem('token'); localStorage.removeItem('username'); window.location.href = '/login'; } } catch (e) { console.error('Ошибка при проверке авторизации', e); window.location.href = '/login'; } })(); const { createApp } = Vue; createApp({ data() { return { activeTab: 'companies', isMenuOpen: false, storedEmail: localStorage.getItem('username') || '', newCompany: { name: '', ownerName: '', ownerPhone: '', ownerWA: '', ownerTG: '' }, allData: { companies: [], managers: [], owners: [], users: [], dialogs: [] }, newManager: { company_id: null, phone: '' }, selectedCompanyId: null, dialogOpenStates: {}, }; }, computed: { filteredManagers() { return this.allData.managers.filter(m => m.company == this.selectedCompanyId); } }, methods: { logout() { localStorage.removeItem('token'); localStorage.removeItem('username'); this.isAuthorized = false; window.location.href = '/login'; }, async fetchData() { try { const response = await fetch('/api/get_data.php'); const result = await response.json(); if (result.status === 'ok') { this.allData = result.data; } else { console.error('Ошибка: ', result.message || 'Не удалось загрузить данные'); alert('Ошибка при загрузке данных'); } } catch (error) { console.error('Ошибка сети или сервера: ', error); } }, async submitCompany() { try { const response = await fetch('/api/add_company.php', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(this.newCompany) }); const result = await response.json(); if (result.status === 'ok') { // Закрытие модального окна const modalElement = document.getElementById('addCompanyModal'); const modalInstance = bootstrap.Modal.getInstance(modalElement); modalInstance.hide(); // Сброс формы this.newCompany = { name: '', ownerName: '', ownerPhone: '', ownerWA: '', ownerTG: '' }; alert('Компания успешно добавлена!'); } else { alert(result.message || 'Ошибка при добавлении компании.'); } } catch (error) { console.error('Ошибка при отправке данных:', error); alert('Произошла ошибка при добавлении компании.'); } }, formatDate(dateStr) { const date = new Date(dateStr); return date.toLocaleDateString('ru-RU'); }, getOwnerByPhone(phone) { return this.allData.owners.find(owner => owner.company === phone || owner.tg === phone || owner.wa === phone || owner.phone === phone || owner.id === phone); }, getOwnerByCompany(companyId) { return this.allData.owners.find(owner => owner.company == companyId); }, openAddManagerModal(companyId) { this.newManager = { company_id: companyId, phone: '' }; const modal = new bootstrap.Modal(document.getElementById('addManagerModal')); modal.show(); }, async submitManager() { try { const formData = new FormData(); formData.append('company', this.newManager.company_id); formData.append('phone', this.newManager.phone); const response = await fetch('/api/add_manager.php', { method: 'POST', body: formData }); const result = await response.json(); if (result.status === 'ok') { alert('Менеджер успешно добавлен!'); document.getElementById('addManagerModal').classList.remove('show'); document.body.classList.remove('modal-open'); } else { alert(result.message || 'Ошибка при добавлении.'); } } catch (err) { console.error(err); alert('Ошибка отправки данных.'); } }, openManagersModal(companyId) { this.selectedCompanyId = companyId; }, toggleDialogs(managerPhone) { this.dialogOpenStates[managerPhone] = !this.dialogOpenStates[managerPhone]; }, }, mounted() { this.fetchData(); } }).mount('#app');