File size: 5,697 Bytes
d623973 61aa615 d623973 61aa615 d623973 61aa615 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 | // V.AI STUDIO - Quote UI v7 - FULL VERSION
// Copy from Vaistudio with 100% features
(function(){
'use strict';
var ACCESS_CODE='V.AISTUDIO';
function isUnlocked(){
return document.body.classList.contains('vas-unlocked');
}
function unlock(){
document.body.classList.add('vas-unlocked');
console.log('[Quote UI v7] ✅ Unlocked');
setTimeout(addProtectedButtons,200);
}
function lock(){
document.body.classList.remove('vas-unlocked');
removeProtectedButtons();
}
// === NÚT LƯU (LUÔN HIỆN) ===
function hasSaveButton(){
return !!document.querySelector('[data-vai-save-btn]');
}
function addSaveButton(){
if(hasSaveButton())return;
var actionsArea=document.querySelector('.quote-actions');
if(!actionsArea)return;
var btn=document.createElement('button');
btn.setAttribute('data-vai-save-btn','1');
btn.className='quote-btn';
btn.innerHTML='💾 Lưu';
btn.style.cssText='padding:12px 20px;border:none;border-radius:10px;font-weight:700;font-size:.82rem;cursor:pointer;display:flex;align-items:center;gap:6px;transition:all .25s ease;white-space:nowrap;background:#7c3aed;color:#fff';
btn.onmouseenter=function(){this.style.background='#6d28d9';};
btn.onmouseleave=function(){this.style.background='#7c3aed';};
btn.onclick=function(){
if(window.VAI_ORDERS&&window.VAI_ORDERS.save){
window.VAI_ORDERS.save();
}else{
alert('⏳ Đang tải module đơn hàng...');
}
};
actionsArea.insertBefore(btn, actionsArea.firstChild);
console.log('[Quote UI v7] 💾 Lưu button added (always visible)');
}
// === CÁC NÚT BẢO VỆ (ẨN CHO ĐẾN KHI UNLOCK) ===
function hasProtectedButtons(){
return !!document.querySelector('[data-vai-protected-btn]');
}
function removeProtectedButtons(){
document.querySelectorAll('[data-vai-protected-btn]').forEach(function(b){b.remove();});
}
function addProtectedButtons(){
if(!isUnlocked())return;
if(hasProtectedButtons())return;
var actionsArea=document.querySelector('.quote-actions');
if(!actionsArea)return;
var btnStyle='padding:12px 20px;border:none;border-radius:10px;font-weight:700;font-size:.82rem;cursor:pointer;display:flex;align-items:center;gap:6px;transition:all .25s ease;white-space:nowrap';
var buttons=[
{html:'📋 Đơn hàng',bg:'#2563eb',hover:'#1d4ed8',fn:function(){if(window.VAI_ORDERS)window.VAI_ORDERS.openSearch();else alert('⏳ Đang tải...');}},
{html:'📦 GH Excel',bg:'#059669',hover:'#047857',fn:function(){if(typeof exportDeliveryExcel==='function')exportDeliveryExcel();}},
{html:'📦 GH PDF',bg:'#0d9488',hover:'#0f766e',fn:function(){if(typeof exportDeliveryPDF==='function')exportDeliveryPDF();}}
];
buttons.forEach(function(cfg){
var btn=document.createElement('button');
btn.setAttribute('data-vai-protected-btn','1');
btn.className='quote-btn checkout-done-btn';
btn.innerHTML=cfg.html;
btn.style.cssText=btnStyle+';background:'+cfg.bg+';color:#fff';
btn.onmouseenter=function(){this.style.background=cfg.hover;};
btn.onmouseleave=function(){this.style.background=cfg.bg;};
btn.onclick=cfg.fn;
actionsArea.appendChild(btn);
});
console.log('[Quote UI v7] Protected buttons injected (Đơn hàng, GH)');
}
function isQuoteOpen(){
var ov=document.querySelector('.quote-overlay');
return ov&&(ov.classList.contains('open')||ov.style.display==='flex'||ov.style.display==='block');
}
// === BIND mã truy cập input (#qcAccessCode) ===
function bindAccessCodeInput(){
var accessInput=document.getElementById('qcAccessCode');
if(!accessInput)return false;
if(accessInput.getAttribute('data-vai-access'))return true;
accessInput.setAttribute('data-vai-access','1');
function checkCode(){
var val=(accessInput.value||'').trim();
if(val===ACCESS_CODE||val.toUpperCase()===ACCESS_CODE){
if(!isUnlocked())unlock();
}else{
if(isUnlocked())lock();
}
}
accessInput.addEventListener('input',checkCode);
accessInput.addEventListener('change',checkCode);
accessInput.addEventListener('blur',checkCode);
accessInput.addEventListener('keypress',function(e){if(e.key==='Enter')checkCode();});
return true;
}
// === OBSERVER ===
var observer=new MutationObserver(function(){
bindAccessCodeInput();
if(isQuoteOpen()){
if(!hasSaveButton())setTimeout(addSaveButton,200);
if(isUnlocked()&&!hasProtectedButtons())setTimeout(addProtectedButtons,300);
}
if(!isQuoteOpen()){
if(hasSaveButton())document.querySelectorAll('[data-vai-save-btn]').forEach(function(b){b.remove();});
if(hasProtectedButtons())removeProtectedButtons();
}
if(!isUnlocked()&&hasProtectedButtons())removeProtectedButtons();
});
observer.observe(document.body,{childList:true,subtree:true,attributes:true,attributeFilter:['class','style']});
setInterval(function(){
bindAccessCodeInput();
if(isQuoteOpen()){
if(!hasSaveButton())addSaveButton();
if(isUnlocked()&&!hasProtectedButtons())addProtectedButtons();
}
if(!isQuoteOpen()){
if(hasSaveButton())document.querySelectorAll('[data-vai-save-btn]').forEach(function(b){b.remove();});
if(hasProtectedButtons())removeProtectedButtons();
}
if(!isUnlocked()&&hasProtectedButtons())removeProtectedButtons();
},2000);
setTimeout(bindAccessCodeInput,1000);
setTimeout(bindAccessCodeInput,3000);
console.log('[Quote UI v7] loaded — Lưu always visible, protected buttons need V.AISTUDIO');
})(); |