Spaces:
Running
Running
Fix: mã đơn hàng tự động cập nhật theo tên khách hàng khi báo giá trực tiếp
Browse files- cart-quote.js: thêm input listener trên #qcName — khi đổi tên khách hàng trong modal báo giá, mã đơn hàng (#qcCompany) tự động tạo lại theo chữ cái đầu tên + ngày (VD: 'Nguyễn Minh Anh' → DHNMA190826). Trước đây mã chỉ tạo 1 lần khi mở modal nên không theo tên đã sửa.
- customers.js: applyCustomerToQuote() (chọn khách từ danh sách khách hàng) giờ cũng tạo lại mã đơn hàng theo tên vừa chọn (set .value không kích hoạt input event nên cần gọi genOrderCode() trực tiếp).
- cache-bust gc=36/gc=19, version v30
- index.html +2 -2
- src/cart-quote.js +15 -0
- src/customers.js +8 -0
- src/version.js +1 -1
index.html
CHANGED
|
@@ -836,8 +836,8 @@
|
|
| 836 |
<script defer src="./src/modal-top.js?gc=2"></script>
|
| 837 |
<!-- App modules: defer keeps execution order (parse order) but doesn't block
|
| 838 |
first paint — the welcome/avatar-picker modal renders immediately. -->
|
| 839 |
-
<script defer src="./src/cart-quote.js?gc=
|
| 840 |
-
<script defer src="./src/customers.js?gc=
|
| 841 |
<script defer src="./src/vaix-rag.js?gc=66"></script> <!-- V.AI STUDIO RAG Module - loads FASTER via light index; lazy galleries; spec-aware search -->
|
| 842 |
<script defer src="./src/greeting-news.js?gc=41"></script> <!-- Greeting HOT news cards + source links -->
|
| 843 |
<script defer src="./src/order-sync.js?gc=17"></script> <!-- Order sync with V.AISTUDIO backend -->
|
|
|
|
| 836 |
<script defer src="./src/modal-top.js?gc=2"></script>
|
| 837 |
<!-- App modules: defer keeps execution order (parse order) but doesn't block
|
| 838 |
first paint — the welcome/avatar-picker modal renders immediately. -->
|
| 839 |
+
<script defer src="./src/cart-quote.js?gc=36"></script> <!-- Cart + Quote module (Giỏ hàng / Báo giá) -->
|
| 840 |
+
<script defer src="./src/customers.js?gc=19"></script> <!-- Customer list (Danh sách khách hàng) -->
|
| 841 |
<script defer src="./src/vaix-rag.js?gc=66"></script> <!-- V.AI STUDIO RAG Module - loads FASTER via light index; lazy galleries; spec-aware search -->
|
| 842 |
<script defer src="./src/greeting-news.js?gc=41"></script> <!-- Greeting HOT news cards + source links -->
|
| 843 |
<script defer src="./src/order-sync.js?gc=17"></script> <!-- Order sync with V.AISTUDIO backend -->
|
src/cart-quote.js
CHANGED
|
@@ -1469,6 +1469,21 @@ ready(function() {
|
|
| 1469 |
bindCartButton();
|
| 1470 |
var overlay = document.getElementById('cartOverlay');
|
| 1471 |
if (overlay) overlay.addEventListener('click', function(e) { if (e.target === overlay) closeCart(); });
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1472 |
// Re-bind in case the button is injected late
|
| 1473 |
setTimeout(function(){ bindCartButton(); }, 500);
|
| 1474 |
setTimeout(function(){ bindCartButton(); }, 2000);
|
|
|
|
| 1469 |
bindCartButton();
|
| 1470 |
var overlay = document.getElementById('cartOverlay');
|
| 1471 |
if (overlay) overlay.addEventListener('click', function(e) { if (e.target === overlay) closeCart(); });
|
| 1472 |
+
// Live-regenerate the order code (mã đơn hàng) whenever the customer name
|
| 1473 |
+
// changes in the quote modal. genOrderCode() builds "DH<initials><ddmmyy>"
|
| 1474 |
+
// from the customer name (e.g. "Minh Anh" → DHMA190826). Without this the
|
| 1475 |
+
// code stays frozen at the value generated when the modal first opened.
|
| 1476 |
+
try {
|
| 1477 |
+
var qcName = document.getElementById('qcName');
|
| 1478 |
+
var qcCompany = document.getElementById('qcCompany');
|
| 1479 |
+
if (qcName && qcCompany && !qcName._vaiCodeSync) {
|
| 1480 |
+
qcName._vaiCodeSync = true;
|
| 1481 |
+
qcName.addEventListener('input', function () {
|
| 1482 |
+
var nv = (qcName.value || '').trim();
|
| 1483 |
+
if (nv) qcCompany.value = genOrderCode();
|
| 1484 |
+
});
|
| 1485 |
+
}
|
| 1486 |
+
} catch (e) {}
|
| 1487 |
// Re-bind in case the button is injected late
|
| 1488 |
setTimeout(function(){ bindCartButton(); }, 500);
|
| 1489 |
setTimeout(function(){ bindCartButton(); }, 2000);
|
src/customers.js
CHANGED
|
@@ -379,6 +379,14 @@
|
|
| 379 |
var qcAddr = document.getElementById('qcAddr');
|
| 380 |
if (qcName && name) qcName.value = name;
|
| 381 |
if (qcAddr && addr) qcAddr.value = addr;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 382 |
|
| 383 |
// Auto-apply per-customer ck (global % OR per-brand % like "Malloca 35, Grob 20").
|
| 384 |
if (record.ck != null && String(record.ck).trim() !== '') {
|
|
|
|
| 379 |
var qcAddr = document.getElementById('qcAddr');
|
| 380 |
if (qcName && name) qcName.value = name;
|
| 381 |
if (qcAddr && addr) qcAddr.value = addr;
|
| 382 |
+
// Regenerate the order code (mã đơn hàng) from the newly selected
|
| 383 |
+
// customer's name — genOrderCode() builds "DH<initials><ddmmyy>".
|
| 384 |
+
try {
|
| 385 |
+
if (qcName && name && window.CART_QUOTE && window.CART_QUOTE.genOrderCode) {
|
| 386 |
+
var qcCompany = document.getElementById('qcCompany');
|
| 387 |
+
if (qcCompany) qcCompany.value = window.CART_QUOTE.genOrderCode();
|
| 388 |
+
}
|
| 389 |
+
} catch (e) {}
|
| 390 |
|
| 391 |
// Auto-apply per-customer ck (global % OR per-brand % like "Malloca 35, Grob 20").
|
| 392 |
if (record.ck != null && String(record.ck).trim() !== '') {
|
src/version.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
| 1 |
// V.AI AVATAR — version banner (used for cache-busting / diagnostics)
|
| 2 |
-
window.VAI_AVATAR_VERSION = "
|
| 3 |
window.VAI_AVATAR_CACHE = "v26-gc-" + Date.now();
|
|
|
|
| 1 |
// V.AI AVATAR — version banner (used for cache-busting / diagnostics)
|
| 2 |
+
window.VAI_AVATAR_VERSION = "v30-order-code-live";
|
| 3 |
window.VAI_AVATAR_CACHE = "v26-gc-" + Date.now();
|