箱包外贸 CRM 登录

UNICO CRM,仅限已授权账号登录。
`} function v24DownloadText(name,text,type='text/html'){const blob=new Blob([text],{type:type+';charset=utf-8'}),u=URL.createObjectURL(blob),a=document.createElement('a');a.href=u;a.download=name;document.body.appendChild(a);a.click();a.remove();setTimeout(()=>URL.revokeObjectURL(u),1000)} function v24ExportSelected(){const ids=v24SelectedIds();if(!ids.length)return alert('请先勾选邮件。');const mails=ids.map(id=>inboxEmails.find(x=>x.id===id)).filter(Boolean);v24DownloadText('UNICO_CRM_邮件导出_'+localDateYMD()+'.html',v24ArchiveHtml(mails))} function v24ExportMail(id){const e=inboxEmails.find(x=>x.id===id);if(!e)return;v24DownloadText('UNICO_CRM_'+String(e.subject||'邮件').replace(/[\\/:*?"<>|]/g,'_').slice(0,80)+'.html',v24ArchiveHtml([e]))} function v24PreviewMail(id,doPrint=false){const e=inboxEmails.find(x=>x.id===id);if(!e)return;const w=window.open('','_blank');if(!w)return alert('浏览器阻止了预览窗口,请允许弹出窗口。');w.document.open();w.document.write(v24ArchiveHtml([e]));w.document.close();if(doPrint)setTimeout(()=>{w.focus();w.print()},350)} async function v24TrashOne(id){if(!confirm('确定把这封邮件移到垃圾箱吗?'))return;await v24SoftDeleteIds([id]);closeModal('detailModal');await loadAll()} async function v24PermanentDeleteOne(id){const t=prompt('此操作无法恢复。请输入“彻底删除”确认:');if(t!=='彻底删除')return;await v24PermanentDeleteIds([id]);closeModal('detailModal');await loadAll()} async function v24BlacklistOne(id){const e=inboxEmails.find(x=>x.id===id);if(!e||!mailIsInbound(e))return;const email=v24NormEmail(e.from_email);if(!email)return;if(!confirm('确定拉黑 '+email+' 吗?'))return;try{await api('/rest/v1/email_blacklist?on_conflict=owner_id,email',{method:'POST',headers:{Prefer:'resolution=ignore-duplicates,return=minimal'},body:JSON.stringify({owner_id:session.user.id,email})})}catch(_){};const related=inboxEmails.filter(x=>mailIsInbound(x)&&v24NormEmail(x.from_email)===email&&!x.deleted_at).map(x=>x.id);if(related.length)await v24SoftDeleteIds(related);closeModal('detailModal');await loadAll()} const _v24ShowInboxEmail=showInboxEmail; showInboxEmail=function(id){_v24ShowInboxEmail(id);const e=inboxEmails.find(x=>x.id===id);if(!e)return;setTimeout(()=>{const actions=document.querySelector('#detailContent .mail-open-actions');if(!actions||actions.querySelector('.v24-preview-btn'))return;const preview=document.createElement('button');preview.className='btn v24-preview-btn';preview.textContent='👁 预览';preview.onclick=()=>v24PreviewMail(id,false);actions.appendChild(preview);const print=document.createElement('button');print.className='btn';print.textContent='🖨 打印';print.onclick=()=>v24PreviewMail(id,true);actions.appendChild(print);const exp=document.createElement('button');exp.className='btn';exp.textContent='⇩ 导出邮件';exp.onclick=()=>v24ExportMail(id);actions.appendChild(exp);if(mailIsInbound(e)){const del=document.createElement('button');del.className='btn';del.textContent='🗑 删除';del.onclick=()=>v24TrashOne(id);actions.appendChild(del);const blk=document.createElement('button');blk.className='btn danger';blk.textContent='⛔ 拉黑';blk.onclick=()=>v24BlacklistOne(id);actions.appendChild(blk)}},0)}; const _v24RenderMailWorkspace=renderMailWorkspace; renderMailWorkspace=function(){_v24RenderMailWorkspace();const trash=inboxEmails.filter(e=>e.deleted_at).sort((a,b)=>new Date(b.deleted_at||0)-new Date(a.deleted_at||0));if($('trashRows'))$('trashRows').innerHTML=trash.map(e=>`${formatDateTime(e.deleted_at||e.created_at||e.received_at)}${esc(e.direction==='outbound'?e.to_email:e.from_email)}${esc(decodeMailText(e.subject||''))}${directionBadge(e.direction)} `).join('')||'垃圾箱为空'}; const _v24ShowPage=showPage; showPage=function(name){_v24ShowPage(name);setTimeout(()=>{installV24MailUI();if(name==='inbox')renderInboxThreads();if(name==='sent')renderSentThreads();if(name==='trash')renderMailWorkspace()},0)};