uni-app——uni-app 小程序 之 【数据返回空问题排查】 📅 发布时间:2026/7/8 9:52:56 👁️ 浏览次数: 一、问题背景通用场景在数据统计类页面中数据提交完成后进入「统计结果」页面出现数据显示为空或不完整的异常具体表现为评分类数据的「平均得分」显示为空选择类数据的「最终结果」和「占比百分比」显示为空有效数据量、无效数据量等统计信息显示错误。二、核心问题问题源于后端数据查询逻辑异常和前端数据处理不兼容适用于各类统计场景具体分为两部分2.1 后端原因后端查询统计数据时仅加载deleted_flag0未软删除的基础数据但数据提交前编辑基础数据时旧数据会被软删除而提交记录仍指向这些旧数据导致统计时无法匹配到对应基础数据最终返回空数据。2.2 前端原因类型判断不兼容前端仅支持字符串类型枚举值无法处理后端返回的数字类型枚举值字段名称不匹配前端仍使用旧字段命名而后端已更新为新字段命名导致数据无法正常渲染统计取值错误错误将「总数据量」当作「有效数据量」导致统计结果异常。三、通用解决方案Demo版可直接复用适配核心思路后端修正数据查询逻辑关联软删除数据前端优化数据处理逻辑解决类型兼容、字段匹配和取值错误问题以下Demo适配所有类似统计场景。3.1 后端修复通用核心调整统计数据查询逻辑查询提交记录时关联软删除deleted_flag1的基础数据确保提交记录能匹配到对应数据避免返回空结果Demo仅提供逻辑具体语法根据后端语言调整。3.2 前端修复4个通用核心点可直接复制使用3.2.1 枚举类型判断优化解决类型不兼容// 统一转换并多层次判断兼容后端数字/字符串两种枚举值返回类型// 可根据自身场景修改枚举值如1/2/3或对应字符串const parseDataType (dataType) {// 字符串数字先转换为数字统一判断标准const dataTypeValue typeof dataType ‘string’ ? Number(dataType) : dataType;// 兼容数字1/2/3和字符串两种类型可按需修改枚举映射const isScoreType dataTypeValue 3 ||dataType ‘SCORE’ ||dataType ‘RATING’;return {isScoreType,isChoiceType: !isScoreType // 非评分类即为选择类};};3.2.2 字段映射逻辑重构解决字段不匹配// 映射后端新字段替换前端旧字段适配评分类/选择类两种通用场景// 可按需修改字段名称和逻辑适配自身数据结构const mapDemoData (dataItem, index) {const options Array.isArray(dataItem.options) ? dataItem.options : [];// 计算总提交量使用后端新字段可替换为自身新字段名const totalCount options.reduce((sum, option) {return sum (option.newCountField || 0);}, 0);const { isScoreType } parseDataType(dataItem.dataType);if (isScoreType) {// 评分类数据从选项中获取后端新字段平均得分const firstOption options[0] || {};const averageScore formatDemoNum(firstOption.newScoreField ?? 0);return { title: dataItem.content || Demo数据${index 1}, type: score, averageScore, finalResult: totalCount 0 ? ${averageScore} : 无提交数据, };} else {// 选择类数据使用新字段计算占比优先使用后端返回的占比字段const topOption findTopOption(options);const percentage formatDemoNum(topOption?.newPercentField ??(totalCount 0 ? ((topOption?.newCountField || 0) * 100) / totalCount : 0));return { title: dataItem.content || Demo数据${index 1}, type: choice, finalResult: totalCount 0 ? ${topOption?.optionName || 选项}占比${percentage}% : 无提交数据, };}};3.2.3 数值格式化函数避免空值、NaN异常/**通用数值格式化函数保留1位小数避免NaN和空值异常可直接复用无需修改param {any} value - 需要格式化的值returns {number} 格式化后的数值*/const formatDemoNum (value) {const num Number(value);if (Number.isNaN(num)) {return 0;}return Number(num.toFixed(1));};3.2.4 有效数据量修正解决取值错误// 修正有效数据量取值区分总数据量和有效数据量// 可按需修改字段名称适配自身接口返回结构const calculateDemoStats (data, totalTotal) {const resultStats data.resultStats || {};// 正确取值优先使用有效数据量字段其次使用参与量字段拒绝使用总数据量字段const validCount resultStats.validCount ?? data.participateCount ?? 0;// 无效数据量总数据量 - 有效数据量避免负数const invalidCount resultStats.invalidCount ??(totalTotal 0 ? Math.max(0, totalTotal - validCount) : 0);return {valid: validCount,invalid: invalidCount,};};3.3 前端完整Demo通用版整合所有修复点可直接复用有效数据{{ demoStats.valid }}无效数据{{ demoStats.invalid }}!-- 数据列表修复字段和类型兼容 -- div classdata-list div v-for(item, index) in demoData :keyindex classdata-card div classdata-title{{ item.title }}/div !-- 评分类数据结果 -- div v-ifitem.type score classscore-result span classlabel平均得分/span template v-ifitem.finalResult ! 无提交数据 span classscore{{ item.averageScore }}/span div classstars span v-forstar in 5 :keystar :class[star, { filled: star Math.round(item.averageScore) }] ★/span /div /template span v-else classno-data{{ item.finalResult }}/span /div !-- 选择类数据结果 -- div v-else classchoice-result span classlabel最终结果/span span :class[result, { no-data: item.finalResult 无提交数据 }] {{ item.finalResult }} /span /div /div /div
C#编辑的PLC工位间追溯与报警提示软件 PLC的工位间追溯于报警提示软件,用C#编辑。1.工位间追溯 2.生产参数配方式管理 3.过程数据上传数据库存储 4.实时报警监测 5.历史数据查询与导出excel 已经与西门子S71500PLC测试通过。 工位可以任意添加。 通讯变量的地址也可以随意编辑。 源码用于二次开发或者直接… 2026/7/3 3:53:29
SpringBoot教程(三十二) SpringBoot集成Skywalking链路跟踪 SpringBoot教程(三十二) | SpringBoot集成Skywalking链路跟踪 一、Skywalking是什么?二、Skywalking与JDK版本的对应关系三、Skywalking下载四、Skywalking 数据存储五、Skywalking 的启动六、部署探针 前提: Agents 8.9.0 放入 … 2026/7/8 3:43:09
SpringBoot接口防抖(防重复提交),接口幂等性,轻松搞定 啥是防抖?所谓防抖,一是防用户手抖,二是防网络抖动。在Web系统中,表单提交是一个非常常见的功能,如果不加控制,容易因为用户的误操作或网络延迟导致同一请求被发送多次,进而生成重复的数据记录。… 2026/7/8 6:48:10
锂离子电池组主动均衡系统设计与实现 1. 项目背景与核心需求 在锂离子电池组应用中,电压平衡是确保电池组安全性和寿命的关键技术。当多个电池串联时,由于制造工艺差异、温度分布不均等因素,各单体电池的充电状态会出现不一致。这种不一致性在充电过程中尤为明显——某些电池可能… 2026/7/8 9:52:55
Unity第三方库集成全攻略:从源码到UPM,解决DLL冲突与跨平台兼容 1. 项目概述:为什么Unity开发者必须掌握第三方库 在Unity项目开发中,尤其是当你从Demo阶段迈向成熟产品时,一个绕不开的话题就是“第三方库”。无论是为了接入一个高效的JSON解析器、一个强大的网络通信框架,还是一个炫酷的视觉特… 2026/7/8 9:52:55
MAX11108A与MK20微控制器构建高精度ADC系统 1. 项目概述:从模拟信号到数字杰作的技术实现在工业控制、医疗设备和消费电子等领域,模拟信号到数字信号的转换(ADC)是连接物理世界与数字系统的关键技术桥梁。MAX11108A作为一款高精度、低功耗的8通道12位ADC芯片,配合… 2026/7/8 9:50:54
深度解析:如何实现城通网盘直连地址智能解析与高速下载 深度解析:如何实现城通网盘直连地址智能解析与高速下载 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 城通网盘直连提取工具通过智能解析技术,帮助用户绕过繁琐的网页跳转&… 2026/7/8 9:50:54
Opus 4.7实测:四道真实工程题检验AI推理保真度 1. 项目概述:这不是一次普通模型更新,而是一次认知边界的松动Opus 4.7上线这件事,在我过去十年跟踪大模型演进的过程中,属于那种“办公室突然安静三秒”的节点。不是因为参数量又涨了几个零——这次连官方都没公布具体规模&#x… 2026/7/8 9:50:54
AlienFX Tools:告别AWCC臃肿,500KB轻量级控制方案全面评测 AlienFX Tools:告别AWCC臃肿,500KB轻量级控制方案全面评测 【免费下载链接】alienfx-tools Alienware systems lights, fans, and power control tools and apps 项目地址: https://gitcode.com/gh_mirrors/al/alienfx-tools 厌倦了Alienware Com… 2026/7/8 9:48:53
BetterNCM安装器:高效管理网易云插件的最佳选择 BetterNCM安装器:高效管理网易云插件的最佳选择 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer 还在为网易云音乐插件的繁琐安装流程而烦恼吗?BetterNCM安装器是… 2026/7/8 0:02:48
运动控制系统安全设置对比:ECI3808的3种限位保护与急停逻辑实现 运动控制系统安全机制深度解析:限位保护与急停逻辑的设计哲学在精密制造与自动化领域,运动控制系统的安全设计绝非简单的功能堆砌,而是一套融合了机械工程、电气原理和软件算法的防御体系。当一台数控机床以每分钟数万转的速度运转࿰… 2026/7/8 0:06:48
AI大模型应用开发:小白也能抓住的红利风口,收藏这篇入门指南! 文章指出,虽然微软等科技巨头在裁员,但英伟达等公司却在积极扩招AI相关人才,尤其是具身智能、仿真等领域。AI行业正在经历结构性调整,传统岗位被淘汰,而大模型应用开发等新岗位需求旺盛。对于想转行或学习AI的普通人来… 2026/7/8 0:10:49
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/7 11:26:57
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/7 11:26:57
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/7 11:26:58