// ==UserScript== // @name yes24座位分析助手 // @namespace http://tampermonkey.net/ // @version 1.3 // @description 分析yes24网站上的座位可选状态,支持自动抢票、自动锁票和自动刷新功能 // @author yoki // @match *://ticket.yes24.com/* // @match *://*.ticket.yes24.com/* // @grant GM_setValue // @grant GM_getValue // @grant GM_notification // @grant window.focus // @run-at document-end // ==/UserScript== (()=>{"use strict";function e(e){try{var t={allSeats:'#divSeatArray div[class^="s"]',availableSeats:"#divSeatArray div.s9, #divSeatArray div.s6, #divSeatArray div.s8",vipSeats:"#divSeatArray div.s9",rSeats:"#divSeatArray div.s6",sSeats:"#divSeatArray div.s8",selectedList:"#liSelSeat p"},n=Array.from(e.querySelectorAll(t.allSeats)||[]),a=Array.from(e.querySelectorAll(t.availableSeats)||[]),o=Array.from(e.querySelectorAll(t.vipSeats)||[]),s=Array.from(e.querySelectorAll(t.rSeats)||[]),i=Array.from(e.querySelectorAll(t.sSeats)||[]),r=Array.from(e.querySelectorAll(t.selectedList)||[]),l=n.map(function(e){var t=e.getAttribute("title")||"",n=e.id||"",a=e.getAttribute("grade")||"",o="";return e.classList.contains("s9")?(o="VIP席",{id:n,element:e,title:t,grade:a||o,type:o,isAvailable:!0}):e.classList.contains("s6")?(o="R席",{id:n,element:e,title:t,grade:a||o,type:o,isAvailable:!0}):e.classList.contains("s8")?(o="S席",{id:n,element:e,title:t,grade:a||o,type:o,isAvailable:!0}):{id:n,element:e,title:t,grade:a||"普通席",type:o="已售/不可用",isAvailable:!1}}),c=o.map(function(e){return{id:e.id||"",element:e,title:e.getAttribute("title")||"",grade:e.getAttribute("grade")||"VIP席",type:"VIP席",isAvailable:!0}}),d=s.map(function(e){return{id:e.id||"",element:e,title:e.getAttribute("title")||"",grade:e.getAttribute("grade")||"R席",type:"R席",isAvailable:!0}}),u=i.map(function(e){return{id:e.id||"",element:e,title:e.getAttribute("title")||"",grade:e.getAttribute("grade")||"S席",type:"S席",isAvailable:!0}}),v=a.map(function(e){var t="普通席";return e.classList.contains("s9")?t="VIP席":e.classList.contains("s6")?t="R席":e.classList.contains("s8")&&(t="S席"),{id:e.id||"",element:e,title:e.getAttribute("title")||"",grade:e.getAttribute("grade")||t,type:t,isAvailable:!0}}),f=r.map(function(e){var t=e.textContent||"";return{id:t,text:t}}),m={total:n.length,available:a.length,vip:o.length,r:s.length,s:i.length,selected:r.length,seatsWithInfo:l,selectedSeatsInfo:f,vipInfo:c,rInfo:d,sInfo:u,availableInfo:v,allSeatsInfo:l};return console.log("分析座位信息完成,共发现:",{总座位:m.total,可选座位:m.available,VIP席:m.vip,R席:m.r,S席:m.s,已选座位:m.selected,seatsWithInfo:m.seatsWithInfo,selectedSeatsInfo:m.selectedSeatsInfo,vipInfo:m.vipInfo,rInfo:m.rInfo,sInfo:m.sInfo,availableInfo:m.availableInfo,allSeatsInfo:m.allSeatsInfo}),m}catch(e){return console.error("分析座位信息时出错:",e),{total:0,available:0,vip:0,r:0,s:0,selected:0,seatsWithInfo:[],selectedSeatsInfo:[],vipInfo:[],rInfo:[],sInfo:[],availableInfo:[],allSeatsInfo:[]}}}function t(e){if(document.getElementById("yes24SeatAssistant"))return console.log("面板已存在,更新数据"),void n(e);var t;console.log("创建座位助手面板"),(t=document.createElement("style")).textContent='#yes24SeatAssistant{position:fixed;top:20px;right:20px;width:280px;background-color:rgba(33,37,41,.95);color:#fff;border-radius:8px;box-shadow:0 4px 15px rgba(0,0,0,.3);z-index:10000;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Arial,sans-serif;backdrop-filter:blur(5px);border:1px solid rgba(255,255,255,.1);overflow:hidden;transition:all .3s ease}.seat-assistant-header{display:flex;justify-content:space-between;align-items:center;padding:12px 15px;background:linear-gradient(135deg,#4568dc,#3a6073);border-bottom:1px solid rgba(255,255,255,.1)}.seat-assistant-title{font-size:16px;font-weight:700;display:flex;align-items:center}.seat-assistant-icon{margin-right:8px;font-size:18px}.seat-assistant-close{cursor:pointer;font-size:18px;opacity:.8;transition:opacity .2s;width:24px;height:24px;display:flex;align-items:center;justify-content:center;border-radius:50%}.seat-assistant-close:hover{opacity:1;background-color:rgba(255,255,255,.1)}.seat-assistant-body{padding:15px}.seat-assistant-section{margin-bottom:15px;background:rgba(0,0,0,.2);border-radius:6px;padding:12px}.seat-assistant-section-title{margin-bottom:10px;font-size:14px;font-weight:500;color:#adb5bd;border-bottom:1px solid rgba(255,255,255,.1);padding-bottom:5px}.seat-count-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.seat-count-item{text-align:center;background:rgba(0,0,0,.2);border-radius:4px;padding:8px 4px}.seat-count-label{font-size:12px;color:#adb5bd;margin-bottom:4px}.seat-count-value{font-size:18px;font-weight:700}.vip-seat{color:#20c997}.r-seat{color:#339af0}.s-seat{color:#fcc419}.available-seat{color:#51cf66}.selected-seat{color:#ff6b6b}.selected-seats-list{max-height:120px;overflow-y:auto;background:rgba(0,0,0,.15);border-radius:4px;margin-top:8px}.selected-seat-item{padding:6px 10px;border-bottom:1px solid rgba(255,255,255,.05);font-size:13px}.selected-seat-item.empty{color:#868e96;text-align:center;padding:15px}.auto-seat-controls{display:flex;flex-direction:column;gap:10px;padding:5px 0}.auto-seat-item{display:flex;align-items:center;gap:8px}.seat-input{width:50px;padding:4px 8px;background:rgba(255,255,255,0.1);border:1px solid rgba(255,255,255,0.2);border-radius:4px;color:#fff;text-align:center}.seat-select{padding:4px 8px;background:rgba(255,255,255,0.1);border:1px solid rgba(255,255,255,0.2);border-radius:4px;color:#fff;min-width:120px}.seat-checkbox{width:16px;height:16px;accent-color:#4568dc;cursor:pointer}.checkbox-container{margin:5px 0}.seat-button{background:linear-gradient(135deg,#4568dc,#3a6073);border:none;border-radius:4px;padding:8px 12px;color:#fff;cursor:pointer;transition:all 0.2s;width:100%;margin-top:5px}.seat-button:hover{background:linear-gradient(135deg,#5478ec,#4a7083)}.seat-hint{font-size:11px;color:#adb5bd}.status-indicator{font-size:12px;margin-top:8px;height:16px;color:#adb5bd;text-align:center}.status-indicator.active{color:#51cf66}.refresh-countdown{font-weight:bold}#yes24SeatAssistant *::-webkit-scrollbar{width:6px;height:6px}#yes24SeatAssistant *::-webkit-scrollbar-track{background:rgba(0,0,0,0.1);border-radius:3px}#yes24SeatAssistant *::-webkit-scrollbar-thumb{background:rgba(255,255,255,0.2);border-radius:3px;transition:background 0.2s}#yes24SeatAssistant *::-webkit-scrollbar-thumb:hover{background:rgba(255,255,255,0.3)}#yes24SeatAssistant *::-webkit-scrollbar-corner{background:transparent}.selected-seats-list{scrollbar-width:thin;scrollbar-color:rgba(255,255,255,0.2) rgba(0,0,0,0.1);padding-right:2px}',document.head.appendChild(t);var a=document.createElement("div");a.id="yes24SeatAssistant",a.innerHTML='\n