出现原因
后台数据库定义的long类型的值太长导致前端接受到值的时候精度丢失,其原因是前端js对Long类型支持的进度不够,导致精度丢失
解决办法
1、用第三方库 json-bigint
npm install json-bigint
2、在接口封装的地方,transformResponse 在传递给 then/catch 前,允许修改响应数据。
import axios from 'axios'
import JSONbig from 'json-bigint'
export const getData = data =>{
return axios({
url: 'http://192.168.0.xx:xxxx/xx/',
method: 'get',
params: data,
transformResponse: [data => {
data = JSONbig.parse(data);
console.log(data);
data.data.filter((item) => {
item.unitId = JSONbig.parse(item.unitId).toString()
return item
})
return data
}],
headers:{
Authorization:'对应的token'
}
})
}
3、树形结构在拿到数据后递归将i通过toString等方法转换成string类型即可
async getOrganizationalData() {
const res = await getData();
let newData = this.convertUnitIdToString(res.data)
console.log(newData)
},
convertUnitIdToString(data) {
return data.map(obj => {
const newObj = { ...obj }; // 复制对象
newObj.id = newObj.id.toString(); // 将 id 属性转换为字符串类型
if (newObj.children.length > 0) {
// 如果对象有 children 属性,则递归调用该函数
newObj.children = this.convertUnitIdToString(newObj.children);
}
return newObj;
});
}