打开/关闭菜单
打开/关闭外观设置菜单
打开/关闭个人菜单
未登录
未登录用户的IP地址会在进行任意编辑后公开展示。

MediaWiki:售票亭.js

MediaWiki界面页面
泡泡留言 | 贡献2026年5月14日 (四) 21:13的版本 (售票亭专用JS:车票统计自动计算)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)

注意:在发布之后,您可能需要清除浏览器缓存才能看到所作出的更改的影响。

  • Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5Ctrl-R(Mac为⌘-R
  • Google Chrome:Ctrl-Shift-R(Mac为⌘-Shift-R
  • Edge:按住Ctrl的同时单击刷新,或按Ctrl-F5
/* 售票亭 - 车票统计 */
$(function() {
  var $stats = $('#ticket-stats');
  if (!$stats.length) return;
  
  var totalPassed = 0, totalFailed = 0;
  var latestDate = '';
  
  $('.mw-parser-output').find('h3, h4').each(function() {
    var text = $(this).text().trim();
    var dateMatch = text.match(/(\d+月\d+日)\s*发车/);
    if (!dateMatch) return;
    
    if (!latestDate) latestDate = dateMatch[1];
    
    var $table = $(this).nextAll('table').first();
    if (!$table.length) return;
    
    var $passedCell = $table.find('td:contains("已售出车票")').closest('tr').nextAll('tr').first().find('td');
    var $failedCell = $table.find('td:contains("未能登车")').closest('tr').nextAll('tr').first().find('td');
    
    // Count passed
    var passedText = $passedCell.text().trim();
    if (passedText) {
      var lines = passedText.split(/\n/).filter(function(l) { return l.trim(); });
      // Each non-empty line starting without "已售出" is an entry
      // Actually count by splitting on newlines and filtering real entries
      totalPassed += lines.length;
    }
    
    // Count failed
    var failedText = $failedCell.text().trim();
    if (failedText) {
      var failLines = failedText.split(/\n/).filter(function(l) { return l.trim(); });
      totalFailed += failLines.length;
    }
  });
  
  $stats.html(
    '🎫 已发放车票 <strong>' + totalPassed + '</strong> 张 &nbsp;|&nbsp; ' +
    '✗ 未能登车 <strong>' + totalFailed + '</strong> 人 &nbsp;|&nbsp; ' +
    '📅 最近更新 <strong>' + latestDate + '</strong>'
  );
});