${tabla(t.slice(0,6),me.rol!='SOLICITANTE')}`;
}
async function lista(al){
title(al=='mis'?'Mis tickets':'Todos los tickets');const all=await Api.obtenerTickets({alcance:al,usuario:me});
const opt=(a,k,l)=>``;
$('#view').innerHTML=`
${opt(cat.estados,'estado','Todos los estados')}${opt(cat.prioridades,'prioridad','Todas las prioridades')}${opt(cat.categorias,'categoria','Todas las categorías')}
`;
const draw=()=>{const q=$('#q').value.toLowerCase(),f={};document.querySelectorAll('[data-f]').forEach(s=>f[s.dataset.f]=s.value);
$('#tb').innerHTML=tabla(all.filter(t=>(!q||(t.folio+t.asunto+t.solicitante).toLowerCase().includes(q))&&Object.keys(f).every(k=>!f[k]||t[k]==f[k])),al=='todos')};
document.querySelector('.filters').oninput=draw;draw();
}
async function nuevo(){
title('Nuevo ticket');const sel=(id,a)=>``;
$('#view').innerHTML=``;
$('#pri').value='Media';$('#are').value=me.area;
$('#f').onsubmit=async e=>{e.preventDefault();
const t=await Api.crearTicket({asunto:$('#asu').value,descripcion:$('#des').value,categoria:$('#cat').value,prioridad:$('#pri').value,area:$('#are').value,solicitanteId:+$('#sol').value});
for(const f of $('#fil').files)await Api.agregarArchivo(t.id,{nombre:f.name,tamano:f.size},me);
location.hash='#/ticket/'+t.id};
}
async function detalle(id){
const [t,com,his,arc]=await Promise.all([Api.obtenerTicket(id),Api.obtenerComentarios(id).catch(()=>[]),Api.obtenerHistorial(id).catch(()=>[]),Api.obtenerArchivos(id).catch(()=>[])]);
title('Ticket '+(t?t.folio:''));
if(!t||!(me.rol=='ADMINISTRADOR'||t.solicitanteId==me.id||t.responsableId==me.id)){$('#view').innerHTML='