Могу ли я создать кнопку, которая добавит столбец в мою таблицу с рассчитанной комиссией за продажу

#javascript #html

#javascript #HTML

Вопрос:

Я работаю над школьным проектом, и мне нужно создать программу, которая будет рассчитывать комиссию сотрудников наших компаний. Пока у меня есть место, куда я могу загрузить файл данных и поместить его в таблицу. Я хочу добавить кнопку, которая рассчитает комиссию с продаж для каждого сотрудника и добавит новый столбец в таблицу с рассчитанной комиссией с продаж.

 data file:
Name,Sales,Commission,Region
Billy Bradshaw,$33611,20%,North
Twanna Beagle,$44250,20%,East
Gloria Saling,$49278,20%,West 
Theola Spargo,$75021,20%,South
Giovanni Armas,$59821,20%,East 
Cristal Smith,$44597,20%,West 
Ashley Morris,$55597,20%,North
Tiffaney Kreps,$40728,20%,South
Arnold Fultz,$49674,20%,East
Sherman Sallee,$23780,20%,North
Shawana Johnson,$58365,20%,West 
Kathrine Mosca,$67489,20%,North
Karren Mahmoud,$53382,20%,East
Venus Grasser,$33572,20%,West 
Rickey Jones,$28522,20%,East
Verona Strauch,$41865,20%,North
Elvis Yearta,$25314,20%,South
Jonathan Lee,$22823,20%,West 
Sommer Cottle,$45660,20%,East
Elsa Laverty,$49386,20%,North
  
 <!DOCTYPE html>
<html lang="en">
<head>
    <title>Sales Commission Calculator</title>
    <h1>Sales Commission Calculator</h1>
    <p>Please select the Employee Sales Database</p>
    <style type="text/css">
        body
        {
            font-family: Arial;
            font-size: 10pt;
        }
        table
        {
            border: 1px solid rgb(155, 155, 155);
            border-collapse: collapse;
        }
        tr:nth-child(even) {
            background: #4ac5fd;
        }

        table td
        {
            padding: 5px;
        }
    </style>
</head>
<body>
    <script>
        function Upload() {
            var fileUpload = document.getElementById("fileUpload");
            var regex = /^([a-zA-Z0-9s_\.-:]) (.csv|.txt)$/;
            if (regex.test(fileUpload.value.toLowerCase())) {
                if (typeof (FileReader) != "undefined") {
                    var reader = new FileReader();
                    reader.onload = function (e) {
                        var table = document.createElement("table");
                        var rows = e.target.result.split("n");
                        for (var i = 0; i < rows.length; i  ) {
                            var cells = rows[i].split(",");
                            if (cells.length > 1) {
                                var row = table.insertRow(-1);
                                for (var j = 0; j < cells.length; j  ) {
                                    var cell = row.insertCell(-1);
                                    cell.innerHTML = cells[j];
                                }
                            }
                        }
                        var dvCSV = document.getElementById("dvCSV");
                        dvCSV.innerHTML = "";
                        dvCSV.appendChild(table);
                    }
                    reader.readAsText(fileUpload.files[0]);
                } else {
                    alert("This browser does not support HTML5.");
                }
            } else {
                alert("Please upload a valid CSV file.");
            }
        }
    </script>
    <input type="file" id="fileUpload" />
    <input type="button" id="upload" value="Upload" onclick="Upload()" />
    <input type="button" id="Calculate Commission" value="Calculate Commission" oneclick=""/>
    <hr />
    <div id="dvCSV">
    </div>
</body>
</html>
  

Создайте кнопку, которая добавит столбец в мою таблицу с рассчитанными номерами комиссии за продажу.

Комментарии:

1. Или, если вы не можете добавить в csv, можно ли создать новую таблицу с именем сотрудников и их рассчитанной комиссией с продаж?

Ответ №1:

Спасибо, что предупредили о том, что это для школьного проекта. Мы все это проходили, поэтому позвольте мне немного познакомить вас с этим.

Вам нужно, чтобы кнопка, которая у вас есть, вызывала функцию, которая у вас уже есть. Исправьте вашу опечатку, а затем назначьте onclick атрибуту новую функцию:

 <input type="button" id="Calculate Commission" value="Calculate Commission" onclick="calculateCommissions()" />
  

Затем вам нужно будет создать эту функцию… В конечном счете, общая идея заключается в том, что мы хотим, чтобы эта функция просматривала каждую строку (поэтому нам, вероятно, понадобится цикл для перебора строк в таблице)… извлеките из этой строки «продажи» и «% комиссии» и умножьте их вместе… затем, прежде чем мы позволим циклу перейти к следующей строке, добавьте итоговый показатель комиссии в конец текущей строки.

 function calculateCommissions() {
    // Get an array full of the rows
    // Note the use of the spread operator, we need to convert the NodeList type to an Array type
    var allRows = [...document.getElementsByTagName('tr')];

    // Now let's loop over that array and look at each row individually
    allRows.forEach( eachRow => {

        // For the current row, we need to pull out the "sales" and "commission %" values
        var sales = Number(eachRow.childNodes[1].innerText.slice(1));
        var percentCommission = Number(eachRow.childNodes[2].innerText.substr(0, eachRow.childNodes[2].innerText.indexOf('%')));

        // Do the math...
        var commission = Math.round(sales * percentCommission / 100)

        // And now, we want to add that commission as an additional column
        // Note that since we're also going to be looping over the header...
        // ... let's add a column header "Commission"
        var tableCellToAppend = document.createElement('td')
        tableCellToAppend.innerText = commission ? `$${commission}` : 'Commission';
        eachRow.appendChild(tableCellToAppend)

    })
}
  

Конечно, в реальном проекте вам потребуется множество средств обработки ошибок. Реальные пользователи никогда не загружают идеальные CSV-файлы. Добро пожаловать в SO.