v2: все базовые поля свободно вводимы (комбобокс), фикс кнопок

This commit is contained in:
Dauren777 2026-06-26 05:54:28 +00:00
parent dd690fb40d
commit c09efabc98
3 changed files with 8 additions and 8 deletions

10
app.js
View File

@ -264,10 +264,9 @@ function fieldInput(f, t){
} else if(f.type==='textarea'){ } else if(f.type==='textarea'){
control = `<textarea class="input" name="${f.key}">${esc(val)}</textarea>`; control = `<textarea class="input" name="${f.key}">${esc(val)}</textarea>`;
} else if(f.type==='select'){ } else if(f.type==='select'){
control = `<select class="input" name="${f.key}"> // Редактируемый комбобокс: можно выбрать из подсказок или ввести своё значение
<option value=""> выберите </option> control = `<input class="input" list="dl_${f.key}" name="${f.key}" value="${esc(val)}" placeholder="выберите или введите своё значение">
${(f.options||[]).map(o=>`<option ${o===val?'selected':''}>${esc(o)}</option>`).join('')} <datalist id="dl_${f.key}">${(f.options||[]).map(o=>`<option value="${esc(o)}">`).join('')}</datalist>`;
</select>`;
} else if(f.type==='checkbox'){ } else if(f.type==='checkbox'){
control = `<label class="check"><input type="checkbox" name="${f.key}" ${val===true||val==='true'?'checked':''}> Да</label>`; control = `<label class="check"><input type="checkbox" name="${f.key}" ${val===true||val==='true'?'checked':''}> Да</label>`;
} }
@ -427,8 +426,7 @@ function renderReports(){
function exportCSV(){ function exportCSV(){
if(state.teachers.length===0){ alert('Нет данных для экспорта'); return; } if(state.teachers.length===0){ alert('Нет данных для экспорта'); return; }
const fields = allFields(); const fields = allFields();
const header = ['ФИО','Дата рождения','Образование','Научная степень','Категория','Сертификат специалиста','Членство в ассоциациях','Клиническая база'] const header = fields.map(f=>f.label);
.concat(state.customFields.map(f=>f.label));
const rows = state.teachers.map(t=>{ const rows = state.teachers.map(t=>{
return fields.map(f=>{ return fields.map(f=>{
let v = t[f.key] ?? ''; let v = t[f.key] ?? '';

View File

@ -64,7 +64,7 @@
<label>Сгруппировать по: <label>Сгруппировать по:
<select id="reportField" class="input"></select> <select id="reportField" class="input"></select>
</label> </label>
<button class="btn ghost" id="btnReportCsv">⤓ Скачать отчёт (CSV)</button> <button class="btn outline" id="btnReportCsv">⤓ Скачать отчёт (CSV)</button>
</div> </div>
<div class="report-grid" id="reportGrid"></div> <div class="report-grid" id="reportGrid"></div>
<div class="report-summary" id="reportSummary"></div> <div class="report-summary" id="reportSummary"></div>
@ -80,7 +80,7 @@
</div> </div>
<form id="editorForm" class="modal-body"></form> <form id="editorForm" class="modal-body"></form>
<div class="modal-foot"> <div class="modal-foot">
<button class="btn ghost" onclick="closeEditor()">Отмена</button> <button class="btn outline" onclick="closeEditor()">Отмена</button>
<button class="btn danger" id="btnDelete" hidden>Удалить</button> <button class="btn danger" id="btnDelete" hidden>Удалить</button>
<button class="btn primary" id="btnSave">Сохранить</button> <button class="btn primary" id="btnSave">Сохранить</button>
</div> </div>

View File

@ -48,6 +48,8 @@ body{
.btn.primary:hover{background:#0E7490} .btn.primary:hover{background:#0E7490}
.btn.ghost{background:rgba(255,255,255,.08);color:#fff;border-color:rgba(255,255,255,.18)} .btn.ghost{background:rgba(255,255,255,.08);color:#fff;border-color:rgba(255,255,255,.18)}
.btn.ghost:hover{background:rgba(255,255,255,.16)} .btn.ghost:hover{background:rgba(255,255,255,.16)}
.btn.outline{background:transparent;color:var(--ink);border:1px solid var(--border)}
.btn.outline:hover{background:var(--gray-100)}
.btn.danger{background:var(--red);color:#fff} .btn.danger{background:var(--red);color:#fff}
.btn.danger:hover{background:#B91C1C} .btn.danger:hover{background:#B91C1C}
.btn.dark{background:var(--ink);color:#fff} .btn.dark{background:var(--ink);color:#fff}