// ==UserScript== // @name OMG樂 set 開單 (URL 參數版) // @namespace http://tampermonkey.net/ // @version 4.3 // @description 改用 URL 參數傳遞資料,穩定可靠 // @author You // @match https://chat.line.biz/U0464a5acec0be5006855b67b673ad26b* // @icon https://www.google.com/s2/favicons?sz=64&domain=line.biz // @grant unsafeWindow // ==/UserScript== (function() { 'use strict'; // 設定樣式 const style = document.createElement('style'); style.innerHTML = '.text-break-all.user-select-text { cursor: pointer; border-bottom: 1px dashed #ccc; }'; document.head.appendChild(style); // 監聽點擊複製事件 document.addEventListener('click', async ({ target: t }) => { if (t.classList?.contains('text-break-all') && t.classList?.contains('user-select-text')) { const original = t.innerText; await navigator.clipboard.writeText(original); t.innerText = '✅ 已複製!'; t.style.color = '#28a745'; setTimeout(() => { t.innerText = original; t.style.color = ''; }, 100); } }); /** * 核心邏輯:提取數量 */ function extractQuantity(message) { const msg = message.replace(/\s+/g, ''); // 移除空白便於分析 // --- 階段 1: 優先處理固定模式 (3+1, 5+1 等加贈模式) --- const priorityPatterns = { '3+1': '4000', '5+1': '6000', '7+1': '8000', '9+1': '10000', '4+1': '5000' }; for (const pattern in priorityPatterns) { if (msg.includes(pattern)) { return priorityPatterns[pattern]; } } // --- 階段 2: 處理帶有 "萬" 單位的模式 --- if (msg.includes('萬')) { const chineseNumMap = { '一': 1, '二': 2, '兩': 2, '三': 3, '四': 4, '五': 5, '六': 6, '七': 7, '八': 8, '九': 9, '十': 10 }; const regexMatch = msg.match(/(\d+)\s*萬/); if (regexMatch && regexMatch[1]) { return (parseInt(regexMatch[1], 10) * 10000).toString(); } for (const char in chineseNumMap) { if (msg.includes(char + '萬')) { return (chineseNumMap[char] * 10000).toString(); } } } // --- 階段 3: 處理獨立的中文字眼 (視為千單位) --- const chineseNumPatterns = { '一': '1000', '二': '2000', '兩': '2000', '三': '3000', '四': '4000', '五': '5000', '六': '6000', '七': '7000', '八': '8000', '九': '9000' }; for (const pattern in chineseNumPatterns) { if (msg.includes(pattern)) { return chineseNumPatterns[pattern]; } } // --- 階段 4: 純數字規則 --- const digitsOnly = msg.replace(/[^\d]/g, ''); if (digitsOnly) { const parsedNum = parseInt(digitsOnly, 10); if (parsedNum >= 10 && parsedNum <= 800) { return '10000'; } if (digitsOnly.length === 1) { return digitsOnly + '000'; } return digitsOnly; } return ''; // 若無匹配則回傳空 } /** * 按鍵觸發的主要函數 */ function keyFunction(event) { if (event.key === 'F2' || event.keyCode === 113) { // 抓取 itemId const elements = document.getElementsByClassName('mb-0 text-truncate'); const idElement = elements[elements.length - 1]; if (!idElement) { console.error("錯誤:找不到包含商品 ID 的元素。"); return; } let itemId = ''; const itemIdStart = idElement.innerText.indexOf('/ss'); if (itemIdStart !== -1) { itemId = idElement.innerText.substring(itemIdStart + 1).trim(); } // 抓取最後一條對話 const chatItems = document.getElementsByClassName('chat-item-text user-select-text'); let quantity = ''; if (chatItems.length > 0) { const lastMessage = chatItems[chatItems.length - 1].innerText; quantity = extractQuantity(lastMessage); console.log(`分析: "${lastMessage}" -> 提取數量: ${quantity}`); } // --- 修改後的執行判斷 --- // 只要 itemId 存在就跳轉,不讓 quantity 缺失成為阻礙 if (itemId !== '') { const targetUrl = `https://trade.omg.com.tw/Product/SellAdd?itemId=${encodeURIComponent(itemId)}&quantity=${encodeURIComponent(quantity)}`; const windowFeatures = `height=500,width=360`; window.open(targetUrl, '_blank', windowFeatures); // 更新頁面上的顯示狀態 const checkboxElement = document.querySelector('.CM-checkbox'); if (checkboxElement) { checkboxElement.innerText = `ID:${itemId} QTY:${quantity || '(待手動)'}`; } } else { console.warn("⚠️ 商品 ID 抓取失敗,無法跳轉。"); } } } document.addEventListener('keydown', keyFunction); })();