2026-10-03 18:29:18 +08:00
|
|
|
'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('');
|
2026-10-03 20:02:07 +08:00
|
|
|
if(!value){hidden.value='';hint.textContent=input.required?'请选择事情发生的日期':'日期不详可留空';return;}
|
2026-10-03 18:29:18 +08:00
|
|
|
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('');
|
|
|
|
|
}
|
2026-10-03 20:02:07 +08:00
|
|
|
function initDateFields(scope=$('#person-form')){
|
|
|
|
|
for(const field of scope.querySelectorAll('[data-date-field]')){
|
2026-10-03 18:29:18 +08:00
|
|
|
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();
|
|
|
|
|
}
|
2026-10-03 20:02:07 +08:00
|
|
|
function syncDateFields(strict=false,scope=$('#person-form')){
|
|
|
|
|
syncLifeStatus();for(const field of scope.querySelectorAll('[data-date-field]'))if(!field.hidden)dateHint(field,strict);
|
2026-10-03 18:29:18 +08:00
|
|
|
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);
|