前端表格导入,解析表格数据传给后端效果

1.此功能用的vue3+antdesignVue3

  <a-upload
          :data="uploadData"
          :action="false"
          name="file"
          :multiple="false"
          ref="upload"
          :before-upload="beforeUpload"
        >
          <a-button type="primary">上传EXCEL</a-button>
        </a-upload>

在这里插入图片描述将以上表格内容转换为正常数组对象格式:

[{classifyName:"酒水饮料",costPrice:2.5,name:"红牛",needSale:1,salePrice: 6,specification: "瓶",stockNum: 10}]
import { ref, reactive} from "vue";
import { Form, Modal, message } from "ant-design-vue";
let uploadData = reactive();
//上传方法
const beforeUpload = (file) => {
  console.log("获取数据111", file);
  uploadExcel(file);
  return false; // 阻止自动上传
};
const uploadExcel = (file) => {
  console.log("进来api", file);
  const reader = new FileReader();
  reader.onload = (e) => {
    const data = e.target.result;
    //因为表格表头是中文,所有需要中文转为需要传给后端的参数,以下名字必须和表格标题栏保持一致
    const tableData = filters.parseTableData(data, [
      "名称",
      "分类",
      "规格",
      "库存",
      "成本价",
      "销售单价(在售必填,停售不填,在售商品未设置时默认0元)",
      "是否销售(是/否,不销售的商品仅库存管理)",
    ]);
    //传入表格字段不符合/或者传入表格字段少一列
    if (!tableData) {
      return;
    }
    //处理数据
    const mapObj = {
      "名称": "name",
      "分类": "classifyName",
      规格: "specification",
      "库存": "stockNum",
      成本价: "costPrice",
      "销售单价(在售必填,停售不填,在售商品未设置时默认0元)": "salePrice",
      "是否销售(是/否,不销售的商品仅库存管理)": "needSale",
    };
    let resultData = filters.dealWithApi(tableData, mapObj);
    //判断数组对象是否为空
    // 假设需要检测的属性为 "name" 和 "age"
    const requiredProps = [
      "name",
      "classifyName",
      "specification",
      "stockNum",
      "costPrice",
      "salePrice",
      "needSale",
    ];
    let checkString = "";
    //过滤出空数据
    resultData = resultData.filter((item, index) => {
      return item.classifyName && item.name
    })
    // console.log('过滤为空的数据', resultData);
    resultData.forEach((item) => {
      requiredProps.forEach((prop) => {
        if (
          item[prop] == null ||
          item[prop] === "" ||
          item[prop] == undefined
        ) {
          checkString = `对象 ${item.id} 的属性 ${prop} 不能为空`;
          // console.log(`对象 ${item.id} 的属性 ${prop} 不能为空`);
        }
      });
    });
    // console.log("拿到的检查结果", checkString);
    //检测数据值是否为空,有值代表数据有空值
    if (checkString) {
    console.log("请检查是否有数据字段是否为空值!")
      return;
    }
    let updateObj = {
      batchInfos: resultData,
      operator: userNickname.value, //操作人
    };
    
    batchAddApi(updateObj);
  };
  reader.readAsBinaryString(file);
  // console.log("过来了???");
};   
//前端解析的数据传给后端
let batchAddApi = (data) => {
  batchAdd(data).then((res) => {
    if (res.code != 0) {
      return;
    }
    message.success('导入成功');
    //导入成功后更新列表
   // queryListApi();
  });
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前端使用 AJAX 将数据传给后端的一般流程如下: 1. 在前端使用表单或其他方式收集数据,例如用户输入姓名、电子邮件等信息。 2. 创建一个包含数据JavaScript 对象或 JSON 对象。 3. 创建一个 XMLHttpRequest 对象。 4. 使用 XMLHttpRequest 对象将数据作为 POST 请求发送到后端。 5. 后端接收请求并处理请求,从请求体中解析数据。 6. 将数据插入到数据库或执行其他业务逻辑。 7. 返回响应,例如一个成功或失败的消息。 例如,以下是使用 AJAX 将数据发送到后端的示例代码: ```javascript // 收集数据 const data = {name: "John", email: "[email protected]"}; // 发送数据后端 const xhr = new XMLHttpRequest(); xhr.open("POST", "/api/data"); xhr.setRequestHeader("Content-Type", "application/json"); xhr.onreadystatechange = function() { if (this.readyState === XMLHttpRequest.DONE && this.status === 200) { console.log(this.responseText); // 输出响应 } }; xhr.send(JSON.stringify(data)); ``` 这里使用 XMLHttpRequest 对象将数据作为JSON对象发送到后端的 `/api/data` 路由,并设置请求头 `Content-Type` 为 `application/json`。后端可以使用Express框架来解析请求体,例如: ```javascript const express = require("express"); const app = express(); // 解析JSON请求体 app.use(express.json()); // 处理POST请求 app.post("/api/data", (req, res) => { const data = req.body; console.log(data); // 输出{name: "John", email: "[email protected]"} // 将数据插入到数据库或执行其他业务逻辑 res.send("成功"); // 返回响应 }); // 启动服务器 app.listen(3000, () => { console.log("Server is running on port 3000"); }); ``` 这里使用Express中间件 `express.json()` 来解析JSON请求体,并使用 `req.body` 获取请求体中的数据后端可以使用这些数据插入到数据库或执行其他业务逻辑,并返回响应。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值