首页/ mobileweb/ 拇指赚 · 手机赚钱任务平台 H5/ 代码预览

💻 代码预览 · 拇指赚 · 手机赚钱任务平台 H5

mw_other · 上传者 拇指赚官方
← 返回详情
muzhizhuan/app.js · 约 11011 字符
1/* 拇指赚 - 全局交互脚本(零依赖) */2(function () {3  "use strict";4  var D = window.DATA;5  var $ = function (s, el) { return (el || document).querySelector(s); };6  var $$ = function (s, el) { return Array.prototype.slice.call((el || document).querySelectorAll(s)); };78  /* ===== Toast ===== */9  var toastEl = null;10  function toast(msg) {11    if (!toastEl) {12      toastEl = document.createElement("div");13      toastEl.className = "toast";14      document.body.appendChild(toastEl);15    }16    toastEl.textContent = msg;17    toastEl.classList.add("show");18    clearTimeout(toast._t);19    toast._t = setTimeout(function () { toastEl.classList.remove("show"); }, 1800);20  }2122  /* ===== 金额格式化 ===== */23  function money(n) { return Number(n).toFixed(2); }2425  /* ===== 进度条宽度 ===== */26  function pct(quota, total) { return Math.max(4, Math.round((quota / total) * 100)); }2728  /* ===== 任务卡片 HTML ===== */29  function taskCard(t) {30    return '<div class="task-card" data-id="' + t.id + '">' +31      '<div class="tc-main">' +32        '<div class="tc-tags">' +33          (t.tags && t.tags.length ? t.tags.map(function (tag) {34            var cls = tag === "新" ? "new" : tag === "高额" ? "high" : tag === "推荐" ? "rec" : "hot";35            return '<span class="tag ' + cls + '">' + tag + '</span>';36          }).join("") : "") +37          (t.hot ? '<span class="tag hot">🔥 热门</span>' : "") +38        '</div>' +39        '<h3>' + t.title + '</h3>' +40        '<div class="tc-meta">⏱ <b>' + t.time + '</b> 📝 <b>' + t.count + '</b> ✅ 通过率 <b>' + t.pass + '</b></div>' +41        '<div class="tc-quota">剩余配额 ' + t.quota + ' 份 · ' + t.brand +42          '<span class="qbar"><i style="width:' + pct(t.quota, t.total) + '%"></i></span></div>' +43      '</div>' +44      '<div class="tc-right">' +45        '<div class="price"><small>¥</small>' + t.price + '</div>' +46        '<a class="go" href="task.html?id=' + t.id + '">去赚钱</a>' +47      '</div>' +48    '</div>';49  }5051  /* ===== 首页任务大厅渲染 ===== */52  function renderTasks() {53    var wrap = $("#taskList");54    if (!wrap) return;55    var cat = "全部";56    var tabs = $("#catTabs");57    if (tabs) {58      tabs.innerHTML = D.categories.map(function (c, i) {59        return '<a href="javascript:;" data-cat="' + c + '" class="' + (i === 0 ? "on" : "") + '">' + c + '</a>';60      }).join("");61      $$("a", tabs).forEach(function (a) {62        a.addEventListener("click", function () {63          $$("a", tabs).forEach(function (x) { x.classList.remove("on"); });64          a.classList.add("on");65          cat = a.getAttribute("data-cat");66          refresh();67        });68      });69    }70    function refresh() {71      var list = cat === "全部" ? D.tasks : D.tasks.filter(function (t) { return t.cat === cat; });72      wrap.innerHTML = list.length ? list.map(taskCard).join("") :73        '<div class="empty">该分类下暂无任务,看看别的吧~</div>';74      $$(".task-card", wrap).forEach(function (card) {75        card.addEventListener("click", function (e) {76          if (e.target.closest(".go")) return; /* 交给链接 */77          window.location.href = "task.html?id=" + card.getAttribute("data-id");78        });79      });80    }81    refresh();82  }8384  /* ===== 任务详情 ===== */85  function renderDetail() {86    if (!$("#dTitle")) return;87    var id = parseInt(new URLSearchParams(location.search).get("id") || "1", 10);88    var t = D.tasks.find(function (x) { return x.id === id; }) || D.tasks[0];89    var dd = D.taskDetail;9091    $("#dTitle").textContent = t.title;92    $("#dPrice").textContent = "¥" + t.price;93    $("#dMeta").innerHTML = '⏱ ' + t.time + ' 📝 ' + t.count + ' ✅ 通过率 ' + t.pass +94      ' <br>剩余配额 ' + t.quota + ' 份 · ' + t.brand;95    $("#dTags").innerHTML = (t.tags || []).map(function (tag) { return '<span>' + tag + '</span>'; }).join("") +96      (t.hot ? '<span>🔥 热门</span>' : "");97    $("#dQuota").textContent = "剩余配额 " + t.quota + " 份,先到先得";98    $("#dSteps").innerHTML = dd.steps.map(function (s) { return '<li>' + s + '</li>'; }).join("");99    $("#dNotice").textContent = dd.notice;100    $("#dAudit").textContent = "审核说明:" + dd.audit;101    $("#dBrand").textContent = "任务来源:" + t.brand;102103    var priceSmall = $("#dPriceSmall");104    if (priceSmall) priceSmall.textContent = "¥" + t.price;105106    var goBtn = $("#goTask");107    var submitBtn = $("#submitTask");108    if (goBtn) goBtn.addEventListener("click", function () {109      toast("任务已领取!完成后请提交凭证 💪");110      goBtn.style.display = "none";111      if (submitBtn) submitBtn.style.display = "block";112    });113    if (submitBtn) submitBtn.addEventListener("click", function () {114      toast("已提交凭证,审核通过后 ¥" + t.price + " 自动到账 ✅");115    });116  }117118  /* ===== 签到弹窗 ===== */119  function setupSign() {120    var mask = $("#signMask");121    var openers = $$("[data-open='sign']");122    if (!mask) return;123    openers.forEach(function (o) {124      o.addEventListener("click", function (e) {125        e.preventDefault();126        mask.classList.add("show");127        renderSign();128      });129    });130    var close = $("#signClose");131    if (close) close.addEventListener("click", function () { mask.classList.remove("show"); });132    mask.addEventListener("click", function (e) { if (e.target === mask) mask.classList.remove("show"); });133134    function renderSign() {135      var grid = $("#signGrid");136      if (!grid) return;137      var week = ["日", "一", "二", "三", "四", "五", "六"];138      grid.innerHTML = D.sign.days.map(function (d, i) {139        var cls = i < D.sign.done ? "done" : (i === D.sign.today ? "today" : "");140        var mark = i < D.sign.done ? "✓" : (i === D.sign.today ? "签" : d.extra || "");141        return '<div class="sign-day ' + cls + '">' +142          '<div class="dw">周' + week[i] + '</div>' +143          '<div class="dv">¥' + d.amount + '</div>' +144          '<div class="st">' + mark + '</div>' +145        '</div>';146      }).join("");147    }148149    var signBtn = $("#signBtn");150    if (signBtn) signBtn.addEventListener("click", function () {151      if (D.sign.done > D.sign.today) { toast("今天已签到,明天再来哦"); return; }152      var today = D.sign.days[D.sign.today];153      toast("签到成功!+¥" + today.amount + " 已入账 🎉");154      D.sign.done = D.sign.today + 1;155      renderSign();156    });157  }158159  /* ===== 提现弹窗 ===== */160  function setupWithdraw() {161    var mask = $("#withdrawMask");162    var openers = $$("[data-open='withdraw']");163    if (!mask) return;164    openers.forEach(function (o) {165      o.addEventListener("click", function (e) {166        e.preventDefault();167        mask.classList.add("show");168      });169    });170    var close = $("#wdClose");171    if (close) close.addEventListener("click", function () { mask.classList.remove("show"); });172    mask.addEventListener("click", function (e) { if (e.target === mask) mask.classList.remove("show"); });173174    var amountEl = $("#wdAmount");175    $$(".amount-chips a").forEach(function (a) {176      a.addEventListener("click", function (e) {177        e.preventDefault();178        $$(".amount-chips a").forEach(function (x) { x.classList.remove("on"); });179        a.classList.add("on");180        amountEl.value = a.getAttribute("data-v");181      });182    });183    var ok = $("#wdOk");184    if (ok) ok.addEventListener("click", function () {185      var v = parseFloat(amountEl.value || "0", 10);186      if (isNaN(v) || v <= 0) { toast("请输入正确的提现金额"); return; }187      if (v > parseFloat(D.site.user.balance, 10)) { toast("余额不足,先去赚点零花钱吧"); return; }188      toast("提现申请成功,预计 10 分钟内到账 🚀");189      mask.classList.remove("show");190      amountEl.value = "";191    });192  }193194  /* ===== 邀请页 ===== */195  function renderInvite() {196    if (!$("#inviteWrap")) return;197    $("#inviteCode").textContent = D.invite.code;198    $("#ruleList").innerHTML = D.invite.rules.map(function (r) {199      return '<div class="rule-item">' +200        '<div class="ri" style="background:#fff3e2">' + r.ico + '</div>' +201        '<div><div class="rt">' + r.t + '</div><div class="rs">' + r.s + '</div></div>' +202        '<div class="rm">' + r.m + '</div>' +203      '</div>';204    }).join("");205    $("#friendList").innerHTML = D.invite.friends.length ? D.invite.friends.map(function (f) {206      return '<div class="flow">' +207        '<div class="fi">👤</div>' +208        '<div><div class="ft">' + f.nick + '</div><div class="fs">' + f.time + '</div></div>' +209        '<div class="fa in">' + f.earn + '</div>' +210      '</div>';211    }).join("") : '<div class="empty">还没有邀请好友,快去分享吧</div>';212213    $("#copyInvite").addEventListener("click", function (e) {214      e.preventDefault();215      toast("邀请码已复制,快去分享吧 📋");216    });217  }218219  /* ===== 我的页 ===== */220  function setText(sel, val) { var el = $(sel); if (el) el.textContent = val; }221  function renderMine() {222    if (!$("#mineWrap")) return;223    setText("#meNick", D.site.user.nick);224    setText("#meId", "ID: " + D.site.user.id);225    setText("#meBalance", "¥" + D.site.user.balance);226    setText("#meToday", "¥" + D.site.user.today);227    setText("#statTotal", "¥" + money(parseFloat(D.site.user.balance) + 46.5));228    setText("#statBalance", "¥" + D.site.user.balance);229    setText("#statPending", "¥12.00");230    setText("#statWithdrawn", "¥88.00");231232    var flowList = $("#flowList");233    if (flowList) {234      flowList.innerHTML = D.flows.map(function (f) {235        return '<div class="flow">' +236          '<div class="fi">' + f.ico + '</div>' +237          '<div><div class="ft">' + f.t + '</div><div class="fs">' + f.s + '</div></div>' +238          '<div class="fa ' + (f.in ? "in" : "out") + '">' + f.v + '</div>' +239        '</div>';240      }).join("");241    }242243    var faqList = $("#faqList");244    if (faqList) {245      faqList.innerHTML = D.faqs.map(function (f) {246        return '<details><summary>' + f.q + '</summary><p>' + f.a + '</p></details>';247      }).join("");248    }249  }250251  /* ===== 新人红包 ===== */252  function setupNewbie() {253    var btn = $("#newbieBtn");254    if (btn) btn.addEventListener("click", function (e) {255      e.preventDefault();256      toast("已领取 1 元新人红包,完成新手任务再得 2 元 🧧");257    });258  }259260  /* ===== 初始化 ===== */261  document.addEventListener("DOMContentLoaded", function () {262    /* 品牌名注入(只改最后一个文本 span,不动 thumb 图标) */263    $$(".brand").forEach(function (brand) {264      var spans = $$("span", brand);265      var nameSpan = spans[spans.length - 1];266      if (nameSpan && nameSpan.children.length === 0) {267        nameSpan.textContent = D.site.name;268      }269    });270    renderTasks();271    renderDetail();272    setupSign();273    setupWithdraw();274    renderInvite();275    renderMine();276    setupNewbie();277  });278})();279