'use strict'; function dateHint(field,strict=false){ const input=field.querySelector('[data-date-value]'),hint=field.querySelector('[data-date-hint]'),hidden=field.querySelector('input[type=hidden]'); const mode=field.querySelector('[data-calendar]').value,value=input.value.trim(),leap=field.querySelector('[data-date-leap]').checked; field.querySelector('[data-leap-label]').hidden=mode!=='lunar';input.setCustomValidity(''); if(!value){hidden.value='';hint.textContent='日期不详可留空';return;} try{ const solar=mode==='solar'?(ZhaoCalendar.solarDate(value),value):ZhaoCalendar.solar(value,leap); hidden.value=solar; if(mode==='lunar')hint.textContent='公历 '+solar; else{try{const l=ZhaoCalendar.lunar(solar);hint.textContent=`农历 ${l.year}年${l.leap?'闰':''}${l.month}月${l.day}日`;}catch(e){hint.textContent=e.message;}} }catch(e){hidden.value='';input.setCustomValidity(e.message);hint.textContent=e.message;if(strict)throw e;} } function syncLifeStatus(){ const deceased=$('#person-form').elements.lifeStatus.value==='deceased',field=$('[data-date-field="deathDate"]');field.hidden=!deceased; field.querySelectorAll('input,select').forEach(e=>e.disabled=!deceased); if(!deceased)field.querySelector('[data-date-value]').setCustomValidity(''); } function initDateFields(){ for(const field of $$('[data-date-field]')){ field.querySelector('[data-calendar]').value='solar';field.querySelector('[data-date-leap]').checked=false; field.querySelector('[data-date-value]').value=field.querySelector('input[type=hidden]').value;dateHint(field); }syncLifeStatus(); } function syncDateFields(strict=false){ syncLifeStatus();for(const field of $$('[data-date-field]'))if(!field.hidden)dateHint(field,strict); if($('[data-date-field="deathDate"]').hidden)$('#person-form').elements.deathDate.value=''; } for(const field of $$('[data-date-field]')){ field.querySelector('[data-date-value]').addEventListener('input',()=>dateHint(field)); field.querySelector('[data-date-leap]').addEventListener('change',()=>dateHint(field)); field.querySelector('[data-calendar]').addEventListener('change',()=>{ const hidden=field.querySelector('input[type=hidden]'),input=field.querySelector('[data-date-value]'),mode=field.querySelector('[data-calendar]'); if(hidden.value){try{if(mode.value==='solar')input.value=hidden.value;else{const l=ZhaoCalendar.lunar(hidden.value);input.value=ZhaoCalendar.iso(l);field.querySelector('[data-date-leap]').checked=l.leap;}}catch(e){mode.value='solar';toast(e.message);}} dateHint(field); }); } $('#person-form').elements.lifeStatus.addEventListener('change',syncLifeStatus);