diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index babd2094b27f15cc3798186d301378be619fd0f1..0000000000000000000000000000000000000000 --- a/.gitattributes +++ /dev/null @@ -1,102 +0,0 @@ -grob_img/grob_p10.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p101.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p102.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p106.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p109.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p11.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p110.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p111.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p118.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p119.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p120.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p125.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p130.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p131.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p132.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p133.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p134.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p140.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p141.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p166.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p17.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p174.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p175.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p177.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p178.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p179.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p180.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p183.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p184.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p185.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p186.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p19.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p199.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p2.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p201.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p21.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p23.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p24.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p28.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p29.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p3.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p30.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p31.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p32.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p33.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p34.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p35.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p36.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p37.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p38.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p39.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p40.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p41.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p42.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p43.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p44.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p45.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p46.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p47.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p48.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p49.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p50.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p51.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p52.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p53.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p54.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p55.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p56.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p57.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p58.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p59.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p6.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p60.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p61.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p62.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p63.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p64.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p65.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p66.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p67.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p68.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p69.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p7.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p70.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p71.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p72.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p73.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p74.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p76.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p77.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p78.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p79.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p8.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p80.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p82.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p83.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p84.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p85.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p88.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p9.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p97.jpeg filter=lfs diff=lfs merge=lfs -text -grob_img/grob_p98.jpeg filter=lfs diff=lfs merge=lfs -text diff --git a/.github/workflows/auto-sync.yml b/.github/workflows/auto-sync.yml deleted file mode 100644 index bce784fdacfedcfe6ee246bcf145f4872b562fbb..0000000000000000000000000000000000000000 --- a/.github/workflows/auto-sync.yml +++ /dev/null @@ -1,48 +0,0 @@ -name: Auto-Sync Products - -on: - schedule: - # Chạy hàng ngày lúc midnight UTC (8:00 AM Việt Nam) - - cron: '0 0 * * *' - workflow_dispatch: - inputs: - dry_run: - description: 'Chỉ kiểm tra mà không cập nhật' - type: boolean - default: false - target_space: - description: 'Không gian target (vai-avatar2 hoặc both)' - type: choice - options: - - vai-avatar2 - - both - -jobs: - sync-products: - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Setup Python - uses: actions/setup-python@v5 - with: - python-version: '3.11' - - - name: Install dependencies - run: | - pip install huggingface_hub - - - name: Run sync products - env: - HF_TOKEN: ${{ secrets.HF_TOKEN }} - run: | - echo "Starting product auto-sync..." - python3 sync_products.py - - if [ $? -eq 0 ]; then - echo "✅ Sync completed successfully" - else - echo "❌ Sync failed" - exit 1 - fi diff --git a/.rebuild b/.rebuild index 1dff87e46c3b3a5f9d29730e500dc8fd3a9570d0..193f020ddcb40bb854a5c26cb9333ddfb1cd6714 100644 --- a/.rebuild +++ b/.rebuild @@ -1 +1 @@ -2026-07-21T03:40:00+00:00 - Excel Fee Rows Fix - QR payment v1043 \ No newline at end of file +2026-07-03T08:05:09+00:00 diff --git a/APPLY_EXCEL_FIX.md b/APPLY_EXCEL_FIX.md index 932b0b7450b5e8b8ac842b752d048b8bb1a56ae7..ce3e55212291ffc7448b7e75899441c4cf565dbb 100644 --- a/APPLY_EXCEL_FIX.md +++ b/APPLY_EXCEL_FIX.md @@ -1,32 +1,51 @@ -# Cập nhật Excel Export - Phiếu báo giá - -## Thay đổi đã thực hiện - -### 1. Thêm các dòng phí vào Excel báo giá -Khi nhập vào ô ck: Malloca ck 35%, giao hàng 200k, lắp đặt 500k, cọc 5tr, ghi chú: giao thứ 7 - -**Excel báo giá sẽ hiển thị:** -- Bảng sản phẩm (STT, Hình, Tên SP, Mã, Thông tin, SL, Đơn giá, Giá CK, Thành tiền, Ghi chú) -- Các dòng phụ phí: - - ⊕ Phí giao hàng: +200.000đ - - ⊕ Phí lắp đặt: +500.000đ -- Dòng đặt cọc: Đặt cọc: 5.000.000đ -- TỔNG CỘNG: Tổng tiền sau khi trừ cọc - -### 2. Xóa bỏ dòng "Còn lại 100%" -Dòng "Còn lại 100%" đã được xóa khỏi Excel xuất để file gọn hơn. - -## Cách hoạt động - -1. Nhập thông tin vào ô prompt (qcAiPrompt) với định dạng: - - `ck 35%` - áp dụng chiết khấu 35% cho tất cả sản phẩm - - `giao hàng 200k` hoặc `ship 200k` - thêm phí giao hàng - - `lắp đặt 500k` hoặc `install 500k` - thêm phí lắp đặt - - `cọc 5tr` hoặc `deposit 5tr` - thêm số tiền đặt cọc - - `giao thứ 7` - ghi chú (sẽ xuất trong phần Ghi chú) - -2. Nhấn nút "Xuất Excel" để tải file báo giá - -## File đã cập nhật -- `qr-payment-v1039.js` - Main script (đã cập nhật) -- `vai-excel-fix-v2.js` - Excel fix script (đã cập nhật) \ No newline at end of file +# Hướng dẫn áp dụng Fix Excel Download - CẬP NHẬT 2026 + +## Vấn đề +File Excel chỉ tải được 1 lần, lần 2+ thất bại vì `URL.revokeObjectURL()` được gọi sau 60s. + +## 🎯 GIẢI PHÁP HOÀN HẢO - Fix v2.0 + +### Cách 1: Auto Loader (TỰ ĐỘNG) - KHÔNG CẦN LÀM GÌ CẢ +- `auto-excel-fix-loader.js` tự động tải `vai-excel-fix-v2.js` khi trang mở +- Script đã được tích hợp sẵn trong index.html +- Chỉ cần mở lại trang là được áp dụng tự động ✅ + +### Cách 2: Bookmarklet - KHÔNG CẦN CHỈNH SỬA CODE +Tạo bookmark mới với URL: +```javascript +javascript:(function(){var s=document.createElement('script');s.src='/vai-excel-fix-v2.js?v='+Date.now();s.onload=function(){alert('✅ Excel Fix v2.0 đã tải!\nBạn có thể tải Excel bao nhiêu lần tùy thích!');};document.head.appendChild(s);})(); +``` + +### Cách 3: Thêm script tag vào index.html (TỰ ĐỘNG) +Thêm đoạn sau vào trước thẻ `
-Nhập prompt rồi bấm nút. File sẽ có đủ dòng phí. Log hiển thị bên dưới.
- - -`: +```html + + +``` + +## Test +1. Mở Space V.AISTUDIO +2. Tạo báo giá (lập báo giá) → Click 💾 Excel → tải ✅ +3. Click 💾 Excel NGAY → tải tiếp tục ✅ +4. Click nhiều lần nữa → luôn tải được ✅ +5. Quay lại → tạo đơn hàng mới → GH Excel → tải ✅ + +## File đã chuẩn +- ✅ `vai-excel-fix-v2.js` - Script fix chính (mới nhất) +- ✅ `auto-excel-fix-loader.js` - Tự động tải fix +- ✅ `vai-quote-excel-order-fix-v1050.js` - Backup (nếu v2 không tải được) + +## Điều kiện áp dụng +- Cần có thư viện ExcelJS (đã có trong index.html): +```html + +``` + +## Changelog v2.0 +- Thay đổi cách quản lý blob URL: registry toàn cục +- Patch URL.revokeObjectURL: không revoke khi chưa unload +- Hỗ trợ cả Quote modal và Order modal +- Toast thông báo khi xuất thành công/thất bại + +--- +*Cập nhật: 14-07-2026 - ML Intern - Fix Excel multi-download hoàn hảo* \ No newline at end of file diff --git a/FIX-STATUS.md b/FIX-STATUS.md deleted file mode 100644 index e902386e5f593c75bd93bc29e7a3975efcbc9a8c..0000000000000000000000000000000000000000 --- a/FIX-STATUS.md +++ /dev/null @@ -1,41 +0,0 @@ -# ✅ FIX HOÀN THÀNH: Phí giao hàng, lắp đặt, cọc được thêm vào Excel - -## ĐÃ SỬA - -**File: `qr-payment.js`** - phiên bản v1043 - -### Thay đổi chính: - -1. **Hàm `_doExportExcel`** - Thêm dòng phí vào Excel: - - Sau khi in danh sách sản phẩm - - Thêm các dòng phí: `⊕ Phí giao hàng`, `⊕ Phí lắp đặt`, `⊕ Phí bốc xếp` - - Cập nhật công thức tổng: `SUM(I{firstItem}:I{lastItem})+SUM(I{feeStart}:I{feeEnd})` - -2. **Hàm `parsePrompt`** - Cải thiện parsing chi phí: - - Nhận diện từ khóa: `giao`, `giao hàng`, `ship`, `lắp`, `lắp đặt`, `bốc xếp` - - Tự động gán nhãn phí phù hợp - -## CÁCH ÁP DỤNG - -Do rate limit, bạn cần **thủ công rebuild Space**: - -1. Vào https://huggingface.co/spaces/bep40/V.AISTUDIO/settings -2. Chọn tab **Builder** -3. Nhấn **Rebuild** hoặc **Restart** - -Hoặc chờ 1-2 phút để Space tự động cập nhật. - -## KIỂM TRA - -Sau khi rebuild, mở Space và thử: -1. Thêm sản phẩm vào giỏ -2. Nhập vào ô yêu cầu: `giao 200k, lắp 300k, cọc 5tr` -3. Nhấn nút **⚡ Áp dụng** -4. Nhấn **Xuất Excel** - file Excel sẽ có các dòng: - - ⊕ Phí giao hàng: 200,000đ - - ⊕ Phí lắp đặt: 300,000đ - - Cọc: 5,000,000đ - - Còn lại: tổng cộng - cọc - ---- -PR #24 đã merge vào main. \ No newline at end of file diff --git a/debug_export.html b/debug_export.html deleted file mode 100644 index 78a2dc704b22ca5775ec43b8de21ba37a15f7fc3..0000000000000000000000000000000000000000 --- a/debug_export.html +++ /dev/null @@ -1,47 +0,0 @@ - -
- -
- - -