当前位置: 首页 > news >正文

uniapp 前端解决精度丢失的问题 (后端返回分布式id)

原因: 后端使用分布式id,  id为19位数,导致精度丢失 ,前端解决方法

这个是通过浏览器请求回来的数据,这个时候id 数据已经丢失了,在数据库查询不到,在调获详情接口的时候会有问题

实际的:

解决办法:

1. 通过  JSONbig  插件  

npm install json-bigint

2.封装 请求   longAxios.js  uni.request  (   在axios 里面可以使用transformResponse 来修改,uni.request 没有,使用 success 来获取)   

import JSONbig from 'json-bigint';
import {getToken
} from '@/utils/auth';
import config from '@/config';const timeout = 10000;
const baseUrl = config.baseUrl;const longAxios = options => {const {url,method,data,params, // 接收 params  header,type,key,receive} = options;return new Promise((resolve, reject) => {// 构建请求 URL  let requestUrl = `${baseUrl}${url}`;// 如果有 params,构建查询字符串  if (params) {const queryParams = new URLSearchParams(params).toString();requestUrl += `?${queryParams}`; // 将查询参数添加到 URL  }uni.request({url: requestUrl,method,data,header: {Authorization: 'Bearer ' + getToken(),...header // 如果有额外的头部信息,可以合并  },dataType: 'String', // 将接收的数据转换成字符串类型,而不直接解析  success: res => {try {// 如果大数字类型转换成功则返回转换的数据结果  res.data = JSONbig.parse(res.data)} catch (err) {// 如果转换失败,则包装为统一数据格式并返回  resolve(JSON.parse(res.data));}// data = JSONbig.parse(data);if (type == 'array') {res.data.filter((item) => {item[key] = JSONbig.parse(item[key]).toString()return item})} else if (type == 'rows') {res.data.rows.filter((item) => {item[key] = JSONbig.parse(item[key]).toString()return item})} else {res.data[key] = JSONbig.parse(res.data[key]).toString()}console.log(res)// 返回结果  if (receive === 'rows') {  resolve(res.data.rows); // 确保 resolve 返回正确的数据  } else {  resolve(res.data[receive]);  }  },fail: err => {reject(err);},});});
}export default longAxios;

3.封装api(根据自己的业务来修改, 注意key 值,我这里是id, 返回的是rows )

import longAxios from '@/utils/longAxios';export function $listTree(params) {return longAxios({url: `/lims/custom/listTree`,method: 'get',params,key: 'id',type: 'rows',receive: 'rows'});}

4.正常调用就可以了

const res = await $customListData(this.queryParams)

http://www.lryc.cn/news/509714.html

相关文章:

  • C语言:指针4(常量指针和指针常量及动态内存分配)
  • Win11提示fveapi.dll丢失是什么原因?fveapi.dll丢失怎么办?
  • 台球助教平台系统开发APP和小程序信息收藏功能需求解析(第十二章)
  • 如何设计 Vue 3 组件库:高效的组件化开发方法
  • 第八节、Bresenham直线插补运动【51单片机-L298N-步进电机教程】
  • 一个从oracle使用spool导出数据到kadb的脚本
  • 【STM32】GPIO口以及EXTI外部中断
  • Confluent Cloud Kafka 可观测性最佳实践
  • 【LeetCode每日一题】——415.字符串相加
  • linux---使用定时任务同步时间
  • Windows、CentOS环境下搭建自己的版本管理资料库:GitBlit
  • KNN分类算法 HNUST【数据分析技术】(2025)
  • AI Agent开源框架汇总(持续更新)
  • 录播检测原理是什么?
  • IndexOf Apache Web For Liunx索引服务器部署及应用
  • MySQL索引为什么是B+树
  • ffmpeg之播放一个yuv视频
  • 《2023-2024网络安全产业发展核心洞察与趋势预测》
  • 为什么环境影响评价导则中生态环境评价中的【植被类型图】制作比较难?制作流程是什么
  • 肿瘤电场治疗费用
  • 替换 Docker.io 的 Harbor 安全部署指南:域名与 IP 双支持的镜像管理解决方案
  • Python知识图谱框架
  • elasticsearch 杂记
  • Text2Reward学习笔记
  • KylinOS V10 SP3下编译openGauss与dolphin插件
  • NPM老是无法install,timeout?npm install失败
  • 安卓project级别build.gradle和主module的build.gradle
  • 大模型(LLM)提示工程(Prompt Engineering)初识
  • 大数据-256 离线数仓 - Atlas 数据仓库元数据管理 正式安装 启动服务访问 Hive血缘关系导入
  • gaussian_splatting 构建submodules的diff-gaussian-rasterization失败报错