向后端发起POST请求

1. 请求示例

html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>获取SN码</title>
</head>

<body>
    <p3>查询参数:</p3>
    <input type="text" id="inpWorkCode" placeholder="生产工单号">
    <input type="number" id="inpQty" placeholder="获取条码数量"><br><br>
    <button id="btnGetSNList">点击获取SN码</button>
    <pre id="showSNList">数据显示区...</pre>

    <script>
        const baseURL = 'http://127.0.0.1:8080';
        const btnGetSNList = document.getElementById('btnGetSNList');
        const showSNList = document.getElementById('showSNList');
        const inpWorkCode = document.getElementById('inpWorkCode');
        const inpQty = document.getElementById('inpQty');

        // 向后端发起请求
        btnGetSNList.addEventListener('click', function () {
            const workCode = inpWorkCode.value.trim();
            const qty = parseInt(inpQty.value);
            // 输入验证
            if (!workCode) {
                showSNList.textContent = '请输入生产工单号';
                return;
            }

            if (isNaN(qty) || qty <= 0) {
                showSNList.textContent = '请输入有效的获取条码数量(正整数)';
                return;
            }
            // 组装请求对象
            const requestObj = {
                workCode: 'CC-FG2512040003',
                qty: 3
            };

            fetch(`${baseURL}/api/Laser/GetLaserData`, {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json'
                },
                body: JSON.stringify(requestObj)
            })
                .then(response => {
                    if (!response.ok) {
                        console.log(`发生错误!`);
                    }
                    return response.text();
                }).then(data => {
                    showSNList.textContent = data;
                }).catch(error => {
                    showSNList.textContent = error.message;
                })
        });




    </script>
</body>

</html>

2. 导出为.txt

html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>获取SN码</title>
</head>

<body>
    <p3>查询参数:</p3>
    <input type="text" id="inpWorkCode" placeholder="生产工单号" value="CC-FG2512040003">
    <input type="number" id="inpQty" placeholder="获取条码数量" value="3"><br><br>
    <button id="btnGetSNList">点击获取SN码</button>
    <button id="btnExport" disabled>导出为TXT</button><br><br>
    <pre id="showSNList">数据显示区...</pre>

    <script>
        const baseURL = 'http://127.0.0.1:8080';
        const btnGetSNList = document.getElementById('btnGetSNList');
        const btnExport = document.getElementById('btnExport');
        const showSNList = document.getElementById('showSNList');
        const inpWorkCode = document.getElementById('inpWorkCode');
        const inpQty = document.getElementById('inpQty');

        // 存储请求到的数据,用于导出
        let currentData = null;
        let currentWorkCode = '';
        let currentQty = 0;

        // 向后端发起请求
        btnGetSNList.addEventListener('click', function () {
            // 获取输入值
            const workCode = inpWorkCode.value.trim();
            const qty = parseInt(inpQty.value);

            // 输入验证
            if (!workCode) {
                showSNList.textContent = '请输入生产工单号';
                btnExport.disabled = true;
                return;
            }

            if (isNaN(qty) || qty <= 0) {
                showSNList.textContent = '请输入有效的获取条码数量(正整数)';
                btnExport.disabled = true;
                return;
            }

            const requestObj = {
                workCode: workCode,
                qty: qty
            };

            fetch(`${baseURL}/api/Laser/GetLaserData`, {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json'
                },
                body: JSON.stringify(requestObj)
            })
                .then(response => {
                    if (!response.ok) {
                        throw new Error(`HTTP错误!状态码:${response.status}`);
                    }
                    return response.json(); // 解析为JSON对象
                }).then(data => {
                    currentData = data;
                    currentWorkCode = workCode;
                    currentQty = qty;
                    showSNList.textContent = JSON.stringify(data, null, 2); // 格式化显示JSON
                    btnExport.disabled = false; // 启用导出按钮
                }).catch(error => {
                    showSNList.textContent = `请求失败:${error.message}`;
                    btnExport.disabled = true; // 禁用导出按钮
                    currentData = null;
                })
        });

        // 导出为TXT文件
        btnExport.addEventListener('click', function () {
            if (!currentData || !currentWorkCode) {
                showSNList.textContent = '没有可导出的数据';
                return;
            }

            try {
                // 解析数据
                const snList = currentData.Result || [];

                // 组织导出内容
                let content = '';
                // 前三行生产工单号
                content += `${currentWorkCode}\n`;
                content += `${currentWorkCode}\n`;
                content += `${currentWorkCode}\n`;
                // 后续为SN码
                snList.forEach(item => {
                    if (item.fCode) {
                        content += `${item.fCode}\n`;
                    }
                });

                // 生成文件名:年月日_生产工单号.txt
                const now = new Date();
                const year = now.getFullYear();
                const month = String(now.getMonth() + 1).padStart(2, '0');
                const day = String(now.getDate()).padStart(2, '0');
                const dateStr = `${year}${month}${day}`;
                const fileName = `${dateStr}_${currentWorkCode}_${currentQty}.txt`;

                // 创建并下载文件
                const blob = new Blob([content], { type: 'text/plain' });
                const url = URL.createObjectURL(blob);
                const a = document.createElement('a');
                a.href = url;
                a.download = fileName;
                document.body.appendChild(a);
                a.click();
                document.body.removeChild(a);
                URL.revokeObjectURL(url);

                showSNList.textContent += `\n\n文件已导出:${fileName}`;
            } catch (error) {
                showSNList.textContent += `\n\n导出失败:${error.message}`;
            }
        });
    </script>
</body>

</html>
相关推荐
每日任务(希望进OD版)几秒前
线性DP、区间DP
开发语言·数据结构·c++·算法·动态规划
怨言.2 分钟前
Java内部类详解:从基础概念到实战应用(附案例)
java·开发语言
AC赳赳老秦2 分钟前
OpenClaw image-processing技能实操:批量抠图、图片尺寸调整,适配办公需求
开发语言·前端·人工智能·python·深度学习·机器学习·openclaw
XiYang-DING3 分钟前
【Java】 Java 集合框架
java·开发语言
charlie1145141914 分钟前
嵌入式C++教程实战之Linux下的单片机编程(9):HAL时钟使能 —— 不开时钟,外设就是一坨睡死的硅
linux·开发语言·c++·单片机·嵌入式硬件·c
叫我一声阿雷吧7 分钟前
JS 入门通关手册(44):宏任务 / 微任务 / Event Loop(前端最难核心,面试必考
javascript·宏任务·event loop· 前端面试· 微任务· 事件循环·js单线程
diving deep9 分钟前
从零构建大模型--实操--搭建python环境
开发语言·python
We་ct9 分钟前
LeetCode 172. 阶乘后的零:从暴力到最优,拆解解题核心
开发语言·前端·javascript·算法·leetcode·typescript
军军君019 分钟前
数字孪生监控大屏实战模板:可视化数字统计展示
前端·javascript·vue.js·typescript·echarts·数字孪生·前端大屏
此刻觐神17 分钟前
IMX6ULL开发板学习-03(Linux文件相关命令)
前端·chrome