/* ===== Mock data for КРСУ Лаборатория БПЛА ===== */ window.DATA = (function(){ const aeronavigationLessons = [ { n:'01', title:'Основы аэронавигации: как беспилотник ориентируется в пространстве' }, { n:'02', title:'GNSS-навигация' }, { n:'03', title:'Инерциальная навигационная система (IMU)', extraAudio:true }, { n:'04', title:'Барометрический высотомер (барометр)' }, { n:'05', title:'Магнитометр (компас)' }, { n:'06', title:'Комбинированная навигация (фильтр Калмана)' }, { n:'07', title:'RTK-навигация' }, ]; const aeronavigationBase = 'uploads/courses/aeronavigation-bpla-part-1'; const aeronavigationMaterials = aeronavigationLessons.flatMap(({n,title,extraAudio})=>{ const lessonBase = `${aeronavigationBase}/lesson-${n}`; const items = [ { id:`aero-${n}-video`, title:`Урок ${Number(n)} · ${title} — видео`, type:'file', src:`${lessonBase}/video.mp4`, meta:'MP4 · видеоурок' }, { id:`aero-${n}-audio`, title:`Урок ${Number(n)} · ${title} — аудио`, type:'file', src:`${lessonBase}/audio.m4a`, meta:'M4A · аудиолекция' }, { id:`aero-${n}-pdf`, title:`Урок ${Number(n)} · ${title} — презентация PDF`, type:'file', src:`${lessonBase}/presentation.pdf`, meta:'PDF · презентация' }, { id:`aero-${n}-pptx`, title:`Урок ${Number(n)} · ${title} — презентация PowerPoint`, type:'file', src:`${lessonBase}/presentation.pptx`, meta:'PPTX · презентация' }, { id:`aero-${n}-notes`, title:`Урок ${Number(n)} · ${title} — конспект`, type:'file', src:`${lessonBase}/notes.docx`, meta:'DOCX · конспект' }, ]; if(extraAudio){ items.splice(2,0,{ id:'aero-03-audio-2', title:'Урок 3 · Инерциальная навигация (IMU) — дополнительное аудио', type:'file', src:`${lessonBase}/audio-2.m4a`, meta:'M4A · дополнительная аудиолекция' }); } return items; }); const aeronavigationPart2Lessons = [ { n:'01', title:'Навигационный треугольник скоростей' }, { n:'02', title:'Waypoints — точки маршрута' }, { n:'03', title:'Профиль полёта и классификация высот' }, { n:'04', title:'RTH (Return To Home) — возврат в точку взлёта' }, { n:'05', title:'Detect & Avoid (DAA) — обнаружение и избегание столкновений' }, ]; const aeronavigationPart2Base = 'uploads/courses/aeronavigation-bpla-part-2'; const aeronavigationPart2Materials = aeronavigationPart2Lessons.flatMap(({n,title})=>{ const lessonBase = `${aeronavigationPart2Base}/lesson-${n}`; return [ { id:`aero2-${n}-video`, title:`Урок ${Number(n)} · ${title} — видео`, type:'file', src:`${lessonBase}/video.mp4`, meta:'MP4 · видеоурок' }, { id:`aero2-${n}-audio`, title:`Урок ${Number(n)} · ${title} — аудио`, type:'file', src:`${lessonBase}/audio.m4a`, meta:'M4A · аудиолекция' }, { id:`aero2-${n}-pdf`, title:`Урок ${Number(n)} · ${title} — презентация PDF`, type:'file', src:`${lessonBase}/presentation.pdf`, meta:'PDF · презентация' }, { id:`aero2-${n}-pptx`, title:`Урок ${Number(n)} · ${title} — презентация PowerPoint`, type:'file', src:`${lessonBase}/presentation.pptx`, meta:'PPTX · презентация' }, { id:`aero2-${n}-notes`, title:`Урок ${Number(n)} · ${title} — конспект`, type:'file', src:`${lessonBase}/notes.docx`, meta:'DOCX · конспект' }, ]; }); const aviationMeteorologyPart1Lessons = [ { n:'01', title:'Строение атмосферы' }, { n:'02', title:'Метеорологические величины' }, { n:'03', title:'Местные ветры (бриз, фён, бора, горно-долинные)' }, { n:'04', title:'Вертикальные движения воздуха' }, ]; const aviationMeteorologyPart1Base = 'uploads/courses/aviation-meteorology-part-1'; const aviationMeteorologyPart1Materials = aviationMeteorologyPart1Lessons.flatMap(({n,title})=>{ const lessonBase = `${aviationMeteorologyPart1Base}/lesson-${n}`; return [ { id:`meteo1-${n}-video`, title:`Урок ${Number(n)} · ${title} — видео`, type:'file', src:`${lessonBase}/video.mp4`, meta:'MP4 · видеоурок' }, { id:`meteo1-${n}-audio`, title:`Урок ${Number(n)} · ${title} — аудио`, type:'file', src:`${lessonBase}/audio.m4a`, meta:'M4A · аудиолекция' }, { id:`meteo1-${n}-pdf`, title:`Урок ${Number(n)} · ${title} — презентация PDF`, type:'file', src:`${lessonBase}/presentation.pdf`, meta:'PDF · презентация' }, { id:`meteo1-${n}-pptx`, title:`Урок ${Number(n)} · ${title} — презентация PowerPoint`, type:'file', src:`${lessonBase}/presentation.pptx`, meta:'PPTX · презентация' }, { id:`meteo1-${n}-notes`, title:`Урок ${Number(n)} · ${title} — конспект`, type:'file', src:`${lessonBase}/notes.docx`, meta:'DOCX · конспект' }, ]; }); const aviationMeteorologyPart2Lessons = [ { n:'01', title:'Классификация облаков' }, { n:'02', title:'Осадки' }, { n:'03', title:'Изотермия', available:['notes'] }, { n:'04', title:'Тёплый и холодный фронты' }, { n:'05', title:'Циклон и антициклон' }, { n:'06', title:'Опасные метеоявления для БПЛА' }, { n:'07', title:'Авиационные прогнозы METAR и TAF' }, ]; const aviationMeteorologyPart2Base = 'uploads/courses/aviation-meteorology-part-2'; const aviationMeteorologyPart2Materials = aviationMeteorologyPart2Lessons.flatMap(({n,title,available})=>{ const lessonBase = `${aviationMeteorologyPart2Base}/lesson-${n}`; const items = [ {key:'video',value:{ id:`meteo2-${n}-video`, title:`Урок ${Number(n)} · ${title} — видео`, type:'file', src:`${lessonBase}/video.mp4`, meta:'MP4 · видеоурок' }}, {key:'audio',value:{ id:`meteo2-${n}-audio`, title:`Урок ${Number(n)} · ${title} — аудио`, type:'file', src:`${lessonBase}/audio.m4a`, meta:'M4A · аудиолекция' }}, {key:'pdf',value:{ id:`meteo2-${n}-pdf`, title:`Урок ${Number(n)} · ${title} — презентация PDF`, type:'file', src:`${lessonBase}/presentation.pdf`, meta:'PDF · презентация' }}, {key:'pptx',value:{ id:`meteo2-${n}-pptx`, title:`Урок ${Number(n)} · ${title} — презентация PowerPoint`, type:'file', src:`${lessonBase}/presentation.pptx`, meta:'PPTX · презентация' }}, {key:'notes',value:{ id:`meteo2-${n}-notes`, title:`Урок ${Number(n)} · ${title} — конспект`, type:'file', src:`${lessonBase}/notes.docx`, meta:'DOCX · конспект' }}, ]; return items.filter(item=>!available||available.includes(item.key)).map(item=>item.value); }); const kyrgyzLegalPart1Lessons = [ { n:'01', title:'Воздушный кодекс Кыргызской Республики', available:['notes'] }, { n:'02', title:'АПКР-6. Часть IV «Беспилотные летательные аппараты»' }, { n:'03', title:'Классификация БПЛА по массе' }, { n:'04', title:'Зоны полётов', available:['notes'] }, { n:'05', title:'Минимальные безопасные дистанции' }, ]; const kyrgyzLegalPart1Base = 'uploads/courses/kyrgyz-republic-legal-foundations-part-1'; const kyrgyzLegalPart1Materials = kyrgyzLegalPart1Lessons.flatMap(({n,title,available})=>{ const lessonBase = `${kyrgyzLegalPart1Base}/lesson-${n}`; const items = [ {key:'video',value:{ id:`legal1-${n}-video`, title:`Урок ${Number(n)} · ${title} — видео`, type:'file', src:`${lessonBase}/video.mp4`, meta:'MP4 · видеоурок' }}, {key:'audio',value:{ id:`legal1-${n}-audio`, title:`Урок ${Number(n)} · ${title} — аудио`, type:'file', src:`${lessonBase}/audio.m4a`, meta:'M4A · аудиолекция' }}, {key:'pdf',value:{ id:`legal1-${n}-pdf`, title:`Урок ${Number(n)} · ${title} — презентация PDF`, type:'file', src:`${lessonBase}/presentation.pdf`, meta:'PDF · презентация' }}, {key:'pptx',value:{ id:`legal1-${n}-pptx`, title:`Урок ${Number(n)} · ${title} — презентация PowerPoint`, type:'file', src:`${lessonBase}/presentation.pptx`, meta:'PPTX · презентация' }}, {key:'notes',value:{ id:`legal1-${n}-notes`, title:`Урок ${Number(n)} · ${title} — конспект`, type:'file', src:`${lessonBase}/notes.docx`, meta:'DOCX · конспект' }}, ]; return items.filter(item=>!available||available.includes(item.key)).map(item=>item.value); }); const kyrgyzLegalPart2Lessons = [ { n:'01', title:'Регистрация БПЛА', available:['video','audio','pdf','pptx'] }, { n:'02', title:'Регистрационный номер и маркировка', available:['notes'] }, { n:'03', title:'Требования к оператору и внешнему пилоту', available:['video','audio','pdf','pptx','notes'] }, { n:'04', title:'Ответственность за нарушение (ст. 311 УК КР)', available:['video','audio','pdf','pptx','notes'] }, { n:'05', title:'Документы при полёте', available:['video','audio','pdf','pptx','notes'] }, ]; const kyrgyzLegalPart2Base = 'uploads/courses/kyrgyz-republic-legal-foundations-part-2'; const kyrgyzLegalPart2Materials = kyrgyzLegalPart2Lessons.flatMap(({n,title,available})=>{ const lessonBase = `${kyrgyzLegalPart2Base}/lesson-${n}`; const items = [ { key:'video', value:{ id:`legal2-${n}-video`, title:`Урок ${Number(n)} · ${title} — видео`, type:'file', src:`${lessonBase}/video.mp4`, meta:'MP4 · видеоурок' } }, { key:'audio', value:{ id:`legal2-${n}-audio`, title:`Урок ${Number(n)} · ${title} — аудио`, type:'file', src:`${lessonBase}/audio.m4a`, meta:'M4A · аудиолекция' } }, { key:'pdf', value:{ id:`legal2-${n}-pdf`, title:`Урок ${Number(n)} · ${title} — презентация PDF`, type:'file', src:`${lessonBase}/presentation.pdf`, meta:'PDF · презентация' } }, { key:'pptx', value:{ id:`legal2-${n}-pptx`, title:`Урок ${Number(n)} · ${title} — презентация PowerPoint`, type:'file', src:`${lessonBase}/presentation.pptx`, meta:'PPTX · презентация' } }, { key:'notes', value:{ id:`legal2-${n}-notes`, title:`Урок ${Number(n)} · ${title} — конспект`, type:'file', src:`${lessonBase}/notes.docx`, meta:'DOCX · конспект' } }, ]; return items.filter(item=>available.includes(item.key)).map(item=>item.value); }); const uavFpvSystemsPart1Lessons = [ { n:'01', title:'Конструкция БПЛА' }, { n:'02', title:'Полётный контроллер (FC)' }, { n:'03', title:'Регулятор оборотов (ESC)' }, { n:'04', title:'Моторы' }, { n:'05', title:'Пропеллеры' }, { n:'06', title:'Типовые неисправности и диагностика' }, ]; const uavFpvSystemsPart1Base = 'uploads/courses/uav-fpv-systems-part-1'; const uavFpvSystemsPart1Materials = uavFpvSystemsPart1Lessons.flatMap(({n,title})=>{ const lessonBase = `${uavFpvSystemsPart1Base}/lesson-${n}`; return [ { id:`fpvsys1-${n}-video`, title:`Урок ${Number(n)} · ${title} — видео`, type:'file', src:`${lessonBase}/video.mp4`, meta:'MP4 · видеоурок' }, { id:`fpvsys1-${n}-audio`, title:`Урок ${Number(n)} · ${title} — аудио`, type:'file', src:`${lessonBase}/audio.m4a`, meta:'M4A · аудиолекция' }, { id:`fpvsys1-${n}-pdf`, title:`Урок ${Number(n)} · ${title} — презентация PDF`, type:'file', src:`${lessonBase}/presentation.pdf`, meta:'PDF · презентация' }, { id:`fpvsys1-${n}-pptx`, title:`Урок ${Number(n)} · ${title} — презентация PowerPoint`, type:'file', src:`${lessonBase}/presentation.pptx`, meta:'PPTX · презентация' }, { id:`fpvsys1-${n}-notes`, title:`Урок ${Number(n)} · ${title} — конспект`, type:'file', src:`${lessonBase}/notes.docx`, meta:'DOCX · конспект' }, ]; }); const uavFpvSystemsPart2Lessons = [ { n:'01', title:'Состав FPV-системы' }, { n:'02', title:'FPV-камера' }, { n:'03', title:'Видеопередатчик (VTX)' }, { n:'04', title:'Антенны FPV-системы' }, { n:'05', title:'Пульт управления' }, { n:'06', title:'Режимы управления БПЛА' }, { n:'07', title:'Предполётный чек-лист' }, ]; const uavFpvSystemsPart2Base = 'uploads/courses/uav-fpv-systems-part-2'; const uavFpvSystemsPart2Materials = uavFpvSystemsPart2Lessons.flatMap(({n,title})=>{ const lessonBase = `${uavFpvSystemsPart2Base}/lesson-${n}`; return [ { id:`fpvsys2-${n}-video`, title:`Урок ${Number(n)} · ${title} — видео`, type:'file', src:`${lessonBase}/video.mp4`, meta:'MP4 · видеоурок' }, { id:`fpvsys2-${n}-audio`, title:`Урок ${Number(n)} · ${title} — аудио`, type:'file', src:`${lessonBase}/audio.m4a`, meta:'M4A · аудиолекция' }, { id:`fpvsys2-${n}-pdf`, title:`Урок ${Number(n)} · ${title} — презентация PDF`, type:'file', src:`${lessonBase}/presentation.pdf`, meta:'PDF · презентация' }, { id:`fpvsys2-${n}-pptx`, title:`Урок ${Number(n)} · ${title} — презентация PowerPoint`, type:'file', src:`${lessonBase}/presentation.pptx`, meta:'PPTX · презентация' }, { id:`fpvsys2-${n}-notes`, title:`Урок ${Number(n)} · ${title} — конспект`, type:'file', src:`${lessonBase}/notes.docx`, meta:'DOCX · конспект' }, ]; }); const firstAidOnlineLessons = [ { n:'01', title:'Порезы пропеллером', available:['video','audio','pdf','pptx','notes'] }, { n:'02', title:'Ушибы и переломы', available:['video','audio','pdf','notes'] }, { n:'03', title:'Электротравма и ожоги', available:['video','audio','pdf','pptx','notes'] }, { n:'04', title:'Состав полевой аптечки', available:['video','audio','pdf','pptx','notes'] }, ]; const firstAidOnlineBase = 'uploads/courses/first-aid-online'; const firstAidOnlineMaterials = firstAidOnlineLessons.flatMap(({n,title,available})=>{ const lessonBase = `${firstAidOnlineBase}/lesson-${n}`; const items = [ { key:'video', value:{ id:`firstaid-${n}-video`, title:`Урок ${Number(n)} · ${title} — видео`, type:'file', src:`${lessonBase}/video.mp4`, meta:'MP4 · видеоурок' } }, { key:'audio', value:{ id:`firstaid-${n}-audio`, title:`Урок ${Number(n)} · ${title} — аудио`, type:'file', src:`${lessonBase}/audio.m4a`, meta:'M4A · аудиолекция' } }, { key:'pdf', value:{ id:`firstaid-${n}-pdf`, title:`Урок ${Number(n)} · ${title} — презентация PDF`, type:'file', src:`${lessonBase}/presentation.pdf`, meta:'PDF · презентация' } }, { key:'pptx', value:{ id:`firstaid-${n}-pptx`, title:`Урок ${Number(n)} · ${title} — презентация PowerPoint`, type:'file', src:`${lessonBase}/presentation.pptx`, meta:'PPTX · презентация' } }, { key:'notes', value:{ id:`firstaid-${n}-notes`, title:`Урок ${Number(n)} · ${title} — конспект`, type:'file', src:`${lessonBase}/notes.docx`, meta:'DOCX · конспект' } }, ]; return items.filter(item=>available.includes(item.key)).map(item=>item.value); }); const courses = [ { id:'aeronavigation-bpla-part-1', title:'Аэронавигация БПЛА 4 часа · Часть 1. Введение в аэронавигацию. Системы навигации', level:'Начальный', cat:'Аэронавигация', duration:'4 часа', lessons:7, price:1000, rating:5, students:0, color:'#0A3C50', icon:'target', short:'Первая часть курса по аэронавигации БПЛА: основы навигации, GNSS, IMU, барометр, магнитометр, фильтр Калмана и RTK.', outcomes:['Понимание принципов аэронавигации БПЛА','Работа систем GNSS и RTK','Назначение IMU, барометра и магнитометра','Принципы комбинированной навигации'], materials:aeronavigationMaterials, modules:[ { t:'Часть 1. Введение в аэронавигацию. Системы навигации', lessons:aeronavigationLessons.map(({n,title})=>({ t:`Урок ${Number(n)}. ${title}`, video:`${aeronavigationBase}/lesson-${n}/video.mp4`, file:`${aeronavigationBase}/lesson-${n}/presentation.pdf`, })), }, ], active:true, sort_order:5, }, { id:'aeronavigation-bpla-part-2', title:'Аэронавигация БПЛА 4 часа · Часть 2. Планирование маршрута. RTH и Detect & Avoid', level:'Начальный', cat:'Аэронавигация', duration:'2 часа', lessons:5, price:1000, rating:5, students:0, color:'#0C485F', icon:'target', short:'Вторая часть курса по аэронавигации БПЛА: маршрутные точки, профиль полёта и высоты, возврат домой и предотвращение столкновений.', outcomes:['Построение навигационного треугольника скоростей','Планирование маршрутов по Waypoints','Выбор безопасного профиля и высоты полёта','Настройка RTH и понимание Detect & Avoid'], materials:aeronavigationPart2Materials, modules:[ { t:'Часть 2. Планирование маршрута. RTH и Detect & Avoid', lessons:aeronavigationPart2Lessons.map(({n,title})=>({ t:`Урок ${Number(n)}. ${title}`, video:`${aeronavigationPart2Base}/lesson-${n}/video.mp4`, file:`${aeronavigationPart2Base}/lesson-${n}/presentation.pdf`, })), }, ], active:true, sort_order:6, }, { id:'aviation-meteorology-part-1', title:'Авиационная метеорология 4 часа · Часть 1. Строение атмосферы. Ветры. Вертикальные движения', level:'Начальный', cat:'Метеорология', duration:'2 часа', lessons:4, price:1000, rating:5, students:0, color:'#2D6A7A', icon:'globe', short:'Первая часть курса по авиационной метеорологии: строение атмосферы, метеорологические величины, местные ветры и вертикальные движения воздуха.', outcomes:['Понимание строения атмосферы','Оценка основных метеорологических величин','Распознавание местных ветров','Учёт вертикальных потоков при полётах БПЛА'], materials:aviationMeteorologyPart1Materials, modules:[ { t:'Часть 1. Строение атмосферы. Ветры. Вертикальные движения', lessons:aviationMeteorologyPart1Lessons.map(({n,title})=>({ t:`Урок ${Number(n)}. ${title}`, video:`${aviationMeteorologyPart1Base}/lesson-${n}/video.mp4`, file:`${aviationMeteorologyPart1Base}/lesson-${n}/presentation.pdf`, })), }, ], active:true, sort_order:7, }, { id:'aviation-meteorology-part-2', title:'Авиационная метеорология 4 часа · Часть 2. Облака, осадки, фронты, опасные явления', level:'Начальный', cat:'Метеорология', duration:'2 часа', lessons:7, price:1000, rating:5, students:0, color:'#245A70', icon:'globe', short:'Вторая часть курса по авиационной метеорологии: облака и осадки, изотермия, атмосферные фронты, барические системы, опасные явления, METAR и TAF.', outcomes:['Распознавание основных типов облаков и осадков','Оценка атмосферных фронтов и барических систем','Выявление опасных явлений для БПЛА','Чтение авиационных сводок METAR и прогнозов TAF'], materials:aviationMeteorologyPart2Materials, modules:[ { t:'Часть 2. Облака, осадки, фронты, опасные явления', lessons:aviationMeteorologyPart2Lessons.map(({n,title,available})=>{ const lessonBase=`${aviationMeteorologyPart2Base}/lesson-${n}`; return available?{t:`Урок ${Number(n)}. ${title}`,video:'',file:`${lessonBase}/notes-preview.pdf`,assetBase:lessonBase,materials:['docx']}:{t:`Урок ${Number(n)}. ${title}`,video:`${lessonBase}/video.mp4`,file:`${lessonBase}/presentation.pdf`}; }), }, ], active:true, sort_order:8, }, { id:'kyrgyz-republic-legal-foundations-part-1', title:'Правовые основы Кыргызской Республики 4 часа · Часть 1. Воздушный кодекс КР. Классификация БПЛА. Зоны полётов', level:'Начальный', cat:'Правовые основы', duration:'2 часа', lessons:5, price:1000, rating:5, students:0, color:'#364F6B', icon:'shield', short:'Первая часть курса о правовом регулировании БПЛА в Кыргызской Республике: Воздушный кодекс, АПКР-6, классификация, зоны полётов и безопасные дистанции.', outcomes:['Понимание требований Воздушного кодекса КР','Знание положений АПКР-6 для БПЛА','Классификация аппаратов по массе','Выбор разрешённых зон и безопасных дистанций'], materials:kyrgyzLegalPart1Materials, modules:[ { t:'Часть 1. Воздушный кодекс КР. Классификация БПЛА. Зоны полётов', lessons:kyrgyzLegalPart1Lessons.map(({n,title,available})=>{ const lessonBase=`${kyrgyzLegalPart1Base}/lesson-${n}`; return available?{t:`Урок ${Number(n)}. ${title}`,video:'',file:`${lessonBase}/notes-preview.pdf`,assetBase:lessonBase,materials:['docx']}:{t:`Урок ${Number(n)}. ${title}`,video:`${lessonBase}/video.mp4`,file:`${lessonBase}/presentation.pdf`}; }), }, ], active:true, sort_order:9, }, { id:'kyrgyz-republic-legal-foundations-part-2', title:'Правовые основы Кыргызской Республики 4 часа · Часть 2. Регистрация БПЛА. Ответственность. Документы оператора', level:'Начальный', cat:'Правовые основы', duration:'2 часа', lessons:5, price:1000, rating:5, students:0, color:'#2E455F', icon:'shield', short:'Вторая часть курса о правовых основах эксплуатации БПЛА в Кыргызской Республике: регистрация, маркировка, требования к пилоту, ответственность и полётные документы.', outcomes:['Понимание порядка регистрации и маркировки БПЛА','Знание требований к оператору и внешнему пилоту','Понимание ответственности за нарушения','Подготовка обязательных документов перед полётом'], materials:kyrgyzLegalPart2Materials, modules:[ { t:'Часть 2. Регистрация БПЛА. Ответственность. Документы оператора', lessons:kyrgyzLegalPart2Lessons.map(({n,title,available})=>{ const lessonBase=`${kyrgyzLegalPart2Base}/lesson-${n}`; return { t:`Урок ${Number(n)}. ${title}`, video:available.includes('video')?`${lessonBase}/video.mp4`:'', file:available.includes('pdf')?`${lessonBase}/presentation.pdf`:`${lessonBase}/notes-preview.pdf`, assetBase:lessonBase, materials:available.filter(type=>type!=='video').map(type=>type==='notes'?'docx':type), }; }), }, ], active:true, sort_order:10, }, { id:'uav-fpv-systems-part-1', title:'Устройство БПЛА и FPV-системы 4 часа · Часть 1. Конструкция БПЛА. Полётный контроллер. ESC. Моторы', level:'Начальный', cat:'Устройство БПЛА', duration:'2 часа', lessons:6, price:1000, rating:5, students:0, color:'#375B67', icon:'wrench', short:'Первая часть курса об устройстве БПЛА и FPV-систем: конструкция аппарата, полётный контроллер, ESC, бесколлекторные моторы, пропеллеры и диагностика.', outcomes:['Понимание конструкции и основных узлов БПЛА','Понимание работы полётного контроллера и ESC','Выбор моторов и пропеллеров','Диагностика типовых неисправностей'], materials:uavFpvSystemsPart1Materials, modules:[ { t:'Часть 1. Конструкция БПЛА. Полётный контроллер. ESC. Моторы', lessons:uavFpvSystemsPart1Lessons.map(({n,title})=>({ t:`Урок ${Number(n)}. ${title}`, video:`${uavFpvSystemsPart1Base}/lesson-${n}/video.mp4`, file:`${uavFpvSystemsPart1Base}/lesson-${n}/presentation.pdf`, })), }, ], active:true, sort_order:11, }, { id:'uav-fpv-systems-part-2', title:'Устройство БПЛА и FPV-системы 4 часа · Часть 2. FPV-система. Пульт управления. Чек-лист', level:'Начальный', cat:'Устройство БПЛА', duration:'2 часа', lessons:7, price:1000, rating:5, students:0, color:'#2F5362', icon:'wrench', short:'Вторая часть курса об устройстве БПЛА и FPV-систем: видеотракт, FPV-камера, VTX, антенны, пульт управления, режимы полёта и предполётная проверка.', outcomes:['Понимание состава и работы FPV-видеотракта','Выбор камеры, VTX и антенн','Настройка пульта и режимов управления','Применение предполётного чек-листа'], materials:uavFpvSystemsPart2Materials, modules:[ { t:'Часть 2. FPV-система. Пульт управления. Чек-лист', lessons:uavFpvSystemsPart2Lessons.map(({n,title})=>({ t:`Урок ${Number(n)}. ${title}`, video:`${uavFpvSystemsPart2Base}/lesson-${n}/video.mp4`, file:`${uavFpvSystemsPart2Base}/lesson-${n}/presentation.pdf`, })), }, ], active:true, sort_order:12, }, { id:'first-aid-online', title:'Первая помощь · 2 часа онлайн. Оказание первой медицинской помощи', level:'Начальный', cat:'Первая помощь', duration:'2 часа онлайн', lessons:4, price:1000, rating:5, students:0, color:'#A74444', icon:'plus', short:'Онлайн-курс первой помощи для операторов БПЛА: порезы пропеллером, ушибы и переломы, электротравмы, ожоги и комплектация полевой аптечки.', outcomes:['Остановка кровотечения при порезах','Первая помощь при ушибах и переломах','Действия при электротравмах и ожогах','Подготовка полевой аптечки оператора БПЛА'], materials:firstAidOnlineMaterials, modules:[ { t:'Оказание первой медицинской помощи', lessons:firstAidOnlineLessons.map(({n,title,available})=>{ const lessonBase=`${firstAidOnlineBase}/lesson-${n}`; return { t:`Урок ${Number(n)}. ${title}`, video:`${lessonBase}/video.mp4`, file:`${lessonBase}/presentation.pdf`, assetBase:lessonBase, materials:available.filter(type=>type!=='video').map(type=>type==='notes'?'docx':type), }; }), }, ], active:true, sort_order:13, }, { id:'engineer-pilot-junior', title:'Инженер-Пилот 12+ · младшая группа', level:'Начальный', cat:'Пилот', duration:'8 недель', lessons:20, price:26250, rating:4.9, students:86, color:'#0A3C50', icon:'wrench', short:'Базовая инженерия БПЛА, устройство дрона и первые безопасные полёты для младшей группы.', outcomes:['Понимание устройства БПЛА','Сборка базовой платформы','Безопасный старт и посадка','Первые полётные маршруты'], materials:[ { id:'eng-guide', title:'Конспект курса', type:'file', src:'uploads/engineer-guide.pdf', meta:'PDF · программа и схемы' }, ], modules:[ { t:'Введение в БПЛА', lessons:['Типы дронов','Назначение узлов','Правила безопасности'] }, { t:'Инженерная база', lessons:['Рама и электроника','Питание и АКБ','Диагностика'] }, { t:'Пилотирование', lessons:['Взлёт и посадка','Манёвры в симуляторе','Практика на площадке'] }, { t:'Аттестация', lessons:['Подготовка','Итоговый тест','Разбор результатов'] }, ], }, { id:'operator-bpla', title:'Оператор БПЛА', level:'Начальный', cat:'Оператор', duration:'32 часа', lessons:50, price:8900, rating:4.9, students:54, color:'#0C485F', icon:'drone', short:'Онлайн-курс оператора БПЛА со свободным графиком и летней практической школой «Высота» на Иссык-Куле.', outcomes:['24 часа онлайн-обучения и тренировок на симуляторе','8 часов практики с инструктором на Иссык-Куле','Свободный график — от 2 недель до 2 месяцев','Сертификат оператора БПЛА КРСУ им. Б.Н. Ельцина'], materials:[], modules:[], active:true, sort_order:20, }, { id:'fpv-basic', title:'FPV-пилот: с нуля до первого полёта', level:'Начальный', cat:'Спорт', duration:'6 недель', lessons:18, price:18000, rating:4.9, students:312, color:'#0A3C50', icon:'drone', short:'Базовый курс управления дроном в режиме FPV. Симулятор, сборка, первые манёвры и безопасность полётов.', outcomes:['Уверенное управление в режиме FPV','Настройка аппаратуры и симулятора','Регламент и безопасность полётов','Первый самостоятельный вылет'], materials:[ { id:'fpv-notes', title:'Конспект курса FPV', type:'file', src:'uploads/fpv-basic-notes.pdf', meta:'PDF · 2.4 МБ' }, { id:'fpv-sim', title:'Сценарии симулятора', type:'file', src:'uploads/fpv-sim-pack.zip', meta:'ZIP · 8 файлов' }, ], modules:[ { t:'Знакомство с FPV', lessons:['Что такое FPV и как устроен дрон','Аппаратура управления','Симулятор: первый запуск'] }, { t:'Основы пилотирования', lessons:['Режимы полёта','Зависание и развороты','Траектории и восьмёрки'] }, { t:'Сборка и настройка', lessons:['Компоненты квадрокоптера','Пайка и сборка рамы','Настройка Betaflight'] }, { t:'Безопасность и право', lessons:['Регламент полётов в КР','Зоны ограничений','Аварийные ситуации'] }, { t:'Практика', lessons:['Полёт на открытой площадке','Отработка манёвров','Зачётный полёт'] }, { t:'Аттестация', lessons:['Подготовка к тесту','Итоговое тестирование','Разбор результатов'] }, ], }, { id:'agro', title:'Агродроны: обработка и мониторинг полей', level:'Средний', cat:'Сельхоз', duration:'8 недель', lessons:24, price:32000, rating:4.8, students:148, color:'#3C8F5E', icon:'leaf', short:'Практический курс по применению БПЛА в сельском хозяйстве: картирование, опрыскивание, анализ NDVI.', outcomes:['Планирование полётных миссий','Опрыскивание и внесение','NDVI-анализ посевов','Расчёт экономики обработки'], materials:[ { id:'agro-map', title:'Шаблон карты поля', type:'file', src:'uploads/agro-template.xlsx', meta:'XLSX · шаблон расчётов' }, ], modules:[ { t:'Агродрон как инструмент', lessons:['Типы агродронов','Полезная нагрузка','Экономика применения'] }, { t:'Картирование полей', lessons:['Фотограмметрия','Построение карт','NDVI и индексы'] }, { t:'Опрыскивание', lessons:['Распылительные системы','Нормы и калибровка','Планирование миссий'] }, { t:'Аттестация', lessons:['Подготовка','Итоговый тест','Разбор'] }, ], }, { id:'survey', title:'Аэрофотосъёмка и фотограмметрия', level:'Средний', cat:'Продакшен', duration:'5 недель', lessons:15, price:26000, rating:4.9, students:204, color:'#0C485F', icon:'camera', short:'От облёта объекта до 3D-модели и ортофотоплана. Работа с Pix4D и Agisoft Metashape.', outcomes:['Планирование облёта','Обработка снимков','Ортофотопланы и 3D-модели','Точность и контроль качества'], materials:[ { id:'survey-brief', title:'Бриф на аэрофотосъёмку', type:'file', src:'uploads/survey-brief.pdf', meta:'PDF · техзадание' }, ], modules:[ { t:'Подготовка съёмки', lessons:['Параметры камеры','Перекрытия и высота','Опорные точки'] }, { t:'Полевые работы', lessons:['Облёт по сетке','Облёт фасадов','Контроль данных'] }, { t:'Обработка', lessons:['Выравнивание снимков','Плотное облако','Ортофотоплан'] }, { t:'Аттестация', lessons:['Подготовка','Итоговый тест','Разбор'] }, ], }, { id:'racing', title:'Дрон-рейсинг: техника гонок', level:'Продвинутый', cat:'Спорт', duration:'7 недель', lessons:21, price:29000, rating:5.0, students:96, color:'#072836', icon:'zap', short:'Скоростное пилотирование, прохождение трасс, тюнинг гоночного квадрокоптера и подготовка к соревнованиям.', outcomes:['Прохождение гоночных трасс','Тюнинг под скорость','Тактика гонок','Подготовка к турнирам КРСУ'], materials:[ { id:'racing-rules', title:'Регламент гонок', type:'file', src:'uploads/racing-rules.pdf', meta:'PDF · правила заездов' }, ], modules:[ { t:'Гоночный дрон', lessons:['Геометрия и моторы','Питание и тяга','Сетап PID'] }, { t:'Техника пилота', lessons:['Линии прохождения','Ворота и флипы','Скоростные связки'] }, { t:'Соревнования', lessons:['Регламент гонок','Тактика заезда','Разбор полётов'] }, { t:'Аттестация', lessons:['Подготовка','Итоговый тест','Разбор'] }, ], }, { id:'build', title:'Сборка и ремонт квадрокоптеров', level:'Начальный', cat:'Инженер', duration:'4 недели', lessons:12, price:21000, rating:4.7, students:177, color:'#46A56C', icon:'wrench', short:'Электроника, пайка, прошивка и диагностика. Соберите свой дрон и научитесь чинить любой.', outcomes:['Чтение схем','Пайка и сборка','Прошивка ESC и FC','Диагностика неисправностей'], materials:[ { id:'build-schemes', title:'Схемы подключения', type:'file', src:'uploads/build-schemes.pdf', meta:'PDF · электрические схемы' }, { id:'build-parts', title:'Список комплектующих', type:'file', src:'uploads/build-parts.xlsx', meta:'XLSX · BOM-лист' }, ], modules:[ { t:'Электроника дрона', lessons:['Компоненты','Схемотехника','Инструменты'] }, { t:'Сборка', lessons:['Рама и моторы','Пайка','Укладка проводки'] }, { t:'Прошивка', lessons:['Betaflight','Калибровка','Тест на стенде'] }, { t:'Аттестация', lessons:['Подготовка','Итоговый тест','Разбор'] }, ], }, { id:'research', title:'БПЛА: аналитик данных', level:'Продвинутый', cat:'Аналитик данных', duration:'10 недель', lessons:28, price:38000, rating:4.9, students:62, color:'#0A3C50', icon:'target', short:'Применение дронов в геодезии, экологии и мониторинге. Сбор данных, обработка и научная публикация.', outcomes:['Методология сбора данных','Сенсоры и полезная нагрузка','Анализ и визуализация','Подготовка публикации'], materials:[ { id:'research-template', title:'Шаблон исследовательского отчёта', type:'file', src:'uploads/research-template.docx', meta:'DOCX · шаблон' }, ], modules:[ { t:'Исследовательский метод', lessons:['Постановка задачи','Выбор платформы','Сенсоры'] }, { t:'Сбор данных', lessons:['Планирование','Полевые работы','Контроль качества'] }, { t:'Анализ', lessons:['Обработка','Визуализация','Интерпретация'] }, { t:'Аттестация', lessons:['Подготовка','Итоговый тест','Разбор'] }, ], }, ]; const operatorProgramCourseIds = [ 'aeronavigation-bpla-part-1', 'aeronavigation-bpla-part-2', 'aviation-meteorology-part-1', 'aviation-meteorology-part-2', 'kyrgyz-republic-legal-foundations-part-1', 'kyrgyz-republic-legal-foundations-part-2', 'uav-fpv-systems-part-1', 'uav-fpv-systems-part-2', 'first-aid-online', ]; const operatorProgramCourses = operatorProgramCourseIds .map(courseId=>courses.find(course=>course.id===courseId)) .filter(Boolean); const operatorBplaCourse = courses.find(course=>course.id==='operator-bpla'); if(operatorBplaCourse){ operatorBplaCourse.modules = operatorProgramCourses.flatMap(course=>course.modules || []); operatorBplaCourse.materials = operatorProgramCourses.flatMap(course=>course.materials || []); operatorBplaCourse.lessons = operatorBplaCourse.modules.reduce((total,module)=>total+(module.lessons?.length || 0),0); } operatorProgramCourses.forEach(course=>{ course.price = 0; course.active = false; }); const news = [ { id:1, cat:'Лаборатория БПЛА', tag:'navy', date:'27 мая 2026', title:'Лаборатория БПЛА КРСУ открыла новый набор на курс FPV-пилотирования', src:'Новости КРСУ', text:'Стартовал весенний поток обучения. В программе — обновлённый симулятор, новая площадка для полётов и расширенный практический блок.' }, { id:2, cat:'Партнёры', tag:'green', date:'24 мая 2026', title:'Подписано соглашение о практике студентов на полях агрохолдинга', src:'Новости партнёров', text:'Слушатели курса «Агродроны» пройдут практику на реальных полях с применением промышленных коптеров.' }, { id:3, cat:'Беспилотная Авиация', tag:'amber', date:'21 мая 2026', title:'Госагентство гражданской авиации обновило правила полётов БПЛА', src:'Гражданская авиация КР', text:'Уточнены зоны ограничений и требования к регистрации беспилотных воздушных судов. Разбор — в учебном модуле курса.' }, { id:4, cat:'Гонки', tag:'navy', date:'18 мая 2026', title:'Открыта регистрация на весенний кубок по дрон-рейсингу', src:'Новости КРСУ', text:'Трасса, призовой фонд и расписание квалификаций. Подробности и трансляция — на наших каналах в соцсетях.' }, { id:5, cat:'Наука-образование', tag:'green', date:'14 мая 2026', title:'Студенты представили проект мониторинга ледников с помощью дронов', src:'Новости КРСУ', text:'Исследовательская группа лаборатории применила фотограмметрию для оценки таяния ледников Тянь-Шаня.' }, { id:6, cat:'Партнёры', tag:'gray', date:'9 мая 2026', title:'Новое оборудование: партия учебных квадрокоптеров поступила в лабораторию', src:'Новости партнёров', text:'Парк учебной техники пополнился двадцатью аппаратами для практических занятий и симуляторного зала.' }, ]; const races = [ { id:1, date:'14 июня 2026', title:'Весенний кубок КРСУ', place:'Бишкек, кампус КРСУ', status:'Регистрация открыта', text:'
Открытый старт для начинающих и продвинутых пилотов. В программе — квалификации, парные вылеты и финальная гонка на укороченной трассе.
Для участников будет доступна техническая зона, трансляция заездов и отдельный блок регистрации на площадке.
' }, { id:2, date:'19 июля 2026', title:'Ночная гонка Time Attack', place:'Крытый ангар, Чуй', status:'Скоро', text:'Ночной формат с подсвеченной трассой и серией коротких заездов на лучшее время круга. Подходит для пилотов FPV и зрителей, которые хотят увидеть динамичный формат соревнований.
' }, { id:3, date:'30 августа 2026', title:'Открытый чемпионат Тянь-Шань FPV', place:'Иссык-Куль', status:'Анонс', text:'Большой летний старт с участниками из регионов. Планируются квалификации, финальные заезды и открытая демонстрационная зона для гостей мероприятия.
' }, ]; // Тесты и правильные ответы загружаются только через защищённый API. const tests = {}; // student enrollment state (default) const myCourses = [ { id:'fpv-basic', access:'open', progress:62, status:'В процессе', testScore:null }, { id:'build', access:'open', progress:100, status:'Завершён', testScore:88 }, { id:'survey', access:'pending', progress:0, status:'Ожидает оплаты', testScore:null }, ]; const adminUsers = [ { id:1, name:'Айбек Усенов', email:'aibek.u@mail.kg', role:'user', status:'active', courses:['fpv-basic','build'], joined:'12.03.2026', notifyPayments:false }, { id:2, name:'Дарья Ким', email:'d.kim@gmail.com', role:'user', status:'active', courses:['survey'], joined:'02.04.2026', notifyPayments:false }, { id:3, name:'Нурлан Сатыбалдиев', email:'nurlan.s@mail.kg', role:'user', status:'paused', courses:['racing'], joined:'21.02.2026', notifyPayments:false }, { id:4, name:'Eleanor Pena', email:'e.pena@outlook.com', role:'user', status:'active', courses:['agro','survey'], joined:'08.05.2026', notifyPayments:false }, { id:5, name:'Тимур Абдыров', email:'timur.a@mail.kg', role:'manager', status:'active', courses:[], joined:'27.05.2026', notifyPayments:true }, ]; const contacts = { phones:['+996 (312) 66-04-83','+996 (550) 12-44-90','+996 501 87 87 19'], email:'bpla@krsu.edu.kg', address:'г. Бишкек, проспект Чуй, 6, ЕТФ КРСУ', hours:'Пн–Пт · 09:00–18:00', receiver:'КРСУ · Лаборатория БПЛА', account:'1234 5678 9012 3456', bik:'128008', inn:'02508199210045', okpo:'', qrPaymentEnabled:true, qrImage:'', paymentText:'Откройте приложение банка, наведите камеру на тестовый QR-код отдельного счёта гонок и подтвердите перевод.', bankPaymentText:'Оплата обучения принимается только по банковским реквизитам КРСУ. В назначении платежа укажите выбранный курс.', }; const adSlots = [ { id:'home_hero', name:'Главная · Hero', kind:'slot' }, { id:'education_top', name:'Каталог курсов · верхний баннер', kind:'slot' }, { id:'home_steps_top', name:'Главная · баннер перед шагами', kind:'banner' }, { id:'home_steps_bottom', name:'Главная · баннер после шагов', kind:'banner' }, { id:'races_hero', name:'Гонки · баннер в hero', kind:'slot' }, { id:'news_top', name:'Новости · верхний баннер', kind:'slot' }, { id:'contacts_top', name:'Контакты · верхний баннер', kind:'slot' }, ]; const ads = Object.fromEntries( adSlots.map(slot => [slot.id, { active:false, showPlaceholder:true, title:'', text:'', img:'', url:'', button:'', tag:'РЕКЛАМА' }]) ); const media = [ { id:'m1', cat:'Обучалки', title:'Основы пилотирования БПЛА', kind:'video', src:'assets/dron.mp4', poster:'', text:'', active:true, sort_order:10 }, { id:'m2', cat:'Полезные видео по настройке', title:'Настройка перед первым вылетом', kind:'video', src:'assets/dron.mp4', poster:'', text:'', active:true, sort_order:20 }, { id:'m3', cat:'Рекламные материалы', title:'Промо Лаборатории БПЛА КРСУ', kind:'video', src:'assets/dron.mp4', poster:'', text:'', active:true, sort_order:30 }, { id:'m4', cat:'Telegram-подборка', title:'Материалы из Telegram', kind:'video', src:'assets/dron.mp4', poster:'', text:'', active:true, sort_order:40 }, ]; const pilotRating = { title:'Рейтинг пилотов', subtitle:'Таблица лучших пилотов Лаборатории БПЛА и результаты последних стартов.', season:'Сезон 2026', updatedAt:'03.06.2026', entries:[ { id:'pilot-1', name:'Айбек Усенов', photo:'', team:'KRSU Racing', city:'Бишкек', points:148, wins:4, bestLap:'00:21.84', drone:'5” FPV', active:true, sort_order:10 }, { id:'pilot-2', name:'Дарья Ким', photo:'', team:'Sky Vector', city:'Бишкек', points:136, wins:3, bestLap:'00:22.15', drone:'5” FPV', active:true, sort_order:20 }, { id:'pilot-3', name:'Нурлан Сатыбалдиев', photo:'', team:'KRSU Racing', city:'Ош', points:121, wins:2, bestLap:'00:22.47', drone:'3.5” FPV', active:true, sort_order:30 }, { id:'pilot-4', name:'Элеонора Пенья', photo:'', team:'Vector Air', city:'Бишкек', points:108, wins:1, bestLap:'00:22.94', drone:'5” FPV', active:true, sort_order:40 }, ], }; const leagueMembership = { title:'Членство в Лиге', subtitle:'Платная регистрация для участия в Лиге Дронов и официальных заездах.', description:'Членство открывает доступ к официальным стартам, регламентам, материалам сезона и уведомлениям по гонкам в одном личном кабинете.', monthlyPrice:0, yearlyPrice:8760, cta:'Оформить членство', features:[ 'Участие в официальных заездах и рейтинге сезона', 'Доступ к регламентам, материалам и обновлениям Лиги', 'Единый личный кабинет для оплат и участия', 'Приоритетные уведомления о стартах и изменениях расписания', ], }; const pages = { offer: { title:'Договор оферты', text:'Разместите здесь текст публичного договора оферты. Эту страницу можно редактировать из админки во вкладке «Контент».
', }, payment: { title:'Условия оплаты', text:'Разместите здесь правила оплаты, способы перевода средств, сроки проверки и возврата.
', }, privacy: { title:'Политика конфиденциальности', text:'Разместите здесь политику конфиденциальности и порядок обработки персональных данных пользователей сайта.
', }, }; const faq = [ { id:1, q:'Для какого возраста подходит курс и нужна ли начальная подготовка?', a:'Курс «Оператор БПЛА юниор» рассчитан на школьников от 12 до 17 лет (учеников 6–11 классов). Никакой начальной подготовки не требуется — мы обучаем детей пилотированию и устройству дронов с нуля.
', active:true, sort_order:10 }, { id:2, q:'Как устроен процесс обучения?', a:'Программа состоит из двух этапов:
Помимо уверенного ручного управления и полётов в сложных условиях, подростки научатся самостоятельно ремонтировать и собирать дроны. В программу включены основы физики, механики, информатики, аэродинамики, а также навыки оказания первой медицинской помощи и знание законов применения БПЛА в Кыргызской Республике.
', active:true, sort_order:30 }, { id:4, q:'Где и когда будет проходить практика?', a:'Практическая часть пройдёт с 1 по 20 августа 2026 года в учебно-оздоровительном комплексе КРСУ «Жаштык» (с. Комсомол, берег Иссык-Куля). Набор в группы открыт с 20 июня по 15 июля 2026 года.
', active:true, sort_order:40 }, { id:5, q:'Что входит в стоимость путёвки в лагерь?', a:'В стоимость включено всё необходимое для комфортного и безопасного пребывания:
Для поездки в лагерь покупать дрон не нужно — мы предоставляем всю технику. Однако для прохождения первой, онлайн-части курса вам потребуется отдельно приобрести пульт для симулятора. При желании вы также можете купить ребёнку личное оборудование, но это не обязательно.
', active:true, sort_order:60 }, { id:7, q:'Какова стоимость обучения?', a:'Общая стоимость полного пакета составляет 26 250 сом. Вы можете оплачивать этапы раздельно:
Личные расходы ребёнка в лагере не входят в стоимость.
', active:true, sort_order:70 }, { id:8, q:'Какой документ получит ребёнок после курса?', a:'После подготовки и успешной сдачи экзамена в лагере каждый выпускник получит официальный сертификат оператора БПЛА от Кыргызско-Российского Славянского Университета (КРСУ) им. Б.Н. Ельцина, а также готовое видео-портфолио со своими полётами.
', active:true, sort_order:80 }, ]; function fmt(n){ return n.toLocaleString('ru-RU'); } return { courses, news, races, tests, myCourses, adminUsers, contacts, ads, adSlots, media, pages, pilotRating, leagueMembership, faq, fmt }; })();