// ==UserScript== // @name OMG樂 set 開單 (URL 參數版) // @namespace http://tampermonkey.net/ // @version 4.1 // @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 }) => { // 1. 條件判斷:必須同時包含這兩個 class if (t.classList?.contains('text-break-all') && t.classList?.contains('user-select-text')) { const original = t.innerText; // 2. 執行複製 await navigator.clipboard.writeText(original); // 3. 視覺反饋 (利用實時樣式修改) t.innerText = '✅ 已複製!'; t.style.color = '#28a745'; // 4. 恢復原狀 (1秒後) setTimeout(() => { t.innerText = original; t.style.color = ''; }, 100); } }); function extractQuantity(message) { // --- 階段 1: 優先處理最明確的固定模式 (例如: 5+1) --- const priorityPatterns = { '3+1': '3000', '5+1': '5000', '7+1': '7000', '9+1': '9000', '4+1': '4000' }; for (const pattern in priorityPatterns) { if (message.includes(pattern)) { return priorityPatterns[pattern]; } } // --- 階段 2: 處理帶有 "萬" 單位的模式 (核心修改) --- if (message.includes('萬')) { const chineseNumMap = { '一': 1, '二': 2, '兩': 2, '三': 3, '四': 4, '五': 5, '六': 6, '七': 7, '八': 8, '九': 9 }; // 情況 A: 檢查中文數字 + "萬" (例如 "一萬") for (const char in chineseNumMap) { if (message.includes(char + '萬')) { // 基礎數字 * 10000 return (chineseNumMap[char] * 10000).toString(); } } // 情況 B: 檢查阿拉伯數字 + "萬" (例如 "1萬" 或 "1 萬") // 使用正規表示式尋找 "萬" 前面的數字 const regexMatch = message.match(/(\d+)\s*萬/); if (regexMatch && regexMatch[1]) { const num = parseInt(regexMatch[1], 10); // 基礎數字 * 10000 return (num * 10000).toString(); } } // --- 階段 3: 如果沒有 "萬",處理獨立的中文數字 --- const chineseNumPatterns = { '一': '1000', '二': '2000', '兩': '2000', '三': '3000', '四': '4000', '五': '5000', '六': '6000', '七': '7000', '八': '8000', '九': '9000' }; for (const pattern in chineseNumPatterns) { if (message.includes(pattern)) { return chineseNumPatterns[pattern]; } } // --- 階段 4: 處理純阿拉伯數字的特殊規則 --- const digitsOnly = message.replace(/[^\d]/g, ''); if (digitsOnly) { const parsedNum = parseInt(digitsOnly, 10); // 規則 A: 10-99 之間的數字,視為 10000 if (parsedNum == 10 ) { return '10000'; } // 規則 B: 如果只有 1 位數,補三個 0 (例如 "1" -> "1000") if (digitsOnly.length === 1) { return digitsOnly + '000'; } // 規則 C: 對於其他長度的純數字 (例如 "3000"),直接使用 return digitsOnly; } return ''; // 如果都沒匹配到,返回空字串 } /** * 按鍵觸發的主要函數 * @param {KeyboardEvent} event - 按鍵事件物件 */ function keyFunction(event) { if (event.key === 'F2' || event.keyCode === 113) { // const idElement = document.querySelector('.text-break-all.user-select-text'); const idElement = document.getElementsByClassName('mb-0 text-truncate')[(document.getElementsByClassName('mb-0 text-truncate').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); } 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}`); } else { console.warn("警告:找不到任何聊天訊息。"); } const targetUrl = `https://trade.omg.com.tw/Product/SellAdd?itemId=${encodeURIComponent(itemId)}&quantity=${encodeURIComponent(quantity)}`; const windowFeatures = `height=500,width=360`; console.log(`準備打開新視窗: ${targetUrl}`); window.open(targetUrl, '_blank', windowFeatures); const checkboxElement = document.querySelector('.CM-checkbox'); if (checkboxElement) { checkboxElement.innerText = itemId + quantity; } } } document.addEventListener('keydown', keyFunction); })();