Target Invoice Summary

Summarize Target Invoice

目前為 2025-11-20 提交的版本,檢視 最新版本

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name        Target Invoice Summary
// @namespace   nikhilweee
// @match       https://www.target.com/orders/*/invoices/*
// @grant       none
// @version     1.0
// @author      nikhilweee
// @description Summarize Target Invoice
// @icon        https://www.target.com/favicon.ico
// ==/UserScript==

function allElementsLoaded() {
  const detailsCards = document.querySelectorAll(
    '[data-test="invoice-details-card"]'
  );
  return detailsCards.length > 0;
}

function runScriptWhenReady() {
  if (allElementsLoaded()) {
    const detailsCards = document.querySelectorAll(
      '[data-test="invoice-details-card"]'
    );
    const table = document.createElement("table");
    let totalQuantity = 0;
    table.style = "width: 100%; text-align: left;";
    table.innerHTML = "<th>Price</th><th>Item</th>";

    detailsCards.forEach((card) => {
      const boldElements = Array.from(card.querySelectorAll("b"));
      const [itemName, quantity, , , , , , itemPrice] = boldElements.map(
        (el) => el?.textContent.trim() || ""
      );
      const [_, itemNameShort] = itemName.split(" - ");
      totalQuantity += parseInt(quantity);
      const row = table.insertRow();
      row.innerHTML = `<td>${itemPrice}</td><td>(${quantity}) ${itemNameShort}</td>`;
    });

    const invoiceTotal =
      document.querySelector("div.h-text-lg p")?.textContent.trim() || "";
    const invoiceRow = table.insertRow();
    invoiceRow.innerHTML = `<th>${invoiceTotal}</th><th>(${totalQuantity}) Total</th>`;

    const invoiceMetaElement = document.querySelector(
      '[data-test="invoice-meta"]'
    );
    invoiceMetaElement.insertAdjacentElement("afterend", table);
  } else {
    setTimeout(runScriptWhenReady, 100);
  }
}

window.addEventListener("load", runScriptWhenReady);