diff --git a/HUONG_DAN.md b/HUONG_DAN.md new file mode 100644 index 0000000..6e6783a --- /dev/null +++ b/HUONG_DAN.md @@ -0,0 +1,57 @@ +# Hướng Dẫn Sử Dụng - eBay Deep Scan + +Công cụ này giúp bạn tìm kiếm, lọc và phân tích các mặt hàng trên eBay dựa trên các bộ từ khóa và cấu hình linh hoạt. + +## 1. Cấu Hình Ban Đầu + +Trước khi bắt đầu, bạn cần thiết lập các thông số môi trường trong file `.env`: + +1. Copy `.env.example` thành `.env`. +2. Điền các mã API của eBay (`EBAY_CLIENT_ID`, `EBAY_CLIENT_SECRET`). +3. Điền `OPENAI_API_KEY` để sử dụng tính năng phân tích bằng AI. + +## 2. Quản Lý Hồ Sơ Thu Quét (Scan Profiles) + +Mỗi "Profile" đại diện cho một nhóm mặt hàng (ví dụ: SSD, RAM, GPU). + +1. Truy cập Dashboard (thông qua `http://localhost:4000`). +2. Nhấn **Manage Profiles**. +3. **Thêm Profile mới**: Điền tên và **Price Ratio** (tỷ lệ giá mục tiêu so với giá thị trường, ví dụ `0.85`). +4. **Common Keywords (Keyword Chung)**: Đây là những từ khóa sẽ được nối vào cuối mọi truy vấn tìm kiếm trong profile đó (ví dụ `-cable -adapter` để loại bỏ dây cáp và đầu chuyển). + +## 3. Nhập Từ Khóa (Import Keywords) + +Bạn có thể nhập từ khóa theo phương pháp Bulk Import (nhập hàng loạt). + +1. Chọn Profile bạn muốn làm việc. +2. Nhấn **Bulk Import**. +3. Định dạng nhập: `Mã Sản Phẩm | Từ Khóa 1, Từ Khóa 2 | Giá Mục Tiêu` + - Ví dụ: `"SSDSC2BX200" | "200GB", "2.5" | 14.00` + - **Lưu ý**: Nếu bạn để mã sản phẩm trong ngoặc kép `"Mã"`, hệ thống sẽ tìm kiếm chính xác mã đó trên eBay. + +## 4. Thực Hiện Quét (Scanning) + +1. Nhấn nút **Deep Scan** ở góc trên bên phải Dashboard. +2. Một thanh tiến trình (Progress Bar) sẽ hiện ra cho biết hệ thống đang tìm kiếm từ khóa nào và hoàn thành được bao nhiêu phần trăm. +3. Kết quả sẽ được tự động lưu vào database và hiển thị trên bảng. + +## 5. Xem Kết Quả và Phân Tích AI + +- **Bảng Kết Quả**: Các mặt hàng có giá tốt (vượt qua bộ lọc giá) sẽ hiện lên trên dashboard. +- **AI Analysis**: Hệ thống tự động gửi thông tin chi tiết của các mặt hàng "PASS" lên AI để phân tích xem sản phẩm đó có đúng là món hời hay có rủi ro gì không. +- **Popup Chi Tiết**: Nhấn vào tên sản phẩm để xem ảnh phóng to, mô tả đầy đủ, thông tin người bán và các chỉ số giá (Avg Price/Unit). + +## 6. Các Phím Tắt và Tiện Ích + +- **ESC**: Đóng các cửa sổ popup. +- **Dọn dẹp database**: Nếu muốn xóa sạch danh sách mặt hàng đã quét, hãy chạy lệnh: + ```bash + node truncate_items.js + ``` + +## 7. Lưu Ý + +- Hệ thống tự động bỏ qua các mặt hàng từ Trung Quốc (CN) và các sản phẩm bị lỗi/hỏng (defective). +- Các mặt hàng được đấu giá (Auction) cũng được hỗ trợ nhưng sẽ được phân tích dựa trên giá hiện tại cộng phí ship. + +Chúc bạn săn được những món hời nhất trên eBay! diff --git a/RAM.kw b/RAM.kw index 47f35ad..de16c8d 100644 --- a/RAM.kw +++ b/RAM.kw @@ -1,165 +1,165 @@ -M321R8GA0BB0-CQK | "Samsung" "64GB" "2Rx4" "4800" "RDIMM"| 1425 -HMCG94AGBQA181N | "Hynix" "64GB" "2Rx4" "5600" "RDIMM"| 1425 -MTC40F2046S1RC56BG1 | "Micron" "64GB" "2Rx4" "5600" "RDIMM"| 1325 -HMCG94AGBRA181N | "Hynix" "64GB" "2Rx4" "5600" "RDIMM"| 1425 -M321R8GA0EB2-CCP | "Samsung" "64GB" "2Rx4" "6400" "RDIMM"| 1570 -HMCG84MEBRA17N | "Hynix" "32GB" "1Rx4" "4800" "RDIMM"| 640 -M321R4GA3BB0-CQK | "Samsung" "32GB" "2Rx8" "4800" "RDIMM"| 985 -M321R4GA3BB6-CQK | "Samsung" "32GB" "2Rx8" "4800" "RDIMM"| 640 -MTC20F2085S1RC52BAW | "Micron" "32GB" "2Rx8" "5200" "RDIMM"| 570 -M321R4GA3PB0-CWM | "Samsung" "32GB" "2Rx8" "5600" "RDIMM"| 740 -HMCG88AGBRA191N-BB | "Hynix" "32GB" "2Rx8" "5600" "RDIMM"| 715 -HMCG88AGBRA190N | "Hynix" "32GB" "2Rx8" "5600" "RDIMM"| 715 -M321R4GA0EB2-CCP | "Samsung" "32GB" "1Rx4" "6400" "RDIMM"| 715 -M321R2GA3BB0-CQK | "Samsung" "16GB" "1Rx8" "4800" "RDIMM"| 315 -MTC10F1084S1RC48BA1 | "Micron" "16GB" "1Rx8" "4800" "RDIMM"| 285 -M386AAK40B40-CWD | "Samsung" "128GB" "2S4Rx4" "2666" "LRDIMM"| 530 -M393AAG40M3B-CYF | "Samsung" "128GB" "2S2Rx4" "2933" "LRDIMM"| 580 -HMABAGL7ABR4N-XN | "Hynix" "128GB" "4DRx4" "3200" "LRDIMM"| 470 -M386A8K40BM1-CRC | "Samsung" "64GB" "4DRx4" "2400" "LRDIMM"| 287.36 -M386A8K40BMB-CRC | "Samsung" "64GB" "4DRx4" "2400" "LRDIMM"| 287.36 -HMAA8GL7MMR4N-UH | "Hynix" "64GB" "4DRx4" "2400" "LRDIMM"| 284.9 -MTA72ASS8G72LZ-2G3 | "Micron" "64GB" "4DRx4" "2400" "LRDIMM"| 240 -M386A8K40DM2-CTD | "Samsung" "64GB" "4DRx4" "2666" "LRDIMM"| 428 -M386A8K40BM2-CTD | "Samsung" "64GB" "4DRx4" "2666" "LRDIMM"| 420.5 -M393A8K40B22-CWD | "Samsung" "64GB" "2S2Rx4" "2666" "LRDIMM"| 400 -M386A8K40CM2-CTD | "Samsung" "64GB" "4DRx4" "2666" "LRDIMM"| 428 -HMAA8GL7MMR4N-VK | "Hynix" "64GB" "4DRx4" "2666" "LRDIMM"| 334.3 -HMAA8GL7CPR4N-VK | "Hynix" "64GB" "4DRx4" "2666" "LRDIMM"| 334.3 -M386A8K40DM2-CVF | "Samsung" "64GB" "4DRx4" "2933" "LRDIMM"| 552.33 -HMAA8GL7CPR4N-WM | "Hynix" "64GB" "4DRx4" "2933" "LRDIMM"| 558 -MTA72ASS8G72LZ-2G9 | "Micron" "64GB" "4DRx4" "2933" "LRDIMM"| 539 -M393A8G40AB2-CVF | "Samsung" "64GB" "2Rx4" "2933" "RDIMM"| 605 -M393A8G40MB2-CVF | "Samsung" "64GB" "2Rx4" "2933" "RDIMM"| 512 -HMAA8GR7AJR4N-WM | "Hynix" "64GB" "2Rx4" "2933" "RDIMM"| 750.5 -HMAA8GR7MJR4N-WM | "Hynix" "64GB" "2Rx4" "2933" "RDIMM"| 536 -MTA36ASF8G72PZ-2G9 | "Micron" "64GB" "2Rx4" "2933" "RDIMM"| 595 -M393A8G40AB2-CWE | "Samsung" "64GB" "2Rx4" "3200" "RDIMM"| 872 -M393A8G40MB2-CWE | "Samsung" "64GB" "2Rx4" "3200" "RDIMM"| 760 -M393A8G40CB4-CWE | "Samsung" "64GB" "2Rx4" "3200" "RDIMM"| 740 -HMAA8GR7AJR4N-XN | "Hynix" "64GB" "2Rx4" "3200" "RDIMM"| 600 -HMAA8GR7CJR4N-XN | "Hynix" "64GB" "2Rx4" "3200" "RDIMM"| 836 -M386B4G70DM0-YH9 | "Samsung" "32GB" "4Rx4" "1333" "LRDIMM"| 28.37 -M386B4G70DM0-YK | "Samsung" "32GB" "4DRx4" "1600" "LRDIMM"| 28.37 -HMA84GL7AMR4N-TF | "Hynix" "32GB" "4DRx4" "2133" "LRDIMM"| 123.5 -MTA72ASS4G72LZ-2G1 | "Micron" "32GB" "4DRx4" "2133" "LRDIMM"| 92.59 -M386A4G40DM0-CPB | "Samsung" "32GB" "4DRx4" "2133" "LRDIMM"| 152 -M386A4G40DM1-CRC | "Samsung" "32GB" "4DRx4" "2400" "LRDIMM"| 156.75 -M393A4K40BB0-CPB | "Samsung" "32GB" "2Rx4" "2133" "RDIMM"| 207 -HMA84GR7MFR4N-TF | "Hynix" "32GB" "2Rx4" "2133" "RDIMM"| 174.17 -MTA36ASF4G72PZ-2G1 | "Micron" "32GB" "2Rx4" "2133" "RDIMM"| 133 -M386A4K40BB0-CRC | "Samsung" "32GB" "2Rx4" "2400" "LRDIMM"| 172.56 -M393A4K40BB1-CRC | "Samsung" "32GB" "2Rx4" "2400" "RDIMM"| 251 -M393A4K40CB1-CRC | "Samsung" "32GB" "2Rx4" "2400" "RDIMM"| 251 -HMA84GR7MFR4N-UH | "Hynix" "32GB" "2Rx4" "2400" "RDIMM"| 207 -HMA84GR7AFR4N-UH | "Hynix" "32GB" "2Rx4" "2400" "RDIMM"| 181.16 -HMA84GL7MFR4N-UH | "Hynix" "32GB" "2Rx4" "2400" "RDIMM"| 181.16 -MTA36ASF4G72PZ-2G3 | "Micron" "32GB" "2Rx4" "2400" "RDIMM"| 192.85 -M393A4K40BB2-CTD | "Samsung" "32GB" "2Rx4" "2666" "RDIMM"| 280 -M393A4K40CB2-CTD | "Samsung" "32GB" "2Rx4" "2666" "RDIMM"| 266 -HMA84GR7CJR4N-VK | "Hynix" "32GB" "2Rx4" "2666" "RDIMM"| 248 -HMA84GR7AFR4N-VK | "Hynix" "32GB" "2Rx4" "2666" "RDIMM"| 248 -HMA84GR7JJR4N-VK | "Hynix" "32GB" "2Rx4" "2666" "RDIMM"| 248 -MTA36ASF4G72PZ-2G6 | "Micron" "32GB" "2Rx4" "2666" "RDIMM"| 213 -MTA36ASF4G72LZ-2G6 | "Micron" "32GB" "2Rx4" "2666" "RDIMM"| 213 -M393A4K40DB2-CVF | "Samsung" "32GB" "2Rx4" "2933" "RDIMM"| 228 -M393A4K40CB2-CVF | "Samsung" "32GB" "2Rx4" "2933" "RDIMM"| 380 -HMA84GR7JJR4N-WM | "Hynix" "32GB" "2Rx4" "2933" "RDIMM"| 413 -HMA84GR7DJR4N-WM | "Hynix" "32GB" "2Rx4" "2933" "RDIMM"| 413 -HMA84GR7CJR4N-WM | "Hynix" "32GB" "2Rx4" "2933" "RDIMM"| 413 -MTA36ASF4G72PZ-2G9 | "Micron" "32GB" "2Rx4" "2933" "RDIMM"| 302.82 -M393A4G40BB3-CWE | "Samsung" "32GB" "1Rx4" "3200" "RDIMM"| 436.05 -M393A4K40EB3-CWE | "Samsung" "32GB" "2Rx4" "3200" "RDIMM"| 503 -M393A4K40DB3-CWE | "Samsung" "32GB" "2Rx4" "3200" "RDIMM"| 503 -HMA84GR7CJR4N-XN | "Hynix" "32GB" "2Rx4" "3200" "RDIMM"| 475 -HMA84GR7DJR4N-XN | "Hynix" "32GB" "2Rx4" "3200" "RDIMM"| 475 -MTA36ASF4G72PZ-3G2 | "Micron" "32GB" "2Rx4" "3200" "RDIMM"| 361 -M393A4G43AB3-CWE | "Samsung" "32GB" "2Rx8" "3200" "RDIMM"| 425 -HMAA4GR7CJR8N-XN | "Hynix" "32GB" "2Rx8" "3200" "RDIMM"| 362.32 -HMT42GR7BMR4C-G7 | "Hynix" "16GB" "4Rx4" "1066" "RDIMM"| 21.13 -MT36KSF2G72PZ-1G4 | "Micron" "16GB" "2Rx4" "1333" "RDIMM"| 16.88 -M393B2G70EB0-YK0 | "Samsung" "16GB" "2Rx4" "1600" "RDIMM"| 19.69 -M393B2G70DB0-YK0 | "Samsung" "16GB" "2Rx4" "1600" "RDIMM"| 19.69 -M393B2G70BH0-YK0 | "Samsung" "16GB" "2Rx4" "1600" "RDIMM"| 19.69 -MT36KSF2G72PZ-1G6 | "Micron" "16GB" "2Rx4" "1600" "RDIMM"| 21.4 -HMT42GR7BFR4A-PB | "Hynix" "16GB" "2Rx4" "1600" "RDIMM"| 19.69 -HMT42GR7MFR4C-PB | "Hynix" "16GB" "2Rx4" "1600" "RDIMM"| 18.99 -HMT42GR7AFR4C-RD | "Hynix" "16GB" "2Rx4" "1866" "RDIMM"| 17.02 -M393A2G40EB1-CPB | "Samsung" "16GB" "2Rx4" "2133" "RDIMM"| 110.4 -M393A2G40DB0-CPB | "Samsung" "16GB" "2Rx4" "2133" "RDIMM"| 110.4 -HMA42GR7AFR4N-TF | "Hynix" "16GB" "2Rx4" "2133" "RDIMM"| 97.7 -HMA42GR7MFR4N-TF | "Hynix" "16GB" "2Rx4" "2133" "RDIMM"| 60 -MTA36ASF2G72PZ-2G1 | "Micron" "16GB" "2Rx4" "2133" "RDIMM"| 64.4 -M393A2K40CB1-CRC | "Samsung" "16GB" "1Rx4" "2400" "RDIMM"| 10 -M393A2K40BB1-CRC | "Samsung" "16GB" "1Rx4" "2400" "RDIMM"| 110 -MTA18ASF2G72PZ-2G3 | "Micron" "16GB" "1Rx4" "2400" "RDIMM"| 95 -M393A2G40EB1-CRC | "Samsung" "16GB" "2Rx4" "2400" "RDIMM"| 110.2 -HMA42GR7AFR4N-UH | "Hynix" "16GB" "2Rx4" "2400" "RDIMM"| 108 -HMA42GR7BJR4N-UH | "Hynix" "16GB" "2Rx4" "2400" "RDIMM"| 108 -MTA36ASF2G72PZ-2G3 | "Micron" "16GB" "2Rx4" "2400" "RDIMM"| 85 -HMA82GR7AFR4N-VK | "Hynix" "16GB" "1Rx4" "2666" "RDIMM"| 110 -HMA82GR7CJR4N-VK | "Hynix" "16GB" "1Rx4" "2666" "RDIMM"| 110 -M393A2K43BB1-CTD | "Samsung" "16GB" "2Rx8" "2666" "RDIMM"| 114.29 -HMA82GR7AFR8N-VK | "Hynix" "16GB" "2Rx8" "2666" "RDIMM"| 107 -HMA82GR7CJR8N-VK | "Hynix" "16GB" "2Rx8" "2666" "RDIMM"| 107 -HMA82GR7JJR8N-VK | "Hynix" "16GB" "2Rx8" "2666" "RDIMM"| 107 -MTA18ASF2G72PDZ-2G6 | "Micron" "16GB" "2Rx8" "2666" "RDIMM"| 83.33 -M393A2K40CB2-CVF | "Samsung" "16GB" "1Rx4" "2933" "RDIMM"| 118.75 -M393A2K40DB2-CVF | "Samsung" "16GB" "1Rx4" "2933" "RDIMM"| 118.75 -M393A2K43DB2-CVF | "Samsung" "16GB" "2Rx8" "2933" "RDIMM"| 100.57 -HMA82GR7CJR8N-WM | "Hynix" "16GB" "2Rx8" "2933" "RDIMM"| 78.65 -HMA82GR7JJR8N-WM | "Hynix" "16GB" "2Rx8" "2933" "RDIMM"| 102.56 -M393A2K43DB3-CWE | "Samsung" "16GB" "2Rx8" "3200" "RDIMM"| 171 -HMA82GR7DJR8N-XN | "Hynix" "16GB" "2Rx8" "3200" "RDIMM"| 114.29 -HMA82GR7CJR8N-XN | "Hynix" "16GB" "2Rx8" "3200" "RDIMM"| 114.29 -MTA18ASF2G72PDZ-3G2 | "Micron" "16GB" "2Rx8" "3200" "RDIMM"| 85.47 -M393B1K70DH0-YH9 | "Samsung" "8GB" "2Rx4" "1333" "RDIMM"| 6.05 -M393B1K70CH0-CH9 | "Samsung" "8GB" "2Rx4" "1333" "RDIMM"| 6.05 -MTA18ASF1G72PZ-2G1 | "Micron" "8GB" "1Rx4" "2133" "RDIMM"| 23.98 -HMA41GR7AFR8N-TF | "Hynix" "8GB" "1Rx8" "2133" "RDIMM"| 30.24 -M393A1G40DB0-CPB | "Samsung" "8GB" "1Rx8" "2133" "RDIMM"| 45 -MTA18ASF1G72PZ-2G1 | "Micron" "8GB" "1Rx8" "2133" "RDIMM"| 23.91 -HMA41GR7AFR8N-TF | "Hynix" "8GB" "2Rx8" "2133" "RDIMM"| 28.13 -M393A1G43DB0-CPB | "Samsung" "8GB" "2Rx8" "2133" "RDIMM"| 28.13 -MTA18ASF1G72PZ-2G1 | "Micron" "8GB" "2Rx8" "2133" "RDIMM"| 23.91 -HMA41GR7AFR4N-UH | "Hynix" "8GB" "1Rx4" "2400" "RDIMM"| 28 -HMA81GR7MFR8N-UH | "Hynix" "8GB" "1Rx8" "2400" "RDIMM"| 30.24 -M393A1G40DB1-CRC | "Samsung" "8GB" "1Rx8" "2400" "RDIMM"| 30.24 -MTA9ASF1G72PZ-2G3 | "Micron" "8GB" "1Rx8" "2400" "RDIMM"| 30.24 -HMA41GR7AFR8N-UH | "Hynix" "8GB" "2Rx8" "2400" "RDIMM"| 39.6 -M393A1G40DB1-CRC | "Samsung" "8GB" "2Rx8" "2400" "RDIMM"| 28.13 -M393A1G43DB1-CRC | "Samsung" "8GB" "2Rx8" "2400" "RDIMM"| 39.6 -MTA18ASF1G72PDZ-2G3 | "Micron" "8GB" "2Rx8" "2400" "RDIMM"| 28.13 -HMA81GR7AFR8N-VK | "Hynix" "8GB" "1Rx8" "2666" "RDIMM"| 28.6 -MTA9ASF1G72PZ-2G6 | "Micron" "8GB" "1Rx8" "2666" "RDIMM"| 28.6 -HMA81GR7AFR8N-VK | "Hynix" "8GB" "2Rx8" "2666" "RDIMM"| 28.13 -MTA9ASF1G72PZ-2G6 | "Micron" "8GB" "2Rx8" "2666" "RDIMM"| 28.13 -HMA81GR7CJR8N-WM | "Hynix" "8GB" "1Rx8" "2933" "RDIMM"| 39.33 -HMA81GR7CJR8N-WM | "Hynix" "8GB" "2Rx8" "2933" "RDIMM"| 41.49 -M393A1K43DB1-CVF | "Samsung" "8GB" "2Rx8" "2933" "RDIMM"| 41.49 -MTA9ASF1G72PZ-2G9 | "Micron" "8GB" "2Rx8" "2933" "RDIMM"| 30.24 -HMA81GR7CJR8N-XN | "Hynix" "8GB" "1Rx8" "3200" "RDIMM"| 61.6 -MTA9ASF1G72PZ-3G2 | "Micron" "8GB" "1Rx8" "3200" "RDIMM"| 30.24 -HMA81GR7CJR8N-XN | "Hynix" "8GB" "2Rx8" "3200" "RDIMM"| 41.49 +"M321R8GA0BB0-CQK" | "Samsung" "64GB" "2Rx4" "4800" "RDIMM"| 1425 +"HMCG94AGBQA181N" | "Hynix" "64GB" "2Rx4" "5600" "RDIMM"| 1425 +"MTC40F2046S1RC56BG1" | "Micron" "64GB" "2Rx4" "5600" "RDIMM"| 1325 +"HMCG94AGBRA181N" | "Hynix" "64GB" "2Rx4" "5600" "RDIMM"| 1425 +"M321R8GA0EB2-CCP" | "Samsung" "64GB" "2Rx4" "6400" "RDIMM"| 1570 +"HMCG84MEBRA17N" | "Hynix" "32GB" "1Rx4" "4800" "RDIMM"| 640 +"M321R4GA3BB0-CQK" | "Samsung" "32GB" "2Rx8" "4800" "RDIMM"| 985 +"M321R4GA3BB6-CQK" | "Samsung" "32GB" "2Rx8" "4800" "RDIMM"| 640 +"MTC20F2085S1RC52BAW" | "Micron" "32GB" "2Rx8" "5200" "RDIMM"| 570 +"M321R4GA3PB0-CWM" | "Samsung" "32GB" "2Rx8" "5600" "RDIMM"| 740 +"HMCG88AGBRA191N-BB" | "Hynix" "32GB" "2Rx8" "5600" "RDIMM"| 715 +"HMCG88AGBRA190N" | "Hynix" "32GB" "2Rx8" "5600" "RDIMM"| 715 +"M321R4GA0EB2-CCP" | "Samsung" "32GB" "1Rx4" "6400" "RDIMM"| 715 +"M321R2GA3BB0-CQK" | "Samsung" "16GB" "1Rx8" "4800" "RDIMM"| 315 +"MTC10F1084S1RC48BA1" | "Micron" "16GB" "1Rx8" "4800" "RDIMM"| 285 +"M386AAK40B40-CWD" | "Samsung" "128GB" "2S4Rx4" "2666" "LRDIMM"| 530 +"M393AAG40M3B-CYF" | "Samsung" "128GB" "2S2Rx4" "2933" "LRDIMM"| 580 +"HMABAGL7ABR4N-XN" | "Hynix" "128GB" "4DRx4" "3200" "LRDIMM"| 470 +"M386A8K40BM1-CRC" | "Samsung" "64GB" "4DRx4" "2400" "LRDIMM"| 287.36 +"M386A8K40BMB-CRC" | "Samsung" "64GB" "4DRx4" "2400" "LRDIMM"| 287.36 +"HMAA8GL7MMR4N-UH" | "Hynix" "64GB" "4DRx4" "2400" "LRDIMM"| 284.9 +"MTA72ASS8G72LZ-2G3" | "Micron" "64GB" "4DRx4" "2400" "LRDIMM"| 240 +"M386A8K40DM2-CTD" | "Samsung" "64GB" "4DRx4" "2666" "LRDIMM"| 428 +"M386A8K40BM2-CTD" | "Samsung" "64GB" "4DRx4" "2666" "LRDIMM"| 420.5 +"M393A8K40B22-CWD" | "Samsung" "64GB" "2S2Rx4" "2666" "LRDIMM"| 400 +"M386A8K40CM2-CTD" | "Samsung" "64GB" "4DRx4" "2666" "LRDIMM"| 428 +"HMAA8GL7MMR4N-VK" | "Hynix" "64GB" "4DRx4" "2666" "LRDIMM"| 334.3 +"HMAA8GL7CPR4N-VK" | "Hynix" "64GB" "4DRx4" "2666" "LRDIMM"| 334.3 +"M386A8K40DM2-CVF" | "Samsung" "64GB" "4DRx4" "2933" "LRDIMM"| 552.33 +"HMAA8GL7CPR4N-WM" | "Hynix" "64GB" "4DRx4" "2933" "LRDIMM"| 558 +"MTA72ASS8G72LZ-2G9" | "Micron" "64GB" "4DRx4" "2933" "LRDIMM"| 539 +"M393A8G40AB2-CVF" | "Samsung" "64GB" "2Rx4" "2933" "RDIMM"| 605 +"M393A8G40MB2-CVF" | "Samsung" "64GB" "2Rx4" "2933" "RDIMM"| 512 +"HMAA8GR7AJR4N-WM" | "Hynix" "64GB" "2Rx4" "2933" "RDIMM"| 750.5 +"HMAA8GR7MJR4N-WM" | "Hynix" "64GB" "2Rx4" "2933" "RDIMM"| 536 +"MTA36ASF8G72PZ-2G9" | "Micron" "64GB" "2Rx4" "2933" "RDIMM"| 595 +"M393A8G40AB2-CWE" | "Samsung" "64GB" "2Rx4" "3200" "RDIMM"| 872 +"M393A8G40MB2-CWE" | "Samsung" "64GB" "2Rx4" "3200" "RDIMM"| 760 +"M393A8G40CB4-CWE" | "Samsung" "64GB" "2Rx4" "3200" "RDIMM"| 740 +"HMAA8GR7AJR4N-XN" | "Hynix" "64GB" "2Rx4" "3200" "RDIMM"| 600 +"HMAA8GR7CJR4N-XN" | "Hynix" "64GB" "2Rx4" "3200" "RDIMM"| 836 +"M386B4G70DM0-YH9" | "Samsung" "32GB" "4Rx4" "1333" "LRDIMM"| 28.37 +"M386B4G70DM0-YK" | "Samsung" "32GB" "4DRx4" "1600" "LRDIMM"| 28.37 +"HMA84GL7AMR4N-TF" | "Hynix" "32GB" "4DRx4" "2133" "LRDIMM"| 123.5 +"MTA72ASS4G72LZ-2G1" | "Micron" "32GB" "4DRx4" "2133" "LRDIMM"| 92.59 +"M386A4G40DM0-CPB" | "Samsung" "32GB" "4DRx4" "2133" "LRDIMM"| 152 +"M386A4G40DM1-CRC" | "Samsung" "32GB" "4DRx4" "2400" "LRDIMM"| 156.75 +"M393A4K40BB0-CPB" | "Samsung" "32GB" "2Rx4" "2133" "RDIMM"| 207 +"HMA84GR7MFR4N-TF" | "Hynix" "32GB" "2Rx4" "2133" "RDIMM"| 174.17 +"MTA36ASF4G72PZ-2G1" | "Micron" "32GB" "2Rx4" "2133" "RDIMM"| 133 +"M386A4K40BB0-CRC" | "Samsung" "32GB" "2Rx4" "2400" "LRDIMM"| 172.56 +"M393A4K40BB1-CRC" | "Samsung" "32GB" "2Rx4" "2400" "RDIMM"| 251 +"M393A4K40CB1-CRC" | "Samsung" "32GB" "2Rx4" "2400" "RDIMM"| 251 +"HMA84GR7MFR4N-UH" | "Hynix" "32GB" "2Rx4" "2400" "RDIMM"| 207 +"HMA84GR7AFR4N-UH" | "Hynix" "32GB" "2Rx4" "2400" "RDIMM"| 181.16 +"HMA84GL7MFR4N-UH" | "Hynix" "32GB" "2Rx4" "2400" "RDIMM"| 181.16 +"MTA36ASF4G72PZ-2G3" | "Micron" "32GB" "2Rx4" "2400" "RDIMM"| 192.85 +"M393A4K40BB2-CTD" | "Samsung" "32GB" "2Rx4" "2666" "RDIMM"| 280 +"M393A4K40CB2-CTD" | "Samsung" "32GB" "2Rx4" "2666" "RDIMM"| 266 +"HMA84GR7CJR4N-VK" | "Hynix" "32GB" "2Rx4" "2666" "RDIMM"| 248 +"HMA84GR7AFR4N-VK" | "Hynix" "32GB" "2Rx4" "2666" "RDIMM"| 248 +"HMA84GR7JJR4N-VK" | "Hynix" "32GB" "2Rx4" "2666" "RDIMM"| 248 +"MTA36ASF4G72PZ-2G6" | "Micron" "32GB" "2Rx4" "2666" "RDIMM"| 213 +"MTA36ASF4G72LZ-2G6" | "Micron" "32GB" "2Rx4" "2666" "RDIMM"| 213 +"M393A4K40DB2-CVF" | "Samsung" "32GB" "2Rx4" "2933" "RDIMM"| 228 +"M393A4K40CB2-CVF" | "Samsung" "32GB" "2Rx4" "2933" "RDIMM"| 380 +"HMA84GR7JJR4N-WM" | "Hynix" "32GB" "2Rx4" "2933" "RDIMM"| 413 +"HMA84GR7DJR4N-WM" | "Hynix" "32GB" "2Rx4" "2933" "RDIMM"| 413 +"HMA84GR7CJR4N-WM" | "Hynix" "32GB" "2Rx4" "2933" "RDIMM"| 413 +"MTA36ASF4G72PZ-2G9" | "Micron" "32GB" "2Rx4" "2933" "RDIMM"| 302.82 +"M393A4G40BB3-CWE" | "Samsung" "32GB" "1Rx4" "3200" "RDIMM"| 436.05 +"M393A4K40EB3-CWE" | "Samsung" "32GB" "2Rx4" "3200" "RDIMM"| 503 +"M393A4K40DB3-CWE" | "Samsung" "32GB" "2Rx4" "3200" "RDIMM"| 503 +"HMA84GR7CJR4N-XN" | "Hynix" "32GB" "2Rx4" "3200" "RDIMM"| 475 +"HMA84GR7DJR4N-XN" | "Hynix" "32GB" "2Rx4" "3200" "RDIMM"| 475 +"MTA36ASF4G72PZ-3G2" | "Micron" "32GB" "2Rx4" "3200" "RDIMM"| 361 +"M393A4G43AB3-CWE" | "Samsung" "32GB" "2Rx8" "3200" "RDIMM"| 425 +"HMAA4GR7CJR8N-XN" | "Hynix" "32GB" "2Rx8" "3200" "RDIMM"| 362.32 +"HMT42GR7BMR4C-G7" | "Hynix" "16GB" "4Rx4" "1066" "RDIMM"| 21.13 +"MT36KSF2G72PZ-1G4" | "Micron" "16GB" "2Rx4" "1333" "RDIMM"| 16.88 +"M393B2G70EB0-YK0" | "Samsung" "16GB" "2Rx4" "1600" "RDIMM"| 19.69 +"M393B2G70DB0-YK0" | "Samsung" "16GB" "2Rx4" "1600" "RDIMM"| 19.69 +"M393B2G70BH0-YK0" | "Samsung" "16GB" "2Rx4" "1600" "RDIMM"| 19.69 +"MT36KSF2G72PZ-1G6" | "Micron" "16GB" "2Rx4" "1600" "RDIMM"| 21.4 +"HMT42GR7BFR4A-PB" | "Hynix" "16GB" "2Rx4" "1600" "RDIMM"| 19.69 +"HMT42GR7MFR4C-PB" | "Hynix" "16GB" "2Rx4" "1600" "RDIMM"| 18.99 +"HMT42GR7AFR4C-RD" | "Hynix" "16GB" "2Rx4" "1866" "RDIMM"| 17.02 +"M393A2G40EB1-CPB" | "Samsung" "16GB" "2Rx4" "2133" "RDIMM"| 110.4 +"M393A2G40DB0-CPB" | "Samsung" "16GB" "2Rx4" "2133" "RDIMM"| 110.4 +"HMA42GR7AFR4N-TF" | "Hynix" "16GB" "2Rx4" "2133" "RDIMM"| 97.7 +"HMA42GR7MFR4N-TF" | "Hynix" "16GB" "2Rx4" "2133" "RDIMM"| 60 +"MTA36ASF2G72PZ-2G1" | "Micron" "16GB" "2Rx4" "2133" "RDIMM"| 64.4 +"M393A2K40CB1-CRC" | "Samsung" "16GB" "1Rx4" "2400" "RDIMM"| 10 +"M393A2K40BB1-CRC" | "Samsung" "16GB" "1Rx4" "2400" "RDIMM"| 110 +"MTA18ASF2G72PZ-2G3" | "Micron" "16GB" "1Rx4" "2400" "RDIMM"| 95 +"M393A2G40EB1-CRC" | "Samsung" "16GB" "2Rx4" "2400" "RDIMM"| 110.2 +"HMA42GR7AFR4N-UH" | "Hynix" "16GB" "2Rx4" "2400" "RDIMM"| 108 +"HMA42GR7BJR4N-UH" | "Hynix" "16GB" "2Rx4" "2400" "RDIMM"| 108 +"MTA36ASF2G72PZ-2G3" | "Micron" "16GB" "2Rx4" "2400" "RDIMM"| 85 +"HMA82GR7AFR4N-VK" | "Hynix" "16GB" "1Rx4" "2666" "RDIMM"| 110 +"HMA82GR7CJR4N-VK" | "Hynix" "16GB" "1Rx4" "2666" "RDIMM"| 110 +"M393A2K43BB1-CTD" | "Samsung" "16GB" "2Rx8" "2666" "RDIMM"| 114.29 +"HMA82GR7AFR8N-VK" | "Hynix" "16GB" "2Rx8" "2666" "RDIMM"| 107 +"HMA82GR7CJR8N-VK" | "Hynix" "16GB" "2Rx8" "2666" "RDIMM"| 107 +"HMA82GR7JJR8N-VK" | "Hynix" "16GB" "2Rx8" "2666" "RDIMM"| 107 +"MTA18ASF2G72PDZ-2G6" | "Micron" "16GB" "2Rx8" "2666" "RDIMM"| 83.33 +"M393A2K40CB2-CVF" | "Samsung" "16GB" "1Rx4" "2933" "RDIMM"| 118.75 +"M393A2K40DB2-CVF" | "Samsung" "16GB" "1Rx4" "2933" "RDIMM"| 118.75 +"M393A2K43DB2-CVF" | "Samsung" "16GB" "2Rx8" "2933" "RDIMM"| 100.57 +"HMA82GR7CJR8N-WM" | "Hynix" "16GB" "2Rx8" "2933" "RDIMM"| 78.65 +"HMA82GR7JJR8N-WM" | "Hynix" "16GB" "2Rx8" "2933" "RDIMM"| 102.56 +"M393A2K43DB3-CWE" | "Samsung" "16GB" "2Rx8" "3200" "RDIMM"| 171 +"HMA82GR7DJR8N-XN" | "Hynix" "16GB" "2Rx8" "3200" "RDIMM"| 114.29 +"HMA82GR7CJR8N-XN" | "Hynix" "16GB" "2Rx8" "3200" "RDIMM"| 114.29 +"MTA18ASF2G72PDZ-3G2" | "Micron" "16GB" "2Rx8" "3200" "RDIMM"| 85.47 +"M393B1K70DH0-YH9" | "Samsung" "8GB" "2Rx4" "1333" "RDIMM"| 6.05 +"M393B1K70CH0-CH9" | "Samsung" "8GB" "2Rx4" "1333" "RDIMM"| 6.05 +"MTA18ASF1G72PZ-2G1" | "Micron" "8GB" "1Rx4" "2133" "RDIMM"| 23.98 +"HMA41GR7AFR8N-TF" | "Hynix" "8GB" "1Rx8" "2133" "RDIMM"| 30.24 +"M393A1G40DB0-CPB" | "Samsung" "8GB" "1Rx8" "2133" "RDIMM"| 45 +"MTA18ASF1G72PZ-2G1" | "Micron" "8GB" "1Rx8" "2133" "RDIMM"| 23.91 +"HMA41GR7AFR8N-TF" | "Hynix" "8GB" "2Rx8" "2133" "RDIMM"| 28.13 +"M393A1G43DB0-CPB" | "Samsung" "8GB" "2Rx8" "2133" "RDIMM"| 28.13 +"MTA18ASF1G72PZ-2G1" | "Micron" "8GB" "2Rx8" "2133" "RDIMM"| 23.91 +"HMA41GR7AFR4N-UH" | "Hynix" "8GB" "1Rx4" "2400" "RDIMM"| 28 +"HMA81GR7MFR8N-UH" | "Hynix" "8GB" "1Rx8" "2400" "RDIMM"| 30.24 +"M393A1G40DB1-CRC" | "Samsung" "8GB" "1Rx8" "2400" "RDIMM"| 30.24 +"MTA9ASF1G72PZ-2G3" | "Micron" "8GB" "1Rx8" "2400" "RDIMM"| 30.24 +"HMA41GR7AFR8N-UH" | "Hynix" "8GB" "2Rx8" "2400" "RDIMM"| 39.6 +"M393A1G40DB1-CRC" | "Samsung" "8GB" "2Rx8" "2400" "RDIMM"| 28.13 +"M393A1G43DB1-CRC" | "Samsung" "8GB" "2Rx8" "2400" "RDIMM"| 39.6 +"MTA18ASF1G72PDZ-2G3" | "Micron" "8GB" "2Rx8" "2400" "RDIMM"| 28.13 +"HMA81GR7AFR8N-VK" | "Hynix" "8GB" "1Rx8" "2666" "RDIMM"| 28.6 +"MTA9ASF1G72PZ-2G6" | "Micron" "8GB" "1Rx8" "2666" "RDIMM"| 28.6 +"HMA81GR7AFR8N-VK" | "Hynix" "8GB" "2Rx8" "2666" "RDIMM"| 28.13 +"MTA9ASF1G72PZ-2G6" | "Micron" "8GB" "2Rx8" "2666" "RDIMM"| 28.13 +"HMA81GR7CJR8N-WM" | "Hynix" "8GB" "1Rx8" "2933" "RDIMM"| 39.33 +"HMA81GR7CJR8N-WM" | "Hynix" "8GB" "2Rx8" "2933" "RDIMM"| 41.49 +"M393A1K43DB1-CVF" | "Samsung" "8GB" "2Rx8" "2933" "RDIMM"| 41.49 +"MTA9ASF1G72PZ-2G9" | "Micron" "8GB" "2Rx8" "2933" "RDIMM"| 30.24 +"HMA81GR7CJR8N-XN" | "Hynix" "8GB" "1Rx8" "3200" "RDIMM"| 61.6 +"MTA9ASF1G72PZ-3G2" | "Micron" "8GB" "1Rx8" "3200" "RDIMM"| 30.24 +"HMA81GR7CJR8N-XN" | "Hynix" "8GB" "2Rx8" "3200" "RDIMM"| 41.49 "" | "Samsung" "32GB" "2Rx8" "2133" "UDIMM"| 127.5 "" | "Samsung" "32GB" "2Rx8" "2400" "UDIMM"| 140 -M378A4G43MB1-CTD | "Samsung" "32GB" "2Rx8" "2666" "UDIMM"| 164 -M378A4G43AB2-CVF | "Samsung" "32GB" "2Rx8" "2933" "UDIMM"| 137.88 -M378A4G43AB2-CWE | "Samsung" "32GB" "2Rx8" "3200" "UDIMM"| 180 -HMAA4GU6AJR8N-XN | "Hynix" "32GB" "2Rx8" "3200" "UDIMM"| 242.25 -M378A2K43BB1-CPB | "Samsung" "16GB" "2Rx8" "2133" "UDIMM"| 56.5 -M378A2K43CB1-CRC | "Samsung" "16GB" "2Rx8" "2400" "UDIMM"| 110 -MTA18ASF2G72AZ-2G3 | "Micron" "16GB" "2Rx8" "2400" "UDIMM"| 90.25 -HMA82GU6JJR8N-VK | "Hynix" "16GB" "2Rx8" "2666" "UDIMM"| 90 -M378A2K43DB1-CVF | "Samsung" "16GB" "2Rx8" "2933" "UDIMM"| 56.5 -KVR32N22S8/16 | "Kingston" "16GB" "1RX8" "3200" "UDIMM"| 48.5 -M378A1K43BB1-CPB | "Samsung" "8GB" "1RX8" "2133" "UDIMM"| 25 -M378A1K43CB2-CRC | "Samsung" "8GB" "1RX8" "2400" "UDIMM"| 30 -M474A2K43BB1-CRC | "Samsung" "16GB" "2Rx8" "2400" "SODIMM"| 90 -HMAA2GS6CJR8N-XN | "Hynix" "16GB" "1Rx8" "3200" "SODIMM"| 72.67 -M474A2K43EB1-CWE | "Samsung" "16GB" "2Rx8" "3200" "SODIMM"| 80 -M471A4G43MB1-CTD | "Samsung" "32GB" "2Rx8" "2666" "SODIMM"| 125 -M471A4G43BB1-CWE | "Samsung" "32GB" "2Rx8" "3200" "SODIMM"| 139.4 -HMAA4GS6CJR8N | "Hynix" "32GB" "2Rx8" "3200" "SODIMM"| 123.55 -M425R2GA3BB0-CWM | "Samsung" "16GB" "1Rx8" "5600" "SODIMM"| 130.62 -M425R4GA3PB0-CWM | "Samsung" "32GB" "2Rx8" "5600" "SODIMM"| 246.73 \ No newline at end of file +"M378A4G43MB1-CTD" | "Samsung" "32GB" "2Rx8" "2666" "UDIMM"| 164 +"M378A4G43AB2-CVF" | "Samsung" "32GB" "2Rx8" "2933" "UDIMM"| 137.88 +"M378A4G43AB2-CWE" | "Samsung" "32GB" "2Rx8" "3200" "UDIMM"| 180 +"HMAA4GU6AJR8N-XN" | "Hynix" "32GB" "2Rx8" "3200" "UDIMM"| 242.25 +"M378A2K43BB1-CPB" | "Samsung" "16GB" "2Rx8" "2133" "UDIMM"| 56.5 +"M378A2K43CB1-CRC" | "Samsung" "16GB" "2Rx8" "2400" "UDIMM"| 110 +"MTA18ASF2G72AZ-2G3" | "Micron" "16GB" "2Rx8" "2400" "UDIMM"| 90.25 +"HMA82GU6JJR8N-VK" | "Hynix" "16GB" "2Rx8" "2666" "UDIMM"| 90 +"M378A2K43DB1-CVF" | "Samsung" "16GB" "2Rx8" "2933" "UDIMM"| 56.5 +"KVR32N22S8/16" | "Kingston" "16GB" "1RX8" "3200" "UDIMM"| 48.5 +"M378A1K43BB1-CPB" | "Samsung" "8GB" "1RX8" "2133" "UDIMM"| 25 +"M378A1K43CB2-CRC" | "Samsung" "8GB" "1RX8" "2400" "UDIMM"| 30 +"M474A2K43BB1-CRC" | "Samsung" "16GB" "2Rx8" "2400" "SODIMM"| 90 +"HMAA2GS6CJR8N-XN" | "Hynix" "16GB" "1Rx8" "3200" "SODIMM"| 72.67 +"M474A2K43EB1-CWE" | "Samsung" "16GB" "2Rx8" "3200" "SODIMM"| 80 +"M471A4G43MB1-CTD" | "Samsung" "32GB" "2Rx8" "2666" "SODIMM"| 125 +"M471A4G43BB1-CWE" | "Samsung" "32GB" "2Rx8" "3200" "SODIMM"| 139.4 +"HMAA4GS6CJR8N" | "Hynix" "32GB" "2Rx8" "3200" "SODIMM"| 123.55 +"M425R2GA3BB0-CWM" | "Samsung" "16GB" "1Rx8" "5600" "SODIMM"| 130.62 +"M425R4GA3PB0-CWM" | "Samsung" "32GB" "2Rx8" "5600" "SODIMM"| 246.73 \ No newline at end of file diff --git a/USER_GUIDE_VN.md b/USER_GUIDE_VN.md new file mode 100644 index 0000000..f953dc1 --- /dev/null +++ b/USER_GUIDE_VN.md @@ -0,0 +1,39 @@ +# Hướng Dẫn Sử Dụng Dashboard - eBay Deep Scan (Dành Cho Người Dùng) + +Công cụ này giúp bạn tự động tìm kiếm và lọc ra những món hàng có giá hời trên eBay. Dưới đây là cách sử dụng dashboard đơn giản nhất. + +--- + +### 1. Truy Cập Dashboard +Mở trình duyệt web và truy cập địa chỉ: `http://localhost:4000` (hoặc link server bạn được cung cấp). + +### 2. Quản Lý Nhóm Sản Phẩm (Profiles) +Mỗi **Hồ Sơ (Profile)** giúp bạn quản lý một loại hàng riêng biệt (ví dụ: một cái cho SSD, một cái cho RAM). + +1. Nhấn nút **Manage Profiles** trên thanh công cụ. +2. **Thêm mới**: Nhập tên nhóm hàng và **Tỷ lệ giá mục tiêu** (ví dụ: `0.85` tức là bạn muốn mua rẻ hơn thị trường 15%). +3. **Từ khóa chung (Common Keywords)**: Nếu bạn luôn muốn tránh một loại hàng nào đó, hãy nhập vào đây. Ví dụ: `-cable -adapter` để tự động lọc bỏ các loại dây cáp và đầu chuyển khỏi mọi tìm kiếm. + +### 3. Nhập Danh Sách Sản Phẩm (Import Keywords) +Bạn có thể nhập danh sách hàng nghìn sản phẩm cùng lúc. + +1. Nhấn **Bulk Import** trong phần quản lý từ khóa của Profile. +2. Nhập theo mẫu: `Mã sản phẩm | Tên hoặc thông số | Giá mua mong muốn` + - Ví dụ: `"SSDSC2BX200" | "200GB", "2.5" | 14.00` + - **Mẹo nhỏ**: Nếu bạn để mã sản phẩm trong dấu ngoặc kép `"Mã"`, eBay sẽ tìm kiếm chính xác mã đó, giúp kết quả chính xác hơn. + +### 4. Bắt Đầu Tìm Kiếm (Deep Scan) +- Nhấn nút **Deep Scan** (màu xanh lá) ở góc trên bên phải. +- Một thanh tiến trình sẽ hiện ra cho biết hệ thống đang tìm kiếm đến đâu. +- **Lưu ý**: Hệ thống sẽ tự động bỏ qua các mặt hàng từ Trung Quốc và các máy bị hỏng/vỡ để bạn không mất thời gian xem. + +### 5. Xem Kết Quả và Chốt Đơn +Hệ thống chỉ hiển thị những mặt hàng có giá thấp hơn mức bạn mong muốn. + +- **Đánh giá AI (Robot)**: Xem nội dung phân tích tự động dưới cột **AI Analysis**. Nó sẽ cho bạn biết sản phẩm đó "đáng mua" hay có gì "nghi ngờ". +- **Xem Ảnh và Chi Tiết**: Nhấn vào **Tên sản phẩm**. Một cửa sổ lớn hiện ra cho phép bạn xem tất cả ảnh gốc, mô tả đầy đủ và giá trung bình thực tế. +- **Link eBay**: Nhấn nút **Open on eBay** để đến thẳng trang mua hàng. +- **Sắp xếp**: Sau khi xem xong, bạn có thể chọn trạng thái **Done** (Để đánh dấu đã mua/xem) hoặc **Skip** (Để bỏ qua) giúp bảng kết quả luôn sạch sẽ. + +--- +**Lưu ý**: Nếu bạn muốn xóa toàn bộ kết quả cũ để bắt đầu lại từ đầu, hãy nhờ kỹ thuật viên chạy file làm sạch dữ liệu. diff --git a/ai.js b/ai.js index cb4f6df..40a6629 100644 --- a/ai.js +++ b/ai.js @@ -8,37 +8,93 @@ const openai = new OpenAI({ async function getAiSuggestion(item) { try { + const imageUrl = item.detail_response.image ? item.detail_response.image.imageUrl : null; + const prompt = ` -Bạn là một chuyên gia thẩm định hàng hoá điện tử trên eBay. -Hãy kiểm tra các thông tin dưới đây để trả lời 3 câu hỏi: -1. Item có bị ảo / lừa đảo (fake) không? -2. Seller có uy tín không? (so sánh feedback score, percent) -3. Dữ liệu hiện tại đã đúng sản phẩm chưa? (Part Number, Specs) +ROLE: +Bạn là chuyên gia kiểm định listing eBay dựa trên dữ liệu + hình ảnh sản phẩm. -THÔNG TIN TÌM KIẾM: -- Part Number: ${item.partNumber} -- Specs mục tiêu: ${item.specs} +MỤC TIÊU: +Đánh giá độ tin cậy của listing dựa trên: +- Độ khớp giữa HÌNH ẢNH và THÔNG TIN +- Độ uy tín của seller +- Độ hợp lý tổng thể (price / data consistency) -THÔNG TIN EBAY (Tìm được): -- Tiêu đề: ${item.title} -- Seller: ${item.seller_username} (Score: ${item.seller_feedback_score}, Positive: ${item.seller_feedback_percent}%) +INPUT: + +[SEARCH TARGET] +- Part Number: ${item.partNumber || "N/A"} +- Expected Specs: ${item.specs || "N/A"} + +[EBAY DATA] +- Title: ${item.title} - Price: ${item.price} -- Phân tích JSON chi tiết từ API: -${item.detail_response ? JSON.stringify(item.detail_response).substring(0, 1500) : 'Không có dữ liệu chi tiết'} +- Seller: ${item.detail_response?.seller?.username} +- Feedback Score: ${item.detail_response?.seller?.feedbackScore} +- Positive %: ${item.detail_response?.seller?.feedbackPercent} -YÊU CẦU ĐẦU RA (Quan trọng!): -Chỉ đưa ra kết luận DUY NHẤT 1 câu ngắn gọn. (Ví dụ: "Hãy mua ngay, seller uy tín và đúng chuẩn sản phẩm." HOẶC "Cẩn thận, seller ít feedback và tiêu đề không rõ ràng.") -Khong giải thích dài dòng! +[DETAIL DATA] +- Brand: ${item.detail_response?.brand || "N/A"} +- Aspects: ${JSON.stringify(item.detail_response?.localizedAspects || {})} + +TASK (QUAN TRỌNG): +Thực hiện các bước sau (ngầm, không output): +1. Nếu có ảnh: + - OCR label / text chính (model, part number, specs) + - So sánh với Title + Aspects +2. Check mismatch: + - Sai model / sai part number / sai specs + - Ảnh không liên quan (stock image / generic) +3. Đánh giá seller: + - Feedback < 95% hoặc score thấp => rủi ro +4. Đánh giá tổng thể: + - Consistency + seller + price + +OUTPUT RULE (BẮT BUỘC): +- Chỉ 1 câu duy nhất kèm số điểm đánh giá từ 1-10 với độ khớp +- Không markdown, không xuống dòng +- Không giải thích dài +- Format: + +Nếu tốt: +"Hãy mua, dữ liệu và hình ảnh khớp, seller uy tín. (Điểm: {{điểm}})" + +Nếu có rủi ro: +"Cẩn thận, {{lý do chính ngắn gọn}}. (Điểm: {{điểm}})" + +Nếu rất tệ: +"Không nên mua, {{lý do rõ ràng}}. (Điểm: {{điểm}})" + +Ví dụ lý do: +- label không khớp title +- sai part number +- ảnh generic / không phải sản phẩm thật +- seller feedback thấp + +OUTPUT: `; + console.log(prompt); + const messages = [ + { role: "system", content: "Bạn là trợ lý AI chuyên thẩm định eBay bằng hình ảnh và dữ liệu. Chỉ trả về 1 câu kết luận ngắn gọn." } + ]; + + if (imageUrl) { + messages.push({ + role: "user", + content: [ + { type: "text", text: prompt }, + { type: "image_url", image_url: { url: imageUrl, detail: "high" } } + ] + }); + } else { + messages.push({ role: "user", content: prompt }); + } const response = await openai.chat.completions.create({ model: "gpt-4o-mini", - messages: [ - { role: "system", content: "Bạn là trợ lý AI chuyên thẩm định eBay. Chỉ trả về 1 câu ngắn gọn." }, - { role: "user", content: prompt } - ], - max_tokens: 100, - temperature: 0.3 + messages: messages, + max_tokens: 150, + temperature: 0.2 }); return { diff --git a/public/index.html b/public/index.html index 3f756b1..ad1cfb8 100644 --- a/public/index.html +++ b/public/index.html @@ -140,6 +140,37 @@ } .modal-padd { padding: 2.5rem; } + .thumb-img { + width: 60px; height: 60px; object-fit: cover; + border-radius: 6px; cursor: pointer; border: 2px solid transparent; + transition: all 0.2s; + } + .thumb-img:hover { border-color: var(--primary); transform: translateY(-2px); } + .thumb-img.active { border-color: var(--primary); } + + #detail-main-img { + max-width: 100%; max-height: 100%; object-fit: contain; cursor: zoom-in; + } + + .row-highlight { + background: rgba(34, 197, 94, 0.1) !important; + border-left: 4px solid var(--success) !important; + } + .toolbar-group { + display: flex; gap: 0.5rem; align-items: center; + background: var(--surface); border: 1px solid var(--border); + padding: 0.3rem 0.6rem; border-radius: 8px; + } + .toolbar-group label { margin-bottom: 0; font-size: 0.75rem; white-space: nowrap; color: var(--text-muted); } + .toolbar-group input { border: none; width: 60px; padding: 0.2rem; background: transparent; color: var(--text); outline: none; } + + .badge-offer { + background: #f97316; /* Orange */ + color: white; padding: 0.1rem 0.4rem; border-radius: 4px; + font-size: 0.7rem; font-weight: 700; margin-left: 0.5rem; + display: inline-block; vertical-align: middle; line-height: 1; + } + form div { margin-bottom: 1rem; } label { display: block; margin-bottom: 0.4rem; font-size: 0.9rem; color: var(--text-muted); } input[type="text"], input[type="number"], textarea { @@ -185,6 +216,23 @@ height: 100%; background: var(--primary); width: 0%; transition: width 0.3s; box-shadow: 0 0 10px var(--primary-glow); } + + /* Bulk Bar */ + .bulk-bar { + position: fixed; bottom: 20px; left: 50%; transform: translateX(-50%); + background: var(--primary); color: white; padding: 0.8rem 2rem; + border-radius: 50px; display: flex; align-items: center; gap: 1.5rem; + box-shadow: 0 10px 30px rgba(0,0,0,0.5); z-index: 1001; + opacity: 0; pointer-events: none; transition: all 0.3s; + } + .bulk-bar.active { opacity: 1; pointer-events: all; bottom: 40px; } + .bulk-bar button { + background: rgba(255,255,255,0.15); color: white; + border: 1px solid rgba(255,255,255,0.3); padding: 0.5rem 1.2rem; + } + .bulk-bar button:hover { background: rgba(255,255,255,0.25); } + + .item-checkbox { width: 18px; height: 18px; cursor: pointer; accent-color: var(--primary); } @@ -220,6 +268,14 @@
+
+ + +
+
+ + +
@@ -227,6 +283,7 @@ + @@ -333,6 +390,16 @@ + +
+ +
+ + + +
+
+ + + +`); +}); + +app.listen(3000, () => console.log("Server running at http://localhost:3000")); \ No newline at end of file
Img Product Info Market Price