v2: все базовые поля свободно вводимы (комбобокс), фикс кнопок
This commit is contained in:
parent
dd690fb40d
commit
c09efabc98
10
app.js
10
app.js
@ -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] ?? '';
|
||||||
|
|||||||
@ -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>
|
||||||
|
|||||||
@ -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}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user