v2: басшылық пошта/телефондары + Алматы мемлекеттік органдары бөлімі

This commit is contained in:
Dauren777 2026-08-11 07:30:48 +00:00
parent 0af5fc4d2d
commit 56d78709f2
4 changed files with 74 additions and 17 deletions

View File

@ -10,14 +10,25 @@
{ "id": 2, "title": "Мүдделер қақтығысын декларациялау", "text": "Қызметкерлер жыл сайын мүдделер қақтығысы туралы декларация толтырады. Нысан шағым жәшігі бөлімінен алуға болады.", "date": "2026-08-05" } { "id": 2, "title": "Мүдделер қақтығысын декларациялау", "text": "Қызметкерлер жыл сайын мүдделер қақтығысы туралы декларация толтырады. Нысан шағым жәшігі бөлімінен алуға болады.", "date": "2026-08-05" }
], ],
"org": [ "org": [
{ "level": 1, "name": "Бас директор", "person": "Ерлан Қасымов" }, { "level": 1, "name": "Бас директор", "person": "Ерлан Қасымов", "email": "e.kasymov@qonaev.kz", "phone": "+7 (727) 300-10-01" },
{ "level": 2, "name": "Басқарма төрағасы", "person": "Гүлнара Әбенова" }, { "level": 2, "name": "Басқарма төрағасы", "person": "Гүлнара Әбенова", "email": "g.abenova@qonaev.kz", "phone": "+7 (727) 300-10-02" },
{ "level": 3, "name": "Қаржы дирекциясы", "person": "Серік Жұмабаев" }, { "level": 3, "name": "Қаржы дирекциясы", "person": "Серік Жұмабаев", "email": "s.zhumabaev@qonaev.kz", "phone": "+7 (727) 300-10-03" },
{ "level": 3, "name": "Эфир дирекциясы", "person": "Айжан Төлегенова" }, { "level": 3, "name": "Эфир дирекциясы", "person": "Айжан Төлегенова", "email": "a.tolegenova@qonaev.kz", "phone": "+7 (727) 300-10-04" },
{ "level": 3, "name": "Жаңалықтар дирекциясы", "person": "Марат Бекенов" }, { "level": 3, "name": "Жаңалықтар дирекциясы", "person": "Марат Бекенов", "email": "m.bekenov@qonaev.kz", "phone": "+7 (727) 300-10-05" },
{ "level": 3, "name": "Техникалық дирекция", "person": "Нұрлан Сыдықов" }, { "level": 3, "name": "Техникалық дирекция", "person": "Нұрлан Сыдықов", "email": "n.sydykov@qonaev.kz", "phone": "+7 (727) 300-10-06" },
{ "level": 3, "name": "HR және әкімшілік", "person": "Ләззат Қалиева" }, { "level": 3, "name": "HR және әкімшілік", "person": "Ләззат Қалиева", "email": "l.kalieva@qonaev.kz", "phone": "+7 (727) 300-10-07" },
{ "level": 4, "name": "Комплаенс қызметі", "person": "Асет (сіз)" } { "level": 4, "name": "Комплаенс қызметі", "person": "Асет (сіз)", "email": "compliance@qonaev.kz", "phone": "+7 (727) 300-10-08" }
],
"contacts": [
{ "org": "Антикор (ҚР Антикоррупциялық қызметі) Алматы қаласы бойынша департаменті", "type": "Ресми телефон", "phone": "8 (727) 278-73-24", "email": "almaty@nab.gov.kz", "note": "Мекенжай: Жібек Жолы даңғылы, 15" },
{ "org": "Антикор бірыңғай Call-орталығы", "type": "Сенім телефоны", "phone": "1424", "email": "", "note": "Қазақстан бойынша қоңырау тегін" },
{ "org": "Антикор WhatsApp-чат-бот", "type": "WhatsApp", "phone": "8 777 000 1424", "email": "", "note": "Хабарлама жіберуге болады" },
{ "org": "Алматы қаласы прокуратурасы", "type": "Кеңсе", "phone": "8 (727) 225-40-86", "email": "", "note": "Мекенжай: Желтоқсан көшесі, 189" },
{ "org": "Алматы қаласы прокуратурасы", "type": "Кезекші прокурор", "phone": "8 (727) 330-80-51", "email": "", "note": "Тәулік бойы" },
{ "org": "ҚР Бас прокуратурасы Call-орталығы", "type": "Сенім телефоны", "phone": "115", "email": "", "note": "Дс-жм 09:00–18:30, қоңырау тегін" },
{ "org": "Алматы қаласы Еңбек инспекциясы басқармасы", "type": "Ресми телефон", "phone": "+7 (727) 338-22-42", "email": "upr_gitm@mail.ru", "note": "Мекенжай: Достық даңғылы, 85" },
{ "org": "Алматы қаласы Еңбек инспекциясы (канцелярия)", "type": "Телефон", "phone": "8 (727) 374-94-47", "email": "kgu2016@mail.ru", "note": "" },
{ "org": "Алматы қаласы бойынша Мемлекеттік кірістер департаменті", "type": "Ресми телефон", "phone": "8 (7272) 267-15-54", "email": "", "note": "Мекенжай: Бөгенбай батыр көшесі, 132" }
], ],
"videos": [ "videos": [
{ "id": 1, "title": "Комплаенс деген не?", "desc": "Кіріспе: комплаенс жүйесінің негіздері, мақсаттары және рөлі.", "dur": "12 мин", "thumb": "https://picsum.photos/seed/compl1/480/270" }, { "id": 1, "title": "Комплаенс деген не?", "desc": "Кіріспе: комплаенс жүйесінің негіздері, мақсаттары және рөлі.", "dur": "12 мин", "thumb": "https://picsum.photos/seed/compl1/480/270" },

View File

@ -19,6 +19,7 @@ var state = {
var NAV = [ var NAV = [
{ id: "home", ico: "🏠", title: "Басты бет" }, { id: "home", ico: "🏠", title: "Басты бет" },
{ id: "org", ico: "🏛️", title: "Басшылық құрылымы" }, { id: "org", ico: "🏛️", title: "Басшылық құрылымы" },
{ id: "contacts", ico: "📞", title: "Мемлекеттік органдар" },
{ id: "video", ico: "🎬", title: "Видео сабақтар" }, { id: "video", ico: "🎬", title: "Видео сабақтар" },
{ id: "laws", ico: "⚖️", title: "Заң нормалары" }, { id: "laws", ico: "⚖️", title: "Заң нормалары" },
{ id: "complaints", ico: "✉️", title: "Шағым жәшігі" }, { id: "complaints", ico: "✉️", title: "Шағым жәшігі" },
@ -40,14 +41,25 @@ var MOCK_CONTENT = {
{ id: 2, title: "Мүдделер қақтығысын декларациялау", text: "Қызметкерлер жыл сайын мүдделер қақтығысы туралы декларация толтырады. Нысан шағым жәшігі бөлімінен алуға болады.", date: "2026-08-05" }, { id: 2, title: "Мүдделер қақтығысын декларациялау", text: "Қызметкерлер жыл сайын мүдделер қақтығысы туралы декларация толтырады. Нысан шағым жәшігі бөлімінен алуға болады.", date: "2026-08-05" },
], ],
org: [ org: [
{ level: 1, name: "Бас директор", person: "Ерлан Қасымов" }, { level: 1, name: "Бас директор", person: "Ерлан Қасымов", email: "e.kasymov@qonaev.kz", phone: "+7 (727) 300-10-01" },
{ level: 2, name: "Басқарма төрағасы", person: "Гүлнара Әбенова" }, { level: 2, name: "Басқарма төрағасы", person: "Гүлнара Әбенова", email: "g.abenova@qonaev.kz", phone: "+7 (727) 300-10-02" },
{ level: 3, name: "Қаржы дирекциясы", person: "Серік Жұмабаев" }, { level: 3, name: "Қаржы дирекциясы", person: "Серік Жұмабаев", email: "s.zhumabaev@qonaev.kz", phone: "+7 (727) 300-10-03" },
{ level: 3, name: "Эфир дирекциясы", person: "Айжан Төлегенова" }, { level: 3, name: "Эфир дирекциясы", person: "Айжан Төлегенова", email: "a.tolegenova@qonaev.kz", phone: "+7 (727) 300-10-04" },
{ level: 3, name: "Жаңалықтар дирекциясы", person: "Марат Бекенов" }, { level: 3, name: "Жаңалықтар дирекциясы", person: "Марат Бекенов", email: "m.bekenov@qonaev.kz", phone: "+7 (727) 300-10-05" },
{ level: 3, name: "Техникалық дирекция", person: "Нұрлан Сыдықов" }, { level: 3, name: "Техникалық дирекция", person: "Нұрлан Сыдықов", email: "n.sydykov@qonaev.kz", phone: "+7 (727) 300-10-06" },
{ level: 3, name: "HR және әкімшілік", person: "Ләззат Қалиева" }, { level: 3, name: "HR және әкімшілік", person: "Ләззат Қалиева", email: "l.kalieva@qonaev.kz", phone: "+7 (727) 300-10-07" },
{ level: 4, name: "Комплаенс қызметі", person: "Асет (сіз)" }, { level: 4, name: "Комплаенс қызметі", person: "Асет (сіз)", email: "compliance@qonaev.kz", phone: "+7 (727) 300-10-08" },
],
contacts: [
{ org: "Антикор (ҚР Антикоррупциялық қызметі) Алматы қаласы бойынша департаменті", type: "Ресми телефон", phone: "8 (727) 278-73-24", email: "almaty@nab.gov.kz", note: "Мекенжай: Жібек Жолы даңғылы, 15" },
{ org: "Антикор бірыңғай Call-орталығы", type: "Сенім телефоны", phone: "1424", email: "", note: "Қазақстан бойынша қоңырау тегін" },
{ org: "Антикор WhatsApp-чат-бот", type: "WhatsApp", phone: "8 777 000 1424", email: "", note: "Хабарлама жіберуге болады" },
{ org: "Алматы қаласы прокуратурасы", type: "Кеңсе", phone: "8 (727) 225-40-86", email: "", note: "Мекенжай: Желтоқсан көшесі, 189" },
{ org: "Алматы қаласы прокуратурасы", type: "Кезекші прокурор", phone: "8 (727) 330-80-51", email: "", note: "Тәулік бойы" },
{ org: "ҚР Бас прокуратурасы Call-орталығы", type: "Сенім телефоны", phone: "115", email: "", note: "Дс-жм 09:00–18:30, қоңырау тегін" },
{ org: "Алматы қаласы Еңбек инспекциясы басқармасы", type: "Ресми телефон", phone: "+7 (727) 338-22-42", email: "upr_gitm@mail.ru", note: "Мекенжай: Достық даңғылы, 85" },
{ org: "Алматы қаласы Еңбек инспекциясы (канцелярия)", type: "Телефон", phone: "8 (727) 374-94-47", email: "kgu2016@mail.ru", note: "" },
{ org: "Алматы қаласы бойынша Мемлекеттік кірістер департаменті", type: "Ресми телефон", phone: "8 (7272) 267-15-54", email: "", note: "Мекенжай: Бөгенбай батыр көшесі, 132" },
], ],
videos: [ videos: [
{ id: 1, title: "Комплаенс деген не?", desc: "Кіріспе: комплаенс жүйесінің негіздері, мақсаттары және рөлі.", dur: "12 мин", thumb: "https://picsum.photos/seed/compl1/480/270" }, { id: 1, title: "Комплаенс деген не?", desc: "Кіріспе: комплаенс жүйесінің негіздері, мақсаттары және рөлі.", dur: "12 мин", thumb: "https://picsum.photos/seed/compl1/480/270" },
@ -202,6 +214,7 @@ function go(page) {
c.innerHTML = ""; c.innerHTML = "";
if (page === "home") renderHome(c); if (page === "home") renderHome(c);
else if (page === "org") renderOrg(c); else if (page === "org") renderOrg(c);
else if (page === "contacts") renderContacts(c);
else if (page === "video") renderVideo(c); else if (page === "video") renderVideo(c);
else if (page === "laws") renderLaws(c); else if (page === "laws") renderLaws(c);
else if (page === "complaints") renderComplaints(c); else if (page === "complaints") renderComplaints(c);
@ -275,7 +288,15 @@ function renderOrg(el) {
Object.keys(levels).sort(function (a, b) { return a - b; }).forEach(function (lv) { Object.keys(levels).sort(function (a, b) { return a - b; }).forEach(function (lv) {
html += '<div class="org-level">'; html += '<div class="org-level">';
levels[lv].forEach(function (o) { levels[lv].forEach(function (o) {
html += '<div class="org-card' + (o.level === 1 ? " top" : "") + '"><div class="org-name">' + esc(o.name) + '</div><div class="org-pos">' + esc(o.person) + "</div></div>"; html += '<div class="org-card' + (o.level === 1 ? " top" : "") + '">';
html += '<div class="org-name">' + esc(o.name) + '</div><div class="org-pos">' + esc(o.person) + "</div>";
if (o.phone || o.email) {
html += '<div class="org-contacts">';
if (o.phone) html += '<div class="org-c">📞 <a href="tel:' + esc(o.phone.replace(/\s|\(|\)|-/g, "")) + '">' + esc(o.phone) + "</a></div>";
if (o.email) html += '<div class="org-c">✉️ <a href="mailto:' + esc(o.email) + '">' + esc(o.email) + "</a></div>";
html += "</div>";
}
html += "</div>";
}); });
html += "</div>"; html += "</div>";
html += '<div class="org-arrow">▼</div>'; html += '<div class="org-arrow">▼</div>';
@ -284,6 +305,24 @@ function renderOrg(el) {
el.innerHTML = html; el.innerHTML = html;
} }
/* ---------------- МЕМЛЕКЕТТІК ОРГАНДАР ---------------- */
function renderContacts(el) {
var list = state.content && state.content.contacts ? state.content.contacts : [];
var html = pageTitle("📞 Мемлекеттік органдар — Алматы қаласы");
html += '<p class="muted" style="margin-bottom:16px">Комплаенс мәселелері бойынша хабарласуға болатын мемлекеттік органдардың ресми байланыс деректері.</p>';
html += '<div class="grid grid-2">';
list.forEach(function (c) {
html += '<div class="card"><div class="spread"><h3>' + esc(c.org) + '</h3><span class="cat-tag">' + esc(c.type) + "</span></div>";
html += '<div style="margin-top:12px">';
if (c.phone) html += '<div class="org-c">📞 <a href="tel:' + esc(c.phone.replace(/\s|\(|\)|-/g, "")) + '"><b>' + esc(c.phone) + "</b></a></div>";
if (c.email) html += '<div class="org-c">✉️ <a href="mailto:' + esc(c.email) + '">' + esc(c.email) + "</a></div>";
if (c.note) html += '<div class="org-c muted">📍 ' + esc(c.note) + "</div>";
html += "</div></div>";
});
html += "</div>";
el.innerHTML = html;
}
/* ---------------- ВИДЕО ---------------- */ /* ---------------- ВИДЕО ---------------- */
function renderVideo(el) { function renderVideo(el) {
var vids = state.content ? state.content.videos : []; var vids = state.content ? state.content.videos : [];

View File

@ -65,6 +65,7 @@ http.createServer(async (req, res) => {
return send(res, 200, { ok: true, data: { return send(res, 200, { ok: true, data: {
announcements: db.announcements, announcements: db.announcements,
org: db.org, org: db.org,
contacts: db.contacts,
videos: db.videos, videos: db.videos,
laws: db.laws, laws: db.laws,
tests: db.tests.map((t) => ({ tests: db.tests.map((t) => ({

View File

@ -158,6 +158,12 @@ tr:last-child td{border-bottom:none}
.org-name{font-weight:700;font-size:15px} .org-name{font-weight:700;font-size:15px}
.org-pos{font-size:12px;color:var(--gray-500);margin-top:2px} .org-pos{font-size:12px;color:var(--gray-500);margin-top:2px}
.org-card.top .org-pos{color:#9AA6BB} .org-card.top .org-pos{color:#9AA6BB}
.org-contacts{margin-top:8px;padding-top:8px;border-top:1px solid #EEF1F6;text-align:left}
.org-c{font-size:12px;margin-bottom:3px;word-break:break-all}
.org-c a{color:var(--accent);text-decoration:none}
.org-c a:hover{text-decoration:underline}
.org-card.top .org-contacts{border-color:rgba(255,255,255,.12)}
.org-card.top .org-c a{color:var(--cyan)}
.org-arrow{text-align:center;color:var(--gray-500);font-size:20px;padding:6px 0} .org-arrow{text-align:center;color:var(--gray-500);font-size:20px;padding:6px 0}
/* ===== ВИДЕО ===== */ /* ===== ВИДЕО ===== */