请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

BossONE

注册会员

13

主题

26

帖子

91

积分

注册会员

积分
91
BossONE
注册会员   /  发表于:2025-4-14 14:05  /   查看:94  /  回复:4
table使用dataManager后,获取对table插入行后的数据是无序的,我这边希望是有序的,场景是要处理协同时的数据做更新

4 个回复

倒序浏览
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2025-4-14 14:09:24
沙发
46449855213bfc4d7fe40d96e5178e1.png612918700.png 1ac1e9dd0cb355a9fab979ac0b28a4d.png682437438.png
上面两个图片分别是使用getDataSource()和table.options.data的结果。
可以看出来,顺序是不一样的。

还想确认下您目前的流程
1、插入一行,此时getDataSource()传给后端 ,对空对象生成uuid。
2、在1的结果中,返回前端,重新setDataSource()??
回复 使用道具 举报
BossONE
注册会员   /  发表于:2025-4-14 17:07:20
板凳
Ellia.Duan 发表于 2025-4-14 14:09
上面两个图片分别是使用getDataSource()和table.options.data的结果。
可以看出来,顺序是不一样的。

...

image.png671832885.png

之前是直接对sourceData做处理
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2025-4-14 17:19:04
地板
收到,调研编号:SJS-29161
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2025-4-16 11:06:36
5#
dataManager 的设计思路与数据库一致,不涉及数据的顺序问题。
可以参考下面的代码,在插入行后,回填唯一主键。
  1. productTable = dataManager.addTable("product", {
  2.     batch: true,
  3.     remote: {
  4.         read: {
  5.             url: 'http://localhost:3000/getAll'
  6.         },
  7.         batch: function (changes) {
  8.             console.log('修改的数据', changes)

  9.             let newChanges = changes.map(item => {
  10.                 if (item.type == 'insert') {
  11.                     item.dataItem['采购订单号'] = `PX2301${String(item.sourceIndex + 1).padStart(4, '0')}`;
  12.                 }
  13.                 return item;
  14.             })
  15.             console.log('修改的数据', newChanges)
  16.             return new Promise((resolve, reject) => {
  17.                 fetch("http://localhost:3000/order/batchUpdate", {
  18.                     method: "post",
  19.                     headers: {
  20.                         'Content-Type': 'application/json'
  21.                     },
  22.                     body: JSON.stringify(newChanges),

  23.                 }).then((response) => response.json())
  24.                     .then((data) => resolve(data))
  25.                     .then(() => designer.refresh());
  26.             });
  27.         }


  28.     }
  29. })
复制代码




后端代码:
  1. order.get("/getAll", (req, res) => {
  2.     res.json(fakeData);

  3. });


  4. order.post("/order/batchUpdate", (req, res) => {
  5.     let obj = []
  6.     const resultArray = req.body
  7.     console.log(resultArray)
  8.     resultArray.forEach((item, index) => {
  9.         obj[index] = {
  10.             "succeed": true
  11.         }
  12.         if (item.type === 'update') {
  13.             let _index = item.sourceIndex
  14.             fakeData[_index] = item.dataItem
  15.         } else if (item.type === 'insert') {
  16.             fakeData.push(item.dataItem)
  17.             obj[index].data = item.dataItem
  18.         } else if (item.type === 'delete') {
  19.             let _index = item.sourceIndex
  20.             fakeData.splice(_index, 1)
  21.         }

  22.     })
  23.     console.log("obj", obj)
  24.     res.json(obj);
  25. });
复制代码



采购.js

3.59 KB, 下载次数: 3

dataManager.html

18.15 KB, 下载次数: 3

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部