// Данные приказов (изначально - пример из задачи)
const defaultOrders = [
{
id: 1,
date: "2026-09-15T12:07",
author: "БАКИРОВА А.Н.",
branch: "ОДС",
title: "«Желі» дивизионы» бірлестігінде штаттық бірліктерді қысқарту туралы/О сокращении штатных единиц в Объединении «Дивизион «Сеть»»",
content: `ОБЩИЕ РЕКВИЗИТЫ
Срок согласования: 06.10.2026 23:59:59
Количество согласующих: 5
Подтверждающий Руководитель: Камыспаева А.Т.
СПИСОК СОГЛАСОВАНИЯ:
Камыспаева А.Т., Раимханов Г.Ж., Бимендеев Ж.А., Баимбетов А.К., Черных О.Л.
ДОПОЛНИТЕЛЬНЫЕ СОГЛАСУЮЩИЕ:
Дуйсенбаева А.Б., Сарсенбекова Дидар Саматовна
СОДЕРЖАНИЕ:
Во исполнение подпункта 1 пункта 1 решения Правления АО «Казахтелеком» от 14.09.2026 №41/127 «Об оптимизации штатных единиц в ОДС, СФ и ДЦБ», ПРИКАЗЫВАЮ:
1. Сократить следующие штатные единицы ОДС, согласно приложению к приказу...
ПОДПИСИ:
15.09.2026 12:32:51: СОГЛАСЕН Бимендеев Ж.А. (Еmployee experiеnсe директор)
15.09.2026 14:35:44: СОГЛАСЕН Камыспаева А.Т. (Бизнес партнер по анализу и вознаграждению C&B)
16.09.2026 08:37:42: СОГЛАСЕН Раимханов Г.Ж. (Директор по эксплуатации)`
}
];
// Загрузка данных из localStorage или использование default
let orders = JSON.parse(localStorage.getItem('orders')) || defaultOrders;
// Сохранение данных
function saveOrders() {
localStorage.setItem('orders', JSON.stringify(orders));
}
// Проверка авторизации
function checkAuth() {
const isLoggedIn = localStorage.getItem('isLoggedIn');
if (isLoggedIn === 'true') {
showMainScreen();
}
}
// Вход
function login() {
localStorage.setItem('isLoggedIn', 'true');
showMainScreen();
}
// Выход
function logout() {
localStorage.setItem('isLoggedIn', 'false');
location.reload();
}
// Показать главный экран
function showMainScreen() {
document.getElementById('loginScreen').classList.add('hidden');
document.getElementById('mainScreen').classList.remove('hidden');
renderOrders();
updateStats();
}
// Рендер приказов
function renderOrders(filterBranch = '', searchQuery = '') {
const container = document.getElementById('ordersList');
let filtered = orders;
if (filterBranch) {
filtered = filtered.filter(o => o.branch === filterBranch);
}
if (searchQuery) {
const q = searchQuery.toLowerCase();
filtered = filtered.filter(o =>
o.title.toLowerCase().includes(q) ||
o.author.toLowerCase().includes(q) ||
o.content.toLowerCase().includes(q)
);
}
if (filtered.length === 0) {
container.innerHTML = '
Приказы не найдены
';
return;
}
container.innerHTML = filtered.map(order => {
const date = new Date(order.date).toLocaleString('ru-RU', {
day: '2-digit', month: '2-digit', year: '2-digit',
hour: '2-digit', minute: '2-digit'
});
return `
${date} • ${escapeHtml(order.author)}
`;
}).join('');
}
// Обновление статистики
function updateStats() {
const stats = {
'Total': orders.length,
'ДРБ': orders.filter(o => o.branch === 'ДРБ').length,
'СФ': orders.filter(o => o.branch === 'СФ').length,
'ДЦБ': orders.filter(o => o.branch === 'ДЦБ').length,
'ОДС': orders.filter(o => o.branch === 'ОДС').length
};
document.getElementById('statTotal').textContent = stats['Total'];
document.getElementById('statДРБ').textContent = stats['ДРБ'];
document.getElementById('statСФ').textContent = stats['СФ'];
document.getElementById('statДЦБ').textContent = stats['ДЦБ'];
document.getElementById('statОДС').textContent = stats['ОДС'];
}
// Просмотр приказа
function viewOrder(id) {
const order = orders.find(o => o.id === id);
if (!order) return;
const date = new Date(order.date).toLocaleString('ru-RU', {
day: '2-digit', month: '2-digit', year: '2-digit',
hour: '2-digit', minute: '2-digit'
});
document.getElementById('modalTitle').textContent = order.title;
document.getElementById('modalBody').innerHTML = `
${order.branch}
${date}
Автор: ${escapeHtml(order.author)}
Содержание приказа
${escapeHtml(order.content)}
`;
document.getElementById('orderModal').classList.remove('hidden');
}
// Закрыть модальное окно
function closeModal() {
document.getElementById('orderModal').classList.add('hidden');
}
// Добавить приказ
function addOrder(orderData) {
const newOrder = {
id: Date.now(),
...orderData
};
orders.unshift(newOrder);
saveOrders();
renderOrders();
updateStats();
closeAddModal();
}
// Закрыть окно добавления
function closeAddModal() {
document.getElementById('addModal').classList.add('hidden');
document.getElementById('addOrderForm').reset();
}
// Экранирование HTML
function escapeHtml(text) {
const div = document.createElement('div');
div.textContent = text;
return div.innerHTML;
}
// Инициализация
document.addEventListener('DOMContentLoaded', () => {
checkAuth();
// Форма входа
document.getElementById('loginForm').addEventListener('submit', (e) => {
e.preventDefault();
login();
});
// Кнопка выхода
document.getElementById('logoutBtn').addEventListener('click', logout);
// Фильтр по филиалам
document.getElementById('branchFilter').addEventListener('change', (e) => {
const searchQuery = document.getElementById('searchInput').value;
renderOrders(e.target.value, searchQuery);
});
// Поиск
document.getElementById('searchInput').addEventListener('input', (e) => {
const branchFilter = document.getElementById('branchFilter').value;
renderOrders(branchFilter, e.target.value);
});
// Добавить приказ
document.getElementById('addOrderBtn').addEventListener('click', () => {
document.getElementById('addModal').classList.remove('hidden');
});
// Форма добавления приказа
document.getElementById('addOrderForm').addEventListener('submit', (e) => {
e.preventDefault();
const orderData = {
date: document.getElementById('orderDate').value,
author: document.getElementById('orderAuthor').value.toUpperCase(),
branch: document.getElementById('orderBranch').value,
title: document.getElementById('orderTitle').value,
content: document.getElementById('orderContent').value
};
addOrder(orderData);
});
// Закрытие модальных окон по клику на overlay
document.getElementById('orderModal').addEventListener('click', (e) => {
if (e.target === e.currentTarget) closeModal();
});
document.getElementById('addModal').addEventListener('click', (e) => {
if (e.target === e.currentTarget) closeAddModal();
});
// Закрытие по ESC
document.addEventListener('keydown', (e) => {
if (e.key === 'Escape') {
closeModal();
closeAddModal();
}
});
});