原価計算

原価計算ができる入力フィールドの作成

Versão de: 10/10/2024. Veja: a última versão.

// ==UserScript==
// @name         原価計算
// @namespace    http://tampermonkey.net/
// @version      1.2
// @description  原価計算ができる入力フィールドの作成
// @license      MIT
// @match        *://plus-nao.com/forests/*/mainedit/*
// @match        *://plus-nao.com/forests/*/registered_mainedit/*
// @grant        none
// @run-at       document-end
// ==/UserScript==

(function() {
    'use strict';

    const originalInputField = document.getElementById('TbMainproductGenkaTnk');
    const multiplierInputField = document.getElementById('TbMainproductGenkaTnkRmb');

    function evaluateExpression(expr) {
        let result = NaN;
        try {
            expr = expr.replace(/+/g, '+')
                       .replace(/-/g, '-')
                       .replace(/×/g, '*')
                       .replace(/÷/g, '/');

            expr = expr.replace(/[0-9]/g, (c) => String.fromCharCode(c.charCodeAt(0) - 0xFEE0));

            result = new Function('return ' + expr)();
        } catch (error) {
            console.error('無効な式です:', error);
        }
        return result;
    }

    if (multiplierInputField) {
        const newInputField = document.getElementById('TbMainproductGenkaTnkMultiplier');
        if (newInputField) {
            newInputField.remove();
        }

        multiplierInputField.placeholder = '原価を計算';

        multiplierInputField.addEventListener('focusout', () => {
            const expr = multiplierInputField.value.trim();
            const result = evaluateExpression(expr);

            if (!isNaN(result)) {
                multiplierInputField.value = result;
            }

            const inputEvent = new Event('input', {
                bubbles: true,
                cancelable: true,
            });
            multiplierInputField.dispatchEvent(inputEvent);
        });
    } else {
        if (originalInputField) {
            const newInputField = document.createElement('input');
            newInputField.type = 'text';
            newInputField.id = 'TbMainproductGenkaTnkMultiplier';
            newInputField.placeholder = '原価を計算';

            originalInputField.parentNode.insertBefore(newInputField, originalInputField.nextSibling);

            newInputField.addEventListener('change', () => {
                const expr = newInputField.value.trim();
                const result = evaluateExpression(expr);

                if (!isNaN(result)) {
                    originalInputField.value = Math.ceil(result * 23);
                }
            });
        }
    }
})();