Update and Fetch Data Script

Update storage with user input and fetch data from API

目前為 2025-01-09 提交的版本,檢視 最新版本

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

You will need to install an extension such as Tampermonkey to install this script.

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         Update and Fetch Data Script
// @namespace    http://tampermonkey.net/
// @version      0.6
// @description  Update storage with user input and fetch data from API
// @author       Your Name
// @match        *://*/*
// @grant        none
// @license MIT
// ==/UserScript==
(function() {
    'use strict';

    // Create update data button
    const updateButton = document.createElement('button');
    updateButton.textContent = '更新数据';
    updateButton.style.position = 'fixed';
    updateButton.style.top = '10px';
    updateButton.style.right = '10px';
    updateButton.style.zIndex = 1000;
    updateButton.style.padding = '10px 15px';
    updateButton.style.backgroundColor = '#007BFF';
    updateButton.style.color = '#FFFFFF';
    updateButton.style.border = 'none';
    updateButton.style.borderRadius = '5px';
    updateButton.style.cursor = 'pointer';
    document.body.appendChild(updateButton);

    // Update data button event handler
    updateButton.addEventListener('click', () => {
        const url = window.location.origin + "/api/admin/storage/update";
        const token = window.localStorage['token'];
        const update_data = prompt("请输入更新的数据(JSON 格式):");
        if (update_data) {
            let parsedData;
            try {
                parsedData = JSON.parse(update_data);
            } catch (e) {
                alert("输入的数据不是有效的 JSON 格式。请重新输入。");
                return;
            }
            fetch(url, {
                method: "POST",
                headers: {
                    "Content-Type": "application/json",
                    "authorization": token
                },
                body: JSON.stringify(parsedData),
            })
            .then(response => response.json())
            .then(data => {
                console.log("更新成功:", data);
                alert("数据更新成功!");
            })
            .catch(error => {
                console.error("更新错误:", error);
                alert("数据更新失败,请查看控制台以获取详情。");
            });
        } else {
            alert("未输入数据,操作被取消。");
        }
    });

    // Create fetch data button
    const fetchButton = document.createElement('button');
    fetchButton.textContent = '获取数据';
    fetchButton.style.position = 'fixed';
    fetchButton.style.top = '50px'; // Adjust position to avoid overlap
    fetchButton.style.right = '10px';
    fetchButton.style.zIndex = 1000;
    fetchButton.style.padding = '10px 15px';
    fetchButton.style.backgroundColor = '#28A745';
    fetchButton.style.color = '#FFFFFF';
    fetchButton.style.border = 'none';
    fetchButton.style.borderRadius = '5px';
    fetchButton.style.cursor = 'pointer';
    document.body.appendChild(fetchButton);

    // Fetch data button event handler
    fetchButton.addEventListener('click', () => {
        const fetchUrl = window.location.origin + "/api/admin/storage/get?id=7";
        const token = window.localStorage['token'];
        fetch(fetchUrl, {
            method: "GET",
            headers: {
                "authorization": token
            }
        })
        .then(response => response.json())
        .then(data => {
            console.log("获取成功:", data);
            const formattedData = JSON.stringify(data, null, 2);
            alert("获取到的数据请从data后面的括号开始复制到记事本进行修改:\n" + formattedData);

            // Prompt for copying data to clipboard
            if (confirm("是否复制获取到的数据到剪贴板?")) {
                navigator.clipboard.writeText(formattedData)
                    .then(() => {
                        // Optionally, create a notification message
                        const messageDiv = document.createElement('div');
                        messageDiv.textContent = "数据已复制到剪贴板!";
                        messageDiv.style.position = 'fixed';
                        messageDiv.style.top = '130px'; // Position the message below the fetch button
                        messageDiv.style.right = '10px';
                        messageDiv.style.zIndex = 1000;
                        messageDiv.style.padding = '10px 15px';
                        messageDiv.style.backgroundColor = '#dc3545'; // Red background
                        messageDiv.style.color = '#FFFFFF'; // White text
                        messageDiv.style.borderRadius = '5px';
                        messageDiv.style.fontSize = '14px';
                        document.body.appendChild(messageDiv);

                        // Remove the message after 3 seconds
                        setTimeout(() => {
                            document.body.removeChild(messageDiv);
                        }, 3000);
                    })
                    .catch(err => {
                        console.error("复制失败:", err);
                        alert("数据复制失败,请查看控制台以获取详情。");
                    });
            }
        })
        .catch(error => {
            console.error("获取错误:", error);
            alert("数据获取失败,请查看控制台以获取详情。");
        });
    });
})();