B2BÍøÂçÈí¼þ

 ÕÒ»ØÃÜÂë
 Á¢¼´×¢²á ÉóºËÍøÕ¾ºÅ:QQ:896757558
ËÑË÷
²é¿´: 7|»Ø¸´: 0
´òÓ¡ ÉÏÒ»Ö÷Ìâ ÏÂÒ»Ö÷Ìâ

AIWROKÈí¼þ¿ò¼ÜµÄ¶¶Òô×Ô¶¯»¯ÓªÏúϵͳ

[¸´ÖÆÁ´½Ó]

1114

Ö÷Ìâ

1119

Ìû×Ó

7733

»ý·Ö

abc

Rank: 9Rank: 9Rank: 9

»ý·Ö
7733
Ìø×ªµ½Ö¸¶¨Â¥²ã
Â¥Ö÷
AIWROKÈí¼þ¿ò¼ÜµÄ¶¶Òô×Ô¶¯»¯ÓªÏúϵͳ
AIWROKÈí¼þ¿ò¼ÜµÄ¶¶Òô×Ô¶¯»¯ÓªÏúϵͳ B2BÍøÂçÈí¼þ

  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6.     <title>&#127925; ¶¶Òô×Ô¶¯»¯ÓªÏúϵͳ - AIWROK Pro</title>
  7.     <style>
  8.         * {
  9.             margin: 0;
  10.             padding: 0;
  11.             box-sizing: border-box;
  12.         }
  13.         
  14.         body {
  15.             font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
  16.             background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  17.             min-height: 100vh;
  18.             padding: 15px;
  19.         }
  20.         
  21.         .container {
  22.             max-width: 800px;
  23.             margin: 0 auto;
  24.             background: white;
  25.             border-radius: 20px;
  26.             box-shadow: 0 20px 60px rgba(0,0,0,0.15);
  27.             overflow: hidden;
  28.         }
  29.         
  30.         /* Í·²¿Ñùʽ */
  31.         .header {
  32.             background: linear-gradient(135deg, #fe2c55 0%, #ff6b6b 50%, #ffa502 100%);
  33.             color: white;
  34.             padding: 35px 25px;
  35.             text-align: center;
  36.             position: relative;
  37.             overflow: hidden;
  38.         }
  39.         
  40.         .header::before {
  41.             content: '';
  42.             position: absolute;
  43.             top: -50%;
  44.             left: -50%;
  45.             width: 200%;
  46.             height: 200%;
  47.             background: radial-gradient(circle, rgba(255,255,255,0.1) 0%, transparent 70%);
  48.             animation: pulse 4s ease-in-out infinite;
  49.         }
  50.         
  51.         @keyframes pulse {
  52.             0%, 100% { transform: scale(1); opacity: 0.5; }
  53.             50% { transform: scale(1.1); opacity: 0.8; }
  54.         }
  55.         
  56.         .header h1 {
  57.             font-size: 28px;
  58.             margin-bottom: 10px;
  59.             position: relative;
  60.             z-index: 1;
  61.             text-shadow: 2px 2px 4px rgba(0,0,0,0.2);
  62.         }
  63.         
  64.         .header p {
  65.             font-size: 15px;
  66.             opacity: 0.95;
  67.             position: relative;
  68.             z-index: 1;
  69.         }
  70.         
  71.         .version-badge {
  72.             display: inline-block;
  73.             background: rgba(255,255,255,0.2);
  74.             padding: 5px 15px;
  75.             border-radius: 20px;
  76.             font-size: 12px;
  77.             margin-top: 10px;
  78.             position: relative;
  79.             z-index: 1;
  80.         }
  81.         
  82.         /* ±êǩҳµ¼º½ */
  83.         .tab-nav {
  84.             display: flex;
  85.             background: #f8f9fa;
  86.             border-bottom: 2px solid #e0e0e0;
  87.             overflow-x: auto;
  88.         }
  89.         
  90.         .tab-btn {
  91.             flex: 1;
  92.             padding: 15px 20px;
  93.             border: none;
  94.             background: transparent;
  95.             font-size: 14px;
  96.             font-weight: 600;
  97.             color: #666;
  98.             cursor: pointer;
  99.             transition: all 0.3s;
  100.             white-space: nowrap;
  101.             position: relative;
  102.         }
  103.         
  104.         .tab-btn.active {
  105.             color: #fe2c55;
  106.             background: white;
  107.         }
  108.         
  109.         .tab-btn.active::after {
  110.             content: '';
  111.             position: absolute;
  112.             bottom: 0;
  113.             left: 0;
  114.             right: 0;
  115.             height: 3px;
  116.             background: #fe2c55;
  117.         }
  118.         
  119.         .tab-btn:hover {
  120.             background: rgba(254, 44, 85, 0.05);
  121.         }
  122.         
  123.         /* ÄÚÈÝÇøÓò */
  124.         .content {
  125.             padding: 25px;
  126.         }
  127.         
  128.         .tab-content {
  129.             display: none;
  130.         }
  131.         
  132.         .tab-content.active {
  133.             display: block;
  134.             animation: fadeIn 0.3s ease;
  135.         }
  136.         
  137.         @keyframes fadeIn {
  138.             from { opacity: 0; transform: translateY(10px); }
  139.             to { opacity: 1; transform: translateY(0); }
  140.         }
  141.         
  142.         /* ¿¨Æ¬Ñùʽ */
  143.         .card {
  144.             background: white;
  145.             border: 2px solid #f0f0f0;
  146.             border-radius: 12px;
  147.             padding: 20px;
  148.             margin-bottom: 20px;
  149.             transition: all 0.3s;
  150.         }
  151.         
  152.         .card:hover {
  153.             border-color: #fe2c55;
  154.             box-shadow: 0 5px 20px rgba(254, 44, 85, 0.1);
  155.         }
  156.         
  157.         .card-title {
  158.             font-size: 18px;
  159.             font-weight: bold;
  160.             color: #333;
  161.             margin-bottom: 15px;
  162.             display: flex;
  163.             align-items: center;
  164.             gap: 8px;
  165.         }
  166.         
  167.         .card-title::before {
  168.             content: '';
  169.             width: 4px;
  170.             height: 20px;
  171.             background: linear-gradient(to bottom, #fe2c55, #ff6b6b);
  172.             border-radius: 2px;
  173.         }
  174.         
  175.         /* ±íµ¥ÔªËØ */
  176.         .form-group {
  177.             margin-bottom: 18px;
  178.         }
  179.         
  180.         .form-group label {
  181.             display: block;
  182.             font-size: 14px;
  183.             color: #555;
  184.             margin-bottom: 8px;
  185.             font-weight: 500;
  186.         }
  187.         
  188.         .form-group input[type="text"],
  189.         .form-group input[type="number"],
  190.         .form-group textarea,
  191.         .form-group select {
  192.             width: 100%;
  193.             padding: 12px 15px;
  194.             border: 2px solid #e0e0e0;
  195.             border-radius: 8px;
  196.             font-size: 15px;
  197.             transition: all 0.3s;
  198.             background: #fafafa;
  199.         }
  200.         
  201.         .form-group input:focus,
  202.         .form-group textarea:focus,
  203.         .form-group select:focus {
  204.             outline: none;
  205.             border-color: #fe2c55;
  206.             background: white;
  207.             box-shadow: 0 0 0 3px rgba(254, 44, 85, 0.1);
  208.         }
  209.         
  210.         .form-group textarea {
  211.             resize: vertical;
  212.             min-height: 100px;
  213.             font-family: inherit;
  214.         }
  215.         
  216.         .form-hint {
  217.             font-size: 12px;
  218.             color: #999;
  219.             margin-top: 5px;
  220.         }
  221.         
  222.         /* ¿ª¹ØÑùʽ */
  223.         .switch-group {
  224.             display: flex;
  225.             justify-content: space-between;
  226.             align-items: center;
  227.             padding: 15px;
  228.             background: #f8f9fa;
  229.             border-radius: 10px;
  230.             margin-bottom: 10px;
  231.             transition: all 0.3s;
  232.         }
  233.         
  234.         .switch-group:hover {
  235.             background: #f0f0f0;
  236.         }
  237.         
  238.         .switch-info {
  239.             flex: 1;
  240.         }
  241.         
  242.         .switch-label {
  243.             font-size: 15px;
  244.             color: #333;
  245.             font-weight: 500;
  246.             margin-bottom: 3px;
  247.         }
  248.         
  249.         .switch-desc {
  250.             font-size: 12px;
  251.             color: #999;
  252.         }
  253.         
  254.         .switch {
  255.             position: relative;
  256.             width: 56px;
  257.             height: 30px;
  258.             margin-left: 15px;
  259.         }
  260.         
  261.         .switch input {
  262.             opacity: 0;
  263.             width: 0;
  264.             height: 0;
  265.         }
  266.         
  267.         .slider {
  268.             position: absolute;
  269.             cursor: pointer;
  270.             top: 0;
  271.             left: 0;
  272.             right: 0;
  273.             bottom: 0;
  274.             background-color: #ccc;
  275.             transition: 0.3s;
  276.             border-radius: 30px;
  277.         }
  278.         
  279.         .slider:before {
  280.             position: absolute;
  281.             content: "";
  282.             height: 24px;
  283.             width: 24px;
  284.             left: 3px;
  285.             bottom: 3px;
  286.             background-color: white;
  287.             transition: 0.3s;
  288.             border-radius: 50%;
  289.             box-shadow: 0 2px 4px rgba(0,0,0,0.2);
  290.         }
  291.         
  292.         input:checked + .slider {
  293.             background: linear-gradient(135deg, #fe2c55 0%, #ff6b6b 100%);
  294.         }
  295.         
  296.         input:checked + .slider:before {
  297.             transform: translateX(26px);
  298.         }
  299.         
  300.         /* °´Å¥×é */
  301.         .btn-group {
  302.             display: grid;
  303.             grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
  304.             gap: 12px;
  305.             margin-top: 20px;
  306.         }
  307.         
  308.         .btn {
  309.             padding: 14px 20px;
  310.             border: none;
  311.             border-radius: 10px;
  312.             font-size: 15px;
  313.             font-weight: 600;
  314.             cursor: pointer;
  315.             transition: all 0.3s;
  316.             display: flex;
  317.             align-items: center;
  318.             justify-content: center;
  319.             gap: 8px;
  320.             position: relative;
  321.             overflow: hidden;
  322.         }
  323.         
  324.         .btn::before {
  325.             content: '';
  326.             position: absolute;
  327.             top: 50%;
  328.             left: 50%;
  329.             width: 0;
  330.             height: 0;
  331.             border-radius: 50%;
  332.             background: rgba(255,255,255,0.3);
  333.             transform: translate(-50%, -50%);
  334.             transition: width 0.6s, height 0.6s;
  335.         }
  336.         
  337.         .btn:active::before {
  338.             width: 300px;
  339.             height: 300px;
  340.         }
  341.         
  342.         .btn-primary {
  343.             background: linear-gradient(135deg, #fe2c55 0%, #ff6b6b 100%);
  344.             color: white;
  345.             box-shadow: 0 4px 15px rgba(254, 44, 85, 0.3);
  346.         }
  347.         
  348.         .btn-primary:hover {
  349.             transform: translateY(-2px);
  350.             box-shadow: 0 6px 20px rgba(254, 44, 85, 0.4);
  351.         }
  352.         
  353.         .btn-success {
  354.             background: linear-gradient(135deg, #00C851 0%, #00a843 100%);
  355.             color: white;
  356.             box-shadow: 0 4px 15px rgba(0, 200, 81, 0.3);
  357.         }
  358.         
  359.         .btn-success:hover {
  360.             transform: translateY(-2px);
  361.             box-shadow: 0 6px 20px rgba(0, 200, 81, 0.4);
  362.         }
  363.         
  364.         .btn-warning {
  365.             background: linear-gradient(135deg, #ffbb33 0%, #ff8800 100%);
  366.             color: white;
  367.             box-shadow: 0 4px 15px rgba(255, 187, 51, 0.3);
  368.         }
  369.         
  370.         .btn-warning:hover {
  371.             transform: translateY(-2px);
  372.             box-shadow: 0 6px 20px rgba(255, 187, 51, 0.4);
  373.         }
  374.         
  375.         .btn-danger {
  376.             background: linear-gradient(135deg, #ff4444 0%, #cc0000 100%);
  377.             color: white;
  378.             box-shadow: 0 4px 15px rgba(255, 68, 68, 0.3);
  379.         }
  380.         
  381.         .btn-danger:hover {
  382.             transform: translateY(-2px);
  383.             box-shadow: 0 6px 20px rgba(255, 68, 68, 0.4);
  384.         }
  385.         
  386.         .btn-secondary {
  387.             background: #f0f0f0;
  388.             color: #333;
  389.         }
  390.         
  391.         .btn-secondary:hover {
  392.             background: #e0e0e0;
  393.         }
  394.         
  395.         /* ×´Ì¬Ãæ°å */
  396.         .status-panel {
  397.             background: linear-gradient(135deg, #f8f9fa 0%, #ffffff 100%);
  398.             border: 2px solid #e0e0e0;
  399.             border-radius: 12px;
  400.             padding: 20px;
  401.             margin-top: 20px;
  402.         }
  403.         
  404.         .status-header {
  405.             display: flex;
  406.             justify-content: space-between;
  407.             align-items: center;
  408.             margin-bottom: 15px;
  409.         }
  410.         
  411.         .status-title {
  412.             font-size: 16px;
  413.             font-weight: bold;
  414.             color: #333;
  415.         }
  416.         
  417.         .status-indicator {
  418.             display: flex;
  419.             align-items: center;
  420.             gap: 8px;
  421.             font-size: 14px;
  422.             font-weight: 600;
  423.         }
  424.         
  425.         .status-dot {
  426.             width: 10px;
  427.             height: 10px;
  428.             border-radius: 50%;
  429.             animation: blink 1.5s infinite;
  430.         }
  431.         
  432.         .status-dot.running {
  433.             background: #00C851;
  434.         }
  435.         
  436.         .status-dot.stopped {
  437.             background: #ff4444;
  438.             animation: none;
  439.         }
  440.         
  441.         @keyframes blink {
  442.             0%, 100% { opacity: 1; }
  443.             50% { opacity: 0.3; }
  444.         }
  445.         
  446.         .stats-grid {
  447.             display: grid;
  448.             grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
  449.             gap: 12px;
  450.             margin-top: 15px;
  451.         }
  452.         
  453.         .stat-item {
  454.             background: white;
  455.             border: 1px solid #e0e0e0;
  456.             border-radius: 8px;
  457.             padding: 12px;
  458.             text-align: center;
  459.         }
  460.         
  461.         .stat-value {
  462.             font-size: 24px;
  463.             font-weight: bold;
  464.             color: #fe2c55;
  465.             margin-bottom: 5px;
  466.         }
  467.         
  468.         .stat-label {
  469.             font-size: 12px;
  470.             color: #999;
  471.         }
  472.         
  473.         /* ½ø¶ÈÌõ */
  474.         .progress-container {
  475.             margin-top: 15px;
  476.         }
  477.         
  478.         .progress-bar {
  479.             width: 100%;
  480.             height: 10px;
  481.             background: #e0e0e0;
  482.             border-radius: 5px;
  483.             overflow: hidden;
  484.             position: relative;
  485.         }
  486.         
  487.         .progress-fill {
  488.             height: 100%;
  489.             background: linear-gradient(90deg, #fe2c55 0%, #ff6b6b 50%, #ffa502 100%);
  490.             transition: width 0.5s ease;
  491.             border-radius: 5px;
  492.             position: relative;
  493.         }
  494.         
  495.         .progress-fill::after {
  496.             content: '';
  497.             position: absolute;
  498.             top: 0;
  499.             left: 0;
  500.             right: 0;
  501.             bottom: 0;
  502.             background: linear-gradient(90deg, transparent, rgba(255,255,255,0.3), transparent);
  503.             animation: shimmer 2s infinite;
  504.         }
  505.         
  506.         @keyframes shimmer {
  507.             0% { transform: translateX(-100%); }
  508.             100% { transform: translateX(100%); }
  509.         }
  510.         
  511.         .progress-text {
  512.             text-align: center;
  513.             margin-top: 8px;
  514.             font-size: 13px;
  515.             color: #666;
  516.         }
  517.         
  518.         /* ÈÕÖ¾Ãæ°å */
  519.         .log-panel {
  520.             background: #1e1e1e;
  521.             border-radius: 12px;
  522.             padding: 15px;
  523.             margin-top: 20px;
  524.             max-height: 400px;
  525.             overflow-y: auto;
  526.             font-family: 'Courier New', Consolas, monospace;
  527.             font-size: 13px;
  528.             line-height: 1.8;
  529.         }
  530.         
  531.         .log-header {
  532.             display: flex;
  533.             justify-content: space-between;
  534.             align-items: center;
  535.             margin-bottom: 10px;
  536.             padding-bottom: 10px;
  537.             border-bottom: 1px solid #333;
  538.         }
  539.         
  540.         .log-title {
  541.             color: #fff;
  542.             font-weight: bold;
  543.         }
  544.         
  545.         .log-clear {
  546.             background: #333;
  547.             color: #fff;
  548.             border: none;
  549.             padding: 5px 12px;
  550.             border-radius: 5px;
  551.             font-size: 12px;
  552.             cursor: pointer;
  553.         }
  554.         
  555.         .log-clear:hover {
  556.             background: #444;
  557.         }
  558.         
  559.         .log-entry {
  560.             margin-bottom: 6px;
  561.             padding: 4px 0;
  562.             border-bottom: 1px solid #2a2a2a;
  563.         }
  564.         
  565.         .log-time {
  566.             color: #888;
  567.             margin-right: 8px;
  568.         }
  569.         
  570.         .log-info {
  571.             color: #4ec9b0;
  572.         }
  573.         
  574.         .log-success {
  575.             color: #89d185;
  576.         }
  577.         
  578.         .log-error {
  579.             color: #f48771;
  580.         }
  581.         
  582.         .log-warn {
  583.             color: #dcdcaa;
  584.         }
  585.         
  586.         /* Ìáʾ¿ò */
  587.         .toast {
  588.             position: fixed;
  589.             top: 20px;
  590.             right: 20px;
  591.             background: white;
  592.             border-left: 4px solid #fe2c55;
  593.             box-shadow: 0 5px 20px rgba(0,0,0,0.2);
  594.             padding: 15px 20px;
  595.             border-radius: 8px;
  596.             display: none;
  597.             animation: slideIn 0.3s ease;
  598.             z-index: 1000;
  599.             max-width: 350px;
  600.         }
  601.         
  602.         @keyframes slideIn {
  603.             from {
  604.                 transform: translateX(100%);
  605.                 opacity: 0;
  606.             }
  607.             to {
  608.                 transform: translateX(0);
  609.                 opacity: 1;
  610.             }
  611.         }
  612.         
  613.         .toast.show {
  614.             display: block;
  615.         }
  616.         
  617.         .toast-title {
  618.             font-weight: bold;
  619.             margin-bottom: 5px;
  620.             color: #333;
  621.         }
  622.         
  623.         .toast-message {
  624.             color: #666;
  625.             font-size: 14px;
  626.         }
  627.         
  628.         /* ÏìӦʽÉè¼Æ */
  629.         @media (max-width: 768px) {
  630.             .container {
  631.                 border-radius: 15px;
  632.             }
  633.             
  634.             .header {
  635.                 padding: 25px 15px;
  636.             }
  637.             
  638.             .header h1 {
  639.                 font-size: 22px;
  640.             }
  641.             
  642.             .content {
  643.                 padding: 15px;
  644.             }
  645.             
  646.             .btn-group {
  647.                 grid-template-columns: 1fr;
  648.             }
  649.             
  650.             .stats-grid {
  651.                 grid-template-columns: repeat(2, 1fr);
  652.             }
  653.         }
  654.     </style>
  655. </head>
  656. <body>
  657.     <!-- ToastÌáʾ -->
  658.     <div class="toast" id="toast">
  659.         <div class="toast-title" id="toastTitle">Ìáʾ</div>
  660.         <div class="toast-message" id="toastMessage"></div>
  661.     </div>
  662.    
  663.     <div class="container">
  664.         <!-- Í·²¿ -->
  665.         <div class="header">
  666.             <h1>&#127925; ¶¶Òô×Ô¶¯»¯ÓªÏúϵͳ</h1>
  667.             <p>AIWROK Pro - ÖÇÄÜ¹ã¸æÍ¶·Åƽ̨</p>
  668.             <div class="version-badge">v2.0.0 | Build 2026.06.13</div>
  669.         </div>
  670.         
  671.         <!-- ±êǩҳµ¼º½ -->
  672.         <div class="tab-nav">
  673.             <button class="tab-btn active" onclick="switchTab('config')">️ ÈÎÎñÅäÖÃ</button>
  674.             <button class="tab-btn" onclick="switchTab('control')">&#127918; Ö´ÐпØÖÆ</button>
  675.             <button class="tab-btn" onclick="switchTab('monitor')">&#128202; ʵʱ¼à¿Ø</button>
  676.             <button class="tab-btn" onclick="switchTab('logs')">&#128221; ÔËÐÐÈÕÖ¾</button>
  677.         </div>
  678.         
  679.         <div class="content">
  680.             <!-- ÈÎÎñÅäÖà -->
  681.             <div class="tab-content active" id="tab-config">
  682.                 <div class="card">
  683.                     <div class="card-title">ËÑË÷¹Ø¼ü´Ê</div>
  684.                     <div class="form-group">
  685.                         <label for="keywords">ÇëÊäÈëÒªËÑË÷µÄ¹Ø¼ü´Ê£¬¶à¸ö¹Ø¼ü´ÊÓöººÅ·Ö¸ô£º</label>
  686.                         <input type="text" id="keywords" placeholder="ÃÀʳ̽µê,ÂÃÓι¥ÂÔ,½¡Éí½Ì³Ì">
  687.                     </div>
  688.                 </div>
  689.                
  690.                 <div class="card">
  691.                     <div class="card-title">ÈÎÎñÉèÖÃ</div>
  692.                     <div class="form-group">
  693.                         <label for="maxVideos">×î´óÊÓÆµÊý£º</label>
  694.                         <input type="number" id="maxVideos" placeholder="5">
  695.                     </div>
  696.                     <div class="form-group">
  697.                         <label for="waitTime">²Ù×÷¼ä¸ô£¨Ã룩£º</label>
  698.                         <input type="number" id="waitTime" placeholder="2">
  699.                     </div>
  700.                 </div>
  701.                
  702.                 <div class="card">
  703.                     <div class="card-title">²Ù×÷¿ª¹Ø</div>
  704.                     <div class="switch-group">
  705.                         <div class="switch-info">
  706.                             <div class="switch-label">µãÔÞ</div>
  707.                             <div class="switch-desc">ÊÇ·ñ×Ô¶¯µãÔÞÊÓÆµ</div>
  708.                         </div>
  709.                         <label class="switch">
  710.                             <input type="checkbox" id="likeEnabled">
  711.                             <span class="slider"></span>
  712.                         </label>
  713.                     </div>
  714.                     <div class="switch-group">
  715.                         <div class="switch-info">
  716.                             <div class="switch-label">ÆÀÂÛ</div>
  717.                             <div class="switch-desc">ÊÇ·ñ×Ô¶¯ÆÀÂÛÊÓÆµ</div>
  718.                         </div>
  719.                         <label class="switch">
  720.                             <input type="checkbox" id="commentEnabled">
  721.                             <span class="slider"></span>
  722.                         </label>
  723.                     </div>
  724.                     <div class="switch-group">
  725.                         <div class="switch-info">
  726.                             <div class="switch-label">·ÖÏí</div>
  727.                             <div class="switch-desc">ÊÇ·ñ×Ô¶¯·ÖÏíÊÓÆµ</div>
  728.                         </div>
  729.                         <label class="switch">
  730.                             <input type="checkbox" id="shareEnabled">
  731.                             <span class="slider"></span>
  732.                         </label>
  733.                     </div>
  734.                     <div class="switch-group">
  735.                         <div class="switch-info">
  736.                             <div class="switch-label">¹Ø×¢</div>
  737.                             <div class="switch-desc">ÊÇ·ñ×Ô¶¯¹Ø×¢×÷Õß</div>
  738.                         </div>
  739.                         <label class="switch">
  740.                             <input type="checkbox" id="followEnabled">
  741.                             <span class="slider"></span>
  742.                         </label>
  743.                     </div>
  744.                 </div>
  745.                
  746.                 <div class="card">
  747.                     <div class="card-title">ÆÀÂÛÄ£°å</div>
  748.                     <div class="form-group">
  749.                         <label for="commentTemplates">ÇëÊäÈëÆÀÂÛÄ£°å£¬Ã¿ÐÐÒ»¸öÄ£°å£º</label>
  750.                         <textarea id="commentTemplates" placeholder="Õâ¸öÊÓÆµÕæ²»´í£¡&#128077;\nѧµ½ÁË£¬¸Ðл·ÖÏí£¡\n̫ʵÓÃÁË£¬ÒÑÊÕ²Ø\nÖ§³Öһϣ¡¼ÓÓÍ&#128170;"></textarea>
  751.                     </div>
  752.                 </div>
  753.                
  754.                 <div class="btn-group">
  755.                     <button class="btn btn-primary" onclick="saveConfig()">&#128190; ±£´æÅäÖÃ</button>
  756.                     <button class="btn btn-secondary" onclick="loadConfig()">&#128194; ¼ÓÔØÅäÖÃ</button>
  757.                     <button class="btn btn-danger" onclick="resetConfig()">&#128465;️ ÖØÖÃÅäÖÃ</button>
  758.                 </div>
  759.             </div>
  760.             
  761.             <!-- Ö´ÐпØÖÆ -->
  762.             <div class="tab-content" id="tab-control">
  763.                 <div class="btn-group">
  764.                     <button class="btn btn-primary" id="btnStart" onclick="startCampaign()">&#128640; Æô¶¯ÈÎÎñ</button>
  765.                     <button class="btn btn-danger" id="btnStop" onclick="stopCampaign()">⏹️ Í£Ö¹ÈÎÎñ</button>
  766.                 </div>
  767.             </div>
  768.             
  769.             <!-- ʵʱ¼à¿Ø -->
  770.             <div class="tab-content" id="tab-monitor">
  771.                 <div class="status-panel">
  772.                     <div class="status-header">
  773.                         <div class="status-title">ÈÎÎñ״̬</div>
  774.                         <div class="status-indicator">
  775.                             <div id="statusDot" class="status-dot stopped"></div>
  776.                             <div id="statusText">ÒÑÍ£Ö¹</div>
  777.                         </div>
  778.                     </div>
  779.                     <div class="stats-grid">
  780.                         <div class="stat-item">
  781.                             <div class="stat-value" id="statTotal">0</div>
  782.                             <div class="stat-label">×ÜÊÓÆµÊý</div>
  783.                         </div>
  784.                         <div class="stat-item">
  785.                             <div class="stat-value" id="statLiked">0</div>
  786.                             <div class="stat-label">µãÔÞÊý</div>
  787.                         </div>
  788.                         <div class="stat-item">
  789.                             <div class="stat-value" id="statCommented">0</div>
  790.                             <div class="stat-label">ÆÀÂÛÊý</div>
  791.                         </div>
  792.                         <div class="stat-item">
  793.                             <div class="stat-value" id="statShared">0</div>
  794.                             <div class="stat-label">·ÖÏíÊý</div>
  795.                         </div>
  796.                         <div class="stat-item">
  797.                             <div class="stat-value" id="statFollowed">0</div>
  798.                             <div class="stat-label">¹Ø×¢Êý</div>
  799.                         </div>
  800.                         <div class="stat-item">
  801.                             <div class="stat-value" id="statFailed">0</div>
  802.                             <div class="stat-label">ʧ°ÜÊý</div>
  803.                         </div>
  804.                     </div>
  805.                     <div class="progress-container">
  806.                         <div class="progress-bar">
  807.                             <div class="progress-fill" id="progressBar"></div>
  808.                         </div>
  809.                         <div class="progress-text" id="progressText">×¼±¸¾ÍÐ÷</div>
  810.                     </div>
  811.                     <div class="status-header">
  812.                         <div class="status-title">ÈÎÎñ½ø¶È</div>
  813.                         <div class="status-indicator">
  814.                             <div id="currentStep">-</div>
  815.                             <div id="startTime">-</div>
  816.                         </div>
  817.                     </div>
  818.                 </div>
  819.                
  820.                 <div class="btn-group">
  821.                     <button class="btn btn-secondary" onclick="resetStats()">&#128260; ÖØÖÃͳ¼Æ</button>
  822.                     <button class="btn btn-primary" onclick="exportReport()">&#128196; µ¼³ö±¨¸æ</button>
  823.                 </div>
  824.             </div>
  825.             
  826.             <!-- ÔËÐÐÈÕÖ¾ -->
  827.             <div class="tab-content" id="tab-logs">
  828.                 <div class="log-panel">
  829.                     <div class="log-header">
  830.                         <div class="log-title">ÔËÐÐÈÕÖ¾</div>
  831.                         <button class="log-clear" onclick="clearLogs()">&#128465;️ Çå¿ÕÈÕÖ¾</button>
  832.                     </div>
  833.                     <div id="logContainer">
  834.                         <div class="log-entry"><span class="log-time">[ϵͳ]</span><span class="log-info">ÈÕÖ¾ÒÑÇå¿Õ</span></div>
  835.                     </div>
  836.                 </div>
  837.             </div>
  838.         </div>
  839.     </div>
  840.    
  841.     <script>
  842.         // ==================== È«¾Ö±äÁ¿ ====================
  843.         var isRunning = false;
  844.         var statusInterval = null;
  845.         var taskConfig = {
  846.             keywords: '',
  847.             maxVideos: 5,
  848.             waitTime: 2,
  849.             likeEnabled: true,
  850.             commentEnabled: true,
  851.             shareEnabled: false,
  852.             followEnabled: false,
  853.             commentTemplates: ''
  854.         };
  855.         
  856.         // ==================== ¹¤¾ßº¯Êý ====================
  857.         
  858.         function showToast(title, message, type) {
  859.             var toast = document.getElementById('toast');
  860.             var toastTitle = document.getElementById('toastTitle');
  861.             var toastMessage = document.getElementById('toastMessage');
  862.             
  863.             toastTitle.textContent = title;
  864.             toastMessage.textContent = message;
  865.             
  866.             if (type === 'success') {
  867.                 toast.style.borderLeftColor = '#00C851';
  868.             } else if (type === 'error') {
  869.                 toast.style.borderLeftColor = '#ff4444';
  870.             } else if (type === 'warning') {
  871.                 toast.style.borderLeftColor = '#ffbb33';
  872.             } else {
  873.                 toast.style.borderLeftColor = '#fe2c55';
  874.             }
  875.             
  876.             toast.classList.add('show');
  877.             
  878.             setTimeout(function() {
  879.                 toast.classList.remove('show');
  880.             }, 3000);
  881.         }
  882.         
  883.         function addLog(message, type) {
  884.             var logContainer = document.getElementById('logContainer');
  885.             var timestamp = new Date().toLocaleTimeString();
  886.             var entry = document.createElement('div');
  887.             entry.className = 'log-entry';
  888.             
  889.             var timeSpan = document.createElement('span');
  890.             timeSpan.className = 'log-time';
  891.             timeSpan.textContent = '[' + timestamp + '] ';
  892.             
  893.             var msgSpan = document.createElement('span');
  894.             msgSpan.className = 'log-' + type;
  895.             msgSpan.textContent = message;
  896.             
  897.             entry.appendChild(timeSpan);
  898.             entry.appendChild(msgSpan);
  899.             logContainer.appendChild(entry);
  900.             
  901.             // ×Ô¶¯¹ö¶¯µ½µ×²¿
  902.             var logPanel = document.querySelector('.log-panel');
  903.             logPanel.scrollTop = logPanel.scrollHeight;
  904.         }
  905.         
  906.         function clearLogs() {
  907.             var logContainer = document.getElementById('logContainer');
  908.             logContainer.innerHTML = '<div class="log-entry"><span class="log-time">[ϵͳ]</span><span class="log-info">ÈÕÖ¾ÒÑÇå¿Õ</span></div>';
  909.             showToast('Ìáʾ', 'ÈÕÖ¾ÒÑÇå¿Õ', 'info');
  910.         }
  911.         
  912.         function switchTab(tabName) {
  913.             // Òþ²ØËùÓбêǩҳÄÚÈÝ
  914.             var tabContents = document.querySelectorAll('.tab-content');
  915.             tabContents.forEach(function(content) {
  916.                 content.classList.remove('active');
  917.             });
  918.             
  919.             // È¡ÏûËùÓа´Å¥¼¤»î״̬
  920.             var tabBtns = document.querySelectorAll('.tab-btn');
  921.             tabBtns.forEach(function(btn) {
  922.                 btn.classList.remove('active');
  923.             });
  924.             
  925.             // ÏÔʾѡÖеıêǩҳ
  926.             document.getElementById('tab-' + tabName).classList.add('active');
  927.             
  928.             // ¼¤»î¶ÔÓ¦°´Å¥
  929.             event.target.classList.add('active');
  930.         }
  931.         
  932.         function updateProgress(current, total) {
  933.             var percent = Math.round((current / total) * 100);
  934.             document.getElementById('progressBar').style.width = percent + '%';
  935.             document.getElementById('progressText').textContent = '½ø¶È: ' + current + '/' + total + ' (' + percent + '%)';
  936.         }
  937.         
  938.         function updateStatus(data) {
  939.             try {
  940.                 var status = typeof data === 'string' ? JSON.parse(data) : data;
  941.                
  942.                 // ¸üÐÂÔËÐÐ״̬
  943.                 var statusDot = document.getElementById('statusDot');
  944.                 var statusText = document.getElementById('statusText');
  945.                
  946.                 if (status.isRunning) {
  947.                     statusDot.className = 'status-dot running';
  948.                     statusText.textContent = 'ÔËÐÐÖÐ';
  949.                     statusText.style.color = '#00C851';
  950.                 } else {
  951.                     statusDot.className = 'status-dot stopped';
  952.                     statusText.textContent = 'ÒÑÍ£Ö¹';
  953.                     statusText.style.color = '#ff4444';
  954.                 }
  955.                
  956.                 // ¸üв½ÖèÐÅÏ¢
  957.                 if (status.currentStep && status.totalSteps) {
  958.                     document.getElementById('currentStep').textContent =
  959.                         status.currentStep + '/' + status.totalSteps;
  960.                     updateProgress(status.currentStep, status.totalSteps);
  961.                 }
  962.                
  963.                 // ¸üÐÂͳ¼ÆÊý¾Ý
  964.                 if (status.statistics) {
  965.                     document.getElementById('statTotal').textContent = status.statistics.totalVideos || 0;
  966.                     document.getElementById('statLiked').textContent = status.statistics.likedCount || 0;
  967.                     document.getElementById('statCommented').textContent = status.statistics.commentedCount || 0;
  968.                     document.getElementById('statShared').textContent = status.statistics.sharedCount || 0;
  969.                     document.getElementById('statFollowed').textContent = status.statistics.followedCount || 0;
  970.                     document.getElementById('statFailed').textContent = status.statistics.failedCount || 0;
  971.                 }
  972.                
  973.                 // ¸üпªÊ¼Ê±¼ä
  974.                 if (status.statistics && status.statistics.startTime) {
  975.                     document.getElementById('startTime').textContent = status.statistics.startTime;
  976.                 }
  977.                
  978.             } catch (e) {
  979.                 console.error('¸üÐÂ״̬ʧ°Ü:', e);
  980.             }
  981.         }
  982.         
  983.         // ==================== ÅäÖùÜÀí ====================
  984.         
  985.         function saveConfig() {
  986.             try {
  987.                 addLog('ÕýÔÚ±£´æÅäÖÃ...', 'info');
  988.                
  989.                 if (window.at && window.at.publicSet) {
  990.                     // ±£´æËÑË÷¹Ø¼ü´Ê
  991.                     var keywords = document.getElementById('keywords').value;
  992.                     window.at.publicSet('douyin_keywords', keywords);
  993.                     
  994.                     // ±£´æ×î´óÊÓÆµÊý
  995.                     var maxVideos = document.getElementById('maxVideos').value;
  996.                     window.at.publicSet('douyin_max_videos', maxVideos);
  997.                     
  998.                     // ±£´æµÈ´ýʱ¼ä
  999.                     var waitTime = document.getElementById('waitTime').value;
  1000.                     window.at.publicSet('douyin_wait_time', waitTime);
  1001.                     
  1002.                     // ±£´æ¿ª¹ØÅäÖÃ
  1003.                     window.at.publicSet('douyin_like_enabled',
  1004.                         document.getElementById('likeEnabled').checked ? 'true' : 'false');
  1005.                     window.at.publicSet('douyin_comment_enabled',
  1006.                         document.getElementById('commentEnabled').checked ? 'true' : 'false');
  1007.                     window.at.publicSet('douyin_share_enabled',
  1008.                         document.getElementById('shareEnabled').checked ? 'true' : 'false');
  1009.                     window.at.publicSet('douyin_follow_enabled',
  1010.                         document.getElementById('followEnabled').checked ? 'true' : 'false');
  1011.                     
  1012.                     // ±£´æÆÀÂÛÄ£°å
  1013.                     var commentTemplates = document.getElementById('commentTemplates').value;
  1014.                     window.at.publicSet('douyin_comment_templates', commentTemplates);
  1015.                     
  1016.                     addLog('ÅäÖñ£´æ³É¹¦', 'success');
  1017.                     showToast('³É¹¦', 'ÅäÖÃÒѱ£´æµ½Ô­Éú»·¾³', 'success');
  1018.                     
  1019.                     // ͬʱ֪ͨԭÉú¶Ë
  1020.                     if (window.at.callFun) {
  1021.                         window.at.callFun('main', 'MSG:&#128190; ÅäÖÃÒѱ£´æ');
  1022.                     }
  1023.                 } else {
  1024.                     addLog('publicSet·½·¨²»¿ÉÓÃ', 'error');
  1025.                     showToast('´íÎó', 'ÎÞ·¨Á¬½Óµ½Ô­Éú»·¾³', 'error');
  1026.                 }
  1027.             } catch (e) {
  1028.                 addLog('±£´æÅäÖÃʧ°Ü: ' + e.message, 'error');
  1029.                 showToast('´íÎó', '±£´æÊ§°Ü: ' + e.message, 'error');
  1030.             }
  1031.         }
  1032.         
  1033.         function loadConfig() {
  1034.             try {
  1035.                 addLog('ÕýÔÚ¼ÓÔØÅäÖÃ...', 'info');
  1036.                
  1037.                 if (window.at && window.at.publicGet) {
  1038.                     // ¼ÓÔØËÑË÷¹Ø¼ü´Ê
  1039.                     var keywords = window.at.publicGet('douyin_keywords');
  1040.                     if (keywords) {
  1041.                         document.getElementById('keywords').value = keywords;
  1042.                     }
  1043.                     
  1044.                     // ¼ÓÔØ×î´óÊÓÆµÊý
  1045.                     var maxVideos = window.at.publicGet('douyin_max_videos');
  1046.                     if (maxVideos) {
  1047.                         document.getElementById('maxVideos').value = maxVideos;
  1048.                     }
  1049.                     
  1050.                     // ¼ÓÔØµÈ´ýʱ¼ä
  1051.                     var waitTime = window.at.publicGet('douyin_wait_time');
  1052.                     if (waitTime) {
  1053.                         document.getElementById('waitTime').value = waitTime;
  1054.                     }
  1055.                     
  1056.                     // ¼ÓÔØ¿ª¹ØÅäÖÃ
  1057.                     var likeEnabled = window.at.publicGet('douyin_like_enabled');
  1058.                     if (likeEnabled !== null) {
  1059.                         document.getElementById('likeEnabled').checked = likeEnabled === 'true';
  1060.                     }
  1061.                     
  1062.                     var commentEnabled = window.at.publicGet('douyin_comment_enabled');
  1063.                     if (commentEnabled !== null) {
  1064.                         document.getElementById('commentEnabled').checked = commentEnabled === 'true';
  1065.                     }
  1066.                     
  1067.                     var shareEnabled = window.at.publicGet('douyin_share_enabled');
  1068.                     if (shareEnabled !== null) {
  1069.                         document.getElementById('shareEnabled').checked = shareEnabled === 'true';
  1070.                     }
  1071.                     
  1072.                     var followEnabled = window.at.publicGet('douyin_follow_enabled');
  1073.                     if (followEnabled !== null) {
  1074.                         document.getElementById('followEnabled').checked = followEnabled === 'true';
  1075.                     }
  1076.                     
  1077.                     // ¼ÓÔØÆÀÂÛÄ£°å
  1078.                     var commentTemplates = window.at.publicGet('douyin_comment_templates');
  1079.                     if (commentTemplates) {
  1080.                         document.getElementById('commentTemplates').value = commentTemplates;
  1081.                     }
  1082.                     
  1083.                     addLog('ÅäÖüÓÔØ³É¹¦', 'success');
  1084.                     showToast('³É¹¦', 'ÅäÖÃÒÑ´ÓÔ­Éú»·¾³¼ÓÔØ', 'success');
  1085.                 } else {
  1086.                     addLog('publicGet·½·¨²»¿ÉÓÃ', 'error');
  1087.                     showToast('´íÎó', 'ÎÞ·¨Á¬½Óµ½Ô­Éú»·¾³', 'error');
  1088.                 }
  1089.             } catch (e) {
  1090.                 addLog('¼ÓÔØÅäÖÃʧ°Ü: ' + e.message, 'error');
  1091.                 showToast('´íÎó', '¼ÓÔØÊ§°Ü: ' + e.message, 'error');
  1092.             }
  1093.         }
  1094.         
  1095.         function resetConfig() {
  1096.             if (confirm('È·¶¨ÒªÖØÖÃΪĬÈÏÅäÖÃÂð£¿')) {
  1097.                 document.getElementById('keywords').value = 'ÃÀʳ̽µê,ÂÃÓι¥ÂÔ,½¡Éí½Ì³Ì';
  1098.                 document.getElementById('maxVideos').value = '5';
  1099.                 document.getElementById('waitTime').value = '2';
  1100.                 document.getElementById('likeEnabled').checked = true;
  1101.                 document.getElementById('commentEnabled').checked = true;
  1102.                 document.getElementById('shareEnabled').checked = false;
  1103.                 document.getElementById('followEnabled').checked = false;
  1104.                 document.getElementById('commentTemplates').value = 'Õâ¸öÊÓÆµÕæ²»´í£¡&#128077;\nѧµ½ÁË£¬¸Ðл·ÖÏí£¡\n̫ʵÓÃÁË£¬ÒÑÊÕ²Ø\nÖ§³Öһϣ¡¼ÓÓÍ&#128170;';
  1105.                
  1106.                 addLog('ÅäÖÃÒÑÖØÖÃΪĬÈÏÖµ', 'info');
  1107.                 showToast('Ìáʾ', 'ÅäÖÃÒÑÖØÖÃ', 'info');
  1108.             }
  1109.         }
  1110.         
  1111.         // ==================== ÈÎÎñ¿ØÖÆ ====================
  1112.         
  1113.         function startCampaign() {
  1114.             if (isRunning) {
  1115.                 showToast('¾¯¸æ', 'ÈÎÎñÒÑÔÚÔËÐÐÖÐ', 'warning');
  1116.                 return;
  1117.             }
  1118.             
  1119.             try {
  1120.                 addLog('&#128640; ÕýÔÚÆô¶¯¶¶Òô¹ã¸æÈÎÎñ...', 'info');
  1121.                
  1122.                 // Ïȱ£´æÅäÖÃ
  1123.                 saveConfig();
  1124.                
  1125.                 // µ÷ÓÃÔ­Éúº¯Êý - AIWROKÖ»Ö§³Öµ÷ÓÃmainº¯Êý
  1126.                 if (window.at && window.at.callFun) {
  1127.                     var result = window.at.callFun('main', 'START_CAMPAIGN');
  1128.                     addLog('ÈÎÎñÆô¶¯Ö¸ÁîÒÑ·¢ËÍ', 'success');
  1129.                     
  1130.                     isRunning = true;
  1131.                     document.getElementById('btnStart').disabled = true;
  1132.                     document.getElementById('btnStop').disabled = false;
  1133.                     
  1134.                     showToast('³É¹¦', 'ÈÎÎñÒÑÆô¶¯', 'success');
  1135.                     
  1136.                     // ¶¨ÆÚ»ñȡ״̬
  1137.                     if (statusInterval) {
  1138.                         clearInterval(statusInterval);
  1139.                     }
  1140.                     statusInterval = setInterval(function() {
  1141.                         getStatus();
  1142.                     }, 2000);
  1143.                     
  1144.                 } else {
  1145.                     addLog('callFun·½·¨²»¿ÉÓÃ', 'error');
  1146.                     showToast('´íÎó', 'ÎÞ·¨Á¬½Óµ½Ô­Éú»·¾³', 'error');
  1147.                 }
  1148.                
  1149.             } catch (e) {
  1150.                 addLog('Æô¶¯Ê§°Ü: ' + e.message, 'error');
  1151.                 showToast('´íÎó', 'Æô¶¯Ê§°Ü: ' + e.message, 'error');
  1152.             }
  1153.         }
  1154.         
  1155.         function stopCampaign() {
  1156.             if (!isRunning) {
  1157.                 showToast('¾¯¸æ', 'µ±Ç°Ã»ÓÐÔËÐÐÖеÄÈÎÎñ', 'warning');
  1158.                 return;
  1159.             }
  1160.             
  1161.             try {
  1162.                 addLog('⏹️ ÕýÔÚÍ£Ö¹ÈÎÎñ...', 'warn');
  1163.                
  1164.                 if (window.at && window.at.callFun) {
  1165.                     var result = window.at.callFun('main', 'STOP_CAMPAIGN');
  1166.                     addLog('ÈÎÎñÍ£Ö¹Ö¸ÁîÒÑ·¢ËÍ', 'success');
  1167.                     
  1168.                     isRunning = false;
  1169.                     document.getElementById('btnStart').disabled = false;
  1170.                     document.getElementById('btnStop').disabled = true;
  1171.                     
  1172.                     if (statusInterval) {
  1173.                         clearInterval(statusInterval);
  1174.                         statusInterval = null;
  1175.                     }
  1176.                     
  1177.                     showToast('³É¹¦', 'ÈÎÎñÒÑÍ£Ö¹', 'success');
  1178.                 } else {
  1179.                     addLog('callFun·½·¨²»¿ÉÓÃ', 'error');
  1180.                     showToast('´íÎó', 'ÎÞ·¨Á¬½Óµ½Ô­Éú»·¾³', 'error');
  1181.                 }
  1182.                
  1183.             } catch (e) {
  1184.                 addLog('ֹͣʧ°Ü: ' + e.message, 'error');
  1185.                 showToast('´íÎó', 'ֹͣʧ°Ü: ' + e.message, 'error');
  1186.             }
  1187.         }
  1188.         
  1189.         function getStatus() {
  1190.             try {
  1191.                 if (window.at && window.at.callFun) {
  1192.                     var status = window.at.callFun('main', 'GET_STATUS');
  1193.                     updateStatus(status);
  1194.                 }
  1195.             } catch (e) {
  1196.                 // ¾²Ä¬Ê§°Ü£¬±ÜÃâÆµ·±±¨´í
  1197.             }
  1198.         }
  1199.         
  1200.         function resetStats() {
  1201.             if (confirm('È·¶¨ÒªÖØÖÃͳ¼ÆÊý¾ÝÂð£¿')) {
  1202.                 try {
  1203.                     addLog('&#128260; ÕýÔÚÖØÖÃͳ¼ÆÊý¾Ý...', 'info');
  1204.                     
  1205.                     if (window.at && window.at.callFun) {
  1206.                         var result = window.at.callFun('main', 'RESET_STATS');
  1207.                         addLog(result, 'success');
  1208.                         
  1209.                         // Çå¿Õ״̬ÏÔʾ
  1210.                         document.getElementById('statTotal').textContent = '0';
  1211.                         document.getElementById('statLiked').textContent = '0';
  1212.                         document.getElementById('statCommented').textContent = '0';
  1213.                         document.getElementById('statShared').textContent = '0';
  1214.                         document.getElementById('statFollowed').textContent = '0';
  1215.                         document.getElementById('statFailed').textContent = '0';
  1216.                         document.getElementById('progressBar').style.width = '0%';
  1217.                         document.getElementById('progressText').textContent = '×¼±¸¾ÍÐ÷';
  1218.                         document.getElementById('currentStep').textContent = '-';
  1219.                         document.getElementById('startTime').textContent = '-';
  1220.                         
  1221.                         showToast('³É¹¦', 'ͳ¼ÆÊý¾ÝÒÑÖØÖÃ', 'success');
  1222.                     } else {
  1223.                         addLog('callFun·½·¨²»¿ÉÓÃ', 'error');
  1224.                         showToast('´íÎó', 'ÎÞ·¨Á¬½Óµ½Ô­Éú»·¾³', 'error');
  1225.                     }
  1226.                     
  1227.                 } catch (e) {
  1228.                     addLog('ÖØÖÃʧ°Ü: ' + e.message, 'error');
  1229.                     showToast('´íÎó', 'ÖØÖÃʧ°Ü: ' + e.message, 'error');
  1230.                 }
  1231.             }
  1232.         }
  1233.         
  1234.         function exportReport() {
  1235.             try {
  1236.                 addLog('&#128196; ÕýÔÚÉú³ÉÖ´Ðб¨¸æ...', 'info');
  1237.                
  1238.                 var report = '========================================\n';
  1239.                 report += '&#128202; ¶¶Òô¹ã¸æÍ¶·ÅÖ´Ðб¨¸æ\n';
  1240.                 report += '========================================\n';
  1241.                 report += 'Éú³Éʱ¼ä: ' + new Date().toLocaleString() + '\n\n';
  1242.                
  1243.                 // Ìí¼ÓÅäÖÃÐÅÏ¢
  1244.                 report += '--- ÅäÖÃÐÅÏ¢ ---\n';
  1245.                 report += 'ËÑË÷¹Ø¼ü´Ê: ' + document.getElementById('keywords').value + '\n';
  1246.                 report += '×î´óÊÓÆµÊý: ' + document.getElementById('maxVideos').value + '\n';
  1247.                 report += '²Ù×÷¼ä¸ô: ' + document.getElementById('waitTime').value + 'Ãë\n';
  1248.                 report += 'µãÔÞ: ' + (document.getElementById('likeEnabled').checked ? '¿ªÆô' : '¹Ø±Õ') + '\n';
  1249.                 report += 'ÆÀÂÛ: ' + (document.getElementById('commentEnabled').checked ? '¿ªÆô' : '¹Ø±Õ') + '\n';
  1250.                 report += '·ÖÏí: ' + (document.getElementById('shareEnabled').checked ? '¿ªÆô' : '¹Ø±Õ') + '\n';
  1251.                 report += '¹Ø×¢: ' + (document.getElementById('followEnabled').checked ? '¿ªÆô' : '¹Ø±Õ') + '\n\n';
  1252.                
  1253.                 // Ìí¼Óͳ¼ÆÊý¾Ý
  1254.                 report += '--- ͳ¼ÆÊý¾Ý ---\n';
  1255.                 report += '×ÜÊÓÆµÊý: ' + document.getElementById('statTotal').textContent + '\n';
  1256.                 report += 'µãÔÞÊý: ' + document.getElementById('statLiked').textContent + '\n';
  1257.                 report += 'ÆÀÂÛÊý: ' + document.getElementById('statCommented').textContent + '\n';
  1258.                 report += '·ÖÏíÊý: ' + document.getElementById('statShared').textContent + '\n';
  1259.                 report += '¹Ø×¢Êý: ' + document.getElementById('statFollowed').textContent + '\n';
  1260.                 report += 'ʧ°ÜÊý: ' + document.getElementById('statFailed').textContent + '\n';
  1261.                 report += '========================================\n';
  1262.                
  1263.                 // ÏÔʾ±¨¸æ
  1264.                 alert(report);
  1265.                
  1266.                 addLog('±¨¸æÒÑÉú³É', 'success');
  1267.                 showToast('³É¹¦', 'Ö´Ðб¨¸æÒÑÉú³É', 'success');
  1268.                
  1269.             } catch (e) {
  1270.                 addLog('Éú³É±¨¸æÊ§°Ü: ' + e.message, 'error');
  1271.                 showToast('´íÎó', 'Éú³É±¨¸æÊ§°Ü: ' + e.message, 'error');
  1272.             }
  1273.         }
  1274.         
  1275.         function testConnection() {
  1276.             try {
  1277.                 addLog('&#128279; ÕýÔÚ²âÊÔÁ¬½Ó...', 'info');
  1278.                
  1279.                 if (window.at && window.at.callFun) {
  1280.                     var testMessage = 'H5¿ØÖÆÌ¨Á¬½Ó²âÊÔ - ' + new Date().toLocaleString();
  1281.                     var result = window.at.callFun('main', 'TEST:' + testMessage);
  1282.                     addLog(result, 'success');
  1283.                     showToast('³É¹¦', result, 'success');
  1284.                 } else {
  1285.                     addLog('callFun·½·¨²»¿ÉÓÃ', 'error');
  1286.                     showToast('´íÎó', 'ÎÞ·¨Á¬½Óµ½Ô­Éú»·¾³', 'error');
  1287.                 }
  1288.                
  1289.             } catch (e) {
  1290.                 addLog('²âÊÔÁ¬½Óʧ°Ü: ' + e.message, 'error');
  1291.                 showToast('´íÎó', 'Á¬½Óʧ°Ü: ' + e.message, 'error');
  1292.             }
  1293.         }
  1294.         
  1295.         // ==================== ³õʼ»¯ ====================
  1296.         
  1297.         window.onload = function() {
  1298.             addLog('¿ØÖÆÌ¨³õʼ»¯Íê³É', 'info');
  1299.             addLog('ϵͳ°æ±¾: v2.0.0 | Build 2026.06.13', 'info');
  1300.             
  1301.             // ×Ô¶¯¼ÓÔØÅäÖÃ
  1302.             setTimeout(function() {
  1303.                 loadConfig();
  1304.             }, 300);
  1305.             
  1306.             // ²âÊÔÁ¬½Ó£¨ÑÓ³Ù¸ü³¤Ê±¼äÈ·±£WebViewÍêÈ«³õʼ»¯£©
  1307.             setTimeout(function() {
  1308.                 try {
  1309.                     testConnection();
  1310.                 } catch (e) {
  1311.                     addLog('Á¬½Ó²âÊÔʧ°Ü£¨¿ÉºöÂÔ£©: ' + e.message, 'warn');
  1312.                 }
  1313.             }, 1500);
  1314.             
  1315.             addLog('µÈ´ýÓû§²Ù×÷...', 'info');
  1316.         };
  1317.     </script>
  1318. </body>
  1319. </html>
¸´ÖÆ´úÂë


»Ø¸´

ʹÓõÀ¾ß ¾Ù±¨

±¾°æ»ý·Ö¹æÔò

¹Ø±Õ

QQ|»ÓªÏúÈí¼þ×ÛºÏÌÖÂÛ|»ÓªÏúÈí¼þÓÐÎʱشð|»ÓªÏúÈí¼þ½Ì³Ì×¨Çø|»ÓªÏúÈí¼þPOST½Å±¾·ÖÏí|»ÓªÏúÈí¼þÆÕͨ½Å±¾·ÖÏí|»ÓªÏúÈí¼þÈí¼þ×ÊѶ|»ÓªÏúÈí¼þ¾«Æ·Èí¼þ|»ÓªÏúÈí¼þ¸üй«¸æ|ÓªÏúÈí¼þ|B2BÈí¼þ|B2BÍøÂçÈí¼þ ( ¾©ICP±¸09078825ºÅ )±¾ÍøÕ¾¿ª·¢µÄÓªÏúÈí¼þÊÇÒ»¿îеÄÍøÂçÓªÏúÈí¼þ£¬Õâ¿îÓªÏú¿ÉÒÔÈ¥ÍøÕ¾Èí¼þ£¬²©¿ÍÈí¼þ£¬B2BÈí¼þ£¬·ÖÀàÐÅÏ¢Íø·¢Ìù£¬¿ÉÒÔÇÀɳ·¢£¬¿ÉÒÔµ½°Ù¶ÈÎÄ¿âÉÏ´«WORDÎĵµ£¬¿ÉÒÔµ½Ò»Ð©ÊÇÏà²áÍøÕ¾×Ô¶¯ÉÏ´«Í¼Æ¬£¬Õâ¸ö×Ô¶¯·¢ÌûÈí¼þ×Ô´øÔÆÖ©Ö룬¼Ó¿ìÊÕ¼£¬ÓÐ6ÖÖ¶Ô½Ó´òÂë½Ó¿Ú£¬·½±ã£¬Ð§Âʸߣ¬Ëٶȿ죬¶øÇÒ¶ÔÍ϶¯µÄÑéÖ¤ÂëÈ«ÍøµÚÒ»¼Ò¶À¼ÒÖ§³Ö£¬È«²¿Ô­´´¼¼Êõ£¬¶À¼ÒÑз¢£¬Õý°æÔ­´´´ø°æÈ¨Èí¼þ¡£Ñ¡ÔñÍòÄÜÓªÏúÈí¼þ£¬¾ÍÑ¡ÔñÁËÒ»ÖÖ׬ǮµÄЧÂÊ£¬´ÓûÓб»³¬Ô½¹ý£¬Ò»Ö±ÔÚŬÁ¦Ñз¢Ð¼¼Êõ¡£·Å·ÉÃÎÏ룬½â·ÅË«ÊÖ£¬À´µã´´Ò⣬³É¾ÍÄãµÄÃÎÏ룬¾ÍÔÚÍòÄÜÓªÏúÈí¼þ¿ªÊ¼

map2

GMT+8, 2026-6-15 08:15 , Processed in 0.278993 second(s), 34 queries .

¿ìËٻظ´ ·µ»Ø¶¥²¿ ·µ»ØÁбí